Twig: пример интернационализации (i18n)

Я ищу рабочий пример 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; } ?> 

И внутри includes / 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 %} 

Расширение twig i18n основано на gettext. Итак, прежде всего все, что связано с gettext, применяется. Вы обнаружите, что это описано здесь: Gettext Docs .

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

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

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

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

Языковые файлы должны иметь имя:

text-domain - locale .po/mo

Пример для текстового домена myAppPhp и локализации fr_FR :

 myAppPhp-fr_FR.po myAppPhp-fr_FR.mo 

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

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

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

мой способ решить