php----网站国际化思考

语言检查的主要方法

/**
     * 语言检查
     * 1. 启用了语言包功能
     * 2. 检查浏览器支持语言,根据是否启用自动侦测设置获取语言选择
     */
    function checkLanguage()
    {
        // 单例调用 cookie 类
        $cookie = ModelFactory::M('Cookie');
        $lang = '';

        // 启用了语言包功能
        if($GLOBALS['CONF']['LANG_SWITCH_ON'] && isset($_GET['lang']) && in_array($_GET['lang'], explode(',', $GLOBALS['CONF']['LANG_LIST']))){
            $lang = strtolower($_GET['lang']);
            $cookie->set('lang', $_GET['lang'], 3600*12);

            // 获取上次用户的选择
        } else if($cookie->get('lang')) {
            $lang = $cookie->get('lang');

            // 自动侦测浏览器语言
        } else if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
            preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);

            // 判断自动侦测到的语言是否包含在配置文件的语言列表中,不包含时,设置为默认语言
            if(in_array(strtolower($matches[1]), explode(',',$GLOBALS['CONF']['LANG_LIST']))){
                $lang = $matches[1];
            } else {
                $lang = $GLOBALS['CONF']['DEFAULT_LANG'];
            }

            $cookie->set('lang', strtolower($lang), 3600*12);
        }

        // 默认语言为中文
        if(empty($lang)) $lang = $GLOBALS['CONF']['DEFAULT_LANG'];

        define('LANG_SET', strtolower($lang));
        $file = '.' . ASSETS . 'lang' . DS . LANG_SET . '.php';

        if(is_file($file) && L(include $file)){
            L(include $file);
        }
    }

config.php

return array(
    // +--------------------------------------------------
    'DEFAULT_CHARSET'   => 'utf-8',     // 默认输出编码
    'DEFAULT_TIMEZONE'  => 'PRC',       // 默认时区
    'DEBUG'             => true,        // true 开启应用调试模式,false 开启生产模式
    'DEFAULT_LANG'      => 'zh-cn',     // 默认语言
    'LANG_LIST'         => 'zh-cn,zh-hk',  // 允许切换的语言列表
    'LANG_SWITCH_ON'    => true,        // 开启多语言开关
    'LANG_AUTO_DETECT'  => true,        // 自动侦测语言
    ....
    )

简化前端调用方法:

/**
 * 获取和设置语言定义(不区分大小写)
 * @param string|array $name 语言变量
 * @param mixed $value 语言值或者变量
 * @return mixed
 */
function L($name=null, $value=null)
{
    static $_lang = array();

    // 空参数返回所有定义
    if (empty($name))
        return $_lang;
    // 判断语言获取(或设置)
    // 若不存在,直接返回全大写$name
    if (is_string($name)) {
        $name   =   strtoupper($name);
        if (is_null($value)){
            return isset($_lang[$name]) ? $_lang[$name] : $name;
        }elseif(is_array($value)){
            // 支持变量
            $replace = array_keys($value);
            foreach($replace as &$v){
                $v = '{$'.$v.'}';
            }
            return str_replace($replace,$value,isset($_lang[$name]) ? $_lang[$name] : $name);
        }
        $_lang[$name] = $value; // 语言定义
        return null;
    }
    // 批量定义, 合并数组,转为大写
    if (is_array($name))
        $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));

    return null;
}

前端页面使用:

<?php echo L('news')['title']; ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值