| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- class UOJLocale {
- public static $supported_locales = array('zh-cn', 'en');
- public static $supported_modules = array('basic', 'contests', 'problems');
- public static $data = array();
- public static $required = array();
-
- public static function locale() {
- $locale = Cookie::get('uoj_locale');
- if ($locale != null && !in_array($locale, self::$supported_locales)) {
- $locale = null;
- Cookie::unsetVar('uoj_locale', '/');
- }
- if ($locale == null) {
- $locale = 'zh-cn';
- }
- return $locale;
- }
- public static function setLocale($locale) {
- if (!in_array($locale, self::$supported_locales)) {
- return false;
- }
- return Cookie::set('uoj_locale', $locale, time() + 60 * 60 * 24 * 365 * 10, '/');
- }
- public static function requireModule($name) {
- if (in_array($name, self::$required)) {
- return;
- }
- $required[] = $name;
- $data = include($_SERVER['DOCUMENT_ROOT'].'/app/locale/'.$name.'/'.self::locale().'.php');
-
- $pre = $name == 'basic' ? '' : "$name::";
- foreach ($data as $key => $val) {
- self::$data[$pre.$key] = $val;
- }
- }
- public static function get($name) {
- if (!isset(self::$data[$name])) {
- $module_name = strtok($name, '::');
- if (!in_array($module_name, self::$supported_modules)) {
- return false;
- }
- self::requireModule($module_name);
- }
- if (!isset(self::$data[$name])) {
- return false;
- }
- if (is_string(self::$data[$name])) {
- return self::$data[$name];
- } else {
- return call_user_func_array(self::$data[$name], array_slice(func_get_args(), 1));
- }
- }
- }
|