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

Требование к экспорту по умолчанию

Для корректной работы с TypeScript ваш файл должен экспортировать объект как экспорт по умолчанию:

// Это работает - объект экспортируется по умолчанию
export default {
  common: {
    save: "Сохранить",
    cancel: "Отмена",
    delete: "Удалить",
  },
  auth: {
    login: "Войти",
    register: "Создать аккаунт",
  },
} as const;
// Это тоже работает - переменная с экспортом по умолчанию
const messages = {
  welcome: "Добро пожаловать в наше приложение",
  error: "Что-то пошло не так",
};
export default messages;

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

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

type LocaleKeys = typeof locale;

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

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

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

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

Блокировка определений типов

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