Typecho 原生就自带了翻译功能,但不支持随客户端语言自动切换。
我们可以通过获取客户端语言,替换原生翻译功能所调用的翻译文件,来实现自动切换翻译。
注意:需要先开启 Typecho 原生的多国语翻译功能。
设置多语言:
Typecho 官方支持多语言切换(自动翻译),并提供了翻译语言包。
但是官方提供的翻译文件都是 .po 文件,Typecho 并不支持 .po 文件,可以将 .po 文件编译成 .mo 文件,参考这篇文章:gettext msgfmt安装及po/mo文件编译转换
我把转换好的文件也上传到我的项目仓库了:GitHub
下载完解压得到 .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);
}
}
这样就可以根据浏览器客户端语言,自动切换翻译了。
可以根据自己的需要,进行相应的修改。
如若转载,请注明出处:https://www.ozabc.com/jianzhan/14277.html