适用于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);
}
}
然后根据需要进行修改即可。