gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:52:44 25 4
gpt4 key购买 nike

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

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

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

参见:the i18n extension example这并没有真正告诉我很多关于语言文件本身的信息。

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

最佳答案

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

现在讨论您问题的更具体部分,但请确保您至少了解 gettext 的基本原理:

Where should they [the language files] go

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

, how should they look and what should they be named?

语言文件应命名如下:

文本域-区域设置.po/mo

名为 myAppPhp 的文本域和 fr_FR 区域设置的示例:

myAppPhp-fr_FR.po
myAppPhp-fr_FR.mo

I have been trying with .po/.mo files, no luck.

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

关于php - Twig:工作国际化 (i18n) 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com