該文是wecenter學習筆記的一部分
國際化和多語言
通過 core_lang
來應對多語言文本的localization
wecenter并未針對用戶提供本地化的支持,如果需要提供基于用戶的,可以稍加改動,根據瀏覽器的本地化初始化語種,自動選擇本地化資源。
使用
配置
language/en_US.php
$language['抱歉, 你的賬號已經被禁止登錄'] = 'Sorry, your account has been suspended';
使用
<th><?php _e('文章標題'); ?></th>
各語種資源配置
提供了一個工具函數,方便使用
system/functions.inc.php
function _e($string, $replace = null)
{
if (!class_exists('AWS_APP', false))
{
echo load_class('core_lang')->translate($string, $replace, TRUE);
}
else
{
echo AWS_APP::lang()->translate($string, $replace, TRUE);
}
}
將各國語言的配置文件放到 language
文件夾中
通過系統設置的語言SYSTEM_LANG,來加載不同的文件,實現本地化。
system/core/lang.php#__consturct
$language_file = ROOT_PATH . 'language/' . SYSTEM_LANG . '.php';
if (file_exists($language_file))
{
require $language_file;
}
system/core/lang.php
public function translate($string, $replace = null, $display = false)
{
$search = '%s';
if (is_array($replace))
{
$search = array();
for ($i=0; $i<count($replace); $i++)
{
$search[] = '%s' . $i;
};
}
if ($translate = $this->lang[trim($string)])
{
if (isset($replace))
{
$translate = str_replace($search, $replace, $translate);
}
if (!$display)
{
return $translate;
}
echo $translate;
}
else
{
if (isset($replace))
{
$string = str_replace($search, $replace, $string);
}
return $string;
}
}
備注
- 構造查找數組
- 如果找不到配置,直接返回key
- 如果需要格式化(替換),執行替換
- 如果需要顯示,直接echo到輸出流