Jos*_*ura 12 php internationalization twig
我正在为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;
}
?>
Run Code Online (Sandbox Code Playgroud)
内部包含/ 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
Run Code Online (Sandbox Code Playgroud)
在print.tpl文件中,我使用标签来指定要翻译的部分:
{% trans %}
Text to be translated
{% endtrans %}
Run Code Online (Sandbox Code Playgroud)
twig i18n 扩展基于 gettext。因此,首先与 gettext 相关的所有内容都适用。您可以在此处找到该记录:Gettext Docs。
现在到您问题的更具体部分,但请确保您至少了解 gettext 的基本原理:
他们[语言文件]应该去哪里
进入已为text-domain注册的目录。
,它们应该是什么样子以及应该命名什么?
语言文件应命名如下:
文本域-区域设置.po/mo
名为的文本域myAppPhp和fr_FR区域设置的示例:
myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用
.po/.mo文件,但没有运气。
.po/.mo对我来说听起来不错,也许您刚刚错过了移动它们的路径,或者您忘记在前面添加文本域。
| 归档时间: |
|
| 查看次数: |
8826 次 |
| 最近记录: |