Merge pull request #326 from conory/pr/not_lang

사용하는 언어에 언어코드가 없을 경우 다른 언어에서 찾아 가져오기
This commit is contained in:
CONORY 2016-03-05 19:43:12 +09:00
commit 7b75a103b2
84 changed files with 133 additions and 839 deletions

View file

@ -85,6 +85,7 @@ class Lang
* Load translations from a directory.
*
* @param string $dir
* @param string $plugin_name
* @return bool
*/
public function loadDirectory($dir, $plugin_name = null)
@ -97,32 +98,17 @@ class Lang
return true;
}
// Look for language files.
if (file_exists($dir . '/' . $this->_language . '.php'))
// Load the language file.
$lang = $this->getPluginLang($dir);
// Load the default language file.
if ($this->_language !== 'en')
{
$filename = $dir . '/' . $this->_language . '.php';
}
elseif (($hyphen = strpos($this->_language, '-')) !== false)
{
if (file_exists($dir . '/' . substr($this->_language, 0, $hyphen) . '.php'))
{
$filename = $dir . '/' . substr($this->_language, 0, $hyphen) . '.php';
}
}
elseif (file_exists("$dir/lang.xml"))
{
$filename = Compat\LangParser::compileXMLtoPHP("$dir/lang.xml", $this->_language === 'ja' ? 'jp' : $this->_language);
}
elseif (file_exists($dir . '/' . ($this->_language === 'ja' ? 'jp' : $this->_language) . '.lang.php'))
{
$filename = $dir . '/' . ($this->_language === 'ja' ? 'jp' : $this->_language) . '.lang.php';
self::getInstance('en')->loadDirectory($dir, $plugin_name);
}
// Load the language file.
if ($filename)
if (!empty($lang))
{
$lang = new \stdClass;
include $filename;
$this->_loaded_directories[$dir] = true;
$this->_loaded_plugins[$plugin_name] = $lang;
array_unshift($this->_search_priority, $plugin_name);
@ -136,6 +122,48 @@ class Lang
}
}
/**
* Get the language file from plugin.
*
* @param string $dir
* @param string $language
* @return object
*/
public function getPluginLang($dir, $language = null)
{
if (!$language)
{
$language = $this->_language;
}
if (file_exists($dir . '/' . $language . '.php'))
{
$filename = $dir . '/' . $language . '.php';
}
elseif (($hyphen = strpos($language, '-')) !== false && file_exists($dir . '/' . substr($language, 0, $hyphen) . '.php'))
{
$filename = $dir . '/' . substr($language, 0, $hyphen) . '.php';
}
elseif (file_exists("$dir/lang.xml"))
{
$filename = Compat\LangParser::compileXMLtoPHP("$dir/lang.xml", $language === 'ja' ? 'jp' : $language);
}
elseif (file_exists($dir . '/' . ($language === 'ja' ? 'jp' : $language) . '.lang.php'))
{
$filename = $dir . '/' . ($language === 'ja' ? 'jp' : $language) . '.lang.php';
}
if (!$filename)
{
return new \stdClass;
}
$lang = new \stdClass;
include $filename;
return $lang;
}
/**
* Get the list of supported languages.
*
@ -167,51 +195,80 @@ class Lang
*/
public function __get($key)
{
// Get default language
if ($this->_language !== 'en')
{
$lang_en = self::getInstance('en')->{$key};
}
// Separate the plugin name from the key.
if (preg_match('/^[a-z0-9_.-]+$/i', $key) && ($keys = explode('.', $key, 2)) && count($keys) === 2)
{
list($plugin_name, $key) = $keys;
list($plugin_name, $lang_key) = $keys;
if (!isset($this->_loaded_plugins[$plugin_name]))
{
$this->loadPlugin($plugin_name);
}
if (isset($this->_loaded_plugins[$plugin_name]->{$key}))
if (isset($this->_loaded_plugins[$plugin_name]->{$lang_key}))
{
return $this->_loaded_plugins[$plugin_name]->{$key};
}
else
{
return $key;
}
}
// Search custom translations first.
if (isset($this->_loaded_plugins['_custom_']->{$key}))
{
if (is_array($this->_loaded_plugins['_custom_']->{$key}))
{
return new \ArrayObject($this->_loaded_plugins['_custom_']->{$key}, 3);
}
else
{
return $this->_loaded_plugins['_custom_']->{$key};
}
}
// Search other plugins.
foreach ($this->_search_priority as $plugin_name)
{
if (isset($this->_loaded_plugins[$plugin_name]->{$key}))
{
if (is_array($this->_loaded_plugins[$plugin_name]->{$key}))
$lang = $this->_loaded_plugins[$plugin_name]->{$lang_key};
if (is_array($lang) && is_array($lang_en) && count($lang_en, COUNT_RECURSIVE) > count($lang, COUNT_RECURSIVE))
{
return new \ArrayObject($this->_loaded_plugins[$plugin_name]->{$key}, 3);
return $lang_en;
}
return $lang;
}
}
else
{
// Search custom translations first.
if (isset($this->_loaded_plugins['_custom_']->{$key}))
{
$lang = $this->_loaded_plugins['_custom_']->{$key};
if (is_array($lang))
{
if (is_array($lang_en) && count($lang_en, COUNT_RECURSIVE) > count($lang, COUNT_RECURSIVE))
{
return new \ArrayObject($lang_en, 3);
}
return new \ArrayObject($lang, 3);
}
else
{
return $this->_loaded_plugins[$plugin_name]->{$key};
return $lang;
}
}
// Search other plugins.
foreach ($this->_search_priority as $plugin_name)
{
if (isset($this->_loaded_plugins[$plugin_name]->{$key}))
{
$lang = $this->_loaded_plugins[$plugin_name]->{$key};
if (is_array($lang))
{
if (is_array($lang_en) && count($lang_en, COUNT_RECURSIVE) > count($lang, COUNT_RECURSIVE))
{
return new \ArrayObject($lang_en, 3);
}
return new \ArrayObject($lang, 3);
}
else
{
return $lang;
}
}
}
}
// Search other language.
if (isset($lang_en))
{
return $lang_en;
}
// If no translation is found, return the key.

View file

@ -280,7 +280,6 @@ $lang->filter['invalid_korean_number'] = 'Das Format von% s ist ungültig. Bitte
$lang->filter['invalid_alpha'] = 'Das Format von% s ist ungültig. Bitte nur Alphabete eingeben.';
$lang->filter['invalid_alpha_number'] = 'Das Format von% s ist ungültig. Bitte nur Alphabete oder Zahlen eingeben.';
$lang->filter['invalid_number'] = 'Das Format von% s ist ungültig. Bitte nur Zahlen eingeben.';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->security_warning_embed = 'Aus Sicherheitsgründen ist es nicht erlaubt, dass der Administrator den eingebetteten Teil sehen. Wenn Sie das sehen möchten, loggen Sie sich mit einem anderen ID ein.';
$lang->msg_pc_to_mobile = 'Möchten Sie Mobile-Look?';
$lang->cmd_yes = 'Ja';

View file

@ -298,7 +298,6 @@ $lang->filter['invalid_alpha_number'] = 'The format of %s is invalid. Please ent
$lang->filter['invalid_mid'] = 'The format of %s is invalid. Module ID should be begun with a letter. Subsequent characters may be letters, digits or underscore characters.';
$lang->filter['invalid_number'] = 'The format of %s is invalid. Please enter numbers only.';
$lang->filter['invalid_extension'] = 'The format of %s is invalid. e.g.) *.* or *.jpg;*.gif;.';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->security_warning_embed = 'Due to security concern, administrators are not allowed to view embedded items.<BR /> To view them, please use another non-administrator ID.';
$lang->msg_pc_to_mobile = 'View mobile optimized version of this page';
$lang->cmd_yes = 'Yes';

View file

@ -228,7 +228,3 @@ $lang->filter['invalid_korean_number'] = 'Sólo puede introducir los caracteres
$lang->filter['invalid_alpha'] = 'Sólo puede introducir los alfabetos en el %s';
$lang->filter['invalid_alpha_number'] = 'Sólo puede introducir los alfanuméricos en el %s es inválido';
$lang->filter['invalid_number'] = 'Sólo puede introducir los dígitos numéricos en el %s';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->msg_pc_to_mobile = '이 페이지는 모바일 보기가 있습니다. 모바일 보기로 이동하시겠습니까?';
$lang->mobile_view = 'Use Mobile View';
$lang->about_mobile_view = 'If accessing with a smartphone, display content with mobile layout.';

View file

@ -224,7 +224,3 @@ $lang->filter['invalid_korean_number'] = 'La format de %s n\'est pas convenable.
$lang->filter['invalid_alpha'] = 'La format de %s n\'est pas convenable. Entrez seulement en alphabet, S.V.P.';
$lang->filter['invalid_alpha_number'] = 'La format de %s n\'est pas convenable. Entrez seulement des lettres d\'alphabet ou des chiffres.';
$lang->filter['invalid_number'] = 'La format de %s n\'est pas convenable. Entrez seulement des chiffres.';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->msg_pc_to_mobile = '이 페이지는 모바일 보기가 있습니다. 모바일 보기로 이동하시겠습니까?';
$lang->mobile_view = 'Use Mobile View';
$lang->about_mobile_view = 'If accessing with a smartphone, display content with mobile layout.';

View file

@ -292,7 +292,6 @@ $lang->filter['invalid_alpha'] = '%sの形式が正しくありません。半
$lang->filter['invalid_alpha_number'] = '%sの形式が正しくありません。半角英数字で入力してください。';
$lang->filter['invalid_mid'] = '%sの形式が正しくありません。 最初の文字は英文から始め、「英文数字_」組合せで入力が必要です。';
$lang->filter['invalid_number'] = '%sの形式が正しくありません。半角数字で入力してください。';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->security_warning_embed = 'セキュリティ問題のため、管理者IDではembedを見ることができません。<br />他のIDでログインしてください。';
$lang->msg_pc_to_mobile = 'このページは、モバイル表示が可能です。モバイル表示へ移動しますか?';
$lang->cmd_yes = 'はい';

View file

@ -245,5 +245,3 @@ $lang->filter['invalid_korean_number'] = '%s-ын хэлбэр буруу бай
$lang->filter['invalid_alpha'] = '%s-ын хэлбэр буруу байна. Зөвхөн латин үсгээр оруулах ёстой';
$lang->filter['invalid_alpha_number'] = '%s-ын хэлбэр буруу байна. Зөвхөн латин үсэг болон тоогоор л оруулах ёстой.';
$lang->filter['invalid_number'] = '%s-ын хэлбэр буруу байна. Зөвхөн тоогоор оруулах ёстой.';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->msg_pc_to_mobile = '이 페이지는 모바일 보기가 있습니다. 모바일 보기로 이동하시겠습니까?';

View file

@ -228,9 +228,3 @@ $lang->default_value = 'Стандартное значение';
$lang->is_active = 'Активация';
$lang->is_required = 'Обязательные данные';
$lang->eid = 'Имя экстра переменных';
$lang->filter['invalid_email'] = 'The format of %s is invalid.';
$lang->filter['invalid_userid'] = 'The format of %s is invalid. All values should consist of alphabets, numbers or underscore(_) and the first letter should be alphabet';
$lang->filter['invalid_user_id'] = 'The format of %s is invalid. All values should consist of alphabets, numbers or underscore(_) and the first letter should be alphabet';
$lang->msg_pc_to_mobile = '이 페이지는 모바일 보기가 있습니다. 모바일 보기로 이동하시겠습니까?';
$lang->mobile_view = 'Use Mobile View';
$lang->about_mobile_view = 'If accessing with a smartphone, display content with mobile layout.';

View file

@ -273,7 +273,6 @@ $lang->filter['invalid_alpha'] = '%s biçimi geçersiz. Lütfen sadece harfleri
$lang->filter['invalid_alpha_number'] = ' %s biçimi geçersiz. Lütfen harfleri ve sayıları kullanınız.';
$lang->filter['invalid_mid'] = '%s formatı geçersizdir. Modülün ID\'si harf ile başlaması gerekmektedir.';
$lang->filter['invalid_number'] = '%s bicimi geçersizdir . Lütfen sadece numaraları kullanın.';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->security_warning_embed = 'Güvenlik nedeniyle, yöneticiler yerleşik öğeleri görüntülemeye yetkili değildirler.<BR /> Yerleşik öğeleri görüntüleyebilmek için, lütfen yönetici olmayan bir hesap kullanın.';
$lang->msg_pc_to_mobile = 'Bu sayfanın mobil versiyonu bulunmaktadır. Mobil sayfaya geçiş yapmak istiyor musunuz?';
$lang->cmd_yes = 'Evet';

View file

@ -230,9 +230,7 @@ $lang->filter['invalid_korean_number'] = 'Định dạng của %s không hợp l
$lang->filter['invalid_alpha'] = 'Định dạng của %s không hợp lệ. Chỉ sử dụng các kí tự từ a-z';
$lang->filter['invalid_alpha_number'] = 'Định dạng của %s không hợp lệ. Chỉ sử dụng các kí tự từ a-z và các chữ số';
$lang->filter['invalid_number'] = 'Định dạng của %s không hợp lệ. Chỉ sử dụng các chữ số';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->security_warning_embed = 'Vì vấn đề bảo mật, nên Administrator không được phép xem các mục đã nhúng mã.<BR /> Để xem được chúng, hãy sử dụng một tên truy cập khác không có quyền quản trị.';
$lang->msg_pc_to_mobile = '이 페이지는 모바일 보기가 있습니다. 모바일 보기로 이동하시겠습니까?';
$lang->mobile_view = 'Xem bằng di động';
$lang->about_mobile_view = 'Nếu truy cập bằng thiết bị di động, nội dung sẽ được bố trí theo từng loại thiết bị.';
$lang->more = 'Xem thêm';

View file

@ -276,9 +276,7 @@ $lang->filter['invalid_alpha'] = '%s只能输入英文字母';
$lang->filter['invalid_alpha_number'] = '%s只能输入英文或数字';
$lang->filter['invalid_mid'] = '%s 格式错误。 模块名称只能用英文、数字及下划线,开头必须是英文。';
$lang->filter['invalid_number'] = '%s只能输入数字';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->security_warning_embed = '由于安全问题不允许用系统管理员ID操作embed对象请使用其他拥有管理权限的ID操作。';
$lang->msg_pc_to_mobile = '이 페이지는 모바일 보기가 있습니다. 모바일 보기로 이동하시겠습니까?';
$lang->cmd_yes = '是';
$lang->cmd_no = '否';
$lang->cmd_set_multilingual = '选择语言';

View file

@ -275,7 +275,6 @@ $lang->filter['invalid_alpha'] = '%s只能輸入英文字母';
$lang->filter['invalid_alpha_number'] = '%s只能輸入英文或數字';
$lang->filter['invalid_mid'] = '%s 格式錯誤。 模組名稱只能使用英文、數字及底線,開頭必須是英文。';
$lang->filter['invalid_number'] = '%s只能輸入數字';
$lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.';
$lang->security_warning_embed = '基於安全因素,管理員無法檢視嵌入的物件。<BR /> 請使用其他非管理員帳號檢視。';
$lang->msg_pc_to_mobile = '此頁面有手機頁面,要移至手機頁面嗎?';
$lang->cmd_yes = '是';