Skip to content

Commit cdce3a0

Browse files
committed
translate.office 调整为 translate.offline ; 加入 verify.html
1 parent 33aa5a4 commit cdce3a0

5 files changed

Lines changed: 343 additions & 14 deletions

File tree

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
针对js对象进行翻译,将对象里的内容进行翻译。
1+
针对js对象进行翻译,将对象里的内容进行翻译。
2+
3+
demo.html 直接运行即可出现翻译页面
4+
verify.html 当调整 translate.js.transObject/String 模块后,可以运行它检测一下是否有bug,是否都还能正常翻译
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
<html>
2+
<head>
3+
<meta charset="UTF-8">
4+
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
5+
<style type="text/css">
6+
textarea{
7+
width:100%;
8+
height: 200px;
9+
}
10+
11+
</style>
12+
</head>
13+
<body>
14+
<script src="../../translate.js/translate.js"></script>
15+
<!-- <script src="https://cdn.staticfile.net/translate.js/3.15.1/translate.min.js"></script> -->
16+
17+
<textarea id="t1">
18+
{
19+
"hello":"你好",
20+
"word": [
21+
"世界",
22+
"大海",
23+
"你好"
24+
],
25+
"key不会被翻译":"我是value会被翻译的"
26+
}
27+
</textarea>
28+
29+
30+
<textarea id="t2">
31+
{
32+
custom: {
33+
switchLanguage: '切换语言',
34+
readme: {
35+
hello: '你好',
36+
},
37+
form: {
38+
required: '验证必填项',
39+
phone: '验证手机号',
40+
email: '验证邮箱'
41+
}
42+
}
43+
}
44+
</textarea>
45+
46+
47+
48+
49+
<label>翻译源:</label>
50+
<input type="text" id="host" name="host" value="https://giteeai.zvo.cn/" style="width:300px" />
51+
<br/>
52+
53+
翻译为:
54+
<span id="translate"></span>
55+
<br/>
56+
57+
<button onclick="trans();">将js对象(或数组等)中的值翻译为英文</button>
58+
59+
60+
<script>
61+
62+
/**** 设置language.json 加载 ****/
63+
//先设置默认语种,如果没有默认是英语
64+
if(typeof(translate.storage.get('to')) == 'undefined' || translate.storage.get('to') == null || translate.storage.get('to') == ''){
65+
translate.storage.set('to','english');
66+
}
67+
translate.request.speedDetectionControl.setCurrentHost('https://giteeai.zvo.cn/');
68+
//重写select切换语言点切换后触发动作 - 参考文档 https://translate.zvo.cn/4056.html
69+
translate.selectLanguageTag.selectOnChange = function(event){
70+
var language = event.target.value;
71+
translate.storage.set('to',language); //设置目标翻译语言
72+
//console.log('new language: '+language);
73+
//trans(language);
74+
};
75+
//渲染加载出select切换语言选择框
76+
translate.selectLanguageTag.render();
77+
78+
function trans(){
79+
80+
/**清除原本翻译接口,设置自定义的 翻译源 **/
81+
translate.request.speedDetectionControl.setCurrentHost(document.getElementById('host').value);
82+
83+
84+
/**进行翻译操作 **/
85+
fanyi('t1');
86+
fanyi('t2');
87+
88+
}
89+
90+
function fanyi(id){
91+
translate.js.transString(document.getElementById(id).value,document.getElementById('translateSelectLanguage').value, function(obj){
92+
// 自定义replacer函数,将函数转换为字符串
93+
const jsonStr = JSON.stringify(obj, (key, value) => {
94+
if (typeof value === 'function') {
95+
// 将函数转换为其源代码字符串
96+
return value.toString();
97+
}
98+
return value;
99+
}, 4);
100+
console.log(jsonStr);
101+
document.getElementById(id).value = jsonStr;
102+
}, function(failureInfo){
103+
document.getElementById(id).value = '失败,失败原因:'+failureInfo;
104+
});
105+
}
106+
107+
</script>
108+
109+
110+
<div>
111+
<h2>说明</h2>
112+
它支持对js对象中的值进行翻译。<br/>
113+
它非常适合对传统的i18n的语言配置文件进行翻译。<br/>
114+
<b>翻译源</b> 这一项的意思是有什么来提供翻译。demo里默认是有智谱AI的大模型来提供的翻译能力。你也可以<a href="https://translate.zvo.cn/391129.html" target="_black">指定有别的来进行翻译</a>,比如DeepSeek、小牛翻译、谷歌翻译等等 <br/>
115+
116+
</div>
117+
118+
<div style="text-align:center; width: 100%;font-size: 18px; padding-top:2rem;">
119+
开源地址及使用方式参考: <a href="https://gitee.com/mail_osc/translate" class="ignore">https://gitee.com/mail_osc/translate</a>
120+
</div>
121+
<style>
122+
.title{
123+
font-size:24px;
124+
padding-top:15px;
125+
padding-bottom:10px;
126+
}
127+
</style>
128+
</body>
129+
</html>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "i18n-jsautotranslate",
3-
"version": "3.18.66",
3+
"version": "3.18.71",
44
"description": "Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO friendly!",
55
"main": "index.js",
66
"scripts": {

translate.js/translate.js

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var translate = {
1414
* 格式:major.minor.patch.date
1515
*/
1616
// AUTO_VERSION_START
17-
version: '3.18.70.20251010',
17+
version: '3.18.71.20251010',
1818
// AUTO_VERSION_END
1919
/*
2020
当前使用的版本,默认使用v2. 可使用 setUseVersion2();
@@ -73,6 +73,11 @@ var translate = {
7373
*/
7474
languages:'',
7575
alreadyRender:false, //当前是否已渲染过了 true为是 v2.2增加
76+
77+
changeLanguageBeforeLoadOfflineFile: function(path){
78+
79+
},
80+
7681
selectOnChange:function(event){
7782
var language = event.target.value;
7883
translate.changeLanguage(language);
@@ -950,7 +955,22 @@ var translate = {
950955
},
951956
},
952957

958+
//已转为 offline ,这个是对旧版做兼容
953959
office:{
960+
export:function(){
961+
console.log('请使用最新版本的 translate.offline.export , 而不是 translate.office.export');
962+
},
963+
showPanel:function(){
964+
console.log('请使用最新版本的 translate.offline.showPanel , 而不是 translate.office.export');
965+
},
966+
append:function(to, properties){
967+
translate.offline.append(to, properties);
968+
},
969+
fullExtract:{
970+
isUse:false
971+
}
972+
},
973+
offline:{
954974
/*
955975
网页上翻译之后,自动导出当前页面的术语库
956976
@@ -996,7 +1016,7 @@ var translate = {
9961016

9971017
if(text.length > 0){
9981018
//有内容
999-
text = 'translate.office.append(\''+translate.language.getCurrent()+'\',`'+text+'\n`);';
1019+
text = 'translate.offline.append(\''+translate.language.getCurrent()+'\',`'+text+'\n`);';
10001020
//console.log(text);
10011021
translate.util.loadMsgJs();
10021022
msg.popups({
@@ -1021,7 +1041,7 @@ var translate = {
10211041
//导出按钮
10221042
let button = document.createElement('button');
10231043
button.onclick = function() {
1024-
translate.office.export();
1044+
translate.offline.export();
10251045
};
10261046
button.innerHTML = '导出配置信息';
10271047
button.setAttribute('style', 'margin-left: 72px; margin-top: 30px; margin-bottom: 20px; font-size: 25px; background-color: blue; padding: 15px; padding-top: 3px; padding-bottom: 3px; border-radius: 3px;');
@@ -1084,7 +1104,7 @@ var translate = {
10841104

10851105
//全部提取能力(整站的离线翻译数据提取)
10861106
fullExtract:{
1087-
/*js translate.office.fullExtract.set start*/
1107+
/*js translate.offline.fullExtract.set start*/
10881108
/*
10891109
将翻译的结果加入
10901110
hash: 翻译前的文本的hash
@@ -1106,9 +1126,9 @@ var translate = {
11061126
obj[toLanguage] = translateText;
11071127
await translate.storage.IndexedDB.set('hash_'+hash, obj);
11081128
},
1109-
/*js translate.office.fullExtract.set end*/
1129+
/*js translate.offline.fullExtract.set end*/
11101130

1111-
/*js translate.office.fullExtract.export start*/
1131+
/*js translate.offline.fullExtract.export start*/
11121132
/*
11131133
将存储的数据导出为 txt 文件下载下来
11141134
*/
@@ -1121,7 +1141,7 @@ var translate = {
11211141
translate.log('error : to param not find, example: "english"');
11221142
return;
11231143
}
1124-
var text = 'translate.office.append(\''+to+'\',`';
1144+
var text = 'translate.offline.append(\''+to+'\',`';
11251145

11261146
var data = await translate.storage.IndexedDB.list('hash_*');
11271147
for(var i in data){
@@ -1141,7 +1161,7 @@ var translate = {
11411161
link.click();
11421162
URL.revokeObjectURL(url);
11431163
},
1144-
/*js translate.office.fullExtract.export end*/
1164+
/*js translate.offline.fullExtract.export end*/
11451165

11461166
/*
11471167
是否启用全部提取的能力
@@ -3162,8 +3182,8 @@ var translate = {
31623182
//将翻译结果以 key:hash value翻译结果的形式缓存
31633183
translate.storage.set('hash_'+data.to+'_'+cacheHash,text);
31643184
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
3165-
if(translate.office.fullExtract.isUse){
3166-
translate.office.fullExtract.set(hash, originalWord, data.to, text);
3185+
if(translate.offline.fullExtract.isUse){
3186+
translate.offline.fullExtract.set(hash, originalWord, data.to, text);
31673187
}
31683188
}
31693189
task.execute(); //执行渲染任务
@@ -8138,8 +8158,8 @@ var translate = {
81388158
var hash = translate.util.hash(apiTranslateText[i]);
81398159
translate.storage.set('hash_'+to+'_'+hash, resultData.text[i]);
81408160
//如果离线翻译启用了全部提取,那么还要存入离线翻译指定存储
8141-
if(translate.office.fullExtract.isUse){
8142-
translate.office.fullExtract.set(hash, apiTranslateText[i], data.to, resultData.text[i]);
8161+
if(translate.offline.fullExtract.isUse){
8162+
translate.offline.fullExtract.set(hash, apiTranslateText[i], data.to, resultData.text[i]);
81438163
}
81448164

81458165
//进行组合数据到 translateResultArray

0 commit comments

Comments
 (0)