【问题标题】:Using the I18n functionality in Kohana 3.3在 Kohana 3.3 中使用 I18n 功能
【发布时间】:2012-11-02 06:38:30
【问题描述】:

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

我的I18n文件夹结构如下

i18n/

  • zh/
    • us.php
  • zh/
    • hk.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'); 时,它似乎只加载正确的语言文件

【问题讨论】:

    标签: kohana kohana-3


    【解决方案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' 不同。小技巧:)

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

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

    【讨论】:

    • 对不起,我对这一切还是很陌生。所以它就像this?我把它放在APPPATH/classes/I18n.php?
    • 哦等等,我傻了哈哈写的时候太累了,不知道为什么我认为这是一个类方法。
    • 它不是类方法,但 Kohana 将 __() 函数包含在与 I18n class 相同的文件中,因此如果将其放在其他位置,请确保手动包含该文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多