我使用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
任何想法出了什么问题? 谢谢
答案 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