Lingo.dev + .ts (TypeScript)

Lingo.dev CLIは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`,
};

型安全性の保持

定数アサーション

export const locale = {
  buttons: {
    submit: "フォームを送信",
    reset: "リセット",
  },
} as const;

type LocaleKeys = typeof locale;

型情報と定数アサーションはそのまま維持されます。

関数の定義

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

関数のシグネチャと戻り値の型は保持されます。

高度な設定

複数のTypeScriptファイル

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

型定義のロック

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