我如何使用ResourceBundle :: getLocales()?

时间:2014-06-10 11:16:33

标签: php locale resourcebundle icu

鉴于我有一个目录/locales,其文件root.reses.res已经从文本文件中生成(使用genrb),如下所示:

档案:root.txt

root:table {
    test:string { "My test text" }
}

档案:es.txt

es:table {
    test:string { "Mi texto de prueba" }
}

当我运行以下代码时:

<?php
$bundleName = 'locale';
$resourceBundle = new ResourceBundle('es', $bundleName);
echo join("\n", $resourceBundle->getLocales($bundleName));

我应该看到:

es
root

然而,代码产生:

Warning: join(): Invalid arguments passed...

这是因为$resourceBundle ->getLocales($bundleName)返回bool(false),但运行以下代码用于区域设置 es

<?php
$bundleName = 'locale';
$resourceBundle = new ResourceBundle('es', $bundleName);
echo ($resourceBundle->get('test') . "\n");

正确输出:

Mi texto de prueba

运行locale root

<?php
$bundleName = 'locale';
$resourceBundle = new ResourceBundle('root', $bundleName);
echo ($resourceBundle->get('test') . "\n");

正确输出:

My test text

要使getLocales()有效,我需要做些什么?

1 个答案:

答案 0 :(得分:0)

因此,像往常一样,PHP手册对此并不清楚。但是,ICU Web site是:

  

资源包是一组提供从键到值的映射的对。给定的程序可以有不同的资源包集合;一组用于错误消息,一组用于菜单,等等。但是,可以组织程序以将其所有资源包组合成单个相关集。

     

该组被组织成一个树,其中包含&#34; root&#34;在顶部,第一级语言,第二级国家,以及低于这些级别的其他变体。该集必须包含一个根,该根具有访问资源包的程序可以使用的所有密钥。

我会在测试时返回更新。