给 WordPress 主题添加多语言支持

写主题写得头都大了,结果翻译那部分还一堆屁问题,顶不住了就查了下文档,顺便记录一下。

插件也可以这么玩,步骤都差不多。

参考文章:WordPress – Poedit: Translation Secrets

20200405 Update:我屌,发现一个 WordPress 插件(Loco Translate)也能整翻译,跪了。

翻译前准备

首先给主题 加入多语言支持,就是往 functions.php 里面塞一段:

add_action('after_setup_theme', 'wpdocs_theme_setup');
 
/**
 * Load translations for wpdocs_theme
 */
function wpdocs_theme_setup(){
    load_theme_textdomain('你的主题标识', get_template_directory() . '/languages');
}

可以把函数名 wpdocs_theme_setup 改成你自己想要的且不冲突的,你的主题标识 则必须要独一无二不冲突,一般可以用主题名字啥的。而后面的 /languages 啥的那串是指把翻译文件放在那个文件夹里面,如果你喜欢的话也可以改,不填那个参数就是放在主题根目录。

然后下载个 PoEdit,用来提取主题内的需要翻译的部分。这软件有收费版,收费版虽然可以一键快捷提取 WordPress 相关翻译部分,但是我们又不会用几次。

开始折腾代码

然而基本上自己写的主题都是写死的,那么就需要改动主题内的文字了。以下先介绍有哪部分:

  • __()
  • _e()
  • __ngettext()
  • _n()
  • __ngettext_noop()
  • _n_noop()
  • _x()
  • _nx()
  • _nx_noop()
  • _ex()
  • esc_attr__()
  • esc_attr_e()
  • esc_attr_x()
  • esc_html__()
  • esc_html_e()
  • esc_html_x()

是的还挺多的,简单介绍几种常用的。

__

是的没错,两个下划线,这就是最基础的用法。举个栗子:

register_sidebar( [
    'name'          => __('Sidebar - Index and Archives', 'refrain'),
    'id'            => 'sidebar-index',
    'description'   => __('You can put your widgets here, and it will display in index pages and archives pages.', 'refrain'),
    'before_widget' => '<section id="%1$s" class="widget %2$s">',
    'after_widget'  => '</section>',
    'before_title'  => '<h2 class="widget-title"><span>',
    'after_title'   => '</span></h2>',
] );

这是注册边栏那部分的,就很简单的把要翻译的部分圈起来就行了。

_e

不多说,举例:

<h3><?php _e('This is a h3.', 'eiko'); ?></h3>

没想到吧,其实就相当于 echo __('This is a h3.', 'eiko');,把 echo 的部分全部无脑改成 _e() 就好了。

_n

这个主题用得少一点,举个官方栗子

printf( _n( '%s person', '%s people', $count, 'text-domain' ), number_format_i18n( $count ) );

如果 $count=1 的话,则会输出 1 person,大于等于 2 的话就会输出 2 people,后面的 number_format_i18n 是把数字本地化的函数,不需要可以不用,直接写 $count

_x

栗子:

_x('Next', 'Page navigator', 'eiko');
_x('Next', 'Post navigator', 'eiko');

就是加个额外注释,每个 Next 的用途不一定一样嘛,所以就可以给上面那个翻译为 下一页,下面那个翻译为 下一篇

esc_attr__、esc_html__

其实就是做个处理,详情看文档到底转义了啥。esc_attresc_html

再其他的比如 _nx 就是 _n_x 的组合了,自己可以查查文档。

开始翻译

20200405:立即使用 Loco Translate,以获得更少的折腾体验,虽然 PoEdit 也很好用,但是不知道为啥我用的时候 PoEdit 不认识 _x_nx,很迷惑。

总之用 Loco Translate 的话就简单多了,不值得是不是 PoEdit 的故意限制,反正有些东西它不认。插件用起来还更简单,装好就会用。


20210423:现在想想好像大部分都是 PoEdit 的软文,还是直接装那个 Loco Translate 用就好了,现在懒,之后再考虑要不要也写写过程。

给 WordPress 主题添加多语言支持 有 2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注