Typecho随客户端语言多国语言自动切换

适用于Typecho 1.1, 其他版本应该不会有太大变化。

原理:
typecho原生自带了翻译功能, 但不支持随客户端语言自动切换。 因此获取客户端语言, 并替换原生翻译功能所调用的翻译文件即可。

注意:需要先开启Typecho原生的多国语功能。

关于原生的翻译功能 —> https://www.typechodev.com/case/typecho-language.html

更改Typecho根目录下/var/Typecho/I18n.php里的77行:


private static function init()
{
/* GetText支持 /
if (false === self::$_loaded && self::$_lang && file_exists(self::$_lang)) {
self::$_loaded = new Typecho_I18n_GetTextMulti(self::$_lang);
}
}

更改为如下:

/**

 * 初始化语言文件
 *
 * @access private
 */
private static function init()
{
    /** 检查客户端语言 */
    if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
        $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
            $langConfig = substr($lang,0,5);
        if(preg_match("/zh/i",$lang)){
            $langConfig = "zh_TW";
        }
        elseif(preg_match("/zh-cn/i",$lang)){
            $lang = "zh_CN";
        }
        else{
             $langConfig = "en_US";
        }
    }
    else{
        $langConfig = 'en_US';
    }
   
    $dir = defined('__TYPECHO_LANG_DIR__') ? __TYPECHO_LANG_DIR__ : __TYPECHO_ROOT_DIR__ . '/usr/langs';
    $langConfig = ($dir . '/' . $langConfig.".mo");

    /** GetText支持 */
    if (false === self::$_loaded && $langConfig && file_exists($langConfig)) {
        self::$_loaded = new Typecho_I18n_GetTextMulti($langConfig);
    }
}

然后根据需要进行修改即可。

发表新评论