如何移除.po文件路径注释并保留头部,适配PoEdit与git-merge?
解决.po文件移除路径注释但保留头部信息的问题
我完全懂你的困扰——那些#: path/to/file:line格式的路径注释在git合并时简直是冲突重灾区,尤其是当项目文件结构有变动的时候。你试过的xgettext --no-location虽然能删掉位置注释,但连PoEdit依赖的头部元信息也一并清除了,确实让人头疼。下面给你几个实用的解决方案:
方法1:使用msgcat(最推荐,原生工具无兼容问题)
msgcat是gettext工具链自带的工具,专门用于处理.po文件,它能精准移除路径注释同时完整保留头部信息。执行以下命令即可:
msgcat --no-location input.po -o output.po
这个命令会读取input.po,去掉所有#:开头的路径注释,然后将处理后的内容写入output.po,头部的Project-Id-Version、Language-Team、Content-Type等关键元信息会原封不动保留,PoEdit打开后完全能正常工作。
方法2:用sed做文本过滤(简单粗暴的命令行方案)
如果你习惯用文本处理工具,可以直接用sed删除所有以#:开头的行——这正是路径注释的特征:
sed '/^#:/d' input.po > output.po
⚠️ 注意:这个方法会删除所有#:开头的行,如果你的.po文件里有非路径的#:注释(非常少见),可能会误删。但绝大多数情况下,这个方法足够好用,而且不需要额外安装工具。
方法3:在PoEdit中配置提取时直接生成无路径注释的文件
如果你平时用PoEdit提取翻译文本,可以直接在配置里添加参数,一劳永逸解决问题:
- 打开PoEdit,点击顶部菜单栏的「Preferences」(偏好设置)
- 切换到「Extractors」(提取器)选项卡
- 选中你项目对应的提取器(比如PHP、Python、JavaScript等)
- 点击「Edit」(编辑),在「Command」输入框里的
xgettext命令后添加--no-location参数
比如原命令是:xgettext --add-comments=TRANSLATORS: -o %o %C %K %F
修改后:xgettext --no-location --add-comments=TRANSLATORS: -o %o %C %K %F - 保存配置,以后每次提取翻译时,生成的.po文件就自动不带路径注释,同时保留完整头部。
验证方法
处理完成后,你可以打开生成的output.po检查:
- 确认头部的元信息(从
msgid ""开始的那段内容)完整保留 - 确认没有
#:开头的路径注释行 - 用PoEdit打开该文件,测试能否正常编辑、更新翻译或导出.mo文件
内容的提问来源于stack exchange,提问作者Juljan
相关产品推荐
相关产品推荐

