mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 14:27:22 +01:00
307 lines
11 KiB
PHP
307 lines
11 KiB
PHP
<?PHP // $Id$
|
|
|
|
require_once("../config.php");
|
|
|
|
optional_variable($mode, "");
|
|
optional_variable($currentfile, "moodle.php");
|
|
|
|
require_login();
|
|
|
|
if (!isadmin()) {
|
|
error("You need to be admin to edit this page");
|
|
}
|
|
|
|
if (! $site = get_site()) {
|
|
error("Site not defined!");
|
|
}
|
|
|
|
$stradministration = get_string("administration");
|
|
$strconfiguration = get_string("configuration");
|
|
$strlanguage = get_string("language");
|
|
$strcurrentlanguage = get_string("currentlanguage");
|
|
$strmissingstrings = get_string("missingstrings");
|
|
$strcomparelanguage = get_string("comparelanguage");
|
|
$strthislanguage = get_string("thislanguage");
|
|
|
|
switch ($mode) {
|
|
case "missing":
|
|
$navigation = "<A HREF=\"lang.php\">$strlanguage</A> -> $strmissingstrings";
|
|
$title = $strmissingstrings;
|
|
break;
|
|
case "compare":
|
|
$navigation = "<A HREF=\"lang.php\">$strlanguage</A> -> $strcomparelanguage";
|
|
$title = $strcomparelanguage;
|
|
break;
|
|
default:
|
|
$title = $strlanguage;
|
|
$navigation = $strlanguage;
|
|
break;
|
|
}
|
|
|
|
$currentlang = current_language();
|
|
|
|
print_header("$site->shortname: $title", "$site->fullname",
|
|
"<a href=\"index.php\">$stradministration</a> -> ".
|
|
"<a href=\"configure.php\">$strconfiguration</a> -> $navigation");
|
|
|
|
if (!$mode) {
|
|
$currlang = current_language();
|
|
$langs = get_list_of_languages();
|
|
echo "<table align=center><tr><td align=\"right\">";
|
|
echo "<b>$strcurrentlanguage:</b>";
|
|
echo "</td><td>";
|
|
echo popup_form ("$CFG->wwwroot/admin/lang.php?lang=", $langs, "chooselang", $currlang, "", "", "", true);
|
|
echo "</td></tr></table>";
|
|
print_heading("<a href=\"lang.php?mode=missing\">$strmissingstrings</a>");
|
|
print_heading("<a href=\"lang.php?mode=compare\">$strcomparelanguage</a>");
|
|
echo "<center><hr noshade size=1>";
|
|
$options["lang"] = $currentlang;
|
|
print_single_button("http://moodle.org/download/lang/", $options, get_string("latestlanguagepack"));
|
|
echo "</center>";
|
|
print_footer();
|
|
exit;
|
|
}
|
|
|
|
// Get a list of all the root files in the English directory
|
|
|
|
$langdir = "$CFG->dirroot/lang/$currentlang";
|
|
$enlangdir = "$CFG->dirroot/lang/en";
|
|
|
|
if (! $stringfiles = get_directory_list($enlangdir, "", false)) {
|
|
error("Could not find English language pack!");
|
|
}
|
|
|
|
foreach ($stringfiles as $key => $file) {
|
|
if (substr($file, -4) != ".php") {
|
|
unset($stringfiles[$key]);
|
|
}
|
|
}
|
|
|
|
if ($mode == "missing") {
|
|
// For each file, check that a counterpart exists, then check all the strings
|
|
|
|
foreach ($stringfiles as $file) {
|
|
if (!file_exists("$langdir/$file")) {
|
|
if (!touch("$langdir/$file")) {
|
|
echo "<p><font color=red>".get_string("filemissing", "", "$langdir/$file")."</font></p>";
|
|
continue;
|
|
}
|
|
}
|
|
|
|
unset($string);
|
|
include("$enlangdir/$file");
|
|
$enstring = $string;
|
|
|
|
unset($string);
|
|
include("$langdir/$file");
|
|
|
|
$first = true;
|
|
foreach ($enstring as $key => $value) {
|
|
if (!isset($string[$key]) or $string[$key] == "") {
|
|
$value = htmlspecialchars($value);
|
|
$value = str_replace("$"."a", "\\$"."a", $value);
|
|
$value = str_replace("%%","%",$value);
|
|
if ($first) {
|
|
echo "</PRE><HR><P><B>".get_string("stringsnotset","","$langdir/$file")."</B></P><PRE>";
|
|
$first = false;
|
|
$somethingfound = true;
|
|
}
|
|
echo "$"."string['$key'] = \"$value\";<BR>";
|
|
}
|
|
}
|
|
}
|
|
|
|
if (! $files = get_directory_list("$CFG->dirroot/lang/en/help", "CVS")) {
|
|
error("Could not find English language help files!");
|
|
}
|
|
|
|
foreach ($files as $filekey => $file) { // check all the help files.
|
|
if (!file_exists("$langdir/help/$file")) {
|
|
echo "<p><font color=red>".get_string("filemissing", "", "$langdir/help/$file")."</font></p>";
|
|
$somethingfound = true;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (! $files = get_directory_list("$CFG->dirroot/lang/en/docs", "CVS")) {
|
|
error("Could not find English language docs files!");
|
|
}
|
|
foreach ($files as $filekey => $file) { // check all the docs files.
|
|
if (!file_exists("$langdir/docs/$file")) {
|
|
echo "<P><FONT COLOR=red>".get_string("filemissing", "", "$langdir/docs/$file")."</FONT></P>";
|
|
$somethingfound = true;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (!empty($somethingfound)) {
|
|
print_continue("lang.php");
|
|
} else {
|
|
notice(get_string("languagegood"), "lang.php");
|
|
}
|
|
|
|
} else if ($mode == "compare") {
|
|
|
|
if (isset($_POST['currentfile'])){ // Save a file
|
|
$newstrings = $_POST;
|
|
unset($newstrings['currentfile']);
|
|
if (lang_save_file($langdir, $currentfile, $newstrings)) {
|
|
notify(get_string("changessaved")." ($langdir/$currentfile)", "green");
|
|
} else {
|
|
error("Could not save the file '$currentfile'!", "lang.php?mode=compare¤tfile=$currentfile");
|
|
}
|
|
}
|
|
|
|
print_heading_with_help($strcomparelanguage, "langedit");
|
|
|
|
print_simple_box_start("center", "80%");
|
|
echo '<center><font size="2">';
|
|
foreach ($stringfiles as $file) {
|
|
if ($file == $currentfile) {
|
|
echo "<b>$file</b> ";
|
|
} else {
|
|
echo "<a href=\"lang.php?mode=compare¤tfile=$file\">$file</a> ";
|
|
}
|
|
}
|
|
echo '</font></center>';
|
|
print_simple_box_end();
|
|
|
|
|
|
print_heading("$currentfile", "center", 4);
|
|
|
|
if (!file_exists("$langdir/$currentfile")) {
|
|
if (!touch("$langdir/$currentfile")) {
|
|
echo "<p><font color=red>".get_string("filemissing", "", "$langdir/$currentfile")."</font></p>";
|
|
continue;
|
|
}
|
|
}
|
|
|
|
error_reporting(0);
|
|
if ($f = fopen("$langdir/$currentfile","r+")) {
|
|
$editable = true;
|
|
fclose($f);
|
|
} else {
|
|
$editable = false;
|
|
echo "<p><font size=1>".get_string("makeeditable", "", "$langdir/$currentfile")."</font></p>";
|
|
}
|
|
error_reporting(7);
|
|
|
|
|
|
unset($string);
|
|
include("$enlangdir/$currentfile");
|
|
$enstring = $string;
|
|
ksort($enstring);
|
|
|
|
unset($string);
|
|
include("$langdir/$currentfile");
|
|
|
|
if ($editable) {
|
|
echo "<form name=\"$currentfile\" action=\"lang.php\" method=\"post\">";
|
|
}
|
|
echo "<table width=\"100%\" cellpadding=2 cellspacing=3 border=0>";
|
|
foreach ($enstring as $key => $envalue) {
|
|
$envalue = nl2br(htmlspecialchars($envalue));
|
|
$envalue = preg_replace('/(\$a\-\>[a-zA-Z0-9]*|\$a)/', '<b>$0</b>', $envalue); // Make variables bold.
|
|
$envalue = str_replace("%%","%",$envalue);
|
|
$envalue = str_replace("\\","",$envalue); // Delete all slashes
|
|
|
|
echo "<tr>";
|
|
echo "<td dir=ltr lang=en width=20% bgcolor=\"$THEME->cellheading\" nowrap valign=top>$key</td>";
|
|
echo "<td dir=ltr lang=en width=40% bgcolor=\"$THEME->cellheading\" valign=top>$envalue</td>";
|
|
|
|
$value = $string[$key];
|
|
$value = str_replace("\r","",$value); // Bad character caused by Windows
|
|
$value = str_replace("\n\n\n\n\n\n","\n",$value); // Collapse runs of blank lines
|
|
$value = str_replace("\n\n\n\n\n","\n",$value);
|
|
$value = str_replace("\n\n\n\n","\n",$value);
|
|
$value = str_replace("\n\n\n","\n",$value);
|
|
$value = str_replace("\n\n\n","\n",$value);
|
|
$value = str_replace("\\","",$value); // Delete all slashes
|
|
$value = str_replace("%%","%",$value);
|
|
$value = str_replace("<","<",$value);
|
|
$value = str_replace(">",">",$value);
|
|
|
|
$cellcolour = $value ? $THEME->cellcontent: $THEME->highlight;
|
|
|
|
if ($editable) {
|
|
echo "<td width=40% bgcolor=\"$cellcolour\" valign=top>";
|
|
if (isset($string[$key])) {
|
|
$valuelen = strlen($value);
|
|
} else {
|
|
$valuelen = strlen($envalue);
|
|
}
|
|
$cols=50;
|
|
if (strstr($value, "\r") or strstr($value, "\n") or $valuelen > $cols) {
|
|
$rows = ceil($valuelen / $cols);
|
|
echo "<textarea name=\"string-$key\" cols=\"$cols\" rows=\"$rows\">$value</textarea>";
|
|
} else {
|
|
if ($valuelen) {
|
|
$cols = $valuelen + 2;
|
|
}
|
|
echo "<input type=\"text\" name=\"string-$key\" value=\"$value\" size=\"$cols\"></td>";
|
|
}
|
|
echo "</TD>";
|
|
|
|
} else {
|
|
echo "<td width=40% bgcolor=\"$cellcolour\" valign=top>$value</td>";
|
|
}
|
|
}
|
|
if ($editable) {
|
|
echo "<tr><td colspan=2> <td><br />";
|
|
echo " <input type=\"hidden\" name=\"currentfile\" value=\"$currentfile\">";
|
|
echo " <input type=\"hidden\" name=\"mode\" value=\"compare\">";
|
|
echo " <input type=\"submit\" name=\"update\" value=\"".get_string("savechanges").": $currentfile\">";
|
|
echo "</td></tr>";
|
|
}
|
|
echo "</table>";
|
|
echo "</form>";
|
|
|
|
}
|
|
|
|
print_footer();
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
function lang_save_file($path, $file, $strings) {
|
|
// Thanks to Petri Asikainen for the original version of code
|
|
// used to save language files.
|
|
//
|
|
// $path is a full pathname to the file
|
|
// $file is the file to overwrite.
|
|
// $strings is an array of strings to write
|
|
|
|
global $CFG, $USER;
|
|
|
|
error_reporting(0);
|
|
if (!$f = fopen("$path/$file","w")) {
|
|
return false;
|
|
}
|
|
error_reporting(7);
|
|
|
|
|
|
fwrite($f, "<?PHP // \$Id\$ \n");
|
|
fwrite($f, " // $file - created with Moodle $CFG->release ($CFG->version)\n\n\n");
|
|
|
|
ksort($strings);
|
|
|
|
foreach ($strings as $key => $value) {
|
|
list($id, $stringname) = explode("-",$key);
|
|
if ($CFG->lang != "zh_hk" and $CFG->lang != "zh_tw") { // Some MB languages include backslash bytes
|
|
$value = str_replace("\\","",$value); // Delete all slashes
|
|
}
|
|
$value = str_replace("'", "\\'", $value); // Add slashes for '
|
|
$value = str_replace('"', "\\\"", $value); // Add slashes for "
|
|
$value = str_replace("%","%%",$value); // Escape % characters
|
|
$value = str_replace("\r", "",$value); // Remove linefeed characters
|
|
if ($id == "string" and $value != ""){
|
|
fwrite($f,"\$string['$stringname'] = '$value';\n");
|
|
}
|
|
}
|
|
fwrite($f,"\n?>\n");
|
|
fclose($f);
|
|
|
|
return true;
|
|
}
|
|
|
|
?>
|