Helpers - компьютеры, интернет, программирование

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

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

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

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

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

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


Ответы:


1

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

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

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

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

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

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

16.08.2008

2

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

16.08.2008

3

Возможно:

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

4

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

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

Процитируем руководство:

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

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

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

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

16.08.2008
Новые материалы

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

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

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

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..