该文是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到输出流