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支持多种配置选项,以下是所有可用选项:
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
toLang | string | 浏览器语言 | 目标翻译语言,如'zh-Hans'、'en'等 |
fromLang | string | '' | 源语言,可以不设置,API将自动检测 |
ignore | string[] | 默认忽略列表 | 忽略翻译的元素选择器列表 |
force | string[] | [] | 强制翻译的元素选择器列表 |
doneClass | string | 'tranzy-done' | 已翻译元素的标记类 |
pendingClass | string | 'tranzy-pending' | 正在翻译中的元素标记类 |
translateFn | function | translateText | 自定义翻译函数 |
manualDict | object | {} | 手动翻译词典 |
beforeTranslate | function | null | 翻译开始前的钩子函数 |
afterTranslate | function | null | 翻译结束后的钩子函数 |
完整配置示例:
// 创建带有高级配置的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();