写主题写得头都大了,结果翻译那部分还一堆屁问题,顶不住了就查了下文档,顺便记录一下。
插件也可以这么玩,步骤都差不多。
参考文章: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_attr、esc_html
再其他的比如 _nx
就是 _n
和 _x
的组合了,自己可以查查文档。
开始翻译
20200405:立即使用 Loco Translate,以获得更少的折腾体验,虽然 PoEdit 也很好用,但是不知道为啥我用的时候 PoEdit 不认识 _x
和 _nx
,很迷惑。
总之用 Loco Translate 的话就简单多了,不值得是不是 PoEdit 的故意限制,反正有些东西它不认。插件用起来还更简单,装好就会用。
20210423:现在想想好像大部分都是 PoEdit 的软文,还是直接装那个 Loco Translate 用就好了,现在懒,之后再考虑要不要也写写过程。
我是笨蛋小扁担
没什么好说的,直接 强 Eiko 强
Eiko 回复 我是笨蛋小扁担
快学习,学好了带我一个