Каков наилучший способ создания «многоязычного» скрипта в php?

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

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

Также, как вы думаете, должен ли я хранить его в DB, ​​XML или в PHP-файле?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

МЕТОД 1

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

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

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

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

СПОСОБ 2

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

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

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

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

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

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