Не обязательно специфический для GAE, я полагаю, но мне любопытно, что люди используют для перевода или локализации своих веб-приложений.
Мой собственный подход. Я боюсь, это безнадежно наивный, на самом деле просто ручная волна в этом вопросе, загружая сущность из хранилища данных для каждого пакета на основе значения локали, записанного в профиле пользователя. По крайней мере, это позволяет выполнять переводы нескольких строк:
package foo
...
type Messages struct {
Locale string
ErrorDatastore string
LoginSuccessful string
...
}
Сохранить с идентификатором строки, соответствующим языку, затем загрузить в контекст Gorilla или аналогичный:
const Messages ContextKey = iota
...
k := datastore.NewKey(c, "Messages", "en_US", 0, nil)
m := new(Messages)
if err := datastore.Get(c, k, m); err != nil {
...
} else {
context.Set(r, Messages, m)
}
Это явно невероятно ограниченно, но, по крайней мере, делает строки доступными для вызова кода через context.Get(r, foo.Messages). Может ли кто-нибудь указать мне на более полезные реализации или предложить лучший подход?
Изменить (актуально, но не полностью полезно):