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

Я недавно унаследовал интернационализированное и насыщенное текстом веб-приложение 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}.

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

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

Ответы [ 4 ]

2 голосов
/ 17 августа 2008

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

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

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

Если подумать, что-то вроде этого может быть менее уродливо:

<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>

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

1 голос
/ 16 августа 2008

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

0 голосов
/ 17 августа 2008

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

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

Цитировать руководство :

Некоторые функции в этом taglib также доступны в JavaServer Библиотека стандартных тегов страниц (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>

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

0 голосов
/ 16 августа 2008

Возможно:

#
alert=Please update your {0}address{1} and {2}contact information{3}.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...