CakePHP助手和i18n

时间:2009-05-27 10:01:52

标签: cakephp internationalization multilingual

我有一些关于cakePHP的问题,我花了很长时间用谷歌搜索解决方案,因为我没有发现任何我不确定我采取了正确的方法。

所以,我有一个菜单/站点地图,它是部分静态(xml文件 - i10n)和部分动态(数据库i18n)

我被要求缓存菜单以便:

  1. 如果每种语言不存在,组件会为整个菜单创建一个缓存xml文件

  2. 帮助程序创建一个缓存html格式,该缓存html是从组件创建的xml文件格式化的

  3. 布局使用帮助程序在页面中添加菜单

  4. 问题:

    • 如何从帮助程序和组件中获取可用语言列表?

    • 这是

      $this->L10n = new L10n(); $this->L10n->lang
      

      获得实际语言的正确方法?

    • 如果我在app_controller中导入帮助器/组件而不是在每个控制器中键入它们

      class AppController extends Controller {
          var $components = array('menu', 'otherComponent');
          var $helpers = array('menuCache');
      
          function beforeFilter(){
              $this->menu->doSomething();
          }
      }
      

    我在布局

    中获得call to undefined object $html echo $html->charset();

    无法理解为什么......

1 个答案:

答案 0 :(得分:3)

您可以使用Configure::read('Config.language')。 CakePHP食谱的一部分说明:

  

当前语言环境是Configure :: read('Config.language')的当前值。 Config.language的值在L10n类中赋值 - 除非它已经设置。

I18n,负责使用__()进行翻译的班级使用Config.language,因此,除非您在bootstrap.php中覆盖它,否则该变量包含所选语言。实际上,即使你覆盖它,它仍然会包含使用过的语言(可能存在不一致,因为I10n并不真正意识到这种变化,但我从未碰到过任何变化)。

要获取语言列表,您可以使用L10n::catalog()。但是,我不确定这是你所追求的,因为它列出了CakePHP所知道的所有语言,而不仅仅是app/locale中实际有翻译的语言。