使用方法
首先去申请百度翻译接口,获取API的KEY密钥,然后修改php代码中的KEY,最后配置JS里面参数,比如翻译哪些标签内容,不翻译哪些标签内容。
最后在在需要翻译的页面引入JS文件,在需要显示翻译按钮的地方添加如下html即可
<div id="langToggleBox"> <a><img src="/skin/img/kefu.gif" title="多语言切换"></a> <div class="language-menu none" id="languageMenu"> <span data-lang="zh">简体中文</span><span data-lang="t">繁体中文</span><span data-lang="en">English</span><span data-lang="jp">Japanese</span><span data-lang="de">German</span> </div> </div>
次要说明:如果需要增加更多语种 data-lang里面的改为百度翻译SDK里面的语种代码即可
百度翻译PHP接口:
<?php
$baiduapikey = 'Si3bY1nLu8F4HiFN626Vksusc';//百度翻译应用的API Key;
$baidusecretkey = 'W0Uex6rUwaYt26626h3ETLcPR2VveDOR9';
$postData = ['grant_type' =>'client_credentials','client_id' =>$baiduapikey,'client_secret' =>$baidusecretkey];
$headers = ['Content-Type: application/json','Accept: application/json'];
$ret = json_decode(curlRequest("https://aip.baidubce.com/oauth/2.0/token", 'POST', $postData, $headers),TRUE);
$access_token_baidu =$ret['access_token'];
$postDatafy= ['from' =>'auto','to' => $_POST['category'],'q' =>$_POST['content']];
$baidufyres =curlRequest("https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=".$access_token_baidu,'POST', json_encode($postDatafy));//翻译接口
$baidufy_array = json_decode($baidufyres, true);
if(isset($baidufy_array['error_code'])){
$date= array('result'=>$baidufy_array['error_msg'],'code'=>0,);
echo json_encode($date);
exit;
}
$date= array('result'=>$baidufy_array['result']['trans_result'][0],'code'=>1,);
echo json_encode($date);
//封装curl请求
function curlRequest($url, $method = 'GET', $data = [], $headers = []) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if ($method === 'POST') {
curl_setopt($ch, CURLOPT_POST, true);
if (is_array($data) || is_object($data)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
} else {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
} elseif ($method !== 'GET') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if (!empty($data)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
}
}
if (!empty($headers)) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new Exception("CURL Error: " . $error);
}
return $response;
}JS调用接口:
/*********************************************************************
多语言配置
********************************************************************/
const LangConfig = {
defaultLang: 'zh', // 默认语言
targetLangs: ['zh', 'en', 't'],
excludeTags: ['SCRIPT', 'STYLE', 'CODE', 'PRE', 'NOSCRIPT'],// 不需要翻译的标签(如代码块、脚本等)
autoDetect: {enable: true,checkedKey: 'lang_auto_detected'},// 浏览器语言自动识别
contentSelectors: {title: ['#bookname'],content: ['#content']}//配置文章标题/内容的选择器
};
const LangUtils = {
saveUserLangChoice(lang) {
localStorage.setItem('current_lang', lang);
},
getUserLangChoice() {
return localStorage.getItem('current_lang');
},
clearUserLangChoice() {
localStorage.removeItem('current_lang');
},
translateText(content, category) {//翻译接口
if (!content.trim()) {
return Promise.resolve(content);
}
return new Promise((resolve) => {
$.ajax({
url: '/e/extend/chat/index.php?enews=baidufanyi',
type: 'POST',
data: {category: category, content: content},
dataType: 'json',
success: (response) => {
if (response.code === 1) {
resolve(response.result.dst);
} else if (response.code === 0) {
layer.msg('异常(可能欠费)', {icon: 2});
resolve(content);
} else {
layer.msg('翻译失败,请稍后重试', {icon: 2});
resolve(content);
}
},
error: (xhr, status, error) => {
layer.msg('网络异常,翻译失败', {icon: 2});
resolve(content);
}
});
});
},
detectBrowserLang() {// 检测浏览器语言
const browserLang = navigator.language || navigator.browserLanguage;
if (browserLang.toLowerCase().indexOf('zh-tw') !== -1 ||
browserLang.toLowerCase().indexOf('zh-hk') !== -1) {
return 't'; // 繁体
} else if (browserLang.toLowerCase().indexOf('zh') !== -1) {
return 'zh'; // 简体
} else if (browserLang.toLowerCase().indexOf('en') !== -1) {
return 'en'; // 英文
}
return LangConfig.defaultLang;
}
};
/*********************************************************************
简繁字表转换
********************************************************************/
const ChineseConverter = {
s: '皑蔼碍爱翱袄奥坝罢摆败颁办绊帮绑镑谤剥饱宝报鲍辈贝钡狈备惫绷笔毕毙闭边编贬变辩辫鳖瘪濒滨宾摈饼拨钵铂驳卜补参蚕残惭惨灿苍舱仓沧厕侧册测层诧搀掺蝉馋谗缠铲产阐颤场尝长偿肠厂畅钞车彻尘陈衬撑称惩诚骋痴迟驰耻齿炽冲虫宠畴踌筹绸丑橱厨锄雏础储触处传疮闯创锤纯绰辞词赐聪葱囱从丛凑窜错达带贷担单郸掸胆惮诞弹当挡党荡档捣岛祷导盗灯邓敌涤递缔点垫电淀钓调迭谍叠钉顶锭订东动栋冻斗犊独读赌镀锻断缎兑队对吨顿钝夺鹅额讹恶饿儿尔饵贰发罚阀珐矾钒烦范贩饭访纺飞废费纷坟奋愤粪丰枫锋风疯冯缝讽凤肤辐抚辅赋复负讣妇缚该钙盖干赶秆赣冈刚钢纲岗皋镐搁鸽阁铬个给龚宫巩贡钩沟构购够蛊顾剐关观馆惯贯广规硅归龟闺轨诡柜贵刽辊滚锅国过骇韩汉阂鹤贺横轰鸿红后壶护沪户哗华画划话怀坏欢环还缓换唤痪焕涣黄谎挥辉毁贿秽会烩汇讳诲绘荤浑伙获货祸击机积饥讥鸡绩缉极辑级挤几蓟剂济计记际继纪夹荚颊贾钾价驾歼监坚笺间艰缄茧检碱硷拣捡简俭减荐槛鉴践贱见键舰剑饯渐溅涧浆蒋桨奖讲酱胶浇骄娇搅铰矫侥脚饺缴绞轿较秸阶节茎惊经颈静镜径痉竞净纠厩旧驹举据锯惧剧鹃绢杰洁结诫届紧锦仅谨进晋烬尽劲荆觉决诀绝钧军骏开凯颗壳课垦恳抠库裤夸块侩宽矿旷况亏岿窥馈溃扩阔蜡腊莱来赖蓝栏拦篮阑兰澜谰揽览懒缆烂滥捞劳涝乐镭垒类泪篱离里鲤礼丽厉励砾历沥隶俩联莲连镰怜涟帘敛脸链恋炼练粮凉两辆谅疗辽镣猎临邻鳞凛赁龄铃凌灵岭领馏刘龙聋咙笼垄拢陇楼娄搂篓芦卢颅庐炉掳卤虏鲁赂禄录陆驴吕铝侣屡缕虑滤绿峦挛孪滦乱抡轮伦仑沦纶论萝罗逻锣箩骡骆络妈玛码蚂马骂吗买麦卖迈脉瞒馒蛮满谩猫锚铆贸么霉没镁门闷们锰梦谜弥觅绵缅庙灭悯闽鸣铭谬谋亩钠纳难挠脑恼闹馁腻撵捻酿鸟聂啮镊镍柠狞宁拧泞钮纽脓浓农疟诺欧鸥殴呕沤盘庞国爱赔喷鹏骗飘频贫苹凭评泼颇扑铺朴谱脐齐骑岂启气弃讫牵扦钎铅迁签谦钱钳潜浅谴堑枪呛墙蔷强抢锹桥乔侨翘窍窃钦亲轻氢倾顷请庆琼穷趋区躯驱龋颧权劝却鹊让饶扰绕热韧认纫荣绒软锐闰润洒萨鳃赛伞丧骚扫涩杀纱筛晒闪陕赡缮伤赏烧绍赊摄慑设绅审婶肾渗声绳胜圣师狮湿诗尸时蚀实识驶势释饰视试寿兽枢输书赎属术树竖数帅双谁税顺说硕烁丝饲耸怂颂讼诵擞苏诉肃虽绥岁孙损笋缩琐锁獭挞抬摊贪瘫滩坛谭谈叹汤烫涛绦腾誊锑题体屉条贴铁厅听烃铜统头图涂团颓蜕脱鸵驮驼椭洼袜弯湾顽万网韦违围为潍维苇伟伪纬谓卫温闻纹稳问瓮挝蜗涡窝呜钨乌诬无芜吴坞雾务误锡牺袭习铣戏细虾辖峡侠狭厦锨鲜纤咸贤衔闲显险现献县馅羡宪线厢镶乡详响项萧销晓啸蝎协挟携胁谐写泻谢锌衅兴汹锈绣虚嘘须许绪续轩悬选癣绚学勋询寻驯训讯逊压鸦鸭哑亚讶阉烟盐严颜阎艳厌砚彦谚验鸯杨扬疡阳痒养样瑶摇尧遥窑谣药爷页业叶医铱颐遗仪彝蚁艺亿忆义诣议谊译异绎荫阴银饮樱婴鹰应缨莹萤营荧蝇颖哟拥佣痈踊咏涌优忧邮铀犹游诱舆鱼渔娱与屿语吁御狱誉预驭鸳渊辕园员圆缘远愿约跃钥岳粤悦阅云郧匀陨运蕴酝晕韵杂灾载攒暂赞赃脏凿枣灶责择则泽贼赠扎札轧铡闸诈斋债毡盏斩辗崭栈战绽张涨帐账胀赵蛰辙锗这贞针侦诊镇阵挣睁狰帧郑证织职执纸挚掷帜质钟终种肿众诌轴皱昼骤猪诸诛烛瞩嘱贮铸筑驻专砖转赚桩庄装妆壮状锥赘坠缀谆浊兹资渍踪综总纵邹诅组钻致钟么为只凶准启板里雳余链泄',
t: '皚藹礙愛翺襖奧壩罷擺敗頒辦絆幫綁鎊謗剝飽寶報鮑輩貝鋇狽備憊繃筆畢斃閉邊編貶變辯辮鼈癟瀕濱賓擯餅撥缽鉑駁蔔補參蠶殘慚慘燦蒼艙倉滄廁側冊測層詫攙摻蟬饞讒纏鏟産闡顫場嘗長償腸廠暢鈔車徹塵陳襯撐稱懲誠騁癡遲馳恥齒熾沖蟲寵疇躊籌綢醜櫥廚鋤雛礎儲觸處傳瘡闖創錘純綽辭詞賜聰蔥囪從叢湊竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締點墊電澱釣調叠諜疊釘頂錠訂東動棟凍鬥犢獨讀賭鍍鍛斷緞兌隊對噸頓鈍奪鵝額訛惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚輻撫輔賦複負訃婦縛該鈣蓋幹趕稈贛岡剛鋼綱崗臯鎬擱鴿閣鉻個給龔宮鞏貢鈎溝構購夠蠱顧剮關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢閡鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚瘓煥渙黃謊揮輝毀賄穢會燴彙諱誨繪葷渾夥獲貨禍擊機積饑譏雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦檻鑒踐賤見鍵艦劍餞漸濺澗漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥腳餃繳絞轎較稭階節莖驚經頸靜鏡徑痙競淨糾廄舊駒舉據鋸懼劇鵑絹傑潔結誡屆緊錦僅謹進晉燼盡勁荊覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裏鯉禮麗厲勵礫曆瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜賃齡鈴淩靈嶺領餾劉龍聾嚨籠壟攏隴樓婁摟簍蘆盧顱廬爐擄鹵虜魯賂祿錄陸驢呂鋁侶屢縷慮濾綠巒攣孿灤亂掄輪倫侖淪綸論蘿羅邏鑼籮騾駱絡媽瑪碼螞馬罵嗎買麥賣邁脈瞞饅蠻滿謾貓錨鉚貿麽黴沒鎂門悶們錳夢謎彌覓綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒膩攆撚釀鳥聶齧鑷鎳檸獰甯擰濘鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐國愛賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜臍齊騎豈啓氣棄訖牽扡釺鉛遷簽謙錢鉗潛淺譴塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親輕氫傾頃請慶瓊窮趨區軀驅齲顴權勸卻鵲讓饒擾繞熱韌認紉榮絨軟銳閏潤灑薩鰓賽傘喪騷掃澀殺紗篩曬閃陝贍繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖綏歲孫損筍縮瑣鎖獺撻擡攤貪癱灘壇譚談歎湯燙濤縧騰謄銻題體屜條貼鐵廳聽烴銅統頭圖塗團頹蛻脫鴕馱駝橢窪襪彎灣頑萬網韋違圍爲濰維葦偉僞緯謂衛溫聞紋穩問甕撾蝸渦窩嗚鎢烏誣無蕪吳塢霧務誤錫犧襲習銑戲細蝦轄峽俠狹廈鍁鮮纖鹹賢銜閑顯險現獻縣餡羨憲線廂鑲鄉詳響項蕭銷曉嘯蠍協挾攜脅諧寫瀉謝鋅釁興洶鏽繡虛噓須許緒續軒懸選癬絢學勳詢尋馴訓訊遜壓鴉鴨啞亞訝閹煙鹽嚴顔閻豔厭硯彥諺驗鴛楊揚瘍陽癢養樣瑤搖堯遙窯謠藥爺頁業葉醫銥頤遺儀彜蟻藝億憶義詣議誼譯異繹蔭陰銀飲櫻嬰鷹應纓瑩螢營熒蠅穎喲擁傭癰踴詠湧優憂郵鈾猶遊誘輿魚漁娛與嶼語籲禦獄譽預馭鴛淵轅園員圓緣遠願約躍鑰嶽粵悅閱雲鄖勻隕運蘊醞暈韻雜災載攢暫贊贓髒鑿棗竈責擇則澤賊贈紮劄軋鍘閘詐齋債氈盞斬輾嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵診鎮陣掙睜猙幀鄭證織職執紙摯擲幟質鍾終種腫衆謅軸皺晝驟豬諸誅燭矚囑貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贅墜綴諄濁茲資漬蹤綜總縱鄒詛組鑽緻鐘麼為隻兇準啟闆裡靂餘鍊洩',
convert(text, direction) {// 简繁互转
const from = direction === 's2t' ? this.s : this.t;
const to = direction === 's2t' ? this.t : this.s;
let result = '';
for (let i = 0; i < text.length; i++) {
const char = text.charAt(i);
const index = from.indexOf(char);
result += index !== -1 ? to.charAt(index) : char;
}
return result;
}
};
/*********************************************************************
多语言核心逻辑
********************************************************************/
const MultiLang = {
currentLang: LangConfig.defaultLang,
originalContent: new Map(),
async init() {// 初始化语言选择
const savedLang = LangUtils.getUserLangChoice();// 读取用户保存的语言设置
if (savedLang && LangConfig.targetLangs.includes(savedLang)) {
this.currentLang = savedLang;
}else if (LangConfig.autoDetect.enable && !localStorage.getItem(LangConfig.autoDetect.checkedKey)) {// 自动检测浏览器语言
this.currentLang = LangUtils.detectBrowserLang();
localStorage.setItem(LangConfig.autoDetect.checkedKey, '1');
}
this.initButtons();// 初始化按钮
setTimeout(async () => {
if (this.originalContent.size === 0) {
this.saveOriginalContent(document.body);
}
await this.translatePage();
}, 2000);
},
initButtons() { // 初始化语言选择按钮
const buttons = document.querySelectorAll('.lang-btn');
const self = this;
const langMap = {'zh': '简体中文','t': '繁体中文','en': '英语','jp': '日语','de': '德语'};// 语言代码到名称的映射表(与HTML中的按钮对应)
let isTranslating = sessionStorage.getItem('isTranslating') === 'true';// 从会话存储中获取翻译状态
buttons.forEach(btn => {
const lang = btn.dataset.lang;
const langName = langMap[lang] || lang;// 获取语言显示名称,默认使用代码
if (lang === self.currentLang) {// 设置按钮激活状态
btn.classList.add('active');
} else {
btn.classList.remove('active');
}
btn.addEventListener('click', async () => {
if (lang === self.currentLang) {
return;
}
if (isTranslating) {
layer.msg('正在翻译中,请稍候...');
return;
}
if (['zh', 't'].includes(lang) && !['zh', 't'].includes(self.currentLang)) {
LangUtils.saveUserLangChoice(lang);
window.location.reload();
return;
}
isTranslating = true;// 更新会话存储,标记为正在翻译
sessionStorage.setItem('isTranslating', 'true');
buttons.forEach(b => b.disabled = true); // 禁用所有按钮
try {
self.currentLang = lang;
LangUtils.saveUserLangChoice(lang);
self.initButtons();// 更新按钮激活状态
await new Promise(resolve => setTimeout(resolve, 2000));// 翻译2秒延迟
self.originalContent.clear();
if (['zh', 't'].includes(lang)) {
self.saveOriginalContent(document.body);
} else {
self.saveOriginalContent(document.body);
}
await self.translatePage();
layer.msg('已切换为'+langName);
} catch (error) {
layer.msg('切换失败,请重试');
} finally {
isTranslating = false;// 重置翻译状态
sessionStorage.setItem('isTranslating', 'false');
buttons.forEach(b => b.disabled = false);// 恢复按钮可用状态
}
});
});
},
saveOriginalContent(node) {
const isZhOrT = ['zh', 't'].includes(this.currentLang);
var upperTagName = node.tagName ? node.tagName.toUpperCase() : '';
var isExcluded = LangConfig.excludeTags.includes(upperTagName);
if (!isExcluded && (isZhOrT || this.originalContent.size > 0)) {
if (node.nodeType === 3 && node.textContent.trim() !== '') {
var cacheKey = this.currentLang + '_' + node.textContent + '_' + (node.parentNode ? (node.parentNode.id ? node.parentNode.id : node.parentNode.className) : '');
this.originalContent.set(cacheKey, node.textContent);
}
}
for (var i = 0; i < node.childNodes.length; i++) {
var child = node.childNodes[i];
this.saveOriginalContent(child);
}
},
async translatePage() {
const self = this;
const {excludeTags, contentSelectors } = LangConfig;
const skipAttrs = ['class', 'id', 'style', 'src', 'href', 'data-lang-node'];
const isZhOrT = ['zh', 't'].includes(self.currentLang);//判断是否为简繁语言
const isLanguageMenu = (node) => {
if (!node || !isZhOrT) return false; // 非简繁语言时不排除
const elementNode = node.nodeType === 3 ? node.parentNode : node;
if (elementNode.nodeType !== 1) return false;
return elementNode.id === 'languageMenu' || elementNode.closest('#languageMenu');
};
const getTranslateNodes = () => {
if (isZhOrT) {// 简繁语言翻译整个页面(但排除languageMenu)
return [document.body];
} else {// 非简繁语言只翻译核心区域(标题+内容)
const coreNodes = [];
if (contentSelectors.title && contentSelectors.title.length) {
for (const sel of contentSelectors.title) {
const titleNode = document.querySelector(sel);
if (titleNode) {
coreNodes.push(titleNode);
break;
}
}
}
if (contentSelectors.content && contentSelectors.content.length) {
contentSelectors.content.forEach(sel => {
document.querySelectorAll(sel).forEach(node => coreNodes.push(node));
});
}
return coreNodes;
}
};
const translateNodes = getTranslateNodes();
if (translateNodes.length === 0) {
console.log(isZhOrT ? '未找到页面节点' : '未匹配到标题或内容区域,停止翻译');
return;
}
const translateText = async (text) => text.trim() ? await self.getTranslatedText(text) : text;
const processElementAttributes = async (element) => {
if (!element || !document.contains(element)) return;
if (isZhOrT && isLanguageMenu(element)) return;
for (let i = 0; i < element.attributes.length; i++) {
const attr = element.attributes[i];
const attrName = attr.name;
const attrValue = attr.value;
if (skipAttrs.includes(attrName) || !attrValue.trim()) continue;
element.setAttribute(attrName, await translateText(attrValue));
}
};
const processingTasks = [];
translateNodes.forEach(node => {
if (isZhOrT && isLanguageMenu(node)) return;
const walker = document.createTreeWalker(
node,
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,
{
acceptNode: node => {
if (isZhOrT && isLanguageMenu(node)) return NodeFilter.FILTER_SKIP;// 仅简繁转换时跳过languageMenu相关节点
if (node.nodeType === 1) {
const tag = node.tagName?.toUpperCase();
if (excludeTags.includes(tag)) return NodeFilter.FILTER_REJECT;
}
if (node.nodeType === 3 && !node.textContent.trim()) {
return NodeFilter.FILTER_SKIP;
}
if (node.nodeType === 1 && !node.hasAttributes() && !node.hasChildNodes()) {
return NodeFilter.FILTER_SKIP;
}
return NodeFilter.FILTER_ACCEPT;
}
},
false
);
let currentNode;
while ((currentNode = walker.nextNode())) {
if (isZhOrT && isLanguageMenu(currentNode)) continue; // 仅简繁转换时跳过languageMenu相关节点
if (currentNode.nodeType === 3) {
processingTasks.push((async () => {
const parentMark = currentNode.parentNode ? (currentNode.parentNode.id || currentNode.parentNode.className) : '';
const cacheKey = self.currentLang + '_' + currentNode.textContent + '_' + parentMark;
const originalText = self.originalContent.get(cacheKey) || currentNode.textContent;
if (currentNode && document.contains(currentNode)) {
currentNode.textContent = await translateText(originalText);
}
})());
} else if (currentNode.nodeType === 1) {
processingTasks.push(processElementAttributes(currentNode));
}
}
});
await Promise.all(processingTasks);
},
// 获取翻译后的文本
async getTranslatedText(originalText) {
let translated = originalText; // 先默认返回原文本
if (this.currentLang === 't') {
translated = ChineseConverter.convert(originalText, 's2t');
} else if (this.currentLang === 'zh') {
translated = ChineseConverter.convert(originalText, 't2s');
} else {
translated = await LangUtils.translateText(originalText, this.currentLang);
}
return translated;
}
};
$(document).ready(() => {// 页面加载完成后初始化
const langToggleBox = document.getElementById('langToggleBox');
const languageMenu = document.getElementById('languageMenu');
if (langToggleBox && languageMenu) {
langToggleBox.addEventListener('mouseenter', () => {
languageMenu.style.display = 'block'; // 强制显示
});
langToggleBox.addEventListener('mouseleave', () => {
languageMenu.style.display = 'none'; // 强制隐藏
});
}
MultiLang.init(); //多语言初始化
});
