¿Por qué su aplicación Go necesita internacionalización (i18n)?
\n\nEscribió un servicio genial en Go. Es rápido, concurrente, se compila en segundos. Pero hay un problema: todos los mensajes, botones y sugerencias están en ruso (o inglés). Y el mundo quiere usar su producto en su idioma nativo. Aquí es donde entra en escena la internacionalización de aplicaciones Go (i18n).
\n\nMuchos piensan que la localización Go es un dolor de cabeza con archivos JSON y parches. Pero no es así. El ecosistema Go ofrece soluciones elegantes que permiten agregar soporte para cualquier cantidad de idiomas, sin inflar el código ni perder rendimiento. En este artículo, analizaremos cómo implementar correctamente i18n en Go para que su aplicación hable cien idiomas.
\n\n¿Qué son i18n y l10n? Aclarando la terminología
\n\nAntes de escribir código, pongamos orden en los términos:
\n\n- \n
- i18n (Internationalization) — el proceso de diseñar una aplicación para que pueda adaptarse a diferentes idiomas y regiones sin reescribir el código. Se trata de la arquitectura. \n
- l10n (Localization) — la adaptación del contenido (traducción de texto, formato de fechas, monedas) a una configuración regional específica (por ejemplo, en-US, ru-RU, de-DE). \n
En el contexto de la internacionalización de aplicaciones Go, i18n es la preparación del código (usar claves en lugar de cadenas), y l10n es llenar esas claves con traducciones.
\n\nEligiendo la biblioteca: ¿por qué go-i18n?
\n\nEn Go hay varias bibliotecas populares para trabajar con traducciones. Después de probar varias opciones, la mejor elección para la mayoría de los proyectos es go-i18n de nicksnyder. ¿Por qué?
\n\n- \n
- Facilidad de uso — código boilerplate mínimo. \n
- Soporte de pluralización — declinación correcta para "1 mensaje", "2 mensajes", "5 mensajes". \n
- Soporte para TOML/YAML/JSON — elija el formato de traducción que prefiera. \n
- Soporte de plantillas — puede insertar variables directamente en la cadena de traducción. \n
- Utilidad integrada para extraer claves — no es necesario escribir traducciones manualmente. \n
Ejemplo práctico: creando un servicio multilingüe en Go
\n\nVamos a crear un servidor web simple en Go que salude al usuario en su idioma.
\n\nPaso 1: Instalación y estructura del proyecto
\n\nInstale la biblioteca y cree la estructura de directorios:
\n\ngo get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language\n\nEstructura del proyecto:
\n\nmiapp/\n├── main.go\n└── locales/\n ├── active.en.toml\n ├── active.ru.toml\n └── active.de.toml\n\nPaso 2: Crear archivos de traducción
\n\nlocales/active.en.toml:
\n\n[greeting]\ndescription = "Saludo al usuario"\none = "¡Hola, {{.Name}}!"\nother = "¡Hola, {{.Name}}!"\n\n[inbox]\ndescription = "Cantidad de mensajes en la bandeja"\none = "Tienes {{.Count}} mensaje nuevo."\nother = "Tienes {{.Count}} mensajes nuevos."\n\nlocales/active.ru.toml:
\n\n[greeting]\ndescription = "Saludo al usuario"\none = "¡Привет, {{.Name}}!"\nother = "¡Привет, {{.Name}}!"\n\n[inbox]\ndescription = "Cantidad de mensajes en la bandeja"\none = "У вас {{.Count}} новое сообщение."\nfew = "У вас {{.Count}} новых сообщения."\nmany = "У вас {{.Count}} новых сообщений."\nother = "У вас {{.Count}} сообщений."\n\nObserve las formas plurales en ruso: one, few, many, other. La pluralización Go es una característica potente que maneja correctamente reglas complejas de declinación.
\n\nPaso 3: Escribir el código en Go
\n\nAhora la parte interesante — la internacionalización