Lingo.dev + .ts (TypeScript)

Lingo.dev CLI traduce archivos de localización TypeScript preservando las definiciones de tipo, estructuras de objetos y sintaxis específica de TypeScript. El CLI mantiene la verificación e inferencia de tipos de TypeScript, soporta toda la sintaxis y características de TypeScript, funciona con exportaciones predeterminadas y nombradas, maneja correctamente las cadenas de plantilla e interpolación, y se integra perfectamente con los procesos de compilación de TypeScript.

Configuración rápida

Configuración para archivos de localización TypeScript:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "typescript": {
      "include": ["src/locales/[locale].ts"]
    }
  }
}

Recordatorio: [locale] es un marcador de posición que debe permanecer literalmente en la configuración, ya que se reemplaza con el idioma real durante la ejecución del CLI.

Traducir archivos TypeScript

npx lingo.dev@latest i18n

Preserva la sintaxis de TypeScript, las anotaciones de tipo y las exportaciones de módulos mientras traduce el contenido de las cadenas.

Soporte para estructuras TypeScript

Patrón de exportación de objetos

export const messages = {
  common: {
    save: "Guardar",
    cancel: "Cancelar",
    delete: "Eliminar",
  },
  auth: {
    login: "Iniciar sesión",
    register: "Crear cuenta",
  },
} as const;

Enfoque basado en interfaces

interface Messages {
  welcome: string;
  itemCount: (count: number) => string;
}

export const en: Messages = {
  welcome: "Bienvenido a nuestra plataforma",
  itemCount: (count: number) => `Tienes ${count} elementos`,
};

Soporte para literales de plantilla

export const messages = {
  greeting: (name: string) => `Hola, ${name}!`,
  notification: `Tienes ${count} nuevos mensajes`,
  path: `/users/${userId}/profile`,
};

Preservación de la seguridad de tipos

Aserciones const

export const locale = {
  buttons: {
    submit: "Enviar formulario",
    reset: "Restablecer",
  },
} as const;

type LocaleKeys = typeof locale;

La información de tipo y las aserciones const permanecen intactas.

Definiciones de funciones

export const t = {
  welcome: (name: string): string => `Welcome, ${name}!`,
  pluralize: (count: number): string =>
    count === 1 ? "1 item" : `${count} items`,
};

Las firmas de función y los tipos de retorno se conservan.

Configuración avanzada

Múltiples archivos TypeScript

"typescript": {
  "include": [
    "src/locales/[locale].ts",
    "src/translations/[locale]/*.ts"
  ]
}

Bloquear definiciones de tipo

"typescript": {
  "include": ["src/locales/[locale].ts"],
  "lockedKeys": ["__type", "metadata"]
}