【问题标题】:CakePHP Localization issueCakePHP 本地化问题
【发布时间】:2012-06-07 11:20:48
【问题描述】:

我按照 cakePHP 书来配置我网站的 i18n 和 l10n。假设我有英语、西班牙语、德语。

浏览器通常有一个按优先级排序的语言列表。如果列表的第一个位置出现了在我的站点上配置的语言,则一切正常。但是,例如,如果列表是这样的:法语、德语、西班牙语、英语;本地化失败并显示我在代码中使用的 i18n 标识符。

在这种情况下,我希望该页面显示为德语翻译,因为在列表中是我的网站可以提供的第一种语言。这将是一个完美的解决方案,但至少我希望如果我的页面不知道浏览器列表的第一种语言,我可以配置默认语言(例如英语)。

我能做些什么来实现这一点,代码应该放在哪里?

提前谢谢你。

【问题讨论】:

  • 如果您查看 i18n 表,是否有其他语言的条目?您是否保存了所有不同语言的值?另外,CakePHP 还有另一种“本地化”方法,即 __() 函数,我想你的意思是翻译
  • 检查路由,如果 url Router::connect 中没有语言,则默认添加英语
  • @Katai,我对这件事很陌生,什么是 i18n 表?我在代码中使用 __() 函数来定义要翻译的内容,然后按语言创建 .pot 和一个 .po 文件。然后,如果定义了第一种浏览器语言,则应用程序会自动执行 l10n。我在几分钟前发布的答案中解释了我所做的第一次代码修改。
  • @JapanPro,我没有使用像 en.<url>.com 这样的网址,我只是希望通过浏览器配置识别该语言。
  • @davidgnin 这让我感到困惑 - l18n 表用于翻译, __() 用于本地化。您必须通过控制台提取 __() 内的所有“字符串”,然后获得 .pot / .po 文件。在那里,您需要一个编辑器,例如 poedit.net - 这样,您可以创建不同的语言 .po / .mo 文件 - 请参阅我的答案了解详情

标签: php cakephp localization internationalization


【解决方案1】:

好吧,我在app/Config/bootstrap.php做了下一个:

$browserLangs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$find = 'eng';
foreach($browserLangs as $browserLang) {
    $lang = substr($browserLang,0,2);
    var_dump($lang);
    if ($lang == 'en') {
        $find = 'eng';
        break;
    } else if ($lang == 'es') {
        $find = 'spa';
        break;
    } else if ($lang == 'ca') {
        $find = 'cat';
        break;
    }
}
Configure::write('Config.language', $find);

在接受语言标题中,我们有一个包含浏览器所有语言列表的字符串。然后我将英语定义为默认,并尝试在列表中找到其他语言,当我得到一个时打破了。

我把它作为答案是因为它有效,但它很脏,因为:

  1. 不知道这是不是最好的方式,最好的地方,
  2. 这是非常静态的,您必须逐个放置语言,当您添加另一种语言时,您必须更新算法。最好的解决方案将自动检查蛋糕应用程序上定义的语言环境,我不知道如何要求。
  3. 也许这段代码应该定义为插件、组件或类似的东西。

也许有人可以改进这一点或发布另一个更好的解决方案作为新答案。

【讨论】:

    【解决方案2】:

    您必须使用编辑器(例如:http://poedit.net)打开创建的 .po 文件,您可以在其中创建多个语言版本。

    不要忘记更改每种语言的复数形式,德语是nplurals=2; plural=(n != 1),这里有一个列表:http://translate.sourceforge.net/wiki/l10n/pluralforms

    之后,您必须将语言文件保存在app/Locale/deu/LC_MESSAGES/...

    您应该在该文件夹的末尾有一个 default.mo 和 default.po 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2012-03-26
      • 1970-01-01
      • 2011-02-18
      • 2011-07-11
      • 2011-02-23
      相关资源
      最近更新 更多