Моя Реализация Локализации Интерфейса На Php

Текущее положение дел таково, что очень часто нам приходится внедрять многоязычие в свою работу.

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

Сразу хочу уточнить, что к описанному ниже варианту я пришел сам и это касается только ярлыков/статического контента.

Возможно есть такая реализация, но я с ней не знаком.

На данный момент мне известны следующие реализации:

  • В файле, предположим, ru.php есть код: $language['site_title'] = 'Заголовок сайта'; В php или smarty мы используем этот массив и отображаем текст, похожий на {$language.site_title}.

  • Использование расширения GetText (с функцией Smarty)
  • Использование smarty config (или многоязычная реализация в шаблонизаторе Quicky) (фактически, на мой взгляд, это вариации первого варианта)
  • Использование в смарте функций, обращающихся к базе данных или глобальной переменной (по сути тоже вариации на тему первого пункта)
Теперь описание моего варианта.

Есть таблица надписей (phraze_id,language_id,value), в которой хранится весь статический контент сайта, а также есть таблица языков (language_id,title).

Это таблицы, с которыми мы будем работать.

Теперь давайте посмотрим на папку шаблонов.

Есть папка, скажем, пользователи, в которой хранятся исходные шаблоны (templates/users) и есть папка временных шаблонов (tmp/users).

Теперь самый интересный момент. В оригинальных шаблонах вместо надписей пишем что-то вроде [phrase{site_title}].

При изменении заголовков в админке или через Cron (это уже частная реализация) я перегенерирую шаблоны (заменяю [phrase{site_title}] на «Заголовок сайта») и сохраняю изменённый шаблон в папке tmp/users/ru или папка tmp/users/en, в зависимости от языка.

Здесь нужно просто «подсказать» умнику, откуда брать шаблоны.

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

Теги: #php #локализация интерфейса #php

Вместе с данным постом часто просматривают: