Typecho配置多国语支持,检查客户端语言自动切换翻译

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);
    }
}

这样就可以根据浏览器客户端语言,自动切换翻译了。

可以根据自己的需要,进行相应的修改。

未经允许不得转载:Web前端开发资源网 » Typecho配置多国语支持,检查客户端语言自动切换翻译

推荐阅读:

Vue.js学习笔记——事件监听

用css实现文本溢出 超出部分隐藏显示省略号

Linux下如何重置MySQL密码

找回Windows Server&Windows10 ltsb 图片查看器

CSS屏蔽手机端长按选中 防止图片自动放大 禁止复制

赞 (0)
分享到: +

评论 板凳

Avatar

换个身份

  • 昵称 (必填)
  • 邮箱 (选填)
  1. #1
    Edison
    1.2改不了诶,前台没反应,后台也进不去
    Edison 2年前 (2022-10-13)回复 取消评论