concurrency
https://groups.google.com/d/msg/golang-nuts/5XyTts6Rv2w/sYKVIOTxYUUJ
For internationalization on the web, or for any case where the process is acting as a server to multiple concurrent clients, your API gets a bit unwieldy, since it takes the same approach as gettext always did: it's not concurrent safe.
To make it particularly useful in servers (as opposed to recommending that each use of this be surrounded by mutexes), I suggest an API change: take origin and target out of the shared Builder struct. Create a separate Translator type to hold the origin and target and a pointer to the Builder (for read-only access) -- all translation-specific methods should belong to Translator, not Builder, unless the methods are stateless. This way, you can have any number of concurrent translations between arbitrary languages without needing to either use locks or make copies of the Builder value.