wecenter学习笔记-国际化和多语言

字数 240阅读 157

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

对称加密 ←o→ 全局异常处理

推荐阅读更多精彩内容