Internationalization (i18n) и Localization (l10n) в Go
Информация взята отсюда
Альтернативный пакет (https://github.com/nicksnyder/go-i18n)
Для форматирования вывода информации в национальном формате (например, чисел) используются следующие пакеты:
По-умолчанию, они не установлены. Необходимо их скачать:
go get -u golang.org/x/text/language
go get -u golang.org/x/text/message
Для вывода информации на основании языка используется тип message.Printer
.
Используется он следующий образом:
package main
import (
"fmt"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
func main() {
p = message.NewPrinter(language.Russian)
p.Printf("Вы получили %.2f монет.\n", 16521.56)
}
Для локализации используются те же пакеты. Чтобы выводить сообщение в зависимости от языка необходимо задать шаблоны используя метод message.SetString().
Пример кода:
package main
import (
"fmt"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
func init() {
message.SetString(language.Russian, "You've got %.2f coins.", "Вы получили %.2f монет.")
message.SetString(language.English, "You've got %.2f coins.", "You've got %.2f coins.")
}
func main() {
p := message.NewPrinter(language.English)
p.Printf("You've got %.2f coins.", 16521.56)
fmt.Println()
p = message.NewPrinter(language.Russian)
p.Printf("You've got %.2f coins.", 16521.56)
fmt.Println()
}