Особенности дизайна для интернационализации - PullRequest
43 голосов
/ 13 марта 2009

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

Некоторые вещи, которые я выучил:

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

Где я нахожусь:

  • Мой дизайн достаточно гибок, чтобы разместите намного больше текста.
  • Я автоматически перевожу каждый строка, включая сообщения об ошибках и диалоговые окна справки.
  • Я еще не пришел к точке, где Мне нужно было отобразить единицы времени, валюта или цифры, но я буду там в скором времени и нужно будет разработать решение.
  • Я использую набор символов UTF-8 через доску.
  • Мои меню и различные списки в приложении отсортированы для удобства чтения по алфавиту для каждого языка.
  • У меня есть парсер тегов, который извлекает теги путем фильтрации стоп-слов. список стоп-слов зависит от языка и может быть заменен.

О чем я хотел бы узнать больше:

  • Я разрабатываю загружаемое веб-приложение на PHP, поэтому любые конкретные советы в отношении PHP будет принята с благодарностью. Я разработал свою собственную структуру и не заинтересован в использовании других рамки в это время.
  • Я очень мало знаю о незападных языки. Есть ли конкретные соображения, которые необходимо принять на счет того, что я не упомянул выше? Кроме того, как сделать массив PHP функции сортировки обрабатывают незападные символы?
  • Есть ли какие-то особые ошибки, которые Вы испытали на практике? Я смотрю с точки зрения как GUI, так и самого кода приложения.
  • Любой конкретный совет по работе с дата и время отображаются? Есть ли разбивка по регионам или язык
  • Я видел много проектов и сайтов пусть их общины обеспечивают перевод для своих приложений и содержание. Вы рекомендуете это и каковы некоторые хорошие стратегии для убедиться, что у вас есть хороший перевод
  • Этот вопрос в основном степень о том, что я знаю о интернационализация. Что я не знаю, что я не знаю, что я должен заглянуть дальше?

Редактировать : Я добавил награду, потому что хотел бы получить больше примеров из реального мира.

Ответы [ 11 ]

56 голосов
/ 13 марта 2009

Наша игра Gemsweeper переведена на 8 различных языков. Некоторые вещи, которые я узнал во время этого процесса:

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

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

"Это шаг" "нашего 15-шага учебник "

Напишите что-то вроде:

"Это шаг% 1 нашего 15-шагового руководства"

и заменить заполнитель программно.

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

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

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

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

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

Редактировать - Еще несколько баллов

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

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

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

Правки - еще больше очков

  • Поймите, что разные культуры имеют разные стили форматов чисел и дат. Схемы нумерации различаются не только в зависимости от культуры, но и в зависимости от цели в этой культуре. В EN-US вы можете отформатировать число «-1234»; '-1,234' или (1,234) в зависимости от назначения числа. Поймите, что другие культуры делают то же самое.

  • Знайте, откуда вы получаете информацию о глобализации. Например. В Windows есть настройки для CurrentCulture, UICulture и InvariantCulture. Понять, что означает каждый из них и как он взаимодействует с вашей системой (они не так очевидны, как вы думаете).

  • Если вы собираетесь делать восточноазиатские переводы, по-настоящему сделайте свою домашнюю работу. Восточноазиатские языки здесь довольно сильно отличаются от языков. В дополнение к наличию нескольких алфавитов, которые используются одновременно, они могут использовать различные системы разметки (сверху вниз) или на основе сетки. Также цифры в восточноазиатских языках могут быть очень разными. В en-US вы меняете системы только для ограниченных условий (например, 1 против 1), существуют дополнительные числовые соображения, кроме запятой и точки.

11 голосов
/ 21 марта 2009

Когда мы работали над i18n / l10n выпусками Dreamfall и Age of Conan, мы столкнулись с несколькими проблемами, о которых стоит помнить. Некоторые из них мы решили, некоторые были решены для нас, а некоторые мы обошли. Некоторых мы так и не решили ...

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

  • Убедитесь, что вы используете шрифт, который поддерживает все языки, которые вы хотите использовать. Большинство шрифтов, которые утверждают, что они являются Unicode, являются только Unicode в том смысле, что символы, которые он имеет, находятся в правильной кодовой точке. Это не означает, что в нем есть используемые символы для всех кодовых точек.

  • Обтекание текстом выполняется не только в пробелах, так как некоторые языки не используют пробел для разделения слов (вспоминается китайский). Убедитесь, что ваши процедуры переноса текста обрабатывают текст без пробелов вообще.

  • Правильное обращение с множественным числом сложно в простых случаях и чертовски сложно в тяжелых случаях. Убедитесь, что вы знаете достаточно о языках, которые вы будете использовать, чтобы иметь возможность писать код для правильной обработки множественного числа. Имейте в виду, что английский (и другие «западные» языки - одни из самых простых.

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

  • Имейте в виду, что для некоторых языков значение заполнителя может изменить способ написания предложения. Грамматика это сложно. Убедитесь, что у вас есть план борьбы с ним. (В частности, убедитесь, что у вас есть способ классификации значений, которые вы используете в заполнителях, по полу, времени и т. Д.).

10 голосов
/ 13 марта 2009
  • Мои меню и различные списки в приложение отсортировано по алфавиту для каждого языка для удобства чтения.

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

то же самое с ярлыками, если они есть: не переводите их .

также помните, что интернационализация и перевод - это две разные вещи, управляйте ими отдельно.

8 голосов
/ 20 марта 2009

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

  • Не пытайтесь повторно использовать фрагменты сообщений об ошибках. Например, не думайте, что, поскольку у вас есть две ошибки "You selected the wrong menu item" и "That menu item is not yet available", вы можете извлечь "menu item" в отдельный элемент и использовать его в обоих местах. Все сообщения должны быть самодостаточными, поскольку их переводы могут изменяться в зависимости от контекста.

  • Используйте профессионального переводчика , хорошо осведомленного о технологиях. Если вы подойдете к такой службе, как BabelFish, вы получите все, что заслуживаете. Например, "Microsoft Windows" - это "Microsoft Windows" повсюду на планете, в Германии оно не становится "Microsoft Fenster".

  • Старайтесь не встраивать переменные в ваших сообщений (например, "The %1 has failed", где %1 изменяется динамически), поскольку позиции и, действительно, пол могут измениться: "La table est rubbish" против "L'Homme est drunk" или "The red table" против "La table rouge". Лучше использовать родовое существительное с добавленными параметрами: "The item has failed [%1]".

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

  • Меню должны быть отсортированы по функциональности, а не по порядку сортировки.

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

Этого пока достаточно. Лучше остановиться, прежде чем все вы уснете: -)

6 голосов
/ 27 марта 2009

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

  • Не делайте предположений. Это правило «поймай все». Легко предположить вещи, которые зависят от региона или языка, и трудно заметить эти предположения.
  • Будьте очень осторожны при сравнении строк. Есть некоторые языки, такие как турецкий, которые имеют буквы, которые визуально похожи на другие, но отличаются.
  • Используйте псевдоперевод в качестве теста на дым. Если вы читаете переведенные строки из файла ресурсов, создайте псевдопереведенную версию файла, которая все еще понятна для вас, но которая подчеркивает возможности и возможности каждая переводимая строка в приложении. Например, добавьте строку типа «Отмена», например «CancelXXXX!» так, чтобы это было так же широко, как ваш допуск для переведенных строк. Затем вы можете проверить, чтобы каждая строка отображалась полностью. Дополнительный балл за то, что он придерживается самого сложного символа, который может быть предоставлен, чтобы убедиться, что он отображается правильно во всех местах.
  • Не делайте предположений о раскладках клавиатуры. «ASDW» может быть отличным набором управляющих клавиш для клавиатур QWERTY, но жесткое кодирование делает его недружественным, если не невозможным, для использования людьми с другими раскладками клавиатуры.
  • Протестируйте различные настройки даты, затем протестируйте их снова. Я видел проблемы из-за чего-то небольшого, чем другой формат для "AM / PM" в региональных настройках. Соотношение мм / дд / гггг и дд / мм / гггг также очень важно, но каждая настройка здесь может иметь значение.
  • Тестируйте различные числовые форматы, затем проверяйте их снова. Вы не хотите зависеть, например, от десятичного разделителя или разделителей тысяч.
  • Тестирование с и без входа пользователя на сервер. Это может быть более специфично для Windows, но очень легко получить компонент на сервере, настроенный таким образом, чтобы он использовал зарегистрированный региональный пользователь настройки, когда пользователь вошел в систему, и региональные настройки по умолчанию, когда пользователь не вошел в систему. Это может вызвать странное, прерывистое поведение.
  • Тестирование с различными региональными и языковыми настройками. Например, Windows имеет не только региональные и языковые настройки, но и IE имеет свои собственные языковые настройки. Поведение клиента IE, в котором en-us указан первым, не всегда может быть таким же, как в случае, когда en-nz указан первым, например.
  • Убедитесь, что ваш переводчик понимает бизнес и языки, а затем сверьтесь с кем-либо еще. Будьте очень осторожны при использовании терминологии, специфичной для приложения. Если ваша программа использует определенные слова для обозначения чего-то особенного в приложении, убедитесь, что они переводятся одинаковым образом в каждом случае, включая текст справки. Если у вас есть конкретные языковые цели, вы можете даже зайти так далеко, чтобы перевести такие слова заранее и убедиться, что они не переводятся плохо на целевых языках. Это скорее предмет исследования продукта, но он может изменить то, какие слова используются в интерфейсе, и каждому будет легче, если эти слова будут на месте с самого начала. Вы также хотите избежать идиом, которые могут плохо переводиться.

Хорошо, я мог сказать больше, чем думал ...

6 голосов
/ 13 марта 2009

Что касается чисел: в английском, как я понимаю, вы просто используете единственное число с 1 и множественное число с 2 или более. Как: «У вас есть 1 сообщение»; «2 сообщения»; «3 ... сообщения». На русском все становится сложнее. Вы используете единственное число для 1, 21, 31, 41 ... 101, 121 (то есть для всего, заканчивающегося на 1, кроме случаев, когда оно заканчивается на 11). Затем вы используете единственное число в родительном падеже для 2, 3, 4; 22, 23, 24; 32, 33, 34 ... 102, 103, 104; 122, 123, 124. И во всех остальных случаях вы используете падеж множественного числа .

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

И это просто цифры: -)

5 голосов
/ 14 марта 2009

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

например. вместо имени файла «sample-database.txt» назовите английскую версию «sample-database-loc-en.txt», итальянскую версию «sample-database-loc-it.txt

»
4 голосов
/ 21 марта 2009

Мой первый ответ в StackOverflow, так что извините, если кто-то сказал глупость.

Из моего опыта:

  • PHP : gettext был чрезвычайно полезен;
  • незападные языки : UTF-8 везде (код, БД) и пока у нас все хорошо;
  • Есть ли какие-то особые ошибки, которые вы испытали на практике? Разбивать длинные абзацы для i18n на разные предложения может быть дешевле перевести, если строка повторяется более одного раза на сайте, который вы только нужно перевести один раз. Но будьте осторожны, если вы слишком много фрагментируете текст, переводчики потеряют контекст;
  • Я видел много проектов и сайтов, позволяющих их сообществам переводить свои приложения и контент. Рекомендуете ли вы это и какие есть хорошие стратегии для обеспечения хорошего перевода? Если у вас очень много добровольцев, делайте это, но в зависимости от того, сколько текста у вас есть, вам действительно может понадобиться тонна добровольцев. Также убедитесь, что у вас есть кто-то, кому вы доверяете, будучи лидером языкового проекта, чтобы быть корректором, контролирующим точность перевода.
3 голосов
/ 06 мая 2009
  • Правила сортировки / сортировки могут сильно отличаться в зависимости от языка: ä сортируется по-немецки иначе, чем по-шведски. Таким образом, сортировка должна быть специфичной для культуры.
  • Верхний / нижний регистр может содержать сюрпризы: немецкий «острый S» символ ß не имеет заглавной версии и либо преобразуется в «SS», либо остается строчным, если важна точность. Турецкий язык имеет строчную букву i без точки и прописную букву I.
  • Для многоязычных веб-приложений тщательно продумайте, как решить, какую версию показывать и как включить ее в URL-адрес. Пользователь всегда должен иметь возможность вручную выбирать язык, и вы хотите, чтобы поисковые системы находили разные языковые версии по разным URL-адресам.
  • Некоторые восточноазиатские языки (а именно японский и китайский, может быть, другие) не имеют пробелов между словами
  • Японский (возможно, и другие) имеет отдельные версии ("полная ширина") арабских цифр и пробела, и даже две версии некоторых своих собственных символов (половинная ширина и полная ширина катакана).
1 голос
/ 24 марта 2009

PHP представляет строки внутри себя как байтовые потоки и предполагает iso-8859-1 для случаев, когда кодирование имеет значение. По большей части, вы можете просто использовать UTF-8 повсюду, и все будет в порядке. Одно замечание: если ваш сайт принимает информацию от своих пользователей, вы никогда не можете быть на 100% уверены, что они представляют контент в правильной кодировке. Возможно, вы захотите использовать mb_detect_encoding для проверки ввода или использовать скрытое поле с «экзотическими» символами для проверки.

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

Другим хорошим ресурсом для PHP является шпаргалка Ника Неттлтона .

Предметом, который очень тесно связан с кодировками / кодировками, является сопоставление . Ваши сопоставления должны соответствовать языку / культуре, с которыми вы работаете. По крайней мере, в MySql (возможно, и в других RDBMS) вы можете указать параметры сортировки на разных уровнях, например, для базы данных, таблицы, столбца и даже в самом запросе.

...