Лучшие практики интернационализации текста с большим количеством разметки?

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

Вопрос

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

Я понимаю, что лучше всего (здесь я использую 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% слов в этом конкретном сообщении.

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

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

Решение

Обычно, если вы используете механизм шаблонов, такой как Сетка сайта или Скорость вы можете более эффективно управлять этими меньшими строительными блоками 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}

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

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

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

Разметку тоже не удаляйте.

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

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

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

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

<a href="%link1%" class="%link1class%">Дивизион X</a>

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

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

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

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

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