Tranzy.js 文档

安装

Tranzy.js支持多种安装方式,选择最适合您项目的方式:


// 使用 npm
npm install tranzy

// 使用 yarn
yarn add tranzy

// 使用 CDN
<script src="https://unpkg.com/tranzy/dist/tranzy.umd.js"></script>
                            

基本使用

Tranzy.js的基本使用非常简单,只需几行代码即可实现网页翻译功能:


// ESM引入
import Tranzy from 'tranzy';

// 初始化Tranzy (自动检测浏览器语言)
const tranzy = new Tranzy();

// 启动翻译
tranzy.translatePage();    // 翻译整个页面
tranzy.startObserver();    // 监听DOM变化,自动翻译新内容
                            

如果使用UMD版本(通过CDN加载),使用如下:


// 使用UMD版本
const tranzy = new Tranzy.Translator();  // 无需参数,自动使用浏览器语言

tranzy.translatePage();
tranzy.startObserver();
                            

通过指定具体参数可以获得更精细的控制:


// 带参数的完整示例
const tranzy = new Tranzy({
  toLang: 'zh-Hans',       // 目标语言:简体中文
  fromLang: 'en',          // 源语言(可选)
  ignore: ['.no-translate'],
  force: ['.must-translate']
});
                            

配置选项

Tranzy.js支持多种配置选项,以下是所有可用选项:

选项类型默认值描述
toLangstring浏览器语言目标翻译语言,如'zh-Hans'、'en'等
fromLangstring''源语言,可以不设置,API将自动检测
ignorestring[]默认忽略列表忽略翻译的元素选择器列表
forcestring[][]强制翻译的元素选择器列表
doneClassstring'tranzy-done'已翻译元素的标记类
pendingClassstring'tranzy-pending'正在翻译中的元素标记类
translateFnfunctiontranslateText自定义翻译函数
manualDictobject{}手动翻译词典
beforeTranslatefunctionnull翻译开始前的钩子函数
afterTranslatefunctionnull翻译结束后的钩子函数

完整配置示例:


// 创建带有高级配置的Tranzy实例
const tranzy = new Tranzy({
  toLang: 'zh-Hans',           // 目标语言
  fromLang: 'en',              // 源语言(可选)
  ignore: ['.no-translate'],   // 忽略的选择器列表
  force: ['.must-translate'],  // 强制翻译的选择器列表(优先级高于ignore)
  manualDict: {                // 手动翻译词典
    'zh-Hans': {
      'Tranzy': '全译'
    }
  },
  beforeTranslate: () => {     // 翻译开始前的钩子
    console.log('开始翻译');
  },
  afterTranslate: () => {      // 翻译结束后的钩子
    console.log('翻译完成');
  }
});

// 启动翻译
tranzy.translatePage();
tranzy.startObserver();
                            

注意: 当"fromLang"和"toLang"相同时,Tranzy会自动跳过翻译过程,提高性能。

默认忽略的元素

Tranzy.js默认已经配置了以下元素不进行翻译:


// 这些元素及其内容默认不会被翻译
const DEFAULT_IGNORE_SELECTORS = [
  'style',            // 样式标签
  'script',           // 脚本标签
  'noscript',         // 无脚本标签
  'kbd',              // 键盘输入标签
  'code',             // 代码标签
  'pre',              // 预格式化文本标签
  'input',            // 输入框
  'textarea',         // 文本域
  '[contenteditable="true"]', // 可编辑元素
  '.tranzy-ignore'    // 自定义忽略类
];
                            

您可以通过配置"ignore"选项添加更多忽略选择器,但使用"force"选择器可以覆盖忽略规则,因为force的优先级高于ignore

功能演示

这里展示Tranzy.js的主要功能和效果,以便您直观了解如何使用及其效果。

基本翻译示例

以下是一个基本的翻译实例,展示了如何将网页从英文翻译为中文:

源代码


<!-- HTML 内容 -->
<div id="content">
  <h2>Welcome to Tranzy</h2>
  <p>This is a demonstration of automatic translation.</p>
  <p>The text will be translated to your selected language.</p>
</div>

<!-- JavaScript 代码 -->
<script>
  document.addEventListener('DOMContentLoaded', function() {
    // UMD版本使用 Tranzy.Translator
    const tranzy = new Tranzy.Translator({
      toLang: 'zh-Hans',
      fromLang: 'en',
      ignore: ['.no-translate'],
      force: ['.must-translate']
    });
    
    // 翻译页面
    tranzy.translatePage('#content');
  });
</script>
                                    

效果展示

翻译前

Welcome to Tranzy

This is a demonstration of automatic translation.

The text will be translated to your selected language.

翻译后

欢迎使用Tranzy

这是自动翻译的演示。

文本将被翻译为您选择的语言。

使用自定义词典

自定义词典可以确保专有名词和术语按照您的要求进行翻译:

源代码


<!-- HTML 内容 -->
<div id="dictionary-demo">
  <h2>Tranzy Framework Documentation</h2>
  <p>The Tranzy framework provides easy translation for websites.</p>
  <p>Key components: API integration, DOM monitoring, custom dictionary.</p>
</div>

<!-- JavaScript 代码 -->
<script>
  document.addEventListener('DOMContentLoaded', function() {
    const tranzy = new Tranzy.Translator({
      toLang: 'zh-Hans',
      fromLang: 'en',
      manualDict: {
        'zh-Hans': {
          'Tranzy': '全译',
          'framework': {
            to: '框架',
            standalone: false
          },
          'API integration': 'API集成',
          'DOM monitoring': 'DOM监听',
          'custom dictionary': '自定义词典'
        }
      }
    });
    
    // 翻译页面
    tranzy.translatePage('#dictionary-demo');
  });
</script>
                                    

效果展示

翻译前

Tranzy Framework Documentation

The Tranzy framework provides easy translation for websites.

Key components: API integration, DOM monitoring, custom dictionary.

翻译后

全译框架文档

全译框架为网站提供简便的翻译。

关键组件:API集成、DOM监听、自定义词典。

忽略特定元素

通过选择器控制哪些元素需要翻译,哪些元素保持原样:

源代码


<!-- HTML 内容 -->
<div id="selective-demo">
  <h2>Selective Translation</h2>
  <p>This paragraph will be translated normally.</p>
  <p class="no-translate">This paragraph will NOT be translated.</p>
  <div class="code-block no-translate">
    <pre>const tranzy = new Tranzy.Translator();</pre>
  </div>
  <p class="must-translate">This will ALWAYS be translated, even inside ignored elements.</p>
</div>

<!-- JavaScript 代码 -->
<script>
  document.addEventListener('DOMContentLoaded', function() {
    const tranzy = new Tranzy.Translator({
      toLang: 'zh-Hans',
      fromLang: 'en',
      ignore: ['.no-translate', 'pre', 'code'],
      force: ['.must-translate']
    });
    
    // 翻译页面
    tranzy.translatePage('#selective-demo');
  });
</script>
                                    

效果展示

翻译前

Selective Translation

This paragraph will be translated normally.

This paragraph will NOT be translated.

const tranzy = new Tranzy.Translator();

This will ALWAYS be translated, even inside ignored elements.

翻译后

选择性翻译

此段落将正常翻译。

This paragraph will NOT be translated.

const tranzy = new Tranzy.Translator();

即使在被忽略的元素内,这也将始终被翻译。

DOM观察器示例

自动监听DOM变化并翻译新添加的内容:

源代码


<!-- HTML 内容 -->
<div id="observer-demo">
  <h2>DOM Observer Demo</h2>
  <div id="dynamic-content">
    <p>This is the initial content.</p>
  </div>
  <button id="add-content">Add Content</button>
</div>

<!-- JavaScript 代码 -->
<script>
  document.addEventListener('DOMContentLoaded', function() {
    const tranzy = new Tranzy.Translator({
      toLang: 'zh-Hans',
      fromLang: 'en'
    });
    
    // 翻译初始内容
    tranzy.translatePage('#observer-demo');
    
    // 启动DOM观察器
    tranzy.startObserver('#observer-demo');
    
    // 添加动态内容的事件处理
    document.getElementById('add-content').addEventListener('click', function() {
      const dynamicContent = document.getElementById('dynamic-content');
      const newParagraph = document.createElement('p');
      newParagraph.textContent = 'This is dynamically added content that will be automatically translated.';
      dynamicContent.appendChild(newParagraph);
    });
  });
</script>
                                    

效果展示

初始状态

DOM Observer Demo

This is the initial content.

添加内容后(自动翻译)

DOM观察器演示

这是初始内容。

这是将被自动翻译的动态添加内容。

API使用示例

直接使用Tranzy.js的API进行文本翻译、语言检测等操作:

源代码


// ES模块方式
import { translateText, detectLang, getSupportedLangs, getBrowserLang } from 'tranzy';

// UMD方式
// const { translateText, detectLang, getSupportedLangs, getBrowserLang } = Tranzy;

// 文本翻译API示例
async function translateDemo() {
  const results = await translateText(
    ['Hello world!', 'Welcome to Tranzy'], 
    'zh-Hans', 
    'en'
  );
  console.log(results); 
  // 输出: ['你好世界!', '欢迎使用全译']
}

// 语言检测API示例
async function detectLanguageDemo() {
  const detection = await detectLang('こんにちは、世界!');
  console.log(detection);
  // 输出: [{ language: 'ja', score: 0.98, isTranslationSupported: true }]
}

// 获取支持的语言列表
async function getSupportedLanguagesDemo() {
  const languages = await getSupportedLangs('zh-Hans');
  console.log(languages);
  /* 输出示例:
  {
    'en': { name: '英语', nativeName: 'English', dir: 'ltr' },
    'zh-Hans': { name: '简体中文', nativeName: '简体中文', dir: 'ltr' },
    'ja': { name: '日语', nativeName: '日本語', dir: 'ltr' },
    // ... 更多语言
  }
  */
}

// 获取浏览器语言
async function getBrowserLanguageDemo() {
  const browserLang = await getBrowserLang();
  console.log(browserLang); // 如: 'zh-Hans' 或 'en-US'
}
                                    

API调用结果示例

translateText 结果
["你好世界!", "欢迎使用全译"]
detectLang 结果
[
  {
    "language": "ja",
    "score": 0.98,
    "isTranslationSupported": true,
    "isTransliterationSupported": true
  }
]
getSupportedLangs 结果 (部分)
{
  "en": { 
    "name": "英语", 
    "nativeName": "English", 
    "dir": "ltr" 
  },
  "zh-Hans": { 
    "name": "简体中文", 
    "nativeName": "简体中文", 
    "dir": "ltr" 
  },
  "ja": { 
    "name": "日语", 
    "nativeName": "日本語", 
    "dir": "ltr" 
  },
  "fr": { 
    "name": "法语", 
    "nativeName": "Français", 
    "dir": "ltr" 
  }
  // ... 更多语言
}

DOM监听

Tranzy.js默认会启用DOM变化监听,自动翻译新添加的内容,特别适合SPA等动态应用:


// 控制DOM监听
const tranzy = new Tranzy.Translator({
  toLang: 'zh-Hans',
});

// 翻译页面
tranzy.translatePage();

// 启动观察器
tranzy.startObserver();

// 停止观察器
tranzy.stopObserver();

// 指定观察的根元素
tranzy.startObserver('.container');
                            

自定义词典

自定义词典可以确保特定术语、品牌名称等按照您的要求翻译:


// 在实例化时添加词典
const tranzy = new Tranzy.Translator({
  toLang: 'zh-Hans',
  manualDict: {
    // 全局词典,适用于所有目标语言
    'all': {
      // 简化形式,默认 standalone: true, case: true
      'Copyright': 'Copyright'
    },
    // 特定语言的词典
    'zh-Hans': {
      // 完整形式
      'Hello World': {
        to: '你好,世界'    
      },
      // 简化形式,自动转为标准格式
      'JavaScript': 'JavaScript (JS脚本语言)',
      // 忽略大小写
      'tranzy': {
        to: '全译',         // 中文特别处理为"全译"
        standalone: false,  // 在句子中也进行匹配
        case: false         // 忽略大小写
      }
    }
  }
});
                            

注意: 特定语言的词典条目(如'zh-Hans')优先级高于全局词典('all')中的同名条目。这种设计使得您可以在全局词典中定义通用翻译,同时在特定语言中进行个性化覆盖,增强了翻译的灵活性和精确性。

缓存管理

Tranzy.js使用IndexedDB存储翻译结果,提高翻译效率,减少API调用:


// Tranzy的缓存是自动管理的
// 使用IndexedDB来存储翻译结果,翻译过一次的内容会被自动缓存
// 缓存系统会为每个翻译文本使用FNV-1a哈希算法生成唯一键值
// 当相同的文本再次需要翻译时,会先从缓存中获取结果,减少API调用
                            

高级功能

除了基本翻译功能,Tranzy.js还提供多种高级特性:

内置翻译API


// 直接使用翻译API
import { translateText, detectLang, getSupportedLangs, getBrowserLang } from 'tranzy';

// 或者在使用UMD版本时
// const { translateText, detectLang, getSupportedLangs, getBrowserLang } = Tranzy;

// 翻译文本
const result = await translateText(['Hello world'], 'zh-Hans', 'en');
console.log(result); // ['你好世界']

// 检测语言
const langResult = await detectLang('Hello world');
console.log(langResult); 
// [{ language: 'en', score: 1.0, isTranslationSupported: true, isTransliterationSupported: true }]

// 获取支持的语言列表
const langs = await getSupportedLangs('zh-Hans');
console.log(langs); 
// { en: { name: '英语', nativeName: 'English', dir: 'ltr' }, ... }

// 获取浏览器语言对应的支持语言代码
const browserLang = await getBrowserLang();
console.log(browserLang); // 'zh-Hans' 或 'en' 等
                            

自定义翻译函数


// 使用自定义翻译函数
import Tranzy from 'tranzy';
const tranzy = new Tranzy.Translator({
  toLang: 'zh-Hans',
  // 使用自定义翻译函数
  translateFn: async (texts, toLang, fromLang) => {
    // 实现自定义翻译逻辑
    // 必须返回与texts数组长度相同的翻译结果数组
    return texts.map(text => `[${toLang}] ${text}`);
  }
});
                            

销毁实例


// 销毁Tranzy实例,释放资源
tranzy.destroy();