Как в go сделать локализацию из файла?

В Go для реализации локализации из файла можно использовать пакет "github.com/nicksnyder/go-i18n".

Для начала, установим этот пакет с помощью команды go get:

go get github.com/nicksnyder/go-i18n/v2/i18n

Затем, создадим файл "translations.json", в котором будем хранить переводы на разные языки. Формат этого файла будет следующим:

{
  "en": {
    "greeting": "Hello, World!"
  },
  "es": {
    "greeting": "¡Hola mundo!"
  },
  "fr": {
    "greeting": "Bonjour le monde!"
  }
}

Далее, создадим структуру для хранения наших сообщений:

type Message struct {
    Greeting string `json:"greeting"`
}

Теперь, для загрузки переводов из файла и использования их в приложении, можно использовать следующий код:

package main

import (
    "encoding/json"
    "fmt"
    "github.com/nicksnyder/go-i18n/v2/i18n"
    "golang.org/x/text/language"
    "os"
)

type Message struct {
    Greeting string `json:"greeting"`
}

func main() {
    // Создаем экземпляр Bundle для загрузки переводов
    bundle := i18n.NewBundle(language.English)

    // Загружаем переводы из файла
    file, err := os.Open("translations.json")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    var translations map[string]Message
    err = json.NewDecoder(file).Decode(&translations)
    if err != nil {
        fmt.Println(err)
        return
    }

    for lang, translation := range translations {
        // Добавляем переводы в Bundle
        bundle.AddMessages(language.Make(lang), &i18n.Message{
            ID:    "greeting",
            Other: translation.Greeting,
        })
    }

    // Устанавливаем переводы в качестве текущего языка
    bundle.RegisterUnmarshalFunc("json", json.Unmarshal)
    localizer := i18n.NewLocalizer(bundle, "en")

    // Используем переводы в приложении
    translated, err := localizer.Localize(&i18n.LocalizeConfig{
        MessageID: "greeting",
    })
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(translated)
}

Здесь мы создаем экземпляр Bundle, загружаем переводы из файла, добавляем их в Bundle и затем используем локализацию в приложении. В приведенном коде мы используем английский язык ("en"), но вы можете использовать любой другой язык, предусмотренный в файле "translations.json".

Надеюсь, это поможет вам реализовать локализацию из файла в приложении на Go!