Internacionalización (i18n) en Go (Golang): biblioteca go-i18n

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Internacionalización (i18n) en Go (Golang) con la biblioteca go-i18n

\n

La internacionalización (i18n) es el proceso de diseñar software de manera que pueda adaptarse fácilmente a diferentes idiomas y regiones sin cambios en el código fuente. En el lenguaje Go (Golang), una de las bibliotecas más populares y potentes para implementar i18n es go-i18n. Esta biblioteca proporciona a los desarrolladores herramientas convenientes para gestionar traducciones, soportar formas plurales (pluralization) y trabajar con contexto.

\n

En este artículo, analizaremos en detalle cómo usar go-i18n para internacionalizar su aplicación Go: desde la instalación hasta la creación de un sistema de localización completo.

\n\n

Instalación de la biblioteca go-i18n

\n

Para comenzar a trabajar con go-i18n, debe instalar el paquete usando el gestor de dependencias de Go:

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

También necesitará un paquete para analizar archivos de traducción (por ejemplo, JSON o YAML):

\n
go get github.com/nicksnyder/go-i18n/v2/i18n/bundle\ngo get github.com/nicksnyder/go-i18n/v2/i18n/localizer
\n\n

Estructura de los archivos de localización

\n

La biblioteca go-i18n admite el almacenamiento de traducciones en formatos JSON, YAML o TOML. Se recomienda crear archivos separados para cada idioma. Ejemplo de estructura de directorios:

\n
locales/\n  active.en.json   # Inglés\n  active.ru.json   # Ruso\n  active.fr.json   # Francés
\n\n

Ejemplo de archivo de traducción (active.en.json)

\n

Creemos un archivo para el idioma inglés con un mensaje y soporte para formas plurales:

\n
{\n  "hello_world": {\n    "other": "Hello, World!"\n  },\n  "messages_count": {\n    "one": "You have {{.Count}} new message.",\n    "few": "You have {{.Count}} new messages.",\n    "many": "You have {{.Count}} new messages.",\n    "other": "You have {{.Count}} new messages."\n  }\n}
\n\n

Ejemplo de archivo de traducción (active.ru.json)

\n

Archivo similar para el idioma ruso teniendo en cuenta las reglas de formas plurales (uno, varios, muchos):

\n
{\n  "hello_world": {\n    "other": "Привет, мир!"\n  },\n  "messages_count": {\n    "one": "У вас {{.Count}} новое сообщение.",\n    "few": "У вас {{.Count}} новых сообщения.",\n    "many": "У вас {{.Count}} новых сообщений.",\n    "other": "У вас {{.Count}} сообщений."\n  }\n}
\n\n

Inicialización y uso en el código

\n

Ahora escribamos código en Go que cargue los archivos de traducción y los use para mostrar mensajes según el idioma seleccionado.

\n
package main\n\nimport (\n    "fmt"\n    "github.com/nicksnyder/go-i18n/v2/i18n"\n    "golang.org/x/text/language"\n)\n\nfunc main() {\n    // Creamos un bundle (almacén de traducciones)\n    bundle := i18n.NewBundle(language.English)\n    bundle.RegisterUnmarshalFunc("json", json.Unmarshal)\n\n    // Cargamos los archivos de traducción\n    bundle.MustLoadMessageFile("locales/active.en.json")\n    bundle.MustLoadMessageFile("locales/active.ru.json")\n\n    // Creamos un localizador para el idioma ruso\n    localizer := i18n.NewLocalizer(bundle, language.Russian.String())\n\n    // Ejemplo de uso con un mensaje simple\n    helloMsg, _ := localizer.Localize(&i18n.LocalizeConfig{\n        MessageID: "hello_world",\n    })\n    fmt.Println(helloMsg) // Salida: Привет, мир!\n\n    // Ejemplo de uso con números plurales\n    for _, count := range []int{1, 2, 5, 10} {\n        msg, _ := localizer.Localize(&i18n.LocalizeConfig{\n            MessageID: "messages_count",\n            PluralCount: count,\n            TemplateData: map[string]interface{}{\n                "Count": count,\n            },\n        })\n        fmt.Println(msg)\n    }\n}
\n\n

Soporte de formas plurales (Pluralization)

\n

Una de las características clave de go-i18n es el manejo correcto de formas plurales. La biblioteca utiliza las reglas Unicode

Recommendations