Twig: пример работающей интернационализации (i18n) - PullRequest
12 голосов
/ 28 июля 2011

Ищу рабочий пример i18n для Twig (движок шаблонов).

Документация немного скудна, когда дело касается языковых файлов.Куда они должны идти, как они должны выглядеть и как их следует назвать?Я пытался с файлами .po / .mo, не повезло.

Если бы кто-то мог указать мне правильное направление ...

См .: пример расширения i18n который мало что говорит мне о самих языковых файлах.

Примечание: я хочу использовать Twig отдельно, а не как часть Symfony.

Вот мой php-файл:

 <?php
header('Content-Type: text/html; charset=utf-8');

$vars = array();
foreach($_POST as $key => $value) {
    $vars[$key] = json_decode(utf8_encode(urldecode($value)));
}

/* Prepare Twig template enginge */
require_once './lib/Twig/Autoloader.php';
Twig_Autoloader::register();

$loader = new Twig_Loader_Filesystem('./templates');
$twig = new Twig_Environment($loader, array(
    //'cache' => './cache',
    'cache' => false
));

/* i18n */
$twig->addExtension(new Twig_Extensions_Extension_I18n());

$availableLanguages = array(
    'en' => 'en_EN',
    'de' => 'de_DE',
    'default' => 'de_DE'
);

// Set language
$locale = array_key_exists($_GET['lang'], $availableLanguages) ? $availableLanguages[$_GET['lang']] : $availableLanguages['default'];
putenv('LC_ALL='.$locale);
setlocale(LC_ALL, $locale);

// Specify the location of the translation tables
bindtextdomain('kalkulator', 'includes/locale');
bind_textdomain_codeset('kalkulator', 'UTF-8');

// Choose domain
textdomain('kalkulator');

$template = $twig->loadTemplate('print.tpl');

$html = $template->render($vars);

switch($_GET['action']) {
    case 'mail':

    break;
    default:
        echo $html;
    break;
}


?>

А внутри include / locale у меня есть следующие файлы:

-rw-r--r--  1 user group  670 Jul 28 10:17 kalkulator-de_DE.mo
-rw-r--r--  1 user group  982 Jul 28 10:22 kalkulator-de_DE.po
-rw-r--r--  1 user group  688 Jul 28 10:38 kalkulator-en_EN.mo
-rw-r--r--  1 user group 1004 Jul 28 10:38 kalkulator-en_EN.po

А внутри файла print.tpl я использую теги, чтобы указать, какие части нужно переводить:

{% trans %}
Text to be translated
{% endtrans %}

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Расширение twig i18n основано на gettext.Поэтому в первую очередь применимо все, что связано с gettext.Здесь вы найдете документально подтвержденное: Gettext Документы .

Итак, теперь перейдем к более конкретным частям вашего вопроса, но, пожалуйста, убедитесь, что выпо крайней мере, понял основные принципы с gettext:

Куда они [языковые файлы] должны идти

В каталог, который был зарегистрирован для text-домен .

, как они должны выглядеть и как их называть?

Языковые файлы должны иметь следующие имена:

text-domain - locale .po/mo

Пример текстового домена с именем myAppPhp и fr_FR locale:

myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo

Я пытался с .po/.mo файлами, не повезло.

.po/.mo звучит хорошо для меня, может быть, вы только что пропустили путь, по которому их перемещать, или вы забылидобавить текстовый домен впереди.

0 голосов
/ 04 декабря 2017

Я попробовал все возможное в slim 3, но ничего не получалось, только slim 2, поэтому я создал свой собственный путь. В основном система определяет язык из браузера и загружает правильный файл перевода, подробности на картинке:

my way to solve

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...