PHP, Smarty и GetText. Заметка
Исторически сложилось что на некоторых сайтах шаблонизатором у меня стоит 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
Комментировать