xTaskjs 1.0 ya está disponible: cuentas por rol, documentación y una interfaz personalizable.

Paquetes

@xtaskjs/internationalization

Traducciones dependientes de la petición, fallback de locale, carga de namespaces y servicios de formateo compatibles con DI.

npm install @xtaskjs/internationalization reflect-metadata Ruta del paquete: packages/internationalization

Resumen

Qué controla este paquete en el runtime

Internationalization añade resolución de locale por petición, búsqueda de traducciones, pluralización y helpers de formato al ciclo de vida de xtask. Registra los servicios de locale antes de que se resuelvan los controladores y expone un servicio inyectable para controladores, vistas y presenters de dominio.

Qué ofrece

  • Traducciones dependientes de la petición con fallback de locale y pluralización por conteo exacto.
  • Carga asíncrona de namespaces para paquetes de traducción específicos por funcionalidad.
  • Formateo integrado de números, moneda, fecha y fecha-hora con formatters personalizados opcionales.
  • InjectInternationalizationService() expone traducción y formateo conscientes del locale dentro de clases gestionadas por DI.

Cómo encaja

  • Se inicializa automáticamente antes de que se resuelvan los listeners del ciclo de vida del contenedor durante CreateApplication().
  • Resuelve el locale desde parámetros de consulta y cabeceras de la petición, y puede ampliarse con resolvers personalizados.
  • Lo usan este sitio web y los ejemplos 09-internationalization_app y 10-internationalization_express_app.

Mapa de uso

Qué peso tiene este paquete dentro del runtime

Arranque

4/5

Inyección de dependencias

4/5

Localización

5/5

Renderizado

4/5

Entrega HTTP

3/5

Flujo del paquete

Cómo atraviesa este paquete las fases del runtime de xtaskjs

Antes del arranque

Registra locales, formatters, ajustes de fallback y resolvers de locale opcionales para que las reglas de traducción se conozcan antes de que empiece el manejo de peticiones.

Durante CreateApplication()

Internationalization inicializa servicios de locale dependientes de la petición antes de que se resuelvan controladores y vistas, habilitando traducciones y formatos inyectados desde la primera petición.

Durante app.close()

El gestor del ciclo de vida libera el estado de traducción en tiempo de ejecución junto con el resto de servicios de la aplicación.

Superficie API

Exports representativos del paquete original

Configuración y locales

  • configureInternationalization
  • Internationalization
  • registerInternationalizationLocale
  • InternationalizationLocale
  • InternationalizationResolver

Runtime de traducción

  • InternationalizationService
  • InjectInternationalizationService
  • InjectI18nService
  • runWithInternationalizationContext

Formateo y ciclo de vida

  • registerInternationalizationFormatter
  • InjectInternationalizationLifecycleManager
  • InjectI18nLifecycleManager
  • initializeInternationalizationIntegration
  • shutdownInternationalizationIntegration

Uso

Flujo típico de adopción

1. Configura locales y fallbacks

Registra tus catálogos de locale, el locale por defecto, el fallback y cualquier formatter personalizado durante el arranque.

2. Resuelve el locale desde la petición

Usa parámetros de consulta, Accept-Language, cookies o resolvers personalizados para que el locale actual forme parte del contexto de la petición.

3. Inyecta traducciones en páginas y servicios

Llama al servicio inyectado dentro de controladores, vistas, presenters y helpers de dominio para que todo el formateo se mantenga consistente.

Ejemplo

Fragmento de referencia

Registro de locales más traducciones inyectadas
import { Service } from "@xtaskjs/core";
import {
  InjectInternationalizationService,
  InternationalizationService,
  configureInternationalization,
  registerInternationalizationLocale,
} from "@xtaskjs/internationalization";

configureInternationalization({
  defaultLocale: "en-US",
  fallbackLocale: "en-US",
});

registerInternationalizationLocale({
  locale: "en-US",
  translations: { checkout: { total: "Total: {{amount, currency}}" } },
});

@Service()
export class CheckoutPresenter {
  constructor(
    @InjectInternationalizationService()
    private readonly intl: InternationalizationService
  ) {}

  presentTotal(amount: number) {
    return this.intl.t("checkout.total", { params: { amount } });
  }
}

Ejemplos

Ejemplos oficiales para revisar después

Ejemplos de referencia: 09-internationalization_app and 10-internationalization_express_app

Relacionados

Paquetes que suelen usarse junto a este