JSTL fmt: пакет сообщений и ресурсов - PullRequest
6 голосов
/ 12 января 2011

Я хочу установить свойство "dir" моей таблицы из комплекта ресурсов на основе локали.

Вот фрагмент:

        <fmt:setBundle basename="class.path.to.resource.bundle"/>
        <table align=center class="" dir=<fmt:message key="registration.direction"/>>

Когда страница отображается, я получаю это:

   <table align=center dir=???registration.direction???>

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

registration.direction = ltr -> английский

registration.direction = rtl -> арабский

Скажите, пожалуйста, что я делаю не так? Директория должна иметь «ltr» или «rtl» в зависимости от локали.

Спасибо

BR SC

1 Ответ

6 голосов
/ 12 января 2011

две вещи

1) Я бы добавил переменную для хранения результата сообщения в

<fmt:message key="registration.direction" var="direction" />

тогда

2) Я бы сделал следующее с вашим кодом

  <fmt:setBundle basename="class.path.to.resource.bundle"/>
  <fmt:message key="registration.direction" var="direction" />
  <table align=center class="" dir="${direction}">

Теперь, что касается ваших пакетов ресурсов, обычно вы должны иметь следующую структуру для ваших пакетов ресурсов

/foo/bar/MyResourceBundle.properties
/foo/bar/MyResourceBundle_en.properties
/foo/bar/MyResourceBundle_en_US.properties
/foo/bar/MyResourceBundle_<lang>[_COUNTRY[_VAR]].properties

Если ваш комплект не структурирован таким образом, это может быть вашей проблемой.

Убедитесь, что все ключи, которые, как ожидается, будут доступны, определены в MyResourceBundle с разумными значениями по умолчанию.

Я изменяю этот ответ, так как не уверен, что мой комментарий потерялся в функции скрытия.

С учетом того, что вы используете Struts 2, у меня сложилось впечатление, что вы используете перехватчик i18n. Перехватчик сохранит текущую локаль в переменной sesion с именем WW_TRANS_I18N_LOCALE. Таким образом, вы должны иметь возможность добраться до него и установить языковой стандарт для тегов JSTL с помощью следующего:

<fmt:setLocale scope="session" value="${sessionScope.WW_TRANS_I18N_LOCALE}" />

Надеюсь, что это работает для вас.

...