【问题标题】:How to change the language for specific view elements?如何更改特定视图元素的语言?
【发布时间】:2014-05-16 14:42:32
【问题描述】:

我正在使用翻译行为函数:__() 来翻译东西。它工作得很好。不幸的是,当我像这样更改控制器中的语言时:

Configure::write('Config.language', 'deu');

它改变了整个网站的语言:(

有没有办法只翻译特定部分? (在视图中) 例如,整个应用程序的语言是英语。但是对于一些 $this->element 我想要德语。

我的尝试:在视图中我像这样更改语言:

<?php
    Configure::write('Config.language', 'deu');
    echo __("Hello World");
?>

只有当 l18n.php 中的 CakeSession::read 部分被删除时才有效:

    if (empty($language)) {
        // if (CakeSession::started()) {
        //  $language = CakeSession::read('Config.language');
        // }
        if (empty($language)) {
            $language = Configure::read('Config.language');
        }
    }

我可以重写 l18n.php,让它对我有用,但它是核心,我不想碰它。有没有办法让 CakeSession::write 在视图中? cakephp 文档说it is not possible

【问题讨论】:

  • 我确定这是重复的 - 但有什么能阻止您将语言配置::编写为 deu,然后在完成后返回?
  • 但是当我在控制器中配置::write 时,它​​将翻译所有内容,整个应用程序。我想翻译视图中的特定元素(包含在 $this->element() 中)
  • 我也在视图中尝试过,但语言不会改变。 :(
  • 您的尝试不存在问题 - 除非在会话 that just works 中定义了语言。
  • 是的,它应该可以工作,但它不是,如果我在视图中设置语言并打印 l18n.php 中的 $language 不会改变。只有当我更改控制器中的语言时它才会改变,而不是视图。

标签: cakephp


【解决方案1】:

您可以在元素文件夹中创建一个以所需语言命名的文件夹,然后调用它。

以巴西葡萄牙语为例:&lt;?php echo $this-&gt;element('pt_BR/your_element'); ?&gt;

【讨论】:

  • 是的好主意。但是我所做的是通过在供应商目录中使用我自己的 php 并使用命名空间来覆盖翻译函数(下划线)。效果很好。
猜你喜欢
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多