2012-04-10 3 views
16

Моя организация собирается начать долгий процесс интернационализации (i16g?) Своего корпоративного сайта. Веб-сайт представляет собой сочетание Java EE (JSP/Servlets, EJB) и статического содержимого, перенесенного с WCM (Documentum).Java Internationalization (i18n) Библиотеки/Рамки

Хотя у меня есть опыт использования «встроенного» механизма использования ResourceBundle вместе со связанными файлами свойств для каждого языка/локали (содержащий подход «KEY = Translated value»), где мы просто ссылаемся на KEY где мы хотим, чтобы переведенный текст появился.

Мой директор упомянул, что он использовал другой подход в предыдущей организации, в соответствии с которой они использовали стороннюю библиотеку (он не помнит фактическое имя), которая включала фактический [английский] текст на веб-странице (чтобы помочь разработчики), который во время выполнения был заменен переведенным контентом из файла конфигурации xml. (кто-нибудь знает, в какой библиотеке это будет?)

Я заинтересован в том, какие другие подходы/библиотеки/рамки могут быть там, чтобы облегчить это.

Благодаря

+0

Я дам вопрос еще на один день, прежде чем принимать решение. – Crollster

+0

Просто для выяснения, что XML-файл не является файлом TMX? TMX-файл является более сложным эквивалентом ресурсного пакета (http://en.wikipedia.org/wiki/Translation_Memory_eXchange). –

ответ

9

Ваш босс, вероятно, имел в виду gettext, так же как и @Pawel Dyda, но cosmopolitan также может вас заинтересовать.

+0

Да, кажется, что «gettext» был тем, что использовалось в предыдущей организации, - я все еще смотрю на него, чтобы посмотреть, хотим ли мы пойти по этому маршруту. – Crollster

+0

Я выбрал этот ответ как правильный, в основном, поскольку он дает именно то, что я просил, и не запускает диатрибу по вопросу, который не был запрошен. – Crollster

4

Когда я слышу, что Вы используете ResourceBundle с, я вижу что-то вроде этого:

ResourceBundle rb = ResourceBundle.getBundle("messages", locale); 
String someString = rb.getString("some.key"); 

Если это ваш подход к Java Server Pages (используя такие фрагменты в scriplets), это . Вместо этого вы должны использовать теги JSTL или Spring.

Что касается вашего запроса, я считаю, что они использовали Gettext (извините никакую ссылку, поскольку у меня заканчивается время). Это не лучший подход. JSTL-подход является наиболее распространенным для JSP, и вы должны придерживаться его, если у вас нет очень веских причин.

+0

Извините, я должен был быть более явным - да, я имел в виду, что буду использовать «ResourceBumndle» в сочетании с тегами JSTL (мы не делаем скриптлетов) :) - Спасибо за ваш вклад, я буду исследовать gettext и посмотреть, не звонит ли этот звонок. – Crollster

2

Это стоит посмотреть на http://alexsexton.com/blog/2012/03/the-ux-of-language/ это хорошее объяснение идеи позади Gettext и ограничение Gettext разработать лучший подход к GetText является формат ICU сообщений это то, что основано класс JDK MessageFormat, на http://site.icu-project.org/home есть также javascript-библиотека, основанная на формате сообщений ICU. https://github.com/SlexAxton/messageformat.js

3

Наша компания также поддерживает библиотеку GNU gettext для Java (и очень скоро с расширениями, предназначенными для Scala).

Он не только поддерживает всю доброту GNU gettext, но и упрощает вывод и ввод даты/времени и валюты, включает средства для использования форматирования «wiki» в переводах (чтобы вы могли выводить HTML полужирным шрифтом на слово , например), форматирование java-сообщений, обобщенная поддержка «escape» (поэтому вывод может быть автоматически экранирован для включения, скажем, в HTML), и округление валюты.

Это с открытым исходным кодом, и в настоящее время на GitHub в https://github.com/awkay/easy-i18n/

0

Я надеюсь, это не слишком поздно, чтобы предложить еще одно решение: https://github.com/resource4j/resource4j

Эта библиотека имеет интеграцию с веб-страницы Thymeleaf визуализатора, который решает проблема, о которой вы упомянули: вы включаете в шаблон страницы текст на английском языке, а затем заменяете его локализованной версией во время выполнения.