12

Twig(テンプレートエンジン)の実用的なi18nの例を探しています。

言語ファイルに関しては、ドキュメントは少しまばらです。彼らはどこに行くべきですか、彼らはどのように見えるべきですか、そして彼らは何と名付けられるべきですか?私は.po/.moファイルを試してきましたが、運がありません。

誰かが私を正しい方向に向けることができたら...

参照:言語ファイル自体についてはあまり教えてくれないi18n拡張機能の例。

注:Symfonyの一部としてではなく、Twigを単独で使用したいと思います。

これが私の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 %}
4

2 に答える 2

2

twigi18n拡張機能はgettextに基づいています。したがって、まず最初にgettextに関連するすべてが適用されます。ここに文書化されていることがわかります:GettextDocs

では、質問のより具体的な部分について説明しますが、少なくともgettextの基本原則を理解していることを確認してください。

彼らはどこに行くべきか[言語ファイル]

text-domainに登録されているディレクトリに。

、それらはどのように見えるべきであり、それらは何と名付けられるべきですか?

言語ファイルには、次の名前を付ける必要があります。

テキストドメイン-ロケール.po/mo

と呼ばれるテキストドメインとmyAppPhpロケールのfr_FR例:

myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo

.po/.mo私はファイルを試してきましたが、運がありません。

.po/.mo私には良さそうです。おそらく、それらを移動するパスを見逃したか、前にテキストドメインを追加するのを忘れたのかもしれません。

于 2011-08-01T13:46:00.320 に答える