PHP, Smarty и GetText. Заметка

| | Комментарии (0) | TrackBacks (0)

Исторически сложилось что на некоторых сайтах шаблонизатором у меня стоит Smarty. Внезапно наступил момент, когда захотелось ввести мультиязычность в это безобразие.
Если делать, то делать нужно правильно — через gettext (и с помощью Poedit), а не через текстовые конфиги вида:

title = "Hello"

Принципы работы с gettext хорошо расписаны на phpclub'е.
Главная «трудность» в связке Smarty+GetText — отсутствие встроенного парсера шаблонов Smarty в GetText.
Решается следующим образом:

Скачиваем gettext_smarty_parser.rar и распаковываем куда-нибудь. У меня оно лежит в C:\Program Files\Poedit\bin.
Открываем и, при необходимости, правим путь до временного файла, создаваемого при работе парсера:

define('_DAT', 'C:\\Progra~1\\Poedit\\bin\\_temp.php');

Туда складваются все строки для локализации и затем скармливается GetText'у.

Далее прикручиваем к Poedit этот парсер:

Параметры → Парсеры → Создать парсер → smarty
Командная строка: php.exe -f "C:\Program Files\Poedit\bin\gettext_smarty_parser.php" %o %C %K %F
Расширения: *.tpl;
Ключевые: -k%k
Входные файлы: %f;
Кодировка: --from-code=%c.

(прим: путь к php.exe у меня забит в $PATCH)

С парсером все. Теперь с шаблонами.

Со Smarty идет block-плагин (block.t.php) для работы с gettext. В шаблоне текст под локализацию выглядит так:

{t}Text to be localized{/t}

При желании можно сделать модификатор «_» и работать таким образом:

{"Text to be localized"|_}

Код модификатора (файл «smarty_dir/plugins/modifier._.php»):
<?php
function smarty_modifier__($s) { return _($s); }
?>

Парсер переделан под оба этих варианта.

При написании кода и поста юзал инфу с lisin.ru.

0 TrackBacks

Listed below are links to blogs that reference this entry: PHP, Smarty и GetText. Заметка.

TrackBack URL for this entry: http://blog.stiff.ru/mt/mt-tb.cgi/254

Комментировать

About this Entry

This page contains a single entry by St!ff published on February 12, 2009 5:44 PM.

Dakar 2009 was the previous entry in this blog.

4CUS - Прекрасное Далеко (D'n'B mix) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Creative Commons License
This weblog is licensed under a Creative Commons License.
А тут могла бы быть реклама...