Умный и gettext

Какой самый простой способ использовать gettext в сочетании с smarty, есть ли какая-нибудь симуляционная функция, доступная в php: _('hello world');?

Спасибо,


person Maurits Meester    schedule 06.10.2011    source источник
comment
Просто мысль: обычно в smarty можно использовать любую функцию php в качестве модификатора. Разве что-то вроде {$var|gettext} не сработает? К моменту выполнения кода smarty все настройки локали должны быть выполнены.   -  person Aleks G    schedule 06.10.2011


Ответы (5)


Мне действительно не хватало поддержки Smarty для (n) gettext. И хотя существующие плагины, кажется, справляются со своей задачей, я все же подумал, что стоит попробовать.

Я только что выпустил: http://code.google.com/p/smarty-gettext/

Может быть, это кому-нибудь поможет. Отзывы и т. Д. Более чем признательны.

person charly    schedule 30.11.2012


Есть много способов добиться перевода страницы с помощью Smarty.

Мой метод

Я создаю несколько .conf файлов, содержащих что-то вроде:

en.conf

hello_world = "Hello! World!"
my_name_is = "They call me"

nl.conf

hello_world = "Hallo! Wereld!"
my_name_is = "Ik heet"

fr.conf

hello_world = "Bonjour! Tout le Monde!"
my_name_is = "Ils m'appellent"

Теперь у вас есть 2 варианта:

  • Вы можете загрузить файл .conf из файла .tpl:
  • Или вы хотите, чтобы PHP обрабатывал правильный файл. (Я использую этот метод)

template.tpl (английский)

{config_load file="en.conf"}

<html>
    <body>
        <h1>{#hello_world#}</h1>
        <p>
            {#my_name_is#}
        </p>
    </body>
</html>

template.tpl (голландский)

{config_load file="nl.conf"}

<html>
    <body>
        <h1>{#hello_world#}</h1>
        <p>
            {#my_name_is#}
        </p>
    </body>
</html>

template.php (с использованием класса Smarty в PHP)

 $configFile = 'fr.conf';

 // Smarty Version 2
 $this->smarty->config_load($configFile);

 //Smarty Version 3
 $this->smarty->configLoad($configFile);

Я надеюсь, что это сработает и для вас.

person Ron van der Heijden    schedule 12.07.2013
comment
ОП спрашивает конкретно о gettext, а не о том, как сделать i18n в smarty. - person DevZer0; 26.06.2014

Пожалуйста, поправьте меня, если я ошибаюсь. Я использую Smarty 3.1, добавленный в мой проект через композитор. И похоже, что я могу выполнить любую функцию php в моем файле .tpl. Например:

<p>post_max_size: {ini_get('post_max_size')}</p>

это дает мне:

<p>post_max_size: 8M</p>

Такое поведение заставляет меня думать, что я должен уметь просто:

<p>{_("I like the way it works")}</p>

Первый тест не показывает ошибок и выводит:

<p>I like the way it works</p>

У меня еще нет файла перевода, и я не знаю, будет ли этот вызов распознан xgettext, но сейчас я проведу несколько тестов и скажу вам, работает ли он.

person steven    schedule 09.10.2015

вы можете использовать функцию модификатора Smarty, как описано здесь: https://blog.ueffing.net/post/2013/07/19/php-smarty-a-modifier-for-internationalization-tool-gettext/ (предполагается установка gettext , конечно)

person Guido K.B.W. Üffing    schedule 19.09.2016