| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Libraries > Локализация Smarty |
| Автор: race1 22.10.2008, 18:31 |
| Привет! Вот захотелось использовать смарти для сайта. Сайт планируется многоязычным, там внутри всё переводится через gettext. Появилась проблема как бы так локализовать и шаблоны смарти, очень желательно используя тот же gettext, что бы все локализованные ресурсы хранились в одном месте. Простейший способ - делать несколько шаблонов на разных языках, очень не нравится. Ещё есть способ через конфиги. Тоже не очень, ресурсы будут в .mo файлах и конфигах. Прикрутить gettext через пользовательскую функцию не получилось. Пробовал найти в интернете что-то про локализацию смарти, не нашёл почти ничего полезнго. Как это можно сделать? Спасибо А, да, единственный вариант который мне видится - делать весь перевод в скриптах, а в шаблоны отдавать через переменные. Но хотелось бы чего-нибудь не такого ужасного |
| Автор: skyboy 23.10.2008, 00:01 |
почему? мне это казалось самым очевидным, простым и действенным решением... |
| Автор: race1 23.10.2008, 05:36 |
| А как? Я написал пользовательскую функцию gettext, могу вызывать её из шаблонов {gettext text='hello'}, но я не могу выдрать стандартными средствами это hello из шаблона. Только если писать свой парсер, чего не хотелось бы... |
| Автор: skyboy 23.10.2008, 08:34 | ||||
в смысле, не можешь автоматически заменить
на
|
| Автор: race1 23.10.2008, 08:44 |
| Я пробовал делать так, но почему-то парсер ругается на ошибки в tpl файле, poedit который. Думал что есть что-то готовое, видимо придётся писать велосипед :( |
| Автор: skyboy 23.10.2008, 09:27 |
ну, так а ты пользовательскую функцию описал и подключил к СМАРТИ-то? давай-ка, ты приведешь код подключения функции и минимальный(чем меньше, тем лучше) шаблон... |
| Автор: skyboy 23.10.2008, 15:53 | ||
кроме виндового блокнота есть куча-куча редакторов, часть из которых использует поиск/замену с использованием регулярных выражений. так можно вполне заменить все "gettext('что-то там внутри');" на "{gettext text:"что-то там внутри"}". ну, ты привел код объявления функции и код использования в шаблоне. кода подключения функции к smarty(ну, вызов smarty->http://www.smarty.net/manual/ru/api.register.function.php) я не вижу. выполнение http://www.smarty.net/manual/ru/plugins.naming.conventions.php функций не подключит её автоматически. |
| Автор: Валерия 23.10.2008, 16:08 | ||||||||
| Ввобщем index.php
templates/index.tpl
ru.txt
en.txt
Вуаля) Файлы языков компилируются только при первом запуске, или при их изменении, поэтому работает довольно шустро |
| Автор: race1 23.10.2008, 17:24 | ||||||||
Да, это можно сделать, но главная проблема в том, что стандартный парсер не может распарсить шаблон Smarty (.tpl) и сгенерировать файл для gettext!
Функция подключится автоматически, потому что там всё сделано как раз по правилам. Я даже проверял! Работает! И менял тело функции - тоже работает! И пробовал называть функцию не по правилам - не работает! Валерия, спасибо, но тогда локализованные ресурсы будут в двух местах - для gettext отдельно, для шаблона - в конфигах. Хотелось бы что бы это было в одном месте... В общем видимо пока наиболее вероятный вариант - преобразовывать все шаблоны так, что бы там было не
|
| Автор: skyboy 23.10.2008, 18:25 |
| race1, наверное, я тебя абсолютно не понял. у тебя есть: а) нелокализованный шаблон б) локализация с использованием gettext, но ещё нет шаблона в) шаблона нет вообще; нет локализации вообще какой из вариантов? |
| Автор: race1 23.10.2008, 18:43 | ||
Есть: 1. скрипты на пхп которые локализуются через gettext, т.е. перед отдаванием строк в Smarty они сначала переводятся 2. шаблоны, статические тексты которых тоже надо как-то локализовать, хотелось бы через gettext тоже Нашёл тут плагин один к Smarty, smarty-gettext, там как раз есть парсер который выдерает все тексты нового блока {t} и записывает их в c файл, что бы потом эти тексты добавились поедитом. Плюс блочный плагин {t} который и делает перевод. Наверное его и буду использовать. Только дата смущает, 2005 года плагин, плюс ещё и бета |