2010-10-20 3 views
0

Работа над интернационализацией веб-приложения, я немного заблокирован, потому что я не знаю, как сделать мой .properties динамическим. Я имею в виду, чтобы получить автоматически статический текст из приложения. Теперь у меня есть, к примеру, этот один MessageBundle_de_DE.properties:интернационализация веб-приложения

greetings=Hallo! 
inquiry=Wie geth's? 
farewell=Tchüs! 

Но это статическое, я написал theese три пары (ключ, значение).
Как я могу сделать свои ключи в соответствии с моим приложением? Я думаю, это возможно, касаясь documentation.

Использование Spring framework и технология JSP.

Заранее спасибо, я знаю, что это, возможно, слишком общий вопрос.

+1

Что вы подразумеваете под * Как я могу сделать свои ключи в соответствии с моим заявлением? *? – romaintaz

+0

Я предполагаю, что вы хотите знать, как связать строки ресурсов внутри веб-страниц. Какую структуру вы используете для разработки приложения? Техника связывания изменяется в соответствии с технологией. – andcoz

+0

В вашем примере необходимы некоторые незначительные исправления: запрос = Wie geht's? прощальный = Tschüs! –

ответ

2

Поскольку вы используете весной, добавьте следующий компонент в контекст приложения:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="/WEB-INF/messages/messages" /> 
    <property name="cacheSeconds" value="0" /> 
</bean> 

В вашей папке/WEB-INF/сообщений, создавать все messages.properties файлы, которые нужно есть messages_en_GB. свойства, messages_DE.properties и т.д.

Затем в JSPs, используйте следующую весеннюю при условии тег:

<spring:message code="some.property.name" /> 

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

<!-- Saves a locale change using a cookie --> 
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /> 
<mvc:interceptors> 
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de --> 
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> 
</mvc:interceptors> 

Тогда вам просто нужна ссылка, которые включают в себя локализованное свойство как /?local=de изменить к Немецкий перевод.

+0

Спасибо вам большое! Еще 2 вопроса: где поставить Message.bundle, а также в code = "some.property.name", вы имеете в виду код = "Messages_de_DE.properties.key" ?? И как указать, в каком языке я хочу перевода ?? –

+0

Я добавил немного больше о том, как выбрать перевод. Ваши сообщения.properties идут в папку, которую я упоминаю в своем сообщении. Когда я говорю code = "some.property.name", значение должно быть ключом для любого значения, которое вы хотите выводить. В данном примере это будет, например, code = "greetings". – GaryF

+0

Еще раз спасибо, но в файле я тестирую это, я получаю Error Traced [строка: 51] Префикс «spring» для элемента «spring: message» не связан. –

1

Если вы не используете инфраструктуру веб-приложения, я бы предложил использовать Spring Framework, который предоставляет полезные функции для веб-приложений, включая интернационализацию.

+0

Спасибо, я уже использовал Spring framework, и я понимаю, насколько легко можно интернационализировать мое приложение, но я заблокирован, потому что я не знаю, как продолжить и связать web с конфигурацией –

0

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

+0

Я использую Spring framework. Спасибо –

+0

Это не лучший способ интернационализировать ваше приложение. На самом деле это далеко не лучшее. Это может быть легко с точки зрения разработчика, но это будет кошмар для инженеров локализации. Гораздо легче исправить (то есть сократить) переводы, когда они хранятся в файлах свойств. Кроме того, как вы предполагаете модифицировать классы CSS через БД? –

+0

@Pawel Почему вам нужно хранить css в db? Во-вторых, все, что вам нужно для инженеров локализации, - это простой скрипт, который помещает все данные локализации в db. –

0

Ищете простой и эффективный способ интернационализации ваших приложений? Попробуйте gettext: http://www.gnu.org/software/gettext/manual/gettext.html он используется большинством программ с открытым исходным кодом для Linux, но он также может работать с Java. Шаги просты:

  • Напишите программу, как правило, как если бы это были нелокализованными: System.out.println («Привет, мир !!!»)
  • Где-то в коде создать общественный статический класс с именем (скажем) S с методом _. Это имя метода должно быть коротким, как часто используется. Он должен делегировать API Gettext или ResourceBundle для получения сообщения.
  • Все строки для локализации объемного звучания с помощью _ (...): System.out.println (_ («Привет, мир !!!«))
  • Run Gettext команду, чтобы извлечь все такие _ строки
  • Перевести извлеченный файл на целевой язык
  • Run GetText снова компилировать и проверять такие файлы

Это вы можете добавить локализацию для любого приложения (независимо от того, будет ли он написан на Java, C, Python или что-то еще).

0

Для интернационализации приложений я реализовал Message Compiler, который создает файлы пакета ресурсов и константные определения как перечисления Java или статическую окончательную строку s для ключей из одного исходного файла. Таким образом, константы могут использоваться в исходном коде Java, что намного безопаснее, чем использование простых строк. Компилятор сообщений может использоваться не только для Java. Он создает также файлы ресурсов и константы для Objective-C или Swift и может быть расширен для других сред программирования.

Смежные вопросы