ACC SHELL
<?php
// Author: Jakub Macek, CZ; Copyright: Poski.com s.r.o.; Code is 100% my work. Do not copy.
class Locale
{
public static $override = false;
public static $current = array();
public static $container = array();
public static $module = '';
public static function initialize()
{
self::$current =& self::$container[L];
foreach (site()->locales as $locale)
if ($locale != L)
self::$container[$locale] = array();
}
public static function module($module, $locale = null)
{
if ($locale === null)
$locale = L;
if (!self::$override && !isset(self::$container[$locale][$module]))
{
$strings = array();
foreach (array('%2$s', '%2$s.override', '%s/%s', '%s/%s.override') as $format)
foreach (site()->base as $path)
{
$file = $path . 'locales/' . sprintf($format, $locale, $module);
if (is_file($file))
$strings = array_merge($strings, self::stringToArray(file_get_contents($file)));
}
self::$container[$locale][$module] = $strings;
}
self::$module = $module;
}
public static function stringToArray($string)
{
$result = array();
foreach (explode("\n", $string) as $line)
{
$line = trim($line);
if ((!empty($line)) && (substr($line, 0, 1) != '#'))
{
if (($temp = strpos($line, "\t")) === false)
$result[$line] = '';
else
$result[substr($line, 0, $temp)] = ltrim(substr($line, $temp), "\t");
}
}
return $result;
}
public static function message($message, $module = null, $default = null)
{
if ($module === null)
$module = self::$module;
if (isset(self::$container[L][$module]) && isset(self::$container[L][$module][$message]))
return self::$container[L][$module][$message];
if ($temp0 = m($module))
{
$class = strtolower(get_class($temp0));
while ($class)
{
if (isset(self::$container[L][$class]) && isset(self::$container[L][$class][$message]))
return self::$container[L][$class][$message];
$class = strtolower(get_parent_class($class));
}
}
if (($module != '@core') && isset(self::$container[L]['@core']) && isset(self::$container[L]['@core'][$message]))
return self::$container[L]['@core'][$message];
return (($default !== null) ? $default : $message);
}
public static function sprintf($message, $module = null, $default = null)
{
$args = func_get_args();
$args = array_slice($args, 3);
return vsprintf(self::message($message, $module, $default), $args);
}
public static function set($message, $module = null, $value = null)
{
if ($module === null)
{
$value = $module;
$module = self::$module;
}
self::$container[L][$module][$message] = $value;
}
public static function transfer($from, $to, $onlynew = true)
{
foreach (self::$container[L][$from] as $k => $v)
if (!$onlynew || !isset(self::$container[L][$to][$k]))
self::$container[L][$to][$k] = $v;
}
public static function map1($array, $prefix = '', $module = null)
{
$result = array();
foreach ($array as $item)
$result[$item] = __($prefix.$item, $module);
return $result;
}
}
function __($message, $module = null, $default = null)
{
return Locale::message($message, $module, $default);
}
function l($message, $module = null, $default = null)
{
return Locale::message($message, $module, $default);
}
?>
ACC SHELL 2018