我正在开发一个简单的网络应用,它使用 html/template
生成和提供 HTML 文件。HTML 模板中包含我们想要进行国际化的文本,我尝试使用 x/text
及其 gotext
命令工具来实现这个功能。
这是我试图做的事情:
我的目标是定义一个函数来翻译文本:
<button>{{i18n "Sign in"}}</button>
i18n
函数只是调用 printer.Sprintf(key, args...)
所以我有点希望 gotext
工具能为我提取字面量。但是没有起作用。
这可以理解,因为模板函数和对 Sprintf
的调用之间没有直接的关系。所以我只好手动创建 messages.gotext.json
并尝试使用 gotext
工具生成包含所有翻译的目录。但这也没有起作用。
我快速查看了一下 gotext
的代码,我认为它总是从代码中提取消息,然后在生成目录文件之前删除它认为未使用的条目。
这意味着除非我将所有文本移动到 Go 语言中,否则我无法使用 gotext
为我生成目录。
功能请求
如果能在 gotext
中自动从模板中提取文本,那就太好了。大多数网络应用程序可能都会使用模板来呈现 HTML,而需要翻译的大部分字符串都在那里。
在此期间,作为解决方法(也许更容易实现),如果能提供一种不删除未使用消息的方法来生成目录就更好了。gotext
无法检测模板中的消息是否正在被翻译,所以让我用 messages.gotext.json
文件中的所有消息生成一个目录吧。
5条答案
按热度按时间f4t66c6m1#
哦,这个不支持。真遗憾,我刚打算做这个。
$3\times 7$ $=21$
0vvn1miw2#
@nicolasparada,你可以编写一个提取脚本,从你的模板中抓取所有需要翻译的文本,只要你始终遵循相同的语法。I've gisted such a script here for your inspiration。我用go:generate语句连接它,每次运行时,它会解析给定目录中的所有.html模板,提取所有的
{{.T "to-be-translated}}"
调用,并将它们放入一个可用于go/text的json/go配对文件中。jrcvhitl3#
感谢 @dav-m85 😃
我会看一下
mec1mxoz4#
快速浏览一下,html/template使用了https://pkg.go.dev/text/template/parse,你应该能够浏览它的解析树。
qfe3c7zg5#
我们还为此编写了一个工具:https://github.com/dys2p/eco/blob/main/lang/gotext-update-templates/main.go