Как бы вы локализовали имена полей класса в GWT? - PullRequest
0 голосов
/ 21 марта 2012

У меня есть вопрос общего дизайна.

Как бы вы локализовали имена полей класса в GWT?

Представьте, что у меня есть бин с мнимой аннотацией, такой как

class Person
{
    @LocalizedName(value = "{Person.name}")
    String name;

    @LocalizedName(value = "{Person.address}")
    String address;
}

У меня будет комплект ресурсов для английского и немецкого языков, где будут указаны эти два значения.

В какой-то момент во время выполнения у меня будет экземпляр Class<Person> и некоторый String, который содержит имяполя (например, name).

Я хочу каким-то образом автоматически получить локализованную версию имени.

Я знаю Я могу создавать свои Мои Сообщения интерфейс и вызовите его getString(), но для этого потребуется указать запутанные имена методов, такие как MyMessages.person_address(), для каждого локализуемого поля класса, которое не только uncool, но и имеет тенденцию ломаться, если я переименую свойство во время рефакторинга.

Вот как я это делаю сегодня, и это очень уродливо.

Идеи?Может быть, я могу использовать Генераторы ?Что-то другое ?Как ты это делаешь?

1 Ответ

0 голосов
/ 21 марта 2012

Если вы хотите сделать i18n в GWT, вы должны использовать их встроенные механизмы. Приложения Google обычно рассчитаны на 320 перестановок с GWT, поэтому этот метод явно работает для тонн i18n и не должен быть таким сложным для реализации.

Ваши варианты:

  • Интерфейсы сообщений с жестко закодированными строками в файле интерфейса: (
  • Интерфейсы сообщений с внешними файлами свойств строки: |
  • UiBinder с тегами, подкрепленными локализованными строковыми файлами:)

Лично я занимаюсь делом UiBinder. Всякий раз, когда вам нужно использовать строку в виджете (например, заголовок, метку и т. Д.), Вы просто оборачиваете строку следующим образом:

<ui:msg description="my great title">You're Title!</ui:msg>

Теперь, когда вы компилируете, GWT соберет все строки вместе и идентифицирует их по хешу MD5. Используйте одно и то же слово / фразу несколько раз, и он только один раз появляется в ваших файлах свойств i18n, которые GWT динамически компилирует для вас из всех найденных уникальных строк. Теперь просто переведите этот файл и назовите его name_DE , и GWT заменит все английские слова для немецкого в немецкой перестановке.

ПРИМЕЧАНИЕ: Только классы сообщений доступны из классов. Вы должны использовать их для динамического обновления строк в приложении.

Подробнее см. GWT i18n Guide .

Viel Glück.

...