Característica

Entrega CDN: Traducciones en Caché en el Edge a Nivel Mundial | better-i18n

Traducciones servidas desde Cloudflare R2 a través de más de 300 ubicaciones edge. Fusiona, previsualiza, sube en batch y elimina duplicados — luego entrega en todo el mundo sin volver a desplegar tu aplicación.

Entrega CDN: Traducciones en Caché en el Edge a Nivel Mundial

Cada traducción que publicas en better-i18n se despliega en la red edge global de Cloudflare. Tu aplicación obtiene las traducciones desde el nodo edge más cercano — sin round-trip al servidor de origen, sin necesidad de redesplegar la app para actualizar traducciones.


Estructura de URL del CDN

Las traducciones siguen un patrón de URL predecible basado en tu organización, proyecto, locale y namespace:

https://cdn.better-i18n.com/{org}/{project}/{locale}/{namespace}.json

Ejemplos:

# Namespace common en inglés
https://cdn.better-i18n.com/acme/web-app/en/common.json

# Namespace auth en turco
https://cdn.better-i18n.com/acme/web-app/tr/auth.json

# Namespace de navegación en francés
https://cdn.better-i18n.com/acme/web-app/fr/nav.json

Cada combinación de namespace-locale es un archivo JSON independiente, así tu app solo carga las traducciones que necesita. Esta estructura de URL es estable y cacheable — los nodos edge del CDN, las cachés del navegador y los service workers pueden aprovecharla.

Manifest del Proyecto

El CDN también sirve un archivo manifest con la configuración de idiomas de tu proyecto:

https://cdn.better-i18n.com/{org}/{project}/manifest.json

Devuelve el array languages con todos los locales de tu proyecto. El SDK de Expo lo utiliza para descubrir automáticamente los idiomas disponibles en tiempo de ejecución.


Operaciones del CDN

better-i18n ofrece un conjunto completo de operaciones de gestión del CDN a través del CLI, la REST API y las herramientas MCP.

Configuración e Instalación

OperaciónDescripción
cdn.setupInicializa la entrega CDN para tu proyecto. Crea la estructura de bucket en R2 y configura el enrutamiento edge.
cdn.uninstallElimina la entrega CDN. Limpia el almacenamiento R2 y la configuración edge.

Operaciones de Subida

Subida Individual (cdn.upload)

Sube un archivo namespace-locale individual al CDN:

# Subir las traducciones common en inglés
better-i18n cdn upload --locale en --namespace common

Escribe el archivo en R2 e invalida la caché edge para esa ruta específica. Los cambios se propagan a más de 300 nodos edge en segundos.

Subida en Lote (cdn.uploadBatch)

Sube múltiples combinaciones de namespace-locale en una sola operación:

# Subir todos los namespaces para inglés y turco
better-i18n cdn upload-batch --locales en,tr --namespaces common,auth,dashboard

La subida en lote es significativamente más rápida que las subidas individuales al publicar múltiples archivos. Agrupa las escrituras en R2 y las invalidaciones de caché, reduciendo el tiempo total de propagación.

Operaciones de Merge

Merge te permite actualizar claves específicas dentro de un archivo CDN existente sin reemplazar el archivo completo. Esto es fundamental para actualizaciones incrementales de traducciones.

Merge (cdn.merge)

# Fusionar claves actualizadas en el namespace common de inglés
better-i18n cdn merge --locale en --namespace common --keys "welcome,nav.home"

Merge lee el archivo existente de R2, aplica los cambios a nivel de clave y escribe el resultado. Las claves no incluidas en el merge permanecen sin cambios. Esto evita sobrescrituras accidentales cuando varios miembros del equipo o pipelines de automatización publican de forma simultánea.

Vista Previa del Merge (cdn.mergePreview)

Previsualiza el resultado de una operación de merge antes de ejecutarla:

# Previsualizar el resultado del merge sin aplicarlo
better-i18n cdn merge-preview --locale en --namespace common --keys "welcome"

Devuelve un diff mostrando claves añadidas, actualizadas y sin cambios. Úsalo en pipelines de CI o flujos de revisión para verificar los cambios antes de que pasen a producción.

Gestión de Archivos

OperaciónDescripción
cdn.listFilesLista todos los archivos desplegados actualmente en el CDN para tu proyecto. Devuelve locale, namespace, tamaño y timestamp de última modificación de cada archivo.
cdn.deleteFileElimina un archivo namespace-locale específico del CDN. Útil al deprecar un namespace o eliminar un locale.

Detección y Limpieza de Duplicados

Los proyectos de traducción acumulan duplicados con el tiempo — especialmente cuando los namespaces se reorganizan o las claves se mueven entre namespaces.

Detectar Duplicados (cdn.detectDuplicates)

Analiza todos los archivos CDN de tu proyecto e identifica valores de traducción duplicados entre namespaces:

better-i18n cdn detect-duplicates

Devuelve un informe mostrando qué claves comparten valores idénticos en distintos namespaces. Esto te ayuda a consolidar traducciones en namespaces compartidos y reducir el tamaño total del payload CDN.

Limpiar Duplicados (cdn.cleanupDuplicates)

Resuelve automáticamente los duplicados detectados según tus preferencias de consolidación:

# Mover duplicados al namespace common
better-i18n cdn cleanup-duplicates --target-namespace common

Esta es una operación destructiva — ejecuta siempre cdn.detectDuplicates primero para revisar qué cambiará, y usa cdn.mergePreview para verificar el resultado en el namespace destino.


Cómo Funcionan las Actualizaciones

  1. Edita traducciones en el dashboard, mediante la REST API o las herramientas MCP
  2. Publica usando publishTranslations — esto dispara un job de sincronización cdn_upload
  3. El CDN se actualiza en segundos — Cloudflare propaga el cambio a todos los nodos edge
  4. Tu app recoge los cambios en la siguiente solicitud de traducciones — sin necesidad de redespliegue

Para mayor control granular, usa cdn.merge en lugar de la subida completa para actualizar solo las claves que cambiaron. Combínalo con cdn.mergePreview en tu pipeline de CI para validar los despliegues al CDN antes de aplicarlos.


Integración con Frameworks

Web: Next.js, TanStack Start, Vite

Los SDKs web (@better-i18n/next, @better-i18n/use-intl) gestionan la obtención desde el CDN automáticamente según tu i18n.config.ts:

// i18n.config.ts
export const project = "acme/web-app";
export const defaultLocale = "en";

El SDK resuelve la URL del CDN desde el identificador de tu proyecto y obtiene los archivos namespace-locale correctos en tiempo de ejecución.

Mobile: Expo / React Native

@better-i18n/expo añade caché offline-first sobre la entrega CDN:

import { initBetterI18n, storageAdapter } from '@better-i18n/expo';
import { MMKV } from 'react-native-mmkv';

const mmkv = new MMKV({ id: 'translations' });

await initBetterI18n({
  project: 'acme/mobile-app',
  i18n,
  defaultLocale: 'en',
  storage: storageAdapter(mmkv),
});

Estrategia network-first:

  1. Obtener desde el CDN (obtener las traducciones más recientes)
  2. Recurrir a la caché persistente (MMKV o AsyncStorage)
  3. Recurrir a datos estáticos empaquetados (opcional)

Una vez que el usuario abre la app con conectividad de red, las traducciones se almacenan en caché localmente. La app funciona completamente offline desde ese momento.

Cualquier Cliente HTTP

El CDN es un endpoint HTTPS estándar — no se requiere SDK:

curl https://cdn.better-i18n.com/acme/web-app/en/common.json
{
  "welcome": "Welcome to our app",
  "nav.home": "Home",
  "nav.settings": "Settings"
}

Úsalo desde cualquier lenguaje o plataforma: Swift, Kotlin, Go, Python, Ruby — cualquier cosa que pueda hacer una solicitud HTTP.


Infraestructura

  • Cloudflare Workers — Computación edge en más de 300 ubicaciones en todo el mundo
  • Cloudflare R2 — Almacenamiento de objetos sin costes de egreso para archivos de traducción
  • Propagación automática — Los cambios llegan a todos los nodos edge en segundos
  • Protección DDoS — Integrada en la red de Cloudflare
  • TLS 1.3 — Todas las solicitudes al CDN están cifradas
  • Cero costes de egreso — R2 elimina los cargos por ancho de banda independientemente del volumen de tráfico

Organización de Namespaces

Organiza las traducciones en namespaces para controlar qué se carga:

acme/web-app/
├── en/
│   ├── common.json      → Cadenas de UI compartidas
│   ├── auth.json        → Login, registro, recuperación de contraseña
│   ├── dashboard.json   → Cadenas específicas del dashboard
│   └── marketing.json   → Textos de la landing page
├── tr/
│   ├── common.json
│   ├── auth.json
│   └── ...
└── manifest.json        → Configuración de idiomas del proyecto

Tu app carga solo los namespaces que necesita para la página o funcionalidad actual. Una página de login carga auth.json; el dashboard carga dashboard.json. Esto mantiene los bundles pequeños y las cargas de página rápidas.

Usa cdn.detectDuplicates periódicamente para identificar claves que aparecen en múltiples namespaces con valores idénticos — luego consolídalas en common.json usando cdn.cleanupDuplicates.


Controles de Publicación

El CDN solo sirve traducciones publicadas. Usa el pipeline de publicación para controlar qué entra en producción:

  1. getPendingChanges — Previsualiza qué se desplegará al CDN
  2. publishTranslations — Despliega cambios (todos o traducciones específicas)
  3. cdn.mergePreview — Previsualiza resultados de merge a nivel de clave antes de aplicar
  4. cdn.merge — Aplica actualizaciones incrementales de claves sin reemplazar el archivo completo
  5. getSyncs / getSync — Monitoriza el estado del despliegue

Esto te ofrece un flujo de trabajo por etapas: previsualiza cambios pendientes, verifica resultados del merge, publica y monitoriza el despliegue — todo sin tocar el código de la aplicación.


Primeros Pasos

  1. Crea tu proyecto en dash.better-i18n.com
  2. Inicializa el CDN con cdn.setup para configurar el almacenamiento R2 y el enrutamiento edge
  3. Añade traducciones mediante el dashboard, la REST API o las herramientas MCP
  4. Publica para desplegar al CDN
  5. Integra usando @better-i18n/next, @better-i18n/use-intl, @better-i18n/expo, o HTTP directo

Las traducciones se sirven desde el CDN en todos los planes, incluido el plan gratuito.

Descubra más

Translation Sync Engine — Procesamiento Async Confiable para su Pipeline de Localización con better-i18n

Una pipeline de traducción async confiable que mantiene su código fuente, traducciones y CDN perfectamente sincronizados — con detección de conflictos, activity logging y cero pérdida de datos.

better-i18n Doctor: Monitoreo Automatizado de Calidad de Traducción

Escanea tu código en busca de traducciones faltantes, orphan keys y discrepancias en placeholders. Obtén una puntuación de salud del 0 al 100 con cada commit.

Operaciones Batch de better-i18n para Gestión de Traducciones a Escala Enterprise

Actualiza, publica y gestiona miles de traducciones en una sola operación. Las herramientas batch de better-i18n manejan volúmenes enterprise sin esfuerzo.

Developer Experience & Platform UX — better-i18n: Construido para la velocidad, diseñado para el disfrute

Una developer experience cuidadosamente diseñada donde cada interacción es intencional — navegación por Command Palette, Inline Editing, Auto-Sync y asistencia impulsada por IA integrada en cada flujo de trabajo.

better-i18n Gestión de Medios: Activos de Contenido para Proyectos Localizados

Sube, organiza y entrega activos de medios junto con tus traducciones — desde fotos de perfil hasta imágenes de contenido, todo almacenado en el ultrarrápido R2 edge storage.

Seguridad y Compliance Empresarial para Equipos de better-i18n

Autenticación, cifrado y cumplimiento de nivel empresarial — protegiendo tus flujos de trabajo de traducción desde el código hasta producción.