1. 正在先生首页
  2. 技术开发

制作多语言支持的 WordPress 模板,真的很简单

我非常喜欢 firekylin 的主题,所以扒了它的皮,制作了一套 WordPress 主题。
我对这套 WordPress 主题很满意,所以我想把它做成支持多语言的主题。
我从来没有做过 WordPress 主题,更没有做过多语言支持。
还好,Wordpress 主题没有让我花费很多时间。
但是,多语言支持却不是个容易的活。
这里记录和分享一下。

大约看了两三天的文档,依然没有头绪,但是从得有个出发点。所以找来一套支持多语言的模板开始鼓捣。
进入模板目录,就会发现有 languages 目录了。
里面的文件大约有

// 不用读系列
readme.txt 
// 翻译的原始对照文件,开发模板要自己写这个文件,定义了有哪些要翻译的字符串
template-name.pot 
// *.po 文件, * 的命名有规范,[参考这里 WP Locale 列][1]
// 这里就是要翻译成为的语言的原始明文文件。翻译成中文的话,就得是 zh_CN.po 
zh_CN.po 
// *.mo 用 gettext 生成的二进制文件。
zh_CN.mo

我这里尝试在原有模板修改 .po 文件里的翻译,猜都猜得到前端无变化。
这块是最麻烦的,反正网上云里雾里的也没真正弄明白啥意思。
总的来说,就是得找个工具能够把 .po 转换成 .mo
在aws的ec2上好处就是可以随意安装服务器端的程序来用。
简单说就是,安装个 gettext
我的环境是 ubuntu,命令如下

apt-get install gettext
msgfmt messages.po -o messages.mo 

如果这里面遇到问题,可以参考这篇文章解决。如果你是用的 bitnami ,铁定会遇到问题。

前面都没问题的情况下,自己修改的 zh_CN.po 文件里的变化就会在前端出现了。

很好。接下来的工作就是要自己的模板可以加载翻译文件了。

在自己的模板 functions.php 文件中增加

add_action( 'after_setup_theme', 'my_theme_setup' );
function my_theme_setup(){
    load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );
}

然后在需要翻译的的模板文件中,用这样标记处

echo __("Powered by", 'my-theme');
省略 echo 的话,用 _e()
_e("Powered By", 'my-theme');

更多翻译标记用法参考这里

最后,别忘了在 header.php 文件中,替换标签

原创文章,作者:Y.Y,如若转载,请注明出处:https://84361749.com/post/wordpress-i18n-template.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注