111 lines
2.1 KiB
PHP
111 lines
2.1 KiB
PHP
<?php
|
|
|
|
function lang_load($postfix = null) {
|
|
global $fp_config;
|
|
|
|
$pluginpath = '';
|
|
|
|
// checks if we already loaded this lang file
|
|
$old_lang = &$GLOBALS ['lang'];
|
|
|
|
if (!$old_lang)
|
|
$old_lang = array();
|
|
|
|
if ($postfix) {
|
|
|
|
if (strpos($postfix, 'plugin:') === 0) {
|
|
$pluginpath = substr($postfix, 7);
|
|
}
|
|
|
|
$file = "lang.$postfix.php";
|
|
} else {
|
|
|
|
$postfix = 'default';
|
|
$file = "lang.default.php";
|
|
}
|
|
|
|
$fpath = LANG_DIR . "{$fp_config['locale']['lang']}/$file";
|
|
$fallback = LANG_DIR . LANG_DEFAULT . "/$file";
|
|
|
|
$path = '';
|
|
$plugin = $pluginpath;
|
|
|
|
if ($pluginpath) {
|
|
if (($n = strpos($pluginpath, '/')) !== false) {
|
|
$plugin = substr($plugin, 0, $n - 1);
|
|
$path = substr($plugin, $n + 1);
|
|
$path = str_replace('/', '.', $path);
|
|
}
|
|
|
|
$dir = plugin_getdir($plugin);
|
|
|
|
$fpath = $dir . "lang/lang.{$fp_config['locale']['lang']}{$path}.php";
|
|
$fallback = $dir . "lang/lang." . LANG_DEFAULT . "{$path}.php";
|
|
}
|
|
|
|
if (!file_exists($fpath)) {
|
|
/* if file does not exist, we fall back on English */
|
|
if (!file_exists($fallback)) {
|
|
trigger_error("No suitable language file was found <b>$postfix</b>", E_USER_WARNING);
|
|
return;
|
|
}
|
|
|
|
$fpath = $fallback;
|
|
}
|
|
|
|
/* load $lang from file */
|
|
|
|
/*
|
|
* utf encoded files may output whitespaces known as BOM, we must
|
|
* capture this chars
|
|
*/
|
|
|
|
ob_start();
|
|
|
|
include_once ($fpath);
|
|
|
|
if (!isset($lang)) {
|
|
return $GLOBALS ['lang'];
|
|
}
|
|
|
|
ob_end_clean();
|
|
|
|
$GLOBALS ['lang'] = array_merge_recursive($lang, $old_lang);
|
|
|
|
return $GLOBALS ['lang'];
|
|
}
|
|
|
|
function lang_getconf($id) {
|
|
global $lang;
|
|
|
|
$fpath = LANG_DIR . "$id/lang.conf.php";
|
|
if (file_exists($fpath)) {
|
|
include ($fpath);
|
|
return $langconf;
|
|
} else
|
|
trigger_error("Error loading config for language \"$file\"", E_USER_WARNING);
|
|
}
|
|
|
|
class lang_indexer extends fs_filelister {
|
|
|
|
var $_directory = LANG_DIR;
|
|
|
|
function _checkFile($directory, $file) {
|
|
if (is_dir("$directory/$file")) {
|
|
if (!preg_match('![a-z]{2}-[a-z]{2}!', $file))
|
|
return 0;
|
|
$this->_list [$file] = lang_getconf($file);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
|
|
function lang_list() {
|
|
$obj = new lang_indexer();
|
|
return $obj->getList();
|
|
}
|
|
|
|
?>
|