Как я могу реорганизовать HTML-разметку из моих файлов свойств?

StackOverflow https://stackoverflow.com/questions/13225

Вопрос

Недавно я унаследовал интернационализированное веб-приложение Struts 1.1 с большим объемом текста.Многие файлы JSP выглядят следующим образом:

<p>
    <bean:message key="alert" />
</p>

и файлы свойств выглядят следующим образом:

messages.properties
alert=Please update your <a href="/address.do">address</a> and <a href="/contact.do">contact information</a>.

с соответствующими переводами на N других языков (messages_fr.properties и т.д.).

Проблемы:

  1. СУХОЕ нарушение - У меня есть N ссылок на URL-адреса моих действий Struts вместо 1, что делает URL-адреса действий рефакторинга подверженными ошибкам.
  2. Смешанные опасения - Разметка моего приложения теперь находится не только в моих JSP-файлах, что затрудняет веб-специалисту настройку разметки (с помощью CSS и т.д.).
  3. Разметка после перевода - Всякий раз, когда я получаю недавно переведенный текст, я должен решить, чем окружить текст. <a>...</a> разметка.Легко для английского, но в меньшей степени для незнакомых языков.

Я рассматривал возможность добавления заполнителей в файл сообщений, например:

alert=Please update your {0} and {1}.

но тогда слова "адрес" и "контактная информация" каким-то образом должны были бы быть локализованы, обернуты разметкой и переданы в мой тег message - и я не вижу простого способа сделать это.

Что я могу сделать, чтобы улучшить это?

Это было полезно?

Решение

Избегайте создания ссылок внутри длинных блоков текста.Предпочитайте более короткий текст который может выступать в качестве логически завершенной и независимой ссылки.

Как правило, это приведет к меньшему количеству проблем.Иногда вам приходится идти на компромисс с дизайном пользовательского интерфейса, чтобы приспособиться к локализации;иногда вам приходится идти на компромисс с процессом локализации, чтобы приспособиться к пользовательскому интерфейсу.

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

Размышляя об этом, что-то подобное могло бы быть менее уродливым:

<p>Please update your address and contact information.
<br />
<a href="/address.do">update address</a>
<br />
<a href="/contact.do">update contact information</a></p>

... но я не дизайнер пользовательского интерфейса.

Другие советы

Один из подходов, который приходит на ум, заключается в том, что вы могли бы сохранить переведенные параметры замены, т. е."адрес" и "контактная информация" в отдельном файле свойств, по одному для каждой локали.Затем попросите ваш класс Action (или, возможно, какой-нибудь вспомогательный класс) найти значения из правильного ResourceBundle для текущей локали и передать их тегу message.

Возможно:

#
alert=Please update your {0}address{1} and {2}contact information{3}.

API тегов сообщений message позволяет использовать только 5 параметрических аргументов

Ах!Я виню в этом свое полное незнание Struts API.

Процитирую руководство пользователя:

Некоторые функции этой библиотеки тегов также доступны в JavaServer Стандартной библиотеке тегов Pages (JSTL).Команда Struts рекомендует использовать стандартные теги поверх специальных тегов Struts, когда это возможно.

Вероятно, вы могли бы сделать это с помощью http://java.sun.com/jsp/jstl/fmt таглиб.

<fmt:bundle basename="messages">
    <fmt:message key="alert">
        <fmt:param value='<a href="/">' />
        <fmt:param value="</a>" />
        <fmt:param value='<a href="/">' />
        <fmt:param value="</a>" />
    </fmt:message>
</fmt:bundle>

Недостатком является то, что это недопустимый XML, и перенос значений в переменные требует большей косвенности, поиска и детализации.Это не очень хорошее решение.

Я не знаю Struts, но если это что-то вроде JavaServer Faces (тот же архитектор), то, вероятно, есть поддержка настройки элемента управления заменой.Я бы либо заменил существующий элемент управления более гибким, либо добавил новый.

В любое время я получаю вновь перевода текст, я должен решить, что окружают с <a>...</a> разметка.

Вы ни в коем случае не должны этого делать, и я рассматриваю это как ошибку в вашем процессе перевода (я бывший инженер по локализации и бывший разработчик инструментов локализации).Тот Самый {0} символы должны быть включены в файлы, которые отправляются переводчикам.Рекомендации по локализации должны объяснять контекст строки и значение любых переменных.

Вы можете программно проверить пакеты свойств при возврате.Регулярные выражения, зависящие от конкретной строки, могут сделать свое дело.Вполне возможно, что "адрес" и "контактная информация" поменяются местами при переводе.

Самое простое решение - изменить дизайн сообщений для отображения:

<a href="/address.do">Please update your address.</a>
<a href="/contact.do">Please update your contact information.</a>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top