【问题标题】:Custom :language cakephp自定义:语言 cakephp
【发布时间】:2015-02-20 14:57:17
【问题描述】:

我们成功建立了一个多语言(NLD/DEU/ENG) cakephp 网站(cakephp 2.3.6)。现在我们的客户希望我们将比利时语言添加到他的网站。 code list 不包含比利时语言的代码。它是 dut(荷兰语;佛兰芒语)或 fre(法语)。

但是没有这个网址:example.com/dut/controller/action
我们想要这样:example.com/bel/controller/action

是否可以使用 'dut',但在 url 中显示 'bel'?或者有没有办法添加“自定义”语言?

【问题讨论】:

  • 没有比利时语这种东西,但主要是法语和荷兰语的比利时变体,然后是德语。我很确定,如果你定义了一个不存在的变体(比如 bel),如果你也提供了必要的翻译文件,蛋糕也不会抱怨。但是如果你决定bel=dutch,另一半比利时人会被冒犯:)

标签: cakephp multilingual cakephp-2.3


【解决方案1】:

您需要使用语言的标准代码,比利时语言不存在(有三种官方语言,荷兰语、法语、德语)。但如果您有针对特定国家/地区的本地化内容,则应使用国家/地区代码。

有些国家有不止一种官方语言(比利时、瑞士、西班牙、波斯尼亚和黑塞哥维那……)。在这种情况下,您应该使用语言国家代码的组合,如您所见 here

您的网址应如下所示:

适用于德国国家和语言

www.example.com/de/

荷兰语和荷兰语

www.example.com/nl/

比利时和官方语言

www.example.com/nl-be/
www.example.com/fr-be/

在您的 AppController beforefilter 中放置一个 switch 语句,您可以在其中指定语言和本地化内容的规则

编辑(添加示例)

    AppControler.php
public function beforeFilter()
{
    switch ($this->params['lang'])){
        // for nederland
        case: 'nl':
            Configure::write('Config.language', 'dut');
            $this->set('for_country','nl');
            break;
        // for germany
        case: 'de':
            Configure::write('Config.language', 'deu');
            $this->set('for_country','de');
            break;
        // for belgium / dutch speakers
        case: 'nl_be':
            Configure::write('Config.language', 'dut');
            $this->set('for_country','be');
            break;
        // for belgium / french speakers
        case: 'nl_fr':
            Configure::write('Config.language', 'fr');
            $this->set('for_country','be');
            break;
        // default english
        case: 'en':
            Configure::write('Config.language', 'eng');
            $this->set('for_country','us');
            break;
    }
}

PostsController.php

public function index ()
{
    // find all posts for country, example only content for Belgium in french
    // example.com/nl_fr/posts
    $options = array(
        'conditions' => array(
            'Post.localized' => $for_country
        )
    );
    $posts = $this->Post->find('all',$options);
    .......
}

【讨论】:

  • 说话变体的代码应该用下划线代替虚线,即nl_be而不是nl-be
  • @user221931 “口语变体的代码应该加下划线”谁说的?
  • @ndm,它是由 ICU 某处定义的。我不确定这是强制性的还是只是建议,但这是我在任何地方都看到的方式。我来自手机,所以这是来自记忆,如果我弄错了,请随时纠正我。
  • @user221931 我不熟悉这方面的 ICU 规范,但快速浏览一下,它们似乎更多地是关于如何明智地处理 API,而不是关于如何表达代码在网址中。请注意,CakePHP 内部将炒作变体映射到下划线变体,请参阅L10n::$_l10nCatalog!
  • 感谢您的回复!我们一直认为 Cakephp 使用 3 位代码来表示语言而不是 2。根据以前的经验,如果我们不使用代码列表中所述的 3 位代码,Cakephp 将无法识别我们的 .po 文件。我们不知道如何实现 2 位代码。你能举个例子吗?
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多