2013-11-29 4 views
2

Я использую silverstripe 3.1 Я хотел бы ограничить языки (только на немецкий и английский), которые доступны в раскрывающемся списке CMS. Поэтому я ставлю следующий код в моем MySite/_config.phpОграниченные языки в cms

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

Afer флеша = 1 я получаю следующее сообщение об ошибке: Фатальная ошибка: Не удается получить доступ к частной собственности i18n :: $ common_locales в ... _config .php

Любые идеи, что пошло не так? Спасибо

ответ

7

по состоянию на 3.1 большинство статических переменных php являются закрытыми. это означает, что вы больше не сможете их получить.
причины этого изменения апи является то, что они теперь кэшируется конфигурации слоя (это также, почему вы должны? Вровень = 1 теперь после изменения частной статики в классах, как, например, с private static $db)

если вы хотите обновить что-то в конфигурации слоя, вы можете сделать это с помощью:

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

можно использовать с помощью обновления конфигурации для перезаписи общих локали (класс был бы «i18n», и поле будет «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', 
)); 
+0

Когда я использую Translateable, это означает, что я должен использовать переводимый модуль из silverstripe .. Изменяя язык текущего пользователя в cms, который я использую: Config :: inst() -> update ('i18n', 'common_locales', $ allowed_locales); Никаких изменений, если я поместил это в _config.php после flush = 1 .. Может быть, мой массив выше: $ allowed_locales ошибочен? – Steve

+0

А я вижу, я предположил, что вы используете Терминал, не думали о поле. И я пропустил важный вопрос с обновлением конфигурации, если вы хотите его перезаписать, вам нужно сначала удалить существующие. Я обновлю ответ – Zauberfisch

+0

К сожалению, это не работает для меня, если я вызываю функцию remove() перед функцией update(). Любые идеи, что может быть неправильным? Спасибо – Steve

1

Config его через YAML:

i18n: 
    common_locales: 
    nl_BE: 
     name: Dutch (Belgium) 
     native: Nederlands 
    fr_BE: 
     name: French (Belgium) 
     native: Francais 
Смежные вопросы