我已经使用MessageFormat.format()了一段时间,但有一件事我觉得很讨厌.
每次在消息中声明参数时,都必须知道映射参数的位置.例如
MessageFormat.format("{0} is annoying {1}.", "this", "indeed")
Run Code Online (Sandbox Code Playgroud)
是否存在与MessageFormat其他方式相同的类,但允许您完全省略参数声明中的参数位置,并将其默认为其在消息中的位置,以便第一个参数映射到第一个参数,第二个参数映射到第二个论点等等?例如
MessageFormat.format("{} is much better{}.", "this", "indeed")
Run Code Online (Sandbox Code Playgroud)
我认为log4j的更高版本具有类似的功能,但我只需要格式化类.
新年快乐!
编辑:我需要这个功能用于断言,所以它真的供内部使用,但我很欣赏你对MessageFormat工作方式的理解.
你应该使用Formatter它的前端String.format,而不是.你可以做:
String.format("%s is much better %s", "this", "indeed");
String.format("%1$s provides positional formatting %2$s", "this", "indeed");
Run Code Online (Sandbox Code Playgroud)
提供您的要求会破坏以下主要目的之一MessageFormat:I18N和L10N.也就是说,不同的自然语言可以使用不同的单词顺序来组成"相同"的句子.MessageFormat允许您的代码以设定的顺序强制输入一定数量的参数,然后在为每种语言编写本地化的自然语言字符串时改变插值顺序 - 您可能在适当命名的Java 属性文件中定义了这些字符串.ll加载类ResourceBundle.
典型的工作流程包括首先用您的主要自然语言(例如英语)编写用户可见的消息,然后,对于您希望本地化软件的每种其他语言,定义将这些参数化消息转换为目标语言的并行属性文件,改变输入参数以适应正确的句子结构.
如果您不需要任何此功能,请尝试使用String#format().
| 归档时间: |
|
| 查看次数: |
1621 次 |
| 最近记录: |