Лучшие практики интернационализации текста с большим количеством разметки? - PullRequest
4 голосов
/ 05 февраля 2009

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

Я понимаю, что лучшая практика (я использую здесь Java, Spring MVC и Velocity) - помещать весь текст, который пользователь увидит во внешних файлах, и ссылаться на них в файлах пользовательского интерфейса по имени, например: :

#in messages_en.properties:
welcome.header = Welcome to AppName!

#in the markup
<title>#springMessage("welcome.header")</title>

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

<p>We are excited to announce that Company1 has been acquired by
<a href="http://www.companydivisionx.com" class="boldLink">Division X</a>,
a fast-growing division of <a href="http://www.company2.com" class="boldLink">Company 2</a>, Inc. 
(Nasdaq: <a href="http://finance.google.com/finance?q=blah" class="boldLink">BLAH</a>), based in...

Один из вариантов, который я могу придумать, заключается в том, чтобы хранить эту «низкоуровневую» разметку в messages.properties для самого сообщения - но это кажется худшим из возможных вариантов.

Другие возможные варианты:

  • Сохранять каждый внутренний фрагмент без разметки в messages.properties, например, acquisitionAnnounce1, acquisitionAnnounce2, acquisitionAnnounce3. Это кажется очень все же утомительным.
  • Разбейте это сообщение на более повторно используемые компоненты, такие как Company1.name, Company2.name, Company2.ticker и т. Д., Поскольку каждое из них, вероятно, повторно используется во многих других сообщениях. Это, вероятно, составило бы 80% слов в этом конкретном сообщении.

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

Ответы [ 4 ]

6 голосов
/ 06 февраля 2009

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

Также не удаляйте разметку.

Пожалуйста, не думайте, что профессиональные переводчики работают в Блокноте :) Инструменты автоматизированного перевода (CAT), такие как пакет Trados, прекрасно знают о разметке. Если тегом является HTML, а не какой-либо пользовательский формат XML, никакой специальной подготовки не требуется. Trados будет защищать теги от случайного изменения, в то же время позволяя вносить изменения в случае необходимости. Обратите внимание, что определенные элементы тегов часто должны быть локализованы, например, alt text или некоторые строки запроса, поэтому простое удаление разметки не поможет.

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

6 голосов
/ 05 февраля 2009

Обычно, если вы используете шаблонизатор, такой как Sitemesh или Velocity , вы можете более эффективно управлять этими меньшими HTML-строительными блоками в виде подшаблонов.

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

Я бы предположил, что ключевой хорошей практикой было бы избегать размещения разметки (даже на низком уровне, как вы ее указали) внутри файлов свойств сообщений любой ценой! Потенциал раскрытия ада это не следует упускать из виду - кусать пули и правильно разбивать вещи - гораздо меньшая проблема, чем необходимость управлять многими файлами с разбросанной разметкой HTML. Важно, чтобы вы могли визуализировать разметку как целостные куски и разброс, которые повсюду сделали бы повседневную разработку рутиной, поскольку:

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

Разбить вещи (до реалистического момента, например, логические структуры предложений, но не лучше) - это довольно тяжелая работа, но она того стоит.

Что касается гранулярности разбивки строк, вот пример того, что мы сделали:

    comment.atom-details=Subscribe To Comments
    comment.username-mandatory=You must supply your name
    comment.useremail-mandatory=You must supply your email address 
    comment.email.notification=Dear {0}, the comment thread you are watching has been updated.
    comment.feed.title=Comments on {0}
    comment.feed.title.default=Comments
    comment.feed.entry.title=Comment on {0} at {1,date,medium} {2,time,HH:mm} by {3}


    comment.atom-details=Suscribir a Comentarios
    comment.username-mandatory=Debes indicar tu nombre
    comment.useremail-mandatory=Debes indicar tu direcci\u00f3n de correo electr\u00f3nico
    comment.email.notification=La conversaci\u00f3n que estas viendo ha sido actualizada
    comment.feed.title=Comentarios sobre {0}
    comment.feed.title.default=Comentarios
    comment.feed.entry.title=Comentarios sobre {0} a {1,date,medium} {2,time,HH:mm} por {3}

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

3 голосов
/ 05 февраля 2009

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

Возможно, я бы попытался использовать заполнители вокруг ссылок:

Отдел X

Вот как я это сделал, когда переводил сайт на 30 языков. Это не идеально, но работает.

Я не думаю, что можно (или просто) удалить всю разметку из строк, у вас должен быть способ вставить URL и любую дополнительную разметку.

2 голосов
/ 05 февраля 2009

Вы должны избегать разрывов строк. Это не только становится кошмаром для перевода, но и делает грамматические допущения, которые могут быть неверными на целевом языке.

Хотя заполнители могут быть полезны для многих вещей, я бы не рекомендовал использовать заполнители для URL-адресов. Это позволяет вам настроить URL для разных локалей. В конце концов, нет смысла отправлять их на страницу на английском языке, когда их язык - аргентинский испанский!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...