Internacionalización (i18n) en Go (Golang) con la biblioteca go-i18n
\nLa 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.
\nEn 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\nInstalación de la biblioteca go-i18n
\nPara comenzar a trabajar con go-i18n, debe instalar el paquete usando el gestor de dependencias de Go:
\ngo get github.com/nicksnyder/go-i18n/v2/i18n\nTambién necesitará un paquete para analizar archivos de traducción (por ejemplo, JSON o YAML):
\ngo get github.com/nicksnyder/go-i18n/v2/i18n/bundle\ngo get github.com/nicksnyder/go-i18n/v2/i18n/localizer\n\nEstructura de los archivos de localización
\nLa 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:
\nlocales/\n active.en.json # Inglés\n active.ru.json # Ruso\n active.fr.json # Francés\n\nEjemplo de archivo de traducción (active.en.json)
\nCreemos 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\nEjemplo de archivo de traducción (active.ru.json)
\nArchivo 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\nInicialización y uso en el código
\nAhora escribamos código en Go que cargue los archivos de traducción y los use para mostrar mensajes según el idioma seleccionado.
\npackage 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\nSoporte de formas plurales (Pluralization)
\nUna de las características clave de go-i18n es el manejo correcto de formas plurales. La biblioteca utiliza las reglas Unicode
También en la biblioteca
Envío de correo electrónico en TypeScript: guía completa con nodemailer y SMTP
Trabajo con CSV en Rust: bibliotecas csv, serde y procesamiento eficiente de datos
Tokens JWT en Java: guía completa para trabajar con JSON Web Tokens
Detekt para Kotlin: guía completa con ejemplos prácticos