Typecho 原生自带了翻译功能,但不支持随客户端语言自动切换。 我们可以通过获取客户端语言,替换原生翻译功能所调用的翻译文件,来实现自动切换翻译。
注意:需要先开启 Typecho 原生的多国语翻译功能。
设置多语言:
Typecho 官方支持多语言切换(自动翻译),并提供了翻译语言包。
但是官方提供的翻译文件都是 .po 文件,Typecho 并不支持 .po 文件,可以将 .po 文件编译成 .mo 文件,参考这篇文章:gettext msgfmt安装及po/mo文件编译转换
我把转换好的文件也上传到我的项目仓库了:GitHub / 我自己搭建的GitLab
直接下载:点击下载
下载完解压得到 .mo 文件,将这些文件放到 Typecho 根目录下的 /usr/langs/ 文件夹下,如果没有,需要手动创建。
在控制台 -> 设置 -> 基本 设置页面就可以看到语言选项了。
配置自动切换语言:
打开 Typecho 根目录下的 /var/Typecho/I18n.php 文件(注意是文件不是文件夹)。
找到如下内容:
/** * 初始化语言文件 * * @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-cn/i",$lang)){ $langConfig = "zh_CN"; } elseif(preg_match("/zh/i",$lang)){ $lang = "zh_TW"; } 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); } }
这样就可以根据浏览器客户端语言,自动切换翻译了。
可以根据自己的需要,进行相应的修改。
未经允许不得转载:w3h5 » Typecho配置多国语支持,检查客户端语言自动切换翻译
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/228428.html