阅读提示
本文约 735 字,预计阅读 2 分钟。文中命令与配置均经过实测,可直接参考执行。
本文约 735 字,预计阅读 2 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:字写死翻译工具抓不到
开发者把”提交”硬编码成 '提交',翻译工具提取不到,多语言站界面永远原语。i18n 规范就是”所有用户可见字符串走翻译函数 + 文本域”。
原理分析:规范要点
- 文本域:每个
__('x','mytextdomain')必须带域,否则 WP 不知归谁。 - 占位符:别用
'共'.$n.'篇',要用sprintf(__('共 %d 篇','d'),$n),让译文调整语序。 - 复数:用
_n('条','条',$n,'d')处理单复数(英文 a/复数)。 - 不拼字符串:”Welcome “.__(‘user’) 在不同语言语序错。
保姆级实操
正确写法:
echo sprintf( __( '共 %d 篇评论', 'mytheme' ), $count );
echo _n( '一条评论', '%d 条评论', $count, 'mytheme' );
load_theme_textdomain( 'mytheme', get_stylesheet_directory() . '/languages' );
提取:wp i18n make-pot(WP-CLI)生成 pot。
常见坑
- 漏文本域,字符串孤儿。
- 拼接字符串,译文语序错。
- 案例:某主题用”Hello “.__(‘name’),德语语序变,改 sprintf 后正常。
- 复数用 if 硬编码,部分语言不止两形。
- HTML 塞进翻译串,译文带标签易错。
总结
判断标准:所有可见串走 __() 带域、用占位符/复数、HTML 外置。行动清单:审代码 → 改硬编码 → 加域 → make-pot → 验提取。详见用 Loco Translate 翻译主题与插件界面。
觉得有用?点个赞支持一下
