GWT i18n - множественные формы вообще не работают? - PullRequest
2 голосов
/ 10 июня 2010

Я использую сообщения интернационализации GWT.Документация для множественных форм говорит, что это должно работать:

@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 { ...

  • Явно загружайте языковой стандарт "en", добавляя URL-адрес

    &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 Пожалуйста, проверьте это.Очень скоро у него будут правильные формы единственного числа и поддержка некоторых языков.=) * * Тысяча пятьдесят одна

Ответы [ 4 ]

3 голосов
/ 26 января 2011

Также я думаю, что это сэкономит людям время, чтобы узнать, что стандартное английское множественное число поддерживает только "other" и "one".

DefaultRule_en.java использует DefaultRule_1_0n.Java

Таким образом, вы должны переопределить DefaultRule_en.java, если вы хотите использовать "none", "two", few" ... Вы можете увидеть доступные правила в пакете com.google.gwt.i18n.client.impl.plurals .

2 голосов
/ 27 января 2014

Другое решение из списка проблем gwt здесь :

Вы должны определить @DefaultLocale в MyMessages.java:

@DefaultLocale("en")
public interface MyMessages extends Messages {
   public String items(@PluralCount @Optional int count);
}

и в MyMessages.properties:

items={0} items
items[one]=one item
2 голосов
/ 11 июня 2010

Привыкаю отвечать на мои собственные вопросы =) Вот перекрестная публикация моего «ответа» в группе GWT Google:

Кажется, есть ошибка с обработкой локали по умолчанию.Вот как я пришел к такому выводу:

Я хотел добавить несколько локалей в мой модуль.Подумал, что я мог бы получить табличку для файла свойств, если бы использовал аннотацию @Generate.Я заметил, что он создал и файл _en.properties, и файл _default.properties.Что еще;в файле _ en полностью отсутствует информация о множественном числе!Хотя в файле _ default они есть.

Затем я переместил файл _defaults в тот же каталог, что и мой файл TimeMessages.java, и переименовал его в TimeMessages_default.properties.

.место, где я могу удалить <extend-property name="locale" values="en"/> из файла моего модуля .gwt.xml и, что более важно, &locale=en из URL при запуске моего приложения.Мне по-прежнему нужна аннотация @DefaultLocale("en"), хотя в документации четко указано, что в этом нет необходимости.

В заключение, если вы столкнулись с этой проблемой, попробуйте:

  • генерацияфайлы свойств, использующие @Generate
  • место YourMessages_default.properties рядом с YourMessages.java
  • с добавлением интерфейса YourMessages к аннотации @DefaultLocale("en").

О программеэто @Generate.Это то, что сработало для меня.Как раз перед моим расширением интерфейса сообщения:

@Generate(format = {"com.google.gwt.i18n.rebind.format.PropertiesFormat"})

В журнале GWT было указано, что он создал файл моих свойств, но я не смог его найти.Я исправил это, добавив флаг компилятора -extra extras, а затем нашел файлы свойств, сгенерированные в каталоге extras.Включая эту информацию здесь, так как я потратил больше часа на ее выяснение.

1 голос
/ 08 сентября 2010

Еще одна вещь, которую я обнаружил, заключается в том, что вы можете определить резервную локаль следующим образом: в XML-файле вашего модуля

...