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: "Save",
    cancel: "Cancel",
    delete: "Delete",
  },
  auth: {
    login: "Log In",
    register: "Create Account",
  },
} as const;

基于接口的方法

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

export const en: Messages = {
  welcome: "Welcome to our platform",
  itemCount: (count: number) => `You have ${count} items`,
};

模板字面量支持

export const messages = {
  greeting: (name: string) => `Hello, ${name}!`,
  notification: `You have ${count} new messages`,
  path: `/users/${userId}/profile`,
};

类型安全性保留

常量断言

export const locale = {
  buttons: {
    submit: "Submit Form",
    reset: "Reset",
  },
} as const;

type LocaleKeys = typeof locale;

类型信息和常量断言保持不变。

函数定义

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"]
}