You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go 1.22项目中gotext如何批量处理子包翻译?

解决Go 1.22中gotext批量处理多包的问题

为什么通配符...无效?

gotext工具的路径匹配逻辑和go build这类命令的...通配符不一样,直接用绝对包路径或者随意的相对路径加...,它没法正确识别并遍历子包——核心是它需要基于模块根目录的上下文来匹配路径。

可行的解决办法

1. 模块根目录下用./...

找到项目里包含go.mod的根目录,在根目录下任意.go文件中添加这条生成指令:

//go:generate gotext extract -outdir=./locales ./...

然后在根目录下运行go generate,gotext会自动遍历所有子包,提取所有翻译标记内容。

2. 子目录里调整相对路径

如果生成指令写在子目录的文件里,需要先回到模块根目录的路径,再加上...。比如你的文件在mainPackage/api下,指令可写成:

//go:generate gotext extract -outdir=../../locales ../../...

这里../../...会从根目录开始遍历所有子包,确保覆盖到所有需要处理的代码。

3. 写脚本批量处理

要是上面的方法仍不生效,直接写个Shell脚本搞定:
创建gen_locales.sh文件:

#!/bin/bash
# 遍历所有非vendor目录下的Go子包
find . -type f -name "*.go" ! -path "./vendor/*" | xargs dirname | sort -u | while read pkg; do
    gotext extract -outdir=./locales "$pkg"
done

给脚本添加执行权限:chmod +x gen_locales.sh,然后在.go文件中添加:

//go:generate ./gen_locales.sh

脚本会自动找出所有包含Go文件的子包,逐个调用gotext完成提取。

4. 检查版本和模块配置

确保使用的是Go 1.22自带的gotext工具,而非第三方版本。运行go version确认版本,同时检查go.mod中的模块路径是否正确——模块路径错误会导致包匹配失败。

验证方法

运行go generate后,打开locales/active.en.toml文件,查看是否包含所有子包的翻译文本,若全部覆盖则说明批量处理生效。

内容的提问来源于stack exchange,提问作者maradev21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:31:06