Urgent.News

One page, thousands of outlets. See who else covered it.

Editions

Tech

i18n sin gettext: traducciones en JSON con claves de punto

Quieres que tu app hable español e inglés. Buscas cómo, y el ecosistema te empuja a gettext o Babel: ficheros .po , un paso de compilación a .mo , herramientas de extracción. Potente, sí. Pero para una app pequeña o mediana es un peaje que no querías pagar — solo necesitabas un t() honesto. Lo resolví tantas veces que lo empaqueté: dotkey-i18n , Python puro, sin dependencias. Tus traducciones son…

Quieres que tu aplicación hable varios idiomas, tal vez español e inglés. Inevitablemente te encontrarás con la gente recomendando utilizar gettext o Babel, junto con ficheros .po, compilación y herramientas de extracción. Aunque efectivo, esto puede ser un costo innecesario para aplicaciones de pequeño o mediano tamaño que solo necesitan una función tan simple como t().

Después de experimentar con varios enfoques, el autor decidió crear su propia solución llamada dotkey-i18n. Esta es una aplicación pura de Python sin ninguna dependencia. Las traducciones se representan en formato JSON, lo cual puede ser editado fácilmente por cualquiera. Un ejemplo sería:

```

{

"login": {

"welcome": "Hola, {name}",

"submit": "Entrar"

},

"menu": {

"reports": "Informes",

"settings": "Ajustes"

}

}

```

En su implementación se encuentran tres aspectos clave:

1. Las claves tienen notación de punto. Por ejemplo, t(login.submit) navega a través del JSON anidado para mostrar la traducción del botón "Entrar".

2. El sistema falla de manera lógica al buscar una clave que no exista en el idioma solicitado. En su lugar, intenta buscar la clave en el idioma predeterminado antes de renderizarlo.

3. Las traducciones no necesariamente son completas. Pueden ir incompletas sin dejar huecos en blanco en la interfaz. Una clave que falle devuelve la propia clave, en lugar de producir una excepción durante el renderizado.

Una de las mayores ventajas de dotkey-i18n es que es agnóstico de cualquier framework. El idioma actual se puede obtener desde el getter de idioma inyectable, lo que lo hace perfectamente adecuado para ser utilizado en diversos entornos como NiceGUI, Flask, FastAPI o incluso un script simple. Este código es fácil de integrar en cualquier aplicación de Python que necesite soporte de traducción.

Además, la prioridad de este sistema es el siguiente: lang= explícito → lang_getter() → idioma por defecto. En caso de que la clave no exista en el idioma solicitado, se intenta utilizar el idioma predeterminado.

La idea de dotkey-i18n surgió de un proyecto de sistema de informes bilingüe. El código original estaba atado a un determinado framework, lo que limitaba su versatilidad. Al extraerlo y crear una solución más flexible, se obtuvo un producto que no depende de su sistema de origen.

Si quieres usar esta herramienta, simplemente instala dotkey-i18n con el siguiente comando: pip install dotkey-i18n. Código, tests y todos los detalles de la implementación, que incluyen notación de punto, fallos, claves ausentes y tratamiento de JSON corrupto, se pueden encontrar en el repositorio de GitHub: github.com/isazajuancarlos/dotkey-i18n.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

The problem with the happy path

I recently had to do a deployment for a client demo. On local everything worked fine. All the tests were passing. All the data was where it was supposed to be. And then I pushed it to production.

  • Client demo deployed smoothly in local environment
  • Production queries failed due to empty state
  • Reporter learned importance of testing unhappy paths

var in JavaScript

var is one of the ways to create a variable in JavaScript. A variable is a place to store a value, like a name or a number. var is mostly seen in old JavaScript code, written before 2015.

  • "var" is a common variable declaration method in JavaScript.
  • Variables created with "var" can be modified and re-declared.
  • "var" variables are hoisted to the top of their containing function.

React Native Architecture: 8 Folder Structures for Scalable Apps

A team-lead's breakdown of 8 real React Native project architectures — what each one actually solves, where the "Domain-Driven" and "Micro-Frontend" labels get misused, and how to pick one without…

  • Flat structure suitable for prototypes and MVPs, but becomes unmanageable with growing files
  • Feature-based structure common in production apps, organizes code by product area
  • Domain-based structure aligns with business capabilities, mirrors org chart for large-scale products

More from Sunday 16 August →