Ускоряющая клавиша n предназначена для пропусков при навигации по страницам. Пропуск для перехода на начало контента.

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

Переводчик: Alexandr Shlapak (Александр Шлапак)

s_gotoW3cHome Internationalization
 

Работа с Составными Сообщениями

Предполагаемая аудитория: разработчики скриптов (PHP, JSP, и т.д.), шифровальщики XML и XHTML/HTML (используя редакторы или скрипты), дизайнеры сайтов и другие программисты.

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

После рассмотрения концепций и вопросов, связанных с фрагментацией текста и повторным использованием строки, мы рассмотрим что работает, а что не работает.

Составленные Сообщения

Составленные Сообщения динамически составляют одно сообщение более чем из одной строки текста. Обычной причиной для создания составных сообщений является то что одна или более частей составленных сообщений изменяться в соответствии с контекстом.

Составленные сообщения, как правило, организованы с помощью одного или двух способов: первый - механизм sentence-like; второй - механизм topic-comment.

Части составного сообщения которые изменяются, рассматриваются здесь как подстроки.

Механизмы sentence-like

Например ниже изображено составленное сообщение типа sentence-like. Этот механизм выражает идею использования текущего sentence-like синтаксиса. Как правило, это наиболее проблемный подход.

left bracket
printer
right bracket
The
stacker
has been disabled.
stapler options

В этом примере, дизайнер создал одну строку, для обслуживания общих частей трех предложений, то есть The ... has been disabled.. Также были созданы три переменные подстроки, и одна соответствующая подставляется во время выполнения, чтобы создать сообщение для контекста.

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

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

Проблема согласования уже показана на Английском примере. Если альтернативная строка stapler options используется при исполнении, то слово has будет неправильным - должно быть have.

Ключевым вопросом является то, что, поскольку в настоящее время только одна строка содержит слово has, он не может читать have когда это необходимо.

Часто это становится еще более сложной задачей, когда мы переводим на другие языки. Например, во Французском языке слово the будет переведено как le, la, les, или l', в зависимости от того, что сразу следует. Кроме того, слово disabled необходимо будет désactivé, désactivés, désactivée, désactivées, в зависимости от пола и число субъекта. Даже если бы stapler options не был одним из вариантов, и все составленные сообщения выглядели бы хорошо в Английском языке, Французский переводчик столкнулся бы с невыполнимой задачей.

Механизмы topic-comment

Механизмы topic-comment устанавливают тему (subject) и затем устанавливают что-нибудь о ней (comment), как правило, кратко. Например: Printer: enabled. Обратите внимание, что в этом механизме двоеточие очень широко используется, чтобы отделить тему и комментарий.

Вот пример, показывающий некоторые вариации на тему механизма topic-comment.

Экран показывает описанный текст.

Темы - неизменные строки, такие как: 2-sided printing, [Tray] 1, и Binder. Каждая тема сопровождается одной из набора альтернативных (и заранее определенных) строк для комментариев. Например, тема 2-sided printing сопровождается комментарием On. Обратите внимание, что тема и комментарий находятся здесь в отдельных областях экрана, хотя это не всегда так.

Большинство вышеприведенных сообщений разделены на две области отображения текста. Однако, сообщение со ссылкой на binder, разделенное на три области отображения - то есть, тема имеет два комментария: binder является одновременно Enabled и On. Это вполне допустимый подход и он не представляет никакой проблемы для перевода.

Вот еще несколько примеров topic-comment составленных сообщений.

Комментарии здесь есть также заменяемыми текстовыми подстроками, хотя в этом случае все комментарии видны в то же время - то есть, это пример списка подстрок. Во многих языках такие слова как lighter и darker придется согласовывать с темой (Image quality) по роду.

Image quality

Lighter/darker


Здесь мы имеем дело с выпадающим меню, но концепции остались прежними. Слова Left, Centre и Right является заменяемыми текстовыми подстрокам и во многих языках при переводе должны согласовываться по теме Alignment.

Изображение выпадающего списка показывает последовательность команд: Format > Alignment > Left/Centre/Right

Сообщение в этом наборе реализованы в виде встроенных переменных в родительских строках. Однако они сохраняют механизм topic-comment. Обратите внимание, что в последней строке темы опять есть два комментария - тест как completed так и passed.

Directory: C:/Workgroup/Scan
File name: MyFile.tif
Image Quality: Text
Original Size: Auto
Resolution: 300 dpi
Communication Test: Completed: Passed

Типы подстрок

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

Заранее определенный, заменяемый текст. Заранее определенные слова или фразы в наборе сообщений что надо будет перевести, такие как слова printer, stacker или binder в примере выше.

Незаменяемая, определенная при выполнении текст. Незаменяемая и нечисловая строка что созданная пользователем при выполнении или незаменяемое название, как в Ошибка возникла при выполнении работы %s, где %s - название работы как указано пользователем.

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

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

Проблемы интернационализации

Жесткий синтаксис

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

Через разделенные области отображения.

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

Следующие примеры показывают, составленное сообщение, части которого для компоновки разделены между различными ячейками таблицы. (Пунктирная линия показывает границы ячеек.)

Return web pages updated

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

veränderte Webseiten abrufen.

Если переводчик не в состоянии изменить порядок сообщения таким образом, может быть, для решения этой проблемы он сможет использовать механизм topic-comment. В противном случае, вероятно, лучшим результатом будет очень плохой перевод. Например, текст может быть изменен в целевой язык для обозначения:

Time period for returned web pages:

Переменные, чей порядок нельзя изменить.

Должна быть возможность изменять порядок переменных в механизмах sentence-like и перемещать их любым образом по отношению к тексту.

Например, при программировании на PHP таким образом можно закодировать строку "There were <number> spelling mistakes in file <filename>.":

printf( "There were %d spelling mistakes in file %s.", spellerrors, filename)

К сожалению, если вы это сделаете, и если переводчик делает перевод на Немецкий язык: "Datei <filename> enthält <number> Rechtschreibfehler." это, вероятно, приведет к ошибке в коде. Это потому, что PHP не позволяет переставлять местами значения переменных %d и %s.

Вместо этого вам следует закодировать текст следующим образом:

printf( "There were %1\$d spelling mistakes in file %2\$s.", spellerrors, filename)

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

Сменная строка, повторно интегрированная в код, читаться как:

printf( "Datei %2\$s enthält %1\$d Rechtschreibfehler.", spellerrors, filename)

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

Составленные сообщения, являются неполными строками.

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

print( "Retrieving last " );
print( desiredEntries );
print( " of " );
print( totalEntries );
print( " total log entries." );

Японский перевод поставит total log entries (записи в общий журнал) в начале предложения и last retrieving (последнее получение) в конце. Гораздо важнее то, что было бы необходимо изменить порядок print(desiredEntries) и print(totalEntries). (В следующем примере добавлены переводы, чтобы помочь вам увидеть, как именно необходимо изменить порядок текста.)

print( "エラーログ" );        // translation: 'error log'
print( totalEntries );
print( "件から最新" );        // translation: 'from last'
print( desiredEntries );
print( "件を取り出します。" ); // translation: 'retrieving'

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

1: "Retrieving last "
2: " of "
3: " total log entries."

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

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

print( "Retrieving last " + requiredEntries + " of " + totalEntries + " total log entries." );

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

print( "Retrieving last $requiredEntries of $totalEntries total log entries." );

Согласование и отображение по типу слово/концепция

Согласование рода.

Заранее определенные, изменяемые текстовые подстроки в механизме sentence-like могут создать непреодолимые трудности для переводчика через лингвистические свойства многих языков.

Следующий пример показывает sentence-like родительскую строку в какой соответствующая заранее определенная подстрока будет вставленная при выполнении.

The %s has been disabled.

При выполнении %s будет заменен на один из:

printer

stacker

stapler options

Проблему здесь видно даже в Английском языке, поскольку слово has должно быть have рядом с подстрокой stapler options. На Французском, вышеупомянутые подстроки есть, соответственно, женского единственного, мужского единственного и женского множества, и нуждаться в трех различных переводах родительской строки:

L'imprimante a été désactivée.

Le module de reception a été désactivé.

Les options d'agrafage ont été désactivées.

Слово the также может быть la во Французском языке если следующее слово женского рода и начинается с согласной буквы, а слово disabled нужно перевести désactivés для мужского множественного существительного. Такие согласования есть чрезвычайно распространенными в других языках, кроме Английского или Японского и часто могут быть более сложными, чем во Французском языке.

Ключевым вопросом здесь является то, что, поскольку у нас для перевода есть только одна строка, то нельзя применять различные соответствующие переводы в Французском языке для родительской строки.

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

Лучшим подходом здесь будет либо использовать отдельные строки, либо использовать такой механизм topic-comment, как Disabled function: printer, и т.д. Отметим, что в последнем случае слово disabled относится к function, и, следовательно, есть неизменным.

Отображение слова и концепции.

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

Turn on the %s.

При выполнении %s будет заменен на один из:

printer

stacker

stapler options

В некоторых языках, соответствующий перевод Turn on может варьироваться в зависимости от того, что turned on (включено). Например, в Испанской языке его можно перевести как такие разные термины, как conectar, encender или activar. Там также будет четыре возможных перевода слова the. Поскольку существует только один экземпляр начальной строки, поэтому опять невозможно обеспечить качественный перевод.

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

Согласование рода и подстроки которые определяются во время выполнения.

Здесь мы имеем в виду конкретно текст, переданный во время выполнения - такой, как название файла, название задачи, имя человека и т.д. - или непереводимые названия. Это не заранее определенные заменяемые подстроки.

Как правило, даже в механизмах sentence-like, эти типы подстроки не вызывают проблем с интернационализацией. Например, переведенные ниже предложения не нужно согласовывать с текстовой подстрокой поскольку тема предложения (то есть в данном случае file или section) уже определена или четко видно что она отличается от подстроки.

The file <file_name> has been scanned.

The section <section_title> gives further information.

В лингвистических условиях, это работает так, что текст переменной обеспечивается в качестве приложения к теме.

Рекомендуется такие слова, как section и file добавлять, а не выводить. Это помогает переводчику понять смысл сообщения.

Однако, существуют исключения из этого правила. Если текстовая переменная относится к person (человек), а не к object (объект), то многие языки по-прежнему будут нуждаться во внесении изменений в другие части предложения, в зависимости от пола человека. Например:

The patient <person's_name> is ready.

Испанские переводы этой строки могут иметь следующий вид:

El enfermo Richard está listo.

или

La enferma Julia está lista.

Другими словами, встроенные подстроки определенные при выполнении работают в механизмах sentence-like только, если они не отображают надлежащее существительное. Для этих типов сообщений лучше использовать механизмы topic-comment.

Числовое согласование.

Числовые подстроки плохо работают в механизмах sentence-like.

Во многих языках слово, которое квалифицируется рядом изменений, согласно тому, как много мы говорим о нем. Возьмите, например, сообщение %d pages were printed (страницы были напечатаны).

В Английском языке, в случае, если только одна страница была напечатана pages were должно стать page was. Иногда, указав %d page(s) printed авторы пытаются обойти эту проблему.

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

Русский язык еще сложнее. Приведенная ниже таблица показывает окончаниями для слова page в Русском языке , когда это связано с разными номерами.

Номера страниц Русское слово для 'page'
1 страница
2-4 страницы
5-10 страниц
11-20 (не завжди) страниц
21 страница
22-24 страницы
25-30 страниц
> 30 Повторите модель окончаний: от 1 до 10.

В результате, это очень трудно иметь дело с такими сообщениями, которые выраженные механизмом sentence-like. Поэтому лучше, всегда выражать сообщения, содержащие числа, в качестве механизма topic-comment. В механизме topic-comment, слово pages остается неизменным. Эквивалентное значениеPages printed: %d на Русском языке приведено ниже.

Отпечатано страниц: %d

Подстроки которые нельзя различить

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

Рассмотрим следующий пример:

%s near '%s' at line %d

Японский перевод этого может быть таким:

%d 行の%s近くに%s

Что не ясно, несмотря на этот пример - это то, что переводчик назначил замену на противоположную двух переменных, что названные %s. Это, конечно, не понятно, для программного обеспечения

Поэтому есть смысл использовать уникальный идентификатор для каждой переменной в строке. Мы уже видели, что в PHP, например, вы могли бы получить это кодируя Английский как:

%1\$s near '%2\$s' at line %3\$d

В Японском языке это:

%3\$d 行の%2\$s近くに%1\$s

Потребность в контексте

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

Для многих языков, как правило, невозможно перевести часть комментария topic-comment сообщения, если вы не знаете что это за тема. Слово enabled Во Французском языке переводится одним из четырех различных способов, в зависимости от того, тема мужского, женского рода, единственный или множество:

Topic (Тема) Часть речи Перевод слова 'enabled'
stacker мужской, единственный activé
printer женский, единственный activée
bar codes мужской, множество activés
stapler options женский, множество activées

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

Если переводчику нужно перевести само по себе слово enabled, он или она понятия не имеют, как его нужно перевести. Например, с представленным переводчику текстом в следующем порядке будет очень трудно справиться.

enabled
disabled
enabled
enabled
disabled
stacker
printer
enabled
bar codes
stacker
disabled
etc.

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

Есть несколько способов, чтобы этого достичь:

Различия могут быть также семантического характера. Например, если здесь использовали слово on, а не enabled, соответствующий перевод на Испанский язык может быть следующим encendida для printer, но activadas для stapler options. conectado - другой перевод слова on. Каждое из этих трех слов также имеет четыре формы согласования. Это дает 12 возможных вариантов перевода.

Рекомендации

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

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

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

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

Там где это необходимо, обеспечьте переводчиков информацией, чтобы уточнить, что собой представляет подстрока (например то похоже на "%s near '%s' at line %d" может создать проблему для переводчика).

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

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

Выскажите своё мнение (по-английски).

Подпишитесь на ленту новостей RSS.

Новые публикации

Новости главной страницы

Twitter (Новости главной страницы)

‎@webi18n

Дополнительные материалы

Автор: Richard Ishida, W3C. Переводчик: Alexandr Shlapak (Александр Шлапак).

Допустимый XHTML 1.0!
Допустимый CSS!
Кодировка UTF-8!

Перевод с английского: 2006-03-30. Последнее внесение изменений в перевод: 2011-08-27 10:00 GMT

Для просмотра истории внесения изменений нажмите article-composite-messages в блоге i18n.