Какой лучший способ построить "многоязычный" скрипт в php? - PullRequest
8 голосов
/ 19 января 2009

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

  • Легко для меня
  • Легко для переводчиков

И что вы думаете, стоит ли хранить его в БД, XML или в файле PHP?

Ответы [ 7 ]

11 голосов
/ 19 января 2009

Существует множество вариантов хранения переводов:

  • TMX : относительно новый формат XML для переводов. Кажется, набирает популярность.
  • Gettext - еще один открытый формат для переводов. Долгое время был стандартом де-факто.
  • INI-файлы - легко редактировать, очень простой формат
  • PHP-файлы (массивы) - легко редактировать для программистов PHP, хорошая производительность
  • Формат CSV - относительно прост в использовании.

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

6 голосов
/ 19 января 2009

В отличие от daddz, я бы рекомендовал не использовать gettext в PHP:

  • Настройка локали для каждого процесса. Это означает, что когда вы работаете с многопоточным Apache или любым другим многопоточным веб-сервером, на котором работает PHP, внутри процесса, вызов setlocale в одном потоке повлияет на другие потоки.

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

  • Язык, который вы устанавливаете в PHP, влияет на такие функции, как printf или даже strtotime. Вы наверняка получите немного «странных» числовых форматов, поступающих в ваш бэкэнд-код, если вы работаете с gettext / setlocale

Используйте любое из других решений, разработанных Эраном, или быстро сделайте что-нибудь самостоятельно (PHP-массивы работают очень хорошо). Также используйте расширение intl, которое будет в ядре PHP 5.3 для форматирования чисел и дат и сопоставления.

Использование gettext в веб-решении снова и снова показало, что это похоже на открытие банок с червями.

4 голосов
/ 19 января 2009

Я бы предложил Gettext .

Это кроссплатформенный, с открытым исходным кодом, широко используемый и доступный для php: PHP Gettext

1 голос
/ 19 января 2009

Я построил многоязычную CMS. Весь контент хранился в базе данных с основными таблицами для общих (не зависящих от языка значений) и отдельными таблицами для конкретного языка.

Например, давайте представим хранение продуктов - у нас есть таблица «products» (содержит уникальный_идентификатор, дату создания, URL-адреса изображений и т. Д.) И таблица «product_local» (содержит поля для любого языка).

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

1 голос
/ 19 января 2009

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

МЕТОД 1

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

Например, у меня будет ассоциативный массив текста с индексами, определяющими, какой текст:

$text['english']['welcome'] = "Welcome to my site. blah blah blah";
$text['english']['login'] = "Please enter your username and password to login";

И, возможно, установите ваш язык с помощью константы или переменной конфигурации.

МЕТОД 2

Я создал два сайта с одинаковыми структурами и внутренними объектами, но каждый из них использовал свою базу данных и обслуживался отдельно: data_french, data_english.

0 голосов
/ 30 ноября 2013

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

Наиболее эффективный подход для многоязычного сайта PHP

0 голосов
/ 27 декабря 2011

Вы можете найти эту статью на интересную тему:

http://cubicspot.blogspot.com/2011/12/cross-platform-multilingual-support-in.html

Автор отстаивает стратегию "ленивого программиста" - делайте это только в том случае, если вам нужны многоязычные материалы - и, похоже, рекомендует использовать массив PHP с кодами языка IANA. Эта статья довольно расплывчата.

...