2008-11-11 4 views
29

EDIT: Мне бы очень хотелось увидеть общую дискуссию о форматах, их плюсах и минусах!i18n - лучшие практики для интернационализации - XLIFF, gettext, INI, ...?

EDIT2: «Баунти на самом деле не помогло создать необходимую дискуссию, есть несколько интересных ответов, но исчерпывающий охват темы по-прежнему отсутствует. Шесть человек отметили вопрос в качестве фаворитов, что показывает мне, что в этом обсуждении есть интерес.

При определении порядка интернационализация самая сложная часть IMO - это выбор формата хранения.

Например Zend PHP Framework предлагает следующие адаптеров, которые охватывают почти все мои варианты:

  • массива: нет, трудно поддерживать
  • CSV: не знаю, возможные проблемы с кодировкой
  • Gettext: часто используется, PoEdit для всех платформ, доступных НО сложных
  • INI: не знаю, ПОСС проблемы с кодированием
  • TBX: no ключ
  • TMX: слишком большая вещь? без редакций.
  • QT: не очень распространены, нет бесплатных инструментов
  • XLIFF: стандартный стандарт? НО никаких бесплатных инструментов нет.
  • XMLTM: нет, не то, что мне нужно

в основном я застрял с 'жирным' выбор 4. Я хотел бы использовать файлы INI, но я читаю о проблемах с кодировкой ... это действительно проблема, если я использую строгие UTF-8 (файлы, соединения, db и т. Д.)?

Я нахожусь в Windows, и я попытался выяснить, как работает функция poEdit, но просто не удалось. Нет учебных пособий в Интернете, gettext все равно выбор или исчезающий вид в любом случае?

Как насчет XLIFF, с кем-нибудь работал? Любые советы по использованию каких инструментов?

Любые идеи для Eclipse интеграция любой из этих технологий?

ответ

12

Всегда есть Translate Toolkit, которые позволяют переводить между мной все упомянутые форматы и предпочтительные gettext (po) и XLIFF.

1

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

Итак, идея состоит в том, что если вы можете доверять пользователю, чтобы отредактировать его с помощью кодировки UTF8.

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

Что вы хотите сохранить? пользовательский контент или ваши ресурсы приложения?

+0

Я хочу ини хранить языковые строки. Тогда у меня будет один ini для каждого языка и каждого модуля. например default.en, default.de, по умолчанию. fr ... – markus 2008-11-11 07:50:43

+0

, тогда вы можете использовать простой INI, вам просто нужно указать в своем документе, что файлы переводов НЕОБХОДИМО быть в UTF8. И если переводчик этого не делает, это его вина :) – CiNN 2008-11-11 08:01:46

+0

Я сделал вариант этого (например, файл типа INI на язык) и загрузил его в пользовательскую хеш-таблицу. Это было быстро и сработало хорошо, за исключением работы вокруг некоторых домашних OO в приложении C. – torial 2009-03-03 06:40:38

15

POEdit на самом деле не сложно найти. Просто создайте новый файл .po, а затем скажите ему импортировать строки из исходных файлов. Программа сканирует ваши файлы PHP для любых вызовов функций, соответствующих _("Text"), gettext("Text") и т. Д. Вы даже можете указать свои собственные функции для поиска.

Вы должны ввести перевод в соответствующее поле. При сохранении вашего файла .po автоматически создается файл .mo. Это всего лишь двоичная версия переводов, которые gettext легко анализирует.

В своем PHP-скрипте сделайте вызов bindtextdomain(), в котором сообщается, где находится ваш .mo-файл. Теперь любые строки, переданные в gettext (или функция подчеркивания), будут переведены.

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

1

Я работал с двумя из этих форматов на стороне l18n: TMX и XLIFF. Они довольно похожи. TMX сейчас более популярен, но XLIFF быстро получает поддержку. Был, по крайней мере, один бесплатный редактор XLIFF, когда я в последний раз заглядывал в него: Transolution, но он сейчас не разрабатывается.

0

Один довольно простой подход - просто использовать файл ресурсов и сценарий ресурсов. У таких программ, как MSVC, нет проблем с их редактированием. Они также достаточно дружелюбны к другим системам (и текстовым редакторам). Вы можете просто создать отдельные таблицы строк (и растровые таблицы) для каждого языка и пометить каждую такую ​​таблицу, на каком языке она находится.

0

Ни один из этих вариантов выглядит очень аппетитно для меня.

Если вы отправляете файлы для перевода на нескольких языках, то вы хотите быть уверены, что кодировки верны, особенно если вы никого в своей команде не говорите на этих языках. Иногда трудно определить проблему кодирования на иностранном языке, и слишком просто портить кодированные файлы, если вы позволите своей ОС «угадать».

Вы действительно хотите формат, который объявляет его кодировку. В противном случае переводчики или их инструменты перевода могут выбрать что-то другое, кроме UTF-8. Для моих денег лучше всего подходит любой простой XML-формат, но похоже, что вам нужно сыграть в Zend. XLIFF и TMX, безусловно, чрезмерны.

Формат, такой как XML-ресурсы Java, был бы идеальным.

1

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

У меня есть две таблицы. Первая таблица имеет идентификационное значение, поле символов varchar 32 символов (с индексом в этом поле) и английское описание фразы на 200 символов.

Моя вторая таблица имеет идентификатор из первой таблицы, код языка (EN_UK, EN_US и т. Д.) И столбец NVARCHAR для текста.

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

32 символа varchar в первой таблице хранит что-то вроде «pleaselogin», а вторая таблица фактически хранит полный «Пожалуйста, введите свой логин и пароль ниже».

Я создал огромный список динамических значений, которые я заменяю во время выполнения. Примером может служить «У вас есть [[dynamic: passworddaysremain]} дней, чтобы изменить пароль». - это позволяет мне работать над упорядочением слов на разных языках.

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

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

Есть много доступных опций: для производительности вы можете использовать html-шаблоны для каждого языка. Мой метод работает хорошо, но он часто использует XML DOM во время выполнения для создания страниц.

0

Это может немного отличаться от того, что было опубликовано до сих пор, и, возможно, это не совсем то, что вы ищете, но я подумал, что добавлю его, если не иначе, как другой подход. Я пошел с объектно-ориентированным подходом. Я создал систему, которая инкапсулирует языковые файлы в класс, сохраняя их в массиве строк => трансляции. Доступ к переводу осуществляется с помощью метода, называемого translate, с ключевой строкой в ​​качестве параметра. Расширение классов наследует массив языка родителя и может добавлять к нему или перезаписывать его. Поскольку классы расширяемы, вы можете изменить базовый класс и распространить изменения на дочерние элементы, что делает их более удобными, чем массив. Кроме того, вы вызываете только классы, которые вам нужны.

0

Мы просто храним строки в БД и имеем встроенный в приложение режим транслятора для обработки фактических добавлений строк для разных языков.

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

£("btn_save") 
£(Order.class,"amt") 

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

0

Вы можете проверить мой l10n инструмент под названием iL10Nz на http://www.myl10n.net

Вы можете загрузить ПО/горшка файлы, XLIFF, INI файлы, переводить, скачать.

Вы также можете проверить это видео на YouTube http://www.youtube.com/watch?v=LJLmxMFxaxA

Благодаря Оливье