![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
race1 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
Привет!
Вот захотелось использовать смарти для сайта. Сайт планируется многоязычным, там внутри всё переводится через gettext. Появилась проблема как бы так локализовать и шаблоны смарти, очень желательно используя тот же gettext, что бы все локализованные ресурсы хранились в одном месте. Простейший способ - делать несколько шаблонов на разных языках, очень не нравится. Ещё есть способ через конфиги. Тоже не очень, ресурсы будут в .mo файлах и конфигах. Прикрутить gettext через пользовательскую функцию не получилось. Пробовал найти в интернете что-то про локализацию смарти, не нашёл почти ничего полезнго. Как это можно сделать? Спасибо ![]() А, да, единственный вариант который мне видится - делать весь перевод в скриптах, а в шаблоны отдавать через переменные. Но хотелось бы чего-нибудь не такого ужасного ![]() Это сообщение отредактировал(а) race1 - 22.10.2008, 18:37 |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
||||
|
||||
race1 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
А как? Я написал пользовательскую функцию gettext, могу вызывать её из шаблонов {gettext text='hello'}, но я не могу выдрать стандартными средствами это hello из шаблона. Только если писать свой парсер, чего не хотелось бы...
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
||||
|
||||
race1 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
Я пробовал делать так, но почему-то парсер ругается на ошибки в tpl файле, poedit который. Думал что есть что-то готовое, видимо придётся писать велосипед :(
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
||||
|
||||
race1 |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
Нет, я всё это выдумал... ![]() Шаблон:
Функция:
Все константы, которые д.б. переведены находятся в шаблоне, который у меня не получилось распарсить стандартными средствами, даже если писать "{gettext('Hello')}". Кроме написания своего парсера, который будет выдёргивать строки из шаблона, выхода не вижу. |
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
кроме виндового блокнота есть куча-куча редакторов, часть из которых использует поиск/замену с использованием регулярных выражений. так можно вполне заменить все "gettext('что-то там внутри');" на "{gettext text:"что-то там внутри"}". ну, ты привел код объявления функции и код использования в шаблоне. кода подключения функции к smarty(ну, вызов smarty->register_function) я не вижу. выполнение правил именования функций не подключит её автоматически. |
|||
|
||||
Валерия |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: 1 Всего: 8 |
Ввобщем
index.php
templates/index.tpl
ru.txt
en.txt
Вуаля) Файлы языков компилируются только при первом запуске, или при их изменении, поэтому работает довольно шустро ![]() Это сообщение отредактировал(а) Валерия - 23.10.2008, 16:10 |
||||||||
|
|||||||||
race1 |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
Да, это можно сделать, но главная проблема в том, что стандартный парсер не может распарсить шаблон Smarty (.tpl) и сгенерировать файл для gettext! Функция подключится автоматически, потому что там всё сделано как раз по правилам. Я даже проверял! Работает! И менял тело функции - тоже работает! И пробовал называть функцию не по правилам - не работает! Валерия, спасибо, но тогда локализованные ресурсы будут в двух местах - для gettext отдельно, для шаблона - в конфигах. Хотелось бы что бы это было в одном месте... ![]() В общем видимо пока наиболее вероятный вариант - преобразовывать все шаблоны так, что бы там было не
|
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
race1, наверное, я тебя абсолютно не понял. у тебя есть:
а) нелокализованный шаблон б) локализация с использованием gettext, но ещё нет шаблона в) шаблона нет вообще; нет локализации вообще какой из вариантов? |
|||
|
||||
race1 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
Есть: 1. скрипты на пхп которые локализуются через gettext, т.е. перед отдаванием строк в Smarty они сначала переводятся 2. шаблоны, статические тексты которых тоже надо как-то локализовать, хотелось бы через gettext тоже Нашёл тут плагин один к Smarty, smarty-gettext, там как раз есть парсер который выдерает все тексты нового блока {t} и записывает их в c файл, что бы потом эти тексты добавились поедитом. Плюс блочный плагин {t} который и делает перевод. Наверное его и буду использовать. Только дата смущает, 2005 года плагин, плюс ещё и бета ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Libraries | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |