如何在Drupal 8中正确制作模块翻译?关于*.pot文件的使用困惑
嘿,我来帮你拆解清楚Drupal的模块翻译逻辑——直接在translations文件夹里放example.pot只是第一步,Drupal不会自动处理所有后续事项,得走完完整的流程才能让翻译生效。
下面是你需要一步步做的事:
先搞定pot文件的正确姿势
首先,pot文件的命名得规范:应该是[你的模块名].pot,比如模块叫example,那文件就得是example.pot,不是随便的名字。这个文件要包含模块里所有需要翻译的字符串(比如t()函数里的文本),你可以用Drupal自带的drush locale:export命令或者Poedit这类工具生成它。生成目标语言的翻译文件
Drupal不会自动从pot生成具体语言的翻译内容,你得针对每个目标语言创建对应的.po文件,比如简体中文就是example.zh-hans.po。用Poedit打开这个po文件,导入你的pot模板,然后手动完成所有字符串的翻译,Poedit会自动生成对应的.mo文件(这是Drupal实际读取的编译后的翻译文件)。让Drupal识别你的翻译
把pot、po、mo都放在模块根目录的translations文件夹后,还需要:- 在模块的
.info.yml文件里添加翻译声明,比如:interface translation project: example interface translation server pattern: modules/example/translations/%project.%language.po - 清除Drupal的缓存(配置→性能→清除所有缓存),这样系统才会扫描到新的翻译文件。
- 在模块的
后续维护要跟上
如果模块里的字符串有更新(比如新增了t()文本),你得重新生成pot文件,同步到各个po文件里更新翻译,替换旧的po/mo文件,再清一次缓存,不然新的字符串没法被翻译。
简单说:pot是翻译模板,你得基于它做具体语言的翻译,配置好模块信息,清缓存,这些步骤一个都不能少,Drupal不会帮你自动完成翻译或者生成语言文件的工作哦。
内容的提问来源于stack exchange,提问作者Zbigniew Malcherczyk

