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

Я создаю веб-приложение, которое использует LAMP и платформу шаблонов Smarty. На веб-сайте будет много статического контента (страница о нас, предупреждения об ошибках, электронные письма с подтверждением и т. Д.).

Веб-приложение должно поддерживать несколько языков. Соответствует ли следующий подход?

1) Вся статическая копия на страницах шаблона Smarty (html-страницы) будет заменена вызовами плагинов smarty, таких как {lang file = 'about.xml' getTerm = 'title'}, который возвращает строку для тега title на соответствующем языке

2) Файл about.xml – это XML-документ на веб-сервере, который действует как словарь с несколькими языками. Таким образом, он будет иметь xml-узлы, такие как

<term value="title"> <en>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; is a great site</en> <fr>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; c'est website magnifique</fr> <ch>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; complex looking chinese characters I don't udnerstand</ch> </term> <term value="signupmessage"> <en>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; great deals!</en> <fr>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; magnifique deals!</fr> <ch>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; complex looking chinese characters I don't udnerstand</ch> </term> 

3) Структура URL для сайта будет http://mywebsite.com/language/index.php . Для этого мой веб-сервер будет иметь символические ссылки, такие как ln -s ./en ./ чтобы http://mywebsite.com/en/index.php ln -s ./en ./ на ту же страницу php, что и http://mywebsite.com/fr/index.php , но я проверю url для настроек языка. Я надеюсь, что Google проиндексирует обе версии сайта.

Это хороший подход? Является ли xml лучшим форматом для хранения контента на разных языках, хотя он имеет htmlentity закодированные html-теги? Я что-то пропустил?

Не уверен в деталях вашего вопроса, но вы можете взглянуть на Zend_Translate .

XML – это формат контейнера, и это использование не так уж плохо. Преимущество этого метода заключается в том, что он является относительно читаемым человеком, за исключением HTML-объектов. Вы можете попробовать использовать разделы CDATA для этого. Одним из преимуществ использования XML для этого является то, что вы можете использовать DTD для проверки того, что все языки имеют переводы для всех ключей. Убедитесь, что вы кодируете файл с помощью UTF-8 или UTF-16, и это, вероятно, помогает, если вы помещаете кодировку в верхнюю часть файла. Я бы рекомендовал UTF-8.

Что касается того, как вы загружаете данные XML и включаете его в страницу, я не знаю «smarty», но общий подход звучит разумно. Единственный недостаток, который я вижу, заключается в том, что вы должны выпустить все переводы одновременно (трудно избежать этой проблемы).

Одна вещь, которую я отмечаю, это то, что вы используете ch как код языка для китайцев. Вы должны использовать zh . Это код ISO для него. ch – это что-то другое.