我有一些关于cakePHP的问题,我花了很长时间用谷歌搜索解决方案,因为我没有发现任何我不确定我采取了正确的方法。
所以,我有一个菜单/站点地图,它是部分静态(xml文件 - i10n)和部分动态(数据库i18n)
我被要求缓存菜单以便:
如果每种语言不存在,组件会为整个菜单创建一个缓存xml文件
帮助程序创建一个缓存html格式,该缓存html是从组件创建的xml文件格式化的
布局使用帮助程序在页面中添加菜单
问题:
如何从帮助程序和组件中获取可用语言列表?
这是
$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();
无法理解为什么......
答案 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
中实际有翻译的语言。