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;
}
?>
И внутри 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 %}
Ответы
Ответ 1
Расширение twig i18n основано на gettext. Итак, прежде всего все, что связано с gettext, применяется. Вы обнаружите, что это описано здесь: Gettext Docs.
Итак, теперь к более конкретным частям вашего вопроса, но, пожалуйста, убедитесь, что вы поняли основные принципы с помощью gettext:
Где они [языковые файлы] идут
В каталог, зарегистрированный для текстового домена.
как они должны выглядеть и как их назвать?
Языковые файлы должны иметь имя:
текст-домен -
локалью .po/mo
Пример для текстового домена с именем myAppPhp
и fr_FR
locale:
myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo
Я пытаюсь с файлами .po/.mo
, не повезло.
.po/.mo
звучит хорошо для меня, возможно, вы просто пропустили путь, куда их переместить, или вы забыли добавить текстовую область впереди.
Ответ 2
Я пробовал все возможное в slim 3, но ничего не работало, только slim 2, поэтому я создал свой собственный путь. В основном система обнаруживает язык из браузера и загружает правильный файл перевода, более подробную информацию на картинке:
![мой способ решить]()