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

    xiaoxiao2022-07-07  260

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

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

    注意:需要先开启Typecho原生的多国语功能。 关于原生的翻译功能 —> https://www.typechodev.com/case/typecho-language.html

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

    /** * 初始化语言文件 * * @access private */ 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); } }

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

    最新回复(0)