Internacionalización de aplicaciones Go: de $ a € sin dolor de cabeza

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

¿Por qué su aplicación Go necesita internacionalización (i18n)?

\n\n

Escribió 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\n

Muchos 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\n

Antes 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
\n\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\n

Eligiendo la biblioteca: ¿por qué go-i18n?

\n\n

En 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
\n\n

Ejemplo práctico: creando un servicio multilingüe en Go

\n\n

Vamos a crear un servidor web simple en Go que salude al usuario en su idioma.

\n\n

Paso 1: Instalación y estructura del proyecto

\n\n

Instale la biblioteca y cree la estructura de directorios:

\n\n
go get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language
\n\n

Estructura del proyecto:

\n\n
miapp/\n├── main.go\n└── locales/\n    ├── active.en.toml\n    ├── active.ru.toml\n    └── active.de.toml
\n\n

Paso 2: Crear archivos de traducción

\n\n

locales/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\n

locales/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\n

Observe 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\n

Paso 3: Escribir el código en Go

\n\n

Ahora la parte interesante — la internacionalización

Blogs

Book Recommendations