限制cms中的语言

时间:2013-11-29 09:51:58

标签: silverstripe

我使用silverstripe 3.1 我想限制CMS中下拉菜单中提供的语言(仅限德语​​和英语)。所以我说 我的mysite / _config.php中的以下代码

i18n::set_locale('de_DE');
$allowed_locales = array(
   'de_DE' => array('Deutsch', 'Deutsch'),
   'en_EN' => array('English', 'English')
);
i18n::$common_locales = $allowed_locales;

冲洗= 1我得到以下错误: 致命错误:无法访问私有财产i18n :: $ common_locales ... _config.php

任何想法出了什么问题? 谢谢

2 个答案:

答案 0 :(得分:7)

3.1截至3.1大多数静态php变量都是私有的。这意味着您无法再访问这些 这个api更改的原因是它们现在由配置层缓存(这也是为什么你必须在更改类中的私有静态之后立即刷新= 1,例如使用private static $db

如果您想更新配置层中的内容,可以执行以下操作:

 Config::inst()->update('CLASS', 'FIELD', $value);

你可以使用config update来覆盖常见的语言环境(类将是'i18n',而field将是'common_locales'):

Config::inst()->update('i18n', 'common_locales', $array);

注意:如果要完全覆盖现有配置,则必须先执行remove()

Config::inst()->remove('i18n', 'common_locales');
Config::inst()->update('i18n', 'common_locales', $array);

但是,如果您正在使用可翻译模块并且想要限制可翻译语言的数量,那么已经有一种更好的内置方式:

// in your _config.php
i18n::set_locale('en_US');
Translatable::set_allowed_locales(array(
    'de_DE',
    'en_US',
 ));

答案 1 :(得分:1)

通过YAML配置:

i18n:
  common_locales:
    nl_BE:
       name: Dutch (Belgium)
       native: Nederlands
    fr_BE:
      name: French (Belgium)
      native: Francais