{"id":27535622,"url":"https://github.com/ftscloud/tranzy","last_synced_at":"2025-04-18T19:08:01.802Z","repository":{"id":285539845,"uuid":"958370897","full_name":"FtsCloud/Tranzy","owner":"FtsCloud","description":"专业的网页前端国际化解决方案，JavaScript自动翻译库，用于将网页自动翻译为各国语言，支持智能缓存和可定制的配置。 Professional web front-end internationalization solution, JavaScript automatic translation library for automatic translation of web pages into various languages, support for smart caching and customizable configuration.","archived":false,"fork":false,"pushed_at":"2025-04-15T01:47:03.000Z","size":331,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-04-15T02:23:26.123Z","etag":null,"topics":["auto-translate","auto-translation","automatic","html","i18n","internationalization","javascript","js","multilingual","react","react-translate","translate","translation","translator","vue","vue-translate","web","website"],"latest_commit_sha":null,"homepage":"https://www.tranzy.top","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FtsCloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-01T04:58:34.000Z","updated_at":"2025-04-15T01:47:06.000Z","dependencies_parsed_at":"2025-04-01T10:39:34.394Z","dependency_job_id":null,"html_url":"https://github.com/FtsCloud/Tranzy","commit_stats":null,"previous_names":["ftscloud/tranzy"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FtsCloud%2FTranzy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FtsCloud%2FTranzy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FtsCloud%2FTranzy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FtsCloud%2FTranzy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FtsCloud","download_url":"https://codeload.github.com/FtsCloud/Tranzy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249535840,"owners_count":21287496,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-translate","auto-translation","automatic","html","i18n","internationalization","javascript","js","multilingual","react","react-translate","translate","translation","translator","vue","vue-translate","web","website"],"created_at":"2025-04-18T19:08:00.826Z","updated_at":"2025-04-18T19:08:01.786Z","avatar_url":"https://github.com/FtsCloud.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tranzy.js v1.0.8\n\n简体中文 | [English](https://github.com/FtsCloud/Tranzy/blob/main/README_EN.md) | [Español](https://github.com/FtsCloud/Tranzy/blob/main/README_ES.md) | [日本語](https://github.com/FtsCloud/Tranzy/blob/main/README_JA.md) | [한국어](https://github.com/FtsCloud/Tranzy/blob/main/README_KO.md) | [Русский](https://github.com/FtsCloud/Tranzy/blob/main/README_RU.md) | [Français](https://github.com/FtsCloud/Tranzy/blob/main/README_FR.md) | [Deutsch](https://github.com/FtsCloud/Tranzy/blob/main/README_DE.md)\n\nTranzy.js 是一个专业的网页国际化解决方案，让开发者能够轻松地为网站添加多语言支持。它提供了自动翻译、手动翻译词典、DOM变化监听等核心功能，同时内置了微软翻译API作为可选的翻译服务。\n\n官网：https://www.tranzy.top/\n\n## 核心优势\n\n### 1. 开发友好\n- 🚀 零配置即可使用，自动从浏览器语言设置获取目标语言\n- 🛠️ 提供灵活的配置选项，满足各种定制需求\n- 🔌 支持自定义翻译函数，可轻松替换默认翻译服务\n- 📝 提供丰富的钩子函数，方便进行自定义处理\n\n### 2. 性能优化\n- ⚡ 使用 IndexedDB 进行翻译缓存，减少重复翻译\n- 📦 支持批量翻译，提高翻译效率\n- 🔄 智能的DOM变化监听，只翻译新增内容\n- 💾 自动管理翻译缓存，优化内存使用\n\n### 3. 功能强大\n- 🌐 自动检测DOM变化并翻译新增内容\n- 📚 支持手动翻译词典和术语处理\n- 🎯 支持强制翻译和忽略特定元素\n- 🔍 支持语言检测和浏览器语言识别\n\n### 4. 使用灵活\n- 🎨 支持自定义翻译样式和标记类\n- 🔄 可随时开启/关闭DOM监听\n- 📱 支持动态加载的内容翻译\n- 🌍 支持多种语言和BCP 47语言代码\n\n## 安装\n\n使用 npm 安装：\n\n```bash\nnpm install tranzy\n```\n\n或者使用 pnpm 安装：\n\n```bash\npnpm add tranzy\n```\n\n## 快速开始\n\n### 1. 使用 ES Module\n\n```javascript\nimport Tranzy from 'tranzy';\n\n// 只需三行代码，即可自动将网站翻译为浏览器当前语言\nconst tranzy = new Tranzy();\ntranzy.translatePage();    // 翻译整个页面\ntranzy.startObserver();    // 监听DOM变化，自动翻译新内容\n```\n\n### 2. 使用 UMD 版本\n\n```html\n\u003c!-- 引入UMD版本的Tranzy --\u003e\n\u003cscript src=\"path/to/tranzy.umd.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n  // 只需三行代码，即可自动将网站翻译为浏览器当前语言\n  const tranzy = new Tranzy.Translator();\n  tranzy.translatePage();    // 翻译整个页面\n  tranzy.startObserver();    // 监听DOM变化，自动翻译新内容\n\u003c/script\u003e\n```\n\n## 高级配置\n\n如果需要更精细的控制，Tranzy还提供了丰富的配置选项：\n\n```javascript\nimport Tranzy from 'tranzy';\n\n// 创建带有高级配置的Tranzy实例\nconst tranzy = new Tranzy({\n  toLang: 'zh-Hans',           // 目标语言\n  fromLang: 'en',             // 源语言（可选）\n  ignore: ['.no-translate'],  // 忽略的选择器列表\n  force: ['.must-translate'], // 强制翻译的选择器列表（优先级高于ignore）\n  manualDict: {               // 手动翻译词典\n    'zh-Hans': {\n      'Tranzy': '全译'\n    }\n  },\n  beforeTranslate: () =\u003e {    // 翻译开始前的钩子\n    console.log('开始翻译');\n  },\n  afterTranslate: () =\u003e {     // 翻译结束后的钩子\n    console.log('翻译完成');\n  }\n});\n\ntranzy.translatePage();\ntranzy.startObserver();\n```\n\n\u003e **注意：** 当`fromLang`和`toLang`相同时，`translatePage()`和`startObserver()`会自动跳过翻译过程。\n\n### 1. 默认忽略的元素\n\nTranzy默认已经配置了以下元素不进行翻译：\n\n```javascript\n// 这些元素及其内容默认不会被翻译\nconst DEFAULT_IGNORE_SELECTORS = [\n  'style',            // 样式标签\n  'script',           // 脚本标签\n  'noscript',         // 无脚本标签\n  'kbd',              // 键盘输入标签\n  'code',             // 代码标签\n  'pre',              // 预格式化文本标签\n  'input',            // 输入框\n  'textarea',         // 文本域\n  '[contenteditable=\"true\"]', // 可编辑元素\n  '.tranzy-ignore'    // 自定义忽略类\n];\n```\n\n您可以通过配置`ignore`选项添加更多忽略选择器，但使用`force`选择器可以覆盖忽略规则，因为**force的优先级高于ignore**。\n\n### 2. 控制翻译范围\n\n```javascript\n// ES6模式\nimport Tranzy from 'tranzy';\nconst tranzy = new Tranzy({\n  // 忽略特定元素\n  ignore: [\n    '.no-translate',      // 忽略特定类\n    '#header',           // 忽略特定ID\n    '[data-no-trans]'    // 忽略特定属性\n  ],\n  // 强制翻译特定元素\n  force: [\n    '.must-translate',   // 强制翻译特定类\n    '#content'          // 强制翻译特定ID\n  ]\n});\n```\n\n### 3. 使用手动翻译词典\n\n```javascript\n// ES6模式\nimport Tranzy from 'tranzy';\nconst tranzy = new Tranzy({\n  toLang: 'zh-Hans',\n  manualDict: {\n    // 全局词典，适用于所有目标语言\n    'all': {\n      // 品牌名称、专有名词等不需要翻译的词汇\n      'tranzy': {           \n        to: 'tranzy',       // 保证首字母大小写保持不变\n        standalone: false,  // 在句子中也进行匹配\n      },\n      'Tranzy': {\n        to: 'Tranzy',       // 大写形式也保持不变\n        standalone: false,  // 在句子中也进行匹配\n      },\n      // 简化形式，默认 standalone: true, case: true\n      'Copyright': 'Copyright'\n    },\n    // 特定语言的词典\n    'zh-Hans': {\n      // 完整形式\n      'Hello World': {\n        to: '你好，世界',    \n      },\n      // 简化形式\n      'JavaScript': 'JavaScript (JS脚本语言)',\n      // 支持正则表达式形式的匹配\n      '\\\\d+ years old': {\n        to: '岁',\n      },\n      'tranzy': {\n        to: '全译',         // 中文特别处理为\"全译\"\n        standalone: false,  // 在句子中也进行匹配\n        case: false         // 忽略大小写\n      }\n    }\n  }\n});\n```\n\n\u003e **注意：** 特定语言的词典条目（如'zh-Hans'）优先级高于全局词典('all')中的同名条目。这种设计使得您可以在全局词典中定义通用翻译，同时在特定语言中进行个性化覆盖，增强了翻译的灵活性和精确性。\n\n### 4. 使用钩子函数\n\n```javascript\n// ES6模式\nimport Tranzy from 'tranzy';\nconst tranzy = new Tranzy({\n  // 翻译开始前的钩子\n  beforeTranslate: () =\u003e {\n    console.log('开始翻译');\n  },\n  // 翻译结束后的钩子\n  afterTranslate: () =\u003e {\n    console.log('翻译完成');\n  }\n});\n```\n\n### 5. 动态内容处理\n\n```javascript\n// 在动态加载内容后手动触发翻译\nconst loadContent = () =\u003e {\n  loadDynamicContent();\n  tranzy.translatePage('.dynamic-content'); // 可以指定要翻译的元素，不传则默认翻译body\n};\n```\n\n## 高级功能\n\n### 1. 内置翻译API\n\n除了核心的多语言功能外，Tranzy 还内置了微软翻译API，提供以下功能：\n\n```javascript\nimport { translateText, detectLang, getSupportedLangs, getBrowserLang } from 'tranzy';\n\n// 翻译文本\nconst result = await translateText(['Hello world'], 'zh-Hans', 'en');\nconsole.log(result); // ['你好世界']\n\n// 检测语言\nconst langResult = await detectLang('Hello world');\nconsole.log(langResult); // [{ language: 'en', score: 1.0, isTranslationSupported: true, isTransliterationSupported: true }]\n\n// 获取支持的语言列表\nconst langs = await getSupportedLangs('zh-Hans');\nconsole.log(langs); // { en: { name: '英语', nativeName: 'English', dir: 'ltr' }, ... }\n\n// 获取浏览器语言对应的支持语言代码\nconst browserLang = await getBrowserLang();\nconsole.log(browserLang); // 'zh-Hans' 或 'en' 等\n```\n\n### 2. 自定义翻译函数\n\n```javascript\n// ES6模式\nimport Tranzy from 'tranzy';\nconst tranzy = new Tranzy({\n  toLang: 'zh-Hans',\n  // 使用自定义翻译函数\n  translateFn: async (texts, toLang, fromLang) =\u003e {\n    // 实现自定义翻译逻辑\n    return texts.map(text =\u003e `[${toLang}] ${text}`);\n  }\n});\n```\n\n## 作者\n\nFts Cloud \u003cftsuperb@vip.qq.com\u003e\n\n## 许可证\n\nMIT\n\n## 仓库\n\nhttps://github.com/FtsCloud/Tranzy\n\n## 版权\n\nCopyright (c) 2025-present Fts Cloud","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fftscloud%2Ftranzy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fftscloud%2Ftranzy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fftscloud%2Ftranzy/lists"}