go-i18n — це Go пакет та інструмент, які допомагають перекладати Go програми на різні мови.
- Підтримує множинні форми для всіх 200+ мов у Unicode Common Locale Data Repository (CLDR).
- Код і тести автоматично генеруються з даних CLDR.
- Підтримує рядки з іменованими змінними, використовуючи синтаксис text/template.
- Підтримує файли повідомлень у будь-якому форматі (наприклад, JSON, TOML, YAML).
Пакет i18n забезпечує підтримку пошуку повідомлень відповідно до набору мовних уподобань.
import "github.com/nicksnyder/go-i18n/v2/i18n"
Створіть Bundle, який використовуватимете протягом усього терміну служби вашої програми.
bundle := i18n.NewBundle(language.English)
Завантажуйте переклади у ваш пакет під час ініціалізації.
bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
bundle.LoadMessageFile("es.toml")
// Якщо використовуєте go:embed
//go:embed locale.*.toml
var LocaleFS embed.FS
bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
bundle.LoadMessageFileFS(LocaleFS, "locale.es.toml")
Створіть Localizer, який використовуватимете для набору мовних уподобань.
func(w http.ResponseWriter, r *http.Request) {
lang := r.FormValue("lang")
accept := r.Header.Get("Accept-Language")
localizer := i18n.NewLocalizer(bundle, lang, accept)
}
Використовуйте Localizer для пошуку повідомлень.
localizer.Localize(&i18n.LocalizeConfig{
DefaultMessage: &i18n.Message{
ID: "PersonCats",
One: "{{.Name}} has {{.Count}} cat.",
Other: "{{.Name}} has {{.Count}} cats.",
},
TemplateData: map[string]interface{}{
"Name": "Nick",
"Count": 2,
},
PluralCount: 2,
}) // Nick has 2 cats.
Команда goi18n управляє файлами повідомлень, що використовуються пакетом i18n.
go install -v github.com/nicksnyder/go-i18n/v2/goi18n@latest
goi18n -help
Використовуйте команду goi18n extract
, щоб витягнути всі літерали структури i18n.Message із Go-файлів у файл повідомлень для перекладу.
# active.en.toml
[PersonCats]
description = "The number of cats a person has"
one = "{{.Name}} has {{.Count}} cat."
other = "{{.Name}} has {{.Count}} cats."
-
Створіть порожній файл повідомлень для мови, яку ви хочете додати (наприклад, translate.uk.toml).
-
Виконайте команду
goi18n merge active.en.toml translate.es.toml
, щоб заповнитиtranslate.es.toml
повідомленнями для перекладу.# translate.uk.toml [HelloPerson] hash = "sha1-5b49bfdad81fedaeefb224b0ffc2acc58b09cff5" other = "Hello {{.Name}}"
-
Після перекладу файлу
translate.es.toml
перейменуйте його наactive.es.toml
.# active.uk.toml [HelloPerson] hash = "sha1-5b49bfdad81fedaeefb224b0ffc2acc58b09cff5" other = "Вітаю {{.Name}}"
-
Завантажте файл
active.es.toml
у свій пакет.bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal) bundle.LoadMessageFile("active.es.toml")
Якщо ви додали нові повідомлення до своєї програми:
- Виконайте
goi18n extract
, щоб оновити файлactive.en.toml
новими повідомленнями. - Виконайте
goi18n merge active.*.toml
, щоб згенерувати оновлені файлиtranslate.*.toml
. - Перекладіть усі повідомлення у файлах
translate.*.toml
. - Виконайте
goi18n merge active.*.toml translate.*.toml
, щоб об’єднати перекладені повідомлення з активними файлами повідомлень.
- Ознайомтеся з документацією.
- Подивіться приклади коду та тести.
- Перегляньте приклад додатку.
Переклади цього документа, зроблені спільнотою, можна знайти в папці .github.
Ці переклади підтримуються спільнотою і не підтримуються автором цього проєкту.
Немає гарантії, що вони є точними або актуальними.
go-i18n доступний під ліцензією MIT. Див. файл LICENSE для отримання додаткової інформації.