Я создаю веб-сайт, и он должен быть на 7 языках? Мне было интересно, можно ли применить хорошую практику для получения многоязычного PHP-скрипта?
Также, как вы думаете, должен ли я хранить его в DB, XML или в PHP-файле?
Существует множество вариантов для хранения переводов:
Я предлагаю вам использовать что-то вроде Zend_Translate, которое поддерживает несколько адаптеров и обеспечивает базовый подход к внедрению переводов в ваше приложение.
В отличие от daddz, я бы рекомендовал не использовать gettext в PHP:
Настройка локали выполняется для каждого процесса. Это означает, что, когда вы работаете с многопоточным апачем или любым другим многопоточным веб-сервером, работающим с PHP в процессе, вызов setlocale в одном потоке будет влиять на другие потоки.
Поскольку вы не можете знать, какой поток / процесс обрабатывает этот запрос, вы столкнетесь с ужасными проблемами с пользователями, которые периодически получают неправильный язык.
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