Internationalization (i18n) и Localization (l10n) в Go

Информация взята отсюда

Альтернативный пакет (https://github.com/nicksnyder/go-i18n).

Internationalization (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)
}

Localization (l10n)

Для локализации используются те же пакеты. Чтобы выводить сообщение в зависимости от языка необходимо задать шаблоны используя метод 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()
}