Php Twig:工作国际化(i18n)示例

Php Twig:工作国际化(i18n)示例,php,internationalization,twig,Php,Internationalization,Twig,我正在寻找Twig(模板引擎)的i18n示例 当涉及到语言文件时,文档有点稀疏。他们应该去哪里,应该是什么样子,应该叫什么名字?我一直在尝试使用.po/.mo文件,运气不好 如果有人能给我指出正确的方向 请看:这并没有告诉我很多关于语言文件本身的信息 注意:我想单独使用Twig,而不是作为Symfony的一部分 这是我的php文件: <?php header('Content-Type: text/html; charset=utf-8'); $vars = array(); fore

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

当涉及到语言文件时,文档有点稀疏。他们应该去哪里,应该是什么样子,应该叫什么名字?我一直在尝试使用.po/.mo文件,运气不好

如果有人能给我指出正确的方向

请看:这并没有告诉我很多关于语言文件本身的信息

注意:我想单独使用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;
}


?>
在print.tpl文件中,我使用标记指定要翻译的部分:

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

twig i18n扩展基于gettext。因此,首先,与gettext相关的所有内容都适用。您可以在此处找到记录:

现在让我们来看看你问题中更具体的部分,但请确保你至少理解了gettext的基本原则:

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

进入已为文本域注册的目录

,它们应该是什么样子,应该叫什么名字

语言文件的名称应如下所示:

文本域
-
locale
.po/mo

名为
myAppPhp
的文本域和
fr\u fr
locale的示例:

myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo
我一直在尝试
.po/.mo
文件,运气不好


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

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


Twig是一个模板引擎。你对国际化有什么期望?它能处理法语模板吗?古巴的呢?我敢打赌它可以;)-所以请分享你想要的。看看我修改过的答案。Twig有一个i18n扩展,可以与gettext一起使用。此扩展是纯php和system gettext independent.hakre,感谢您的输入。我编辑了我的问题,以反映我已经做了什么(从一开始就应该这样做)。我看不出我做错了什么。我使用一个额外的autocache.php文件来缓存细枝输出,这允许我在生成的php文件上使用xgettext来创建po/mo文件。@Joseph:检查
bindtextdomain
的返回值,如果它是您期望的目录的完整路径。结果表明我使用了en_en作为区域设置。那是行不通的。我将其更改为en_GB并重命名了文件夹。现在它可以工作了,但是我不确定这是否是一个缓存问题,或者你是否真的必须提供一个有效的区域设置,而en_en是无效的。
myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo