0

我在使用 Kohana 3.3 中的 I18n 功能时遇到问题

我的 I18n 文件夹结构如下

i18n/

  • zh/
    • 我们.php
  • zh/
    • .php
    • cn.php

我遇到的问题是,在我阅读的任何地方都应该可以像这样加载语言,i18n::lang('en-us');因为 api 声明它会在“-”字符上爆炸字符串,因此默认目标语言“en-us”会导致搜索以下文件:

/application/i18n/en.php
/application/i18n/en/us.php

它似乎只在我使用i18n::lang('en/us');而不是加载正确的语言文件时i18n::lang('en-us');

4

1 回答 1

1

为我工作。这些调用对 Kohana 来说是等价的:

I18n::lang('en-us'); 
I18n::lang('en us');
I18n::lang('en_us');

当您使用 'en/us' 值时,I18n 不会加载i18n/en.php文件,只会加载i18n/en/us.php.

对于您的问题,我只能提出一个原因:

您正在使用__()函数,它忽略默认语言的翻译(“en-us”是硬编码的)。因此,当您调用 I18n::lang('en/us') 时,默认语言仍然是英语,但它与 'en-us' 不同。小技巧:)

您可以使用文件扩展 I18n 类APPPATH/classes/I18n.php(标准 Kohana 方式),并为该功能添加您自己的版本:

// translate always!
function __($string, array $values = NULL, $lang = 'en-us')
{
    $string = I18n::get($string);

    return empty($values) ? $string : strtr($string, $values);
}
于 2012-11-02T07:53:15.797 回答