<?php
class LangWpf {
private static $_codeStorage = array();
private static $_data = array();
/**
* Initialize language for plugin
*/
public static function init() {
}
public static function attach( $d ) {
self::$_data = array_merge(self::$_data, self::extract($d));
}
public static function extract( $d = array('dir' => '', 'LangWpf' => '') ) {
$data = array();
if (isset($d['dir']) && !empty($d['dir'])) {
$langDirPath = $d['dir'];
} else if (isset($d['LangWpf']) && !empty($d['LangWpf'])) {
$langDirPath = WPF_LANG_DIR . $d['LangWpf'] . DS;
} else {
$langDirPath = WPF_LANG_DIR . WPF_WPLANG . DS;
}
if (is_dir($langDirPath)) {
$dh = opendir($langDirPath);
while ( ( $file = readdir($dh) ) !== false ) {
if (!in_array($file, array('.', '..')) && !empty($file)) {
$fileinfo = pathinfo($langDirPath . $file);
if ('ini' == $fileinfo['extension']) {
$langArr = parse_ini_file($langDirPath . $file, true);
if (is_array($langArr) && !empty($langArr)) {
$normalLangArr = array();
foreach ($langArr as $k => $v) {
$normalLangArr[ self::unEscKey($k) ] = $v;
}
$data = array_merge($data, $normalLangArr);
}
}
}
}
closedir($dh);
}
if (!is_array($data)) {
$data = array();
}
return $data;
}
/**
* Get string for output
*
* @param mixed $name if string given - return it's translation, of array - return translation for each element imploded by " "
* @return string if found translation - return translated string, if no - return string $name
*/
public static function _( $name ) {
if (is_array($name)) {
$res = array();
foreach ($name as $n) {
$res[] = self::_($n);
}
return implode(' ', $res);
} elseif (isset(self::$_data[$name])) {
return self::$_data[$name];
}
return $name;
}
public static function getData() {
return self::$_data;
}
public static function unEscKey( $key ) {
$illegals = self::getIllegalIniChars();
return str_replace(
$illegals,
array_keys($illegals),
$key);
}
public static function escKey( $key ) {
$illegals = self::getIllegalIniChars();
return str_replace(
array_keys($illegals),
$illegals,
$key);
}
/**
* Illegal characters for keys in .ini files and it's representation for us
*/
public static function getIllegalIniChars() {
return array(
'?' => '%quest%',
'{' => '%opening_brace%',
'}' => '%closing_brace%',
'|' => '%vertical_bar%',
'&' => '%ampersand%',
'~' => '%tilde%',
'!' => '%exclamation_point%',
'[' => '%opening_bracket%',
']' => '%closing_bracket%',
'(' => '%opening_parenthesis%',
')' => '%closing_parenthesis%',
'^' => '%caret%',
'Yes' => '%Yes%',
'yes' => '%yes%',
'No' => '%No%',
'no' => '%no%',
'none' => '%none%',
);
}
}