Lingo.dev + .ts (TypeScript)

CLI Lingo.dev переводит файлы локализации TypeScript, сохраняя определения типов, структуры объектов и синтаксис, специфичный для TypeScript. CLI поддерживает проверку типов и вывод типов TypeScript, работает со всем синтаксисом и функциями TypeScript, поддерживает как стандартные, так и именованные экспорты, корректно обрабатывает шаблонные строки и интерполяцию, а также бесшовно интегрируется с процессами компиляции TypeScript.

Быстрая настройка

Настройка для файлов локализации TypeScript:

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

Напоминание: [locale] — это плейсхолдер, который должен оставаться в конфигурации буквально, так как он заменяется на фактический язык во время выполнения CLI.

Перевод файлов TypeScript

npx lingo.dev@latest i18n

Сохраняет синтаксис TypeScript, аннотации типов и экспорты модулей при переводе строкового содержимого.

Поддержка структуры TypeScript

Шаблон экспорта объекта

export const messages = {
  common: {
    save: "Сохранить",
    cancel: "Отменить",
    delete: "Удалить",
  },
  auth: {
    login: "Войти",
    register: "Создать аккаунт",
  },
} as const;

Подход на основе интерфейсов

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

export const en: Messages = {
  welcome: "Добро пожаловать на нашу платформу",
  itemCount: (count: number) => `У вас ${count} элементов`,
};

Поддержка шаблонных литералов

export const messages = {
  greeting: (name: string) => `Привет, ${name}!`,
  notification: `У вас ${count} новых сообщений`,
  path: `/users/${userId}/profile`,
};

Сохранение безопасности типов

Утверждения const

export const locale = {
  buttons: {
    submit: "Отправить форму",
    reset: "Сбросить",
  },
} as const;

type LocaleKeys = typeof locale;

Информация о типах и утверждения const остаются неизменными.

Определения функций

export const t = {
  welcome: (name: string): string => `Добро пожаловать, ${name}!`,
  pluralize: (count: number): string =>
    count === 1 ? "1 элемент" : `${count} элементов`,
};

Сигнатуры функций и возвращаемые типы сохраняются.

Расширенная конфигурация

Несколько файлов TypeScript

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

Зафиксировать определения типов

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