2012-11-02 53 views
0

我有在Kohana中对国际化功能的麻烦3.3在Kohana中使用的I18n功能3.3

我的I18n文件夹结构如下

的i18n/

  • EN/
    • 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');

回答

1

适合我。这些电话都是平等的Kohana的:

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

当您使用恩/我们的价值,国际化功能将不会加载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); 
} 
+0

对不起,我仍然很新的这一切。 所以它就像[this](http://ideone.com/nuUm76)?我把它放在'APPPATH/classes/I18n.php'中? – ChaoticLoki

+0

它不是一个类方法。 http://ideone.com/J81rTY – biakaveron

+0

哦,等等,我愚蠢的我哈哈太累了,当我写这些,不知道为什么我认为这是一个类的方法。 – ChaoticLoki