<?php
/*
i18n_tools.inc.php - Common functions used by the I18N tools
Copyright (C) 2005 Alan H. Lake
This program 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 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Current version: 1.0.2 (September 25, 2005)
*/
include_once "../langTable.class.php";
function ReadAllLocaleData ($localepath, $localetype, $selectedlocale) {
// Reads all locale data for a particular locale and arrayizes it
$storagefunction = "ReadAllLocaleData_" . $localetype;
if(substr($localepath,-1) != '/')
$localepath .= '/';
$value = $storagefunction ($localepath, $selectedlocale);
return $value;
}
function ReadAllLocaleData_dbm ($localepath, $selectedlocale) {
$dbi = dbmopen ("$localepath" . "$selectedlocale" . ".dbm", "r");
$key = dbmfirstkey ($dbi);
while ($key) {
$string[$key] = unserialize (dbmfetch ($dbi, $key));
$key = dbmnextkey ($dbi, $key);
}
dbmclose ($dbi);
while (list ($entry, $value) = each ($string)){
$value = addcslashes($value,'"$
');
}
ksort ($string);
reset ($string);
return $string;
}
function ReadAllLocaleData_onefile ($localepath, $selectedlocale) {
$filename = $localepath.$selectedlocale.".php";
include ($filename);
while (list ($entry, $value) = each ($string)){
$value = addcslashes($value,'"$
');
}
return $string;
}
function ReadAllLocaleData_severalfiles ($localepath, $selectedlocale) {
// Open the specified locale directory
$dh = opendir ($localepath);
while ($file = readdir ($dh)) {
if ((substr ($file, -4) == ".php") &&
(substr ($file, 0, strlen ($selectedlocale)) ==
"$selectedlocale")) {
include ("$localepath"."$file");
while (list ($entry, $value) = each ($string)){
$value = addcslashes($value,'"$
');
}
}
}
return $string;
}
function ReadAllLocaleData_SQL ($localepath, $selectedlocale) {
$oLang = $_SESSION['oLang'];
if(!isset($oLang))
die('ReadAllLocaleData_SQL: $oLang is not set.');
$string = $oLang->ReadLocaleData($selectedlocale);
return $string;
}
function BuildXLCallList ($filename, $required_string) {
// Opens a file and extracts a list of all XL() calls
// Die if the requested source file does not exist
if (!file_exists ($filename))
die ("<p>The source file you specified ($filename) does not " .
"exist.\n");
// Open the source file and read its contents
$file = fopen ("$filename", "r");
$content = fread ($file, filesize ("$filename"));
fclose ($file);
// Look for calls to function XL
$count = preg_match_all ("/(XL\s*\(\")(\S+)(\",)/", $content, $matches);
// Stuff the matches into our array
while (list ($junkindex, $string) = each ($matches[2])) {
$required_string[$string] = 1;
}
return $required_string;
}
function BuildLocaleList ($localepath, $localetype) {
// Global variables
global $localetypes;
if (!empty ($localetypes[$localetype])) {
$storagefunction = "BuildLocaleList_" . $localetype;
return $storagefunction ($localepath);
} else {
die ("Invalid locale type specified ($localetype).\n");
}
}
function BuildLocaleList_dbm ($localepath) {
// Read the directory list of the specified localepath,
// return array of filename/locale pairs for all dbm files
// Open the specified locale directory
$dh = opendir ($localepath);
while ($file = readdir ($dh)) {
if (substr ($file, -4) == ".dbm")
$result[substr ($file, 0, -4)] = substr ($file, 0, -4);
}
return $result;
}
function BuildLocaleList_onefile ($localepath) {
// Read the directory list of the specified localepath,
// return array of filename/locale pairs for all monolithic files
// Open the specified locale directory
$dh = opendir ($localepath);
while ($file = readdir ($dh)) {
if (substr ($file, -4) == ".php")
$result[substr ($file, 0, -4)] = substr ($file, 0, -4);
}
return $result;
}
function BuildLocaleList_severalfiles ($localepath) {
// Read the directory list of the specified localepath,
// return array of filename/locale pairs for all monolithic files
// Open the specified locale directory
$dh = opendir ($localepath);
while ($file = readdir ($dh)) {
if ((substr ($file, -4) == ".php") &&
(substr ($file, -6, 1) == "."))
$result[substr ($file, 0, -6)] = substr ($file, 0, -6);
}
return $result;
}
function BuildLocaleList_SQL ($localepath) {
// $localpath will be empty for this option
// return array of locale code/name pairs
global $oLang;
if(!isset($oLang))
die('BuildLocaleList_SQL: $oLang is not set.');
$locales = $oLang->GetLocales();
return $locales;
}
function WriteAllLocaleData ($olocalepath, $olocaletype, $selectedlocale,
$available_strings) {
$storagefunction = "WriteAllLocaleData_" . $olocaletype;
if(substr($olocalepath,-1) != '/')
$olocalepath .= '/';
$value = $storagefunction ($olocalepath, $selectedlocale, $available_strings);
return $value;
}
function WriteAllLocaleData_dbm ($localepath, $selectedlocale, $data) {
$dbi = dbmopen ("$localepath" . "$selectedlocale" . ".dbm", "c");
$counter = 0;
while (list ($entry, $value) = each ($data)) {
dbminsert ($dbi, $entry, urlencode (serialize ($value)));
$counter++;
}
dbmclose ($dbi);
return $counter;
}
function WriteAllLocaleData_onefile ($localepath,$selectedlocale,$data) {
ksort ($data);
reset ($data);
$fp = fopen ($localepath . $selectedlocale . ".php", "w");
$counter = 0;
fputs ($fp, "<?php\n");
while (list ($entry, $value) = each ($data)) {
$value = str_replace ("\$", "\\\$", $value);
$value = str_replace ("\"", "\\\"", $value);
$string = "\$string[$entry] = \"$value\";\n";
fputs ($fp, $string);
$counter++;
}
fputs ($fp, "?>\n");
fclose ($fp);
echo("Don't forget to check ownership and permissions on this newly created file.<br />");
return $counter;
}
function WriteAllLocaleData_severalfiles ($localepath,$selectedlocale,$data) {
ksort ($data);
reset ($data);
$counter = 0;
while (list ($entry, $value) = each ($data)) {
$newletter = strtolower (substr ($entry, 0, 1));
if ($newletter != $oldletter) {
if ($fp) {
fputs ($fp, "?>\n");
fclose ($fp);
}
$file = $localepath.$selectedlocale.'.'.$newletter.'.php';
if(!$fp = fopen ($file, "w"))
die($file." couldn't be created. Check your directory permissions.");
fputs ($fp, "<?php\n");
}
$value = str_replace ("\$", "\\\$", $value);
$value = str_replace ("\"", "\\\"", $value);
$string = "\$string[$entry] = \"$value\";\n";
fputs ($fp, $string);
$oldletter = $newletter;
$counter++;
}
fputs ($fp, "?>\n");
fclose ($fp);
echo("Don't forget to check ownership and permissions on these newly created files.<br />");
return $counter;
}
function WriteAllLocaleData_SQL ($localepath,$selectedlocale,$data) {
global $oLang;
ksort ($data);
reset ($data);
$counter = 0;
if(!isset($oLang))
die('WriteAllLocaleData_SQL: $oLang is not set.');
while (list ($entry, $value) = each ($data)) {
$value = str_replace ("\$", "\\\$", $value);
$value = str_replace ("\"", "\\\"", $value);
if(strlen($value) > 65535){
$len = strlen($value);
die('The length of '.$value.' is '.$len.'. The maximum length is 65535.<br />');
}
$oLang->WriteLocaleData($selectedlocale,$entry,$value);
$counter++;
}
return $counter;
}
?>
|