В 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!