12

我正在寻找 Twig(模板引擎)的工作 i18n 示例。

当涉及到语言文件时,文档有点稀疏。他们应该去哪里,他们应该怎么看,他们应该取什么名字?我一直在尝试使用 .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;
}


?>

在包含/语言环境中,我有以下文件:

-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

twig i18n 扩展基于 gettext。所以首先所有与 gettext 相关的东西都适用。您可以在此处找到记录:Gettext Docs

所以现在到你问题的更具体的部分,但请确保你至少理解了 gettext 的基本原则:

他们[语言文件]应该去哪里

进入已为text-domain注册的目录。

,他们应该怎么看,他们应该怎么命名?

语言文件应命名如下:

文本域-语言环境.po/mo

名为的文本域myAppPhpfr_FR语言环境的示例:

myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo

我一直在尝试.po/.mo文件,没有运气。

.po/.mo对我来说听起来不错,也许您只是错过了移动它们的路径,或者您忘记在前面添加文本域。

于 2011-08-01T13:46:00.320 回答
0

我已经在 slim 3 中尝试了所有可能的方法,但没有任何效果,只有 slim 2,所以我创造了自己的方式。基本上系统会从浏览器中检测语言并加载正确的翻译文件,图片中的更多细节:

我的解决方法

于 2017-12-04T19:58:44.427 回答