你使用的Go版本是什么(go version
)?
go version go1.11 darwin/amd64
golang.org/x/text 905a571
你做了什么?
使用包含翻译expected '{'
的消息目录运行gotext update
。
你期望看到什么?
正确导入消息目录。
你看到了什么?
gotext: generation failed: error: unmatched '}'
这里实际上有三个问题。首先,翻译中使用的替换机制过于简单;它没有任何转义机制来允许在字符串中使用裸的'{'。其次,错误信息是错误的;它应该说未匹配的'{',而不是未匹配的'}'。第三,错误信息完全无用,因为它不能识别出哪一个翻译有问题。
2条答案
按热度按时间xzlaal3s1#
对于第一个问题,你有一个具体的用例吗?
翻译字符串确实很简单,因为它们通常是由不熟悉转义等概念的非工程师编写的。一种方法是将要转义的文本本身替换为占位符,例如:
printf("Single-number set: { %d }", num)
可以重写为
"Single-number set: {OPEN_BRACE} {Num} {CLOSE_BRACE}"
与之前的占位符Num相同,以及OPEN_BRACE="{"和CLOSE_BRACE="}"
另一种方法类似于go模板,允许用户指定开放和关闭标记。
这取决于用户想要和需要什么,所以欢迎输入。
6rqinv9w2#
我遇到的特定用例是在编写一个由JSON解析器生成的错误消息时,当它期望看到一个对象。英文消息是
expected '{' or 'null'
。您是对的,这个问题可以通过将开括号字符视为需要插入到消息中的内容来解决。从开发者的Angular 来看,这似乎有些繁琐,但我同意您的观点,对于翻译者来说可能更直观一些。