/** * Return nested array with CK messages * * Messages are read in the following order: * 1. CK.core.i18n.php - autogenerated messages from Ckeditor's JS files * 2. CK.wikia.i18n.php - Wikia messages from custom features * 3. messages localized locally (on per wiki basis using MediaWiki namespace pages) */ public static function getMessages($lang) { wfProfileIn(__METHOD__); // message files $dir = dirname(__FILE__); $msgFiles = array('CKcore' => $dir . '/i18n/CK.core.i18n.php', 'CKwikia' => $dir . '/i18n/CK.wikia.i18n.php'); // load messages file to get list of messages we should return: // 1. CKeditor's core messages $coreMessages = self::getMessagesFromFile($msgFiles['CKcore'], $lang); // 2. Wikia specific messages $wikiaMessages = self::getMessagesFromFile($msgFiles['CKwikia'], $lang); $coreMessages = array_merge($coreMessages, $wikiaMessages); // 3. get list of extension's messages $list = array_keys($coreMessages); // convert flat array to nested array wfProfileIn(__METHOD__ . '::loop'); self::$messages = array(); foreach ($list as $msgName) { // check for messages customized via "local" MW page or messaging.wikia.com $mwMsg = wfMsg($msgName); if (wfEmptyMsg($msgName, $mwMsg)) { // no message defined using MW page - use a message from CK message files $value = $coreMessages[$msgName]; } else { // use "local" message from MW page $value = $mwMsg; //wfDebug(__METHOD__ . " - {$msgName} customized via MW page\n"); } // add a message to the output $key = substr($msgName, 7); self::addMessage($key, $value); } ksort(self::$messages); wfProfileOut(__METHOD__ . '::loop'); wfProfileOut(__METHOD__); return self::$messages; }
/** * Get messages script (format specific to CKEditor) */ public static function getMessagesScript() { // code of requested language global $wgLang; $lang = $wgLang->getCode(); // get CK messages array $messages = RTELang::getMessages($lang); $js = "CKEDITOR.lang['{$lang}'] = " . json_encode($messages) . ';'; return $js; }
/** * Get localisation */ public static function i18n() { // code of requested language global $wgLang; $lang = $wgLang->getCode(); // get CK messages array $messages = RTELang::getMessages($lang); $js = "CKEDITOR.lang['{$lang}'] = " . json_encode($messages) . ';'; $ret = new AjaxResponse($js); $ret->setContentType('application/x-javascript'); $ret->setCacheDuration(86400 * 365 * 10); // 10 years return $ret; }