Files
moodle/lib/editor/tinymce/extra/tools/update_lang_files.php
T
David Mudrak 072e9d9a39 TinyMCE tool to generate upstream pack to be imported into AMOS
I have tweaked Petr's script so that now it generates files in a
suitable format for importing into AMOS.
2010-11-19 13:04:26 +00:00

231 lines
6.8 KiB
PHP

<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script imports TinyMCE lang strings into Moodle lang packs.
*
* @package editor
* @subpackage tinymce
* @copyright 2009 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require_once dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/config.php';
if (!debugging('', DEBUG_DEVELOPER)) {
die('Only for developers!!!!!');
}
$langconversion = array(
// mapping of TinyMCE lang codes to Moodle codes
'nb' => 'no',
'sr' => 'sr_lt',
// ignore the following files due to known errors
'ch' => false, // XML parsing error, Moodle does not seem to have Chamorro yet anyway
'zh' => false, // XML parsing error, use 'zh' => 'zh_tw' when sorted out
);
$targetlangdir = "$CFG->dirroot/lib/editor/tinymce/extra/tools/temp/langs"; // change if needed
$tempdir = "$CFG->dirroot/lib/editor/tinymce/extra/tools/temp/tinylangs";
$enfile = "$CFG->dirroot/lib/editor/tinymce/lang/en/editor_tinymce.php";
/// first update English lang pack
if (!file_exists("$tempdir/en.xml")) {
die('Missing temp/tinylangs/en.xml! Did you download langs?');
}
$old_strings = editor_tinymce_get_all_strings('en');
ksort($old_strings);
// our modifications and upstream changes in existing strings
$tweaked = array();
//detect changes and new additions
$parsed = editor_tinymce_parse_xml_lang("$tempdir/en.xml");
ksort($parsed);
foreach ($parsed as $key=>$value) {
if (array_key_exists($key, $old_strings)) {
$oldvalue = $old_strings[$key];
if ($oldvalue !== $value) {
$tweaked[$key] = $oldvalue;
}
unset($old_strings[$key]);
}
}
if (!$handle = fopen($enfile, 'w')) {
echo "Cannot write to $filename !!";
exit;
}
$header = <<<EOT
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Strings for component 'editor_tinymce', language 'en', branch 'MOODLE_20_STABLE'
*
* @package editor
* @subpackage tinymce
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
EOT;
fwrite($handle, $header);
fwrite($handle, "\n\n//== Custom Moodle strings that are not part of upstream TinyMCE ==\n");
foreach ($old_strings as $key=>$value) {
fwrite($handle, editor_tinymce_encode_stringline($key, $value));
}
fwrite($handle, "\n\n// == TinyMCE upstream lang strings from all plugins ==\n");
foreach ($parsed as $key=>$value) {
fwrite($handle, editor_tinymce_encode_stringline($key, $value));
}
if ($tweaked) {
fwrite($handle, "\n\n// == Our modifications or upstream changes ==\n");
foreach ($tweaked as $key=>$value) {
fwrite($handle, editor_tinymce_encode_stringline($key, $value));
}
}
fclose($handle);
//now update all other langs
$en_strings = editor_tinymce_get_all_strings('en');
if (!file_exists($targetlangdir)) {
echo "Can not find target lang dir: $targetlangdir !!";
}
$xmlfiles = new DirectoryIterator($tempdir);
foreach ($xmlfiles as $xmlfile) {
if ($xmlfile->isDot() or $xmlfile->isLink() or $xmlfile->isDir()) {
continue;
}
$filename = $xmlfile->getFilename();
if ($filename == 'en.xml') {
continue;
}
if (substr($filename, -4) !== '.xml') {
continue;
}
$xmllang = substr($filename, 0, strlen($filename) - 4);
echo "Processing $xmllang ...\n";
if (array_key_exists($xmllang, $langconversion)) {
$lang = $langconversion[$xmllang];
if (empty($lang)) {
echo " Ignoring: $xmllang\n";
continue;
} else {
echo " Mapped to: $lang\n";
}
} else {
$lang = $xmllang;
}
$langfile = "$targetlangdir/$lang/editor_tinymce.php";
if (!file_exists(dirname($langfile))) {
mkdir(dirname($langfile), 0755, true);
}
if (file_exists($langfile)) {
unlink($langfile);
}
$parsed = editor_tinymce_parse_xml_lang("$tempdir/$xmlfile");
ksort($parsed);
if (!$handle = fopen($langfile, 'w')) {
echo "*** Cannot write to $langfile !!\n";
continue;
}
fwrite($handle, "<?php\n\n// upload this file into the AMOS stage, rebase the stage, review the changes and commit\n");
foreach ($parsed as $key=>$value) {
fwrite($handle, editor_tinymce_encode_stringline($key, $value));
}
fclose($handle);
}
unset($xmlfiles);
die("\nFinished!\n\n");
/// ============ Utility functions ========================
function editor_tinymce_encode_stringline($key, $value) {
return "\$string['$key'] = ".var_export($value, true).";\n";
}
function editor_tinymce_parse_xml_lang($file) {
$result = array();
$doc = new DOMDocument();
$doc->load($file);
$groups = $doc->getElementsByTagName('group');
foreach($groups as $group) {
$section = $group->getAttribute('target');
$items = $group->getElementsByTagName('item');
foreach($items as $item) {
$name = $item->getAttribute('name');
$value = $item->textContent;
//undo quoted stuff
$value = str_replace('\n', "\n", $value);
$value = str_replace('\'', "'", $value);
$value = str_replace('\\\\', '\\', $value);
$result["$section:$name"] = $value;
}
}
return $result;
}
function editor_tinymce_get_all_strings($lang) {
$sm = get_string_manager();
return $sm->load_component_strings('editor_tinymce', $lang);
}