我使用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 in ... _config.php
任何想法出了什么问题?谢谢
从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', ));