gpt4 book ai didi

php - 如何创建用于 PHP 的 ICU 资源文件?

转载 作者:可可西里 更新时间:2023-11-01 13:47:30 25 4
gpt4 key购买 nike

我按照 BryanH 在此处的回答中的说明进行操作:gettext() equivalent in Intl library?并尝试使用 php-intl 实现本地化(翻译),但我一直遇到这个人遇到的同样问题:ResourceBundle returns NULL without any errors being raised

他提到他使用工具(我不知道如何工作)创建了 dat 文件,而前一个答案中的人似乎只是在使用扩展名为 .res 的 txt 文件。

我如何正确地使用 php-intl 和 ResourceBundle 实现本地化,我做错了什么?

目标是拥有不同语言的各种数据文件,这样我就可以做类似的事情

$t = new Translator();
$t->setResource(new \ResourceBundle('es', 'locales_folder/'));
$t->echo("somestring"); // "el stringo"

..就像第一个答案中的人一样。此外,目标是拥有易于编辑的文件,这样我就可以将它们提供给翻译人员进行修复、更新等。我意识到我可以通过一个简单的文本文件轻松地使用自定义解决方案来做到这一点,该文本文件在第一次请求时被解析并保存到 memcache 中,然后它会持续存在并从中获取服务而无需重新读取 .dat 文件,但我宁愿采取此处建议的路线。

编辑:只是为了让它在那里 - 我成功地用 gettext 实现了同样的事情并且它非常容易 - 除了一个在 linux 系统中持续存在的错误(http://www.php.net/manual/en/book.gettext.php#91187) - 但我想依赖如果可能,更现代和包罗万象的国际扩展。

最佳答案

关于如何为 intl PHP 扩展创建和使用 .res 文件的问题,我可以提供一个解决方案,但是我没有速度和使用方面的经验生产系统,您必须亲自看看这是否可以替代 gettext

在我看来,gettext 的一大好处是可以提取要翻译的字符串的附加工具,例如 xgettext。尽管如此,在您的用例中使用资源可能更有用。

要生成.res 文件,您需要使用程序genrb,它是bundled with ICU . (例如,当使用 brew install icu4c ( see this tutorial ) 在 OSX 上安装 ICU 时,您可以在 /usr/local/Cellar/icu4c/*/bin/genrb (将 * 替换为版本号))

接下来,您为每个语言环境准备一个文件。在本示例中,我们针对两种语言(德语和西类牙语)执行此操作。

$ cat de.txt
de {
hello { "Hallo" }
}

$ cat es.txt
es {
hello { "Hola" }
}

$ genrb *.txt
genrb number of files: 2

您现在有 2 个附加文件 de.reses.res,您现在可以在 PHP 中访问它们

<?php
foreach (array("de", "es") as $locale) {
$r = ResourceBundle::create($locale, __DIR__);
echo $r["hello"], "\n";
}

输出

Hallo
Hola

所以本质上,您可以将那些 *.txt 文件交给您的翻译人员,并使用 genrb 为 PHP 准备它们。

最后,您尝试编写的类的一个小示例:

<?php
class Translator {
private $resourceBundle = null;

public function __construct(\ResourceBundle $r) {
$this->resourceBundle = $r;
}

public function __get($string) {
return $this->resourceBundle[$string];
}
}
$t = new Translator(new \ResourceBundle('es', __DIR__));
echo $t->hello;

关于php - 如何创建用于 PHP 的 ICU 资源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115496/

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