Какой лучший способ добавить i18n в веб-приложение? - PullRequest
3 голосов
/ 03 июня 2010

Я ищу i18n-ize веб-приложение. Сайт будет постоянно меняться: текст будет переписываться, добавляться новые материалы и т. Д. Веб-приложение написано на PHP, но то же относится и к любому языку.

В основном я хочу:

1) Код должен быть читаемым и поддерживаемым 2) Переводчикам будет отправлено электронное письмо при добавлении новых материалов на английском языке ИЛИ на изменение английского языка 3) Чтобы узнать, является ли что-то актуальным или нет. 4) Переводчики смогут обновлять вещи онлайн

Полагаю, лучшая идея - хранить все в базе данных и обрабатывать вещи, которые отличаются от PO-файлов и gettext. Но какой самый лучший способ:

Недостаток $ lang ('contactus') в том, что он нечитабелен (с точки зрения кода) и медленнее развивается (так как весь английский должен иметь уникальный ключ и храниться в базе данных)

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

Как другие приложения / фреймворки справляются с этим?

Ответы [ 3 ]

2 голосов
/ 03 июня 2010

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

Плюс к этому есть нечто большее, чем просто перевод строк. Существуют символы и форматы валюты, числовые форматы (десятичные, символы группировки цифр, где появляется символ), форматирование даты. Форматирование имени - в некоторых регионах люди часто имеют отчество в других, которых они обычно не имеют. Чтение текста слева направо и справа налево. тьфу.

Для веб-приложения иногда просто гораздо проще разделить веб-страницы на языковые каталоги и работать с ними таким образом. У вас есть вся бизнес-логика отдельно от кода представления, верно? Вот где встраивание бизнес-логики непосредственно в html ala типичный подход PHP действительно начинает мешать.

1 голос
/ 03 июня 2010

Создайте некоторую функцию перевода с легко вводимым именем, например, t ($ key) или используйте существующее решение (например, Zend_Translate) или PHP gettext, которое предоставляет функцию _ ($ key).

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

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

0 голосов
/ 03 июня 2010

Никогда не используйте константы или укороченные ключи перевода, не используйте базу данных, избегайте использования только массивов. Единственным профессиональным способом обработки переводов является функция типа gettext (*).

Вы должны использовать только _ («Оригинальные текстовые запросы на английском языке»). Преимущество этого заключается в том, что по крайней мере текст на языке по умолчанию все еще доступен, если данные / файлы перевода будут недоступны.
Не беспокойтесь об изменениях в текстовых строках. На самом деле это редко. Если вы используете синтаксис gettext, то есть даже инструменты для автоматической адаптации языковых файлов. Заметьте, не так много хороших инструментов. Но это больше, чем методы перевода на доморощенный, и он выполняет свою работу. Если ваш интерпретатор PHP не поддерживает нативный gettext, найдите эмуляцию php-gettext или upgradephp.

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