我正在使用 GWT 国际化消息。 documentation for Plural Forms说这应该有效:
@DefaultMessage("{0} {1,number} hours {2}")
@PluralText({"one", "an hour"})
String hours(String prefix, @PluralCount int count, String suffix);
嗯,事实并非如此。 count
的任意值它仍然提供 DefaultMessage
(例如“1 小时前”)。如果我使用 .properties 文件也一样:
hours[one]=an hour
hours[few]=some hours
hours={0} {1,number} hours {2}
文档或 GWT(我使用的是 GWT 2.0.3)或我自己有错误吗?如果前两者中的任何一个,有人知道解决方法吗?
编辑:这个谜团的更多线索。如果我不依赖默认语言环境处理,我可以获得复数处理。也就是说,我需要:
在我模块的 gwt.xml 文件中:
<extend-property name="locale" values="en"/>
在我的消息扩展中:
@DefaultLocale("en")
public interface MyMessages extends Messages { ...
通过附加到 URL 显式加载“en”语言环境
&locale=en
参见 http://groups.google.com/group/google-web-toolkit/browse_thread/thread/80ae300213cc6adb我在哪里交叉发布了这个问题。
编辑 2: 我进入这个 GWT 复数领域的原因是我正在创建一个“GWT HUman Readable Relative Timestamps”模块。在 GitHub 上开源:http://github.com/PEZ/GWT-Relative-Time请检查一下。它很快就会有正确的单数形式并支持某些语言。 =)
最佳答案
另外,我认为知道默认的英文复数规则仅支持"other"
和"one"
会节省人们的时间。
DefaultRule_en.java使用 DefaultRule_1_0n.java
所以你必须重新定义DefaultRule_en.java
如果你想使用"none"
,"two"
,few"
...
可以在包com.google.gwt.i18n.client.impl.plurals中看到可用的规则.
关于GWT i18n - 复数形式根本不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3014047/