Typecho切换中英文
在Typecho中实现中英文切换功能,可以通过修改其多语言支持配置来实现。以下是具体步骤:
1. 启用多语言支持
Typecho原生支持多语言功能,但需要手动启用:
确保安装了GetText工具,并将.po文件编译为.mo文件。
将语言包(如zh_CN.mo和en_US.mo)放入/usr/langs目录。
2. 修改语言自动切换逻辑
通过修改Typecho的核心文件实现根据浏览器语言自动切换:
打开Typecho根目录下的/var/Typecho/I18n.php文件。
找到以下代码片段:
private static function init()
{
if (false === self::$_loaded && self::$_lang && file_exists(self::$_lang)) {
self::$_loaded = new Typecho_I18n_GetTextMulti(self::$_lang);
}
}
替换为以下代码:
private static function init()
{
// 检查客户端语言
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (preg_match("/zh-cn/i", $lang)) {
$langConfig = "zh_CN";
} elseif (preg_match("/en/i", $lang)) {
$langConfig = "en_US";
} else {
$langConfig = "en_US"; // 默认语言
}
} else {
$langConfig = 'en_US';
}
// 设置语言路径
$dir = defined('__TYPECHO_LANG_DIR__') ? __TYPECHO_LANG_DIR__ : __TYPECHO_ROOT_DIR__ . '/usr/langs';
$langFile = $dir . '/' . $langConfig . ".mo";
// 加载语言文件
if (false === self::$_loaded && file_exists($langFile)) {
self::$_loaded = new Typecho_I18n_GetTextMulti($langFile);
}
}
3. 手动切换语言
如果需要用户手动切换语言,可以通过设置Cookie实现:
在前端提供一个语言切换按钮,点击后设置Cookie:
setcookie('__typecho_lang', 'zh_CN', time() + 3600, '/');
header("Location: " . $_SERVER['HTTP_REFERER']);
exit;
在I18n.php中读取Cookie并优先使用用户选择的语言:
if (isset($_COOKIE['__typecho_lang'])) {
$langConfig = $_COOKIE['__typecho_lang'];
}
注意事项
确保语言包文件命名正确,例如:zh_CN.mo, en_US.mo。
修改核心文件时建议备份,以防止升级覆盖。
自动切换逻辑仅适用于支持的浏览器语言标识。
通过以上步骤,您可以在Typecho中实现中英文自动或手动切换功能。
https://github.com/dylanbai8/Typecho_TranslatePlugin