退坑了七八年最近才回鍋,很多貿易小工具都壞了,韓文每次都要找對照翻譯也很麻煩,所以就整理成以下腳本了,腳本只是將文字做替換而已,很安全,可以自己看 code。
主要針對韓國fantazm做了地區和物品的翻譯以及時間調整,時間調整僅供參考我也不保證一定對XD
注意的是杜卡特是售價而且不會和台灣一樣所以可以忽略
腳本可自行安裝 TamperMonkey 之類的載入使用
主要針對韓國fantazm做了地區和物品的翻譯以及時間調整,時間調整僅供參考我也不保證一定對XD
注意的是杜卡特是售價而且不會和台灣一樣所以可以忽略
主要功能
- 加上轉換台灣時區並且校時
- 翻譯物品名稱及加上地點
- 翻譯地區名稱
- 翻譯地區名稱
腳本可自行安裝 TamperMonkey 之類的載入使用
// ==UserScript==
// @name 瑪奇走私繁體中文翻譯
// @description 翻譯走私預報
// @version 0.0.3
// @author 小毛毛蟲@愛麗莎
// @grant GM_addStyle
// @license MIT
// @namespace https://home.gamer.com.tw/homeindex.php?owner=suddy
// @match https://lute.fantazm.net/*
// ==/UserScript==
/* global $ */
GM_addStyle('.tw-time { color: red; }'); // 添加 CSS
(function() {
'use strict';
// 設定對應韓文到中文的字典
const translationMap = {
'현실시간': '現實時間',
'위치': '位置',
'밀수품': '走私品',
'두카트': '杜卡特(售價)',
'베이비 포션':'嬰孩藥水(堤爾克那)',
'다이어트 포션':'減肥藥水(堤爾克那)',
'코골이 방지 포션':'預防打鼾藥水(堤爾克那)',
'산삼 포션':'人蔘藥水(堤爾克那)',
'러블리 포션':'限-討喜藥水(堤爾克那)',
'거미줄 장갑':'蜘蛛絲手套(杜巴頓)',
'양털 부츠':'羊毛靴子(杜巴頓)',
'오거 도살자 가면':'食人魔屠夫面具(杜巴頓)',
'인큐버스 정장':'惡翅魅魔正裝(杜巴頓)',
'서큐버스 수영복':'限-魅魔泳衣(杜巴頓)',
'반호르산 석탄':'班克爾煤炭(班克爾)',
'대리석':'大理石(班克爾)',
'황수정':'黃水晶(班克爾)',
'하이랜더 광석':'高地礦石(班克爾)',
'납':'限-鉛(班克爾)',
'베리 그래놀라':'莓燕麥片(艾明馬夏)',
'버터 맥주':'奶油啤酒(艾明馬夏)',
'훈제 야생동물 구이':'燻烤野生動物(艾明馬夏)',
'트뤼플 파스타':'松露義大利麵(艾明馬夏)',
'통곰 바비큐':'限-烤全熊(艾明馬夏)',
'열기의 결정':'熱氣的結晶(塔爾汀)',
'오르골 보존석':'留聲石(塔爾汀)',
'팔라라 결정':'帕拉魯結晶(塔爾汀)',
'원형방호벽 결정':'防護壁圓形結晶(塔爾汀)',
'연금 결정':'限-鍊金結晶(塔爾汀)',
'미니 화장대':'迷你梳妝台(塔拉)',
'티 테이블':'茶几(塔拉)',
'흔들 의자':'搖椅(塔拉)',
'어린이 2층 침대':'小朋友兩層樓床(塔拉)',
'대형 와인랙':'限-大型葡萄酒架(塔拉)',
'카브산 김':'卡普海苔(卡普)',
'카브산 굴':'卡普牡蠣()',
'상어 지느러미':'鯊魚魚鰭(卡普)',
'젤리 해파리':'海蜇皮(卡普)',
'네이드 비늘':'限-那伊德鱗片(卡普)',
'쇠채찍':'鐵鞭子(貝爾法斯特)',
'다크 소드':'闇之劍(貝爾法斯特)',
'금고':'金庫(貝爾法斯特)',
'스켈레톤 오거 갑옷':'骷髏食人魔盔甲(貝爾法斯特)',
'모조 모르간트 헬멧':'限-摩根特頭盔仿製品(貝爾法斯特)',
'민트초코 파우더':'薄荷巧克力粉(克拉)',
'싱싱한 석류':'新鮮的石榴(克拉)',
'마나터널 미니어처':'魔法之門模型(克拉)',
'탐험용 구조 키트':'探險用救援工具(克拉)',
'카이피 선인장 에센스':'限-卡比仙人掌精華(克拉)',
'유리 조약돌':'玻璃鵝卵石(比路里亞)',
'계피 향수':'桂皮香水(比路里亞)',
'건조 사프란':'乾燥番紅花(比路里亞)',
'론가 천연 암염':'侖格天然岩鹽(比路里亞)',
'필리아 식 육포':'限-比路里亞肉乾(比路里亞)',
'쿠르클레 유적 기념품':'庫爾勒克遺跡紀念品(科爾)',
'의식용 대형 가면':'儀式用大型面具(科爾)',
'라테르 라즈베리':'拉圖勒樹梅(科爾)',
'유물 복원 도구 세트':'遺物修復工具組(科爾)',
'쿠르클레 천연 고무':'限-庫爾勒克天然橡膠(科爾)',
'발레스 패디드 코트':'巴雷斯合成棉外套(巴雷斯)',
'천연 빙하 생수':'天然冰川泉水(巴雷斯)',
'스케이트 슈즈':'溜冰鞋(巴雷斯)',
'스노우 보드':'滑雪板(巴雷斯)',
'발레스 보드카':'限-巴雷斯伏特加(巴雷斯)',
'두갈드 아일 벌목캠프 동쪽':' 杜加德走廊伐木場東邊',
'두갈드 아일 벌목캠프 남동쪽':' 杜加德走廊伐木場東南',
'두갈드 아일 남동쪽':' 杜加德走廊東南邊',
'가이레흐 언덕 라인알트 동쪽':'亞斯特東邊',
'가이레흐 언덕 라인알트 남동쪽':'亞斯特東南',
'가이레흐 언덕 피오드던전':'菲歐納地下城',
'센 마이 평원 페카던전':'貝卡地下城',
'센 마이 평원 북서쪽':'山平爾平原西北',
'센 마이 평원 북쪽':'山平爾平原北邊',
'센 마이 평원 남동쪽':'山平爾平原東南',
'센 마이 평원 남쪽':'山平爾平原南邊',
'슬리아브 퀼린 서쪽':'索利亞庫林西邊',
'슬리아브 퀼린 암석지대 동쪽':'索利亞庫林岩石地帶東邊',
'슬리아브 퀼린 암석지대':'索利亞庫林岩石地帶',
'슬리아브 퀼린 암석지대 서쪽':'索利亞庫林岩石地帶西邊',
'탈틴 스톤헨지 서쪽':' 塔爾汀巨石陣西邊',
'탈틴 묘지':'塔爾汀墓地',
'탈틴 남쪽':'塔爾汀南邊',
'탈틴 남서쪽':'塔爾汀西南邊',
'아브 네아 네아호수 서쪽':' 亞布內亞尼爾湖西邊',
'아브 네아 네아호수 남서쪽':' 亞布內亞尼爾湖西南',
'아브 네아 네아호수 북서쪽':' 亞布內亞尼爾湖西北',
'아브 네아 네아호수 남동쪽':' 亞布內亞尼爾湖東南',
'코리브 계곡 북쪽':' 克里布山谷北邊',
'코리브 계곡 남쪽':' 克里布山谷南邊',
'블라고 평원 북서쪽':' 布拉格平原西北',
'블라고 평원 레자르 양조장':' 布拉格平原傑哈酒莊',
'블라고 평원 북쪽':' 布拉格平原北邊',
'블라고 평원 동쪽':' 布拉格平原東邊',
// 更多轉換...
};
// 函數用於校正時間
function adjustTime(timeStr) {
const timeParts = timeStr.split(':');
if (timeParts.length === 3) {
let hours = parseInt(timeParts[0], 10);
let minutes = parseInt(timeParts[1], 10);
let seconds = parseInt(timeParts[2], 10);
// 加上時差1小時又5分鐘
minutes += 5;
if (minutes >= 60) {
minutes -= 60;
hours += 1;
}
hours += 1;
// 處理超過24小時的情況
if (hours >= 24) {
hours -= 24;
}
// 轉回兩位數格式
const hoursStr = hours.toString().padStart(2, '0');
const minutesStr = minutes.toString().padStart(2, '0');
const secondsStr = seconds.toString().padStart(2, '0');
return `${hoursStr}:${minutesStr}:${secondsStr}`;
}
return '';
}
// 遍歷表格中特定的 td 元素並添加校正後的時間
function addAdjustedTime() {
$('#smug_content td[data-th="일 시"]').each(function() {
const originalTime = $(this).text();
const adjustedTime = adjustTime(originalTime);
if (adjustedTime) {
const timeHtml = `${originalTime} <br/><span class="tw-time">【 TW: ${adjustedTime} 】</span>`;
$(this).html(timeHtml);
}
});
}
// 函數用於轉換文本
function translateText(text) {
return translationMap[text.trim()] || text; // 去除空格後進行翻譯
}
// 遍歷表格中的所有 th 和 td 元素並轉換內容
function translateTable() {
$('#smug_content th, #smug_content td').each(function() {
$(this).contents().each(function() {
if (this.nodeType === Node.TEXT_NODE) {
this.nodeValue = translateText(this.nodeValue);
}
});
});
}
// 創建一個新的 MutationObserver 監聽器來監聽 DOM 變化
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.addedNodes && mutation.addedNodes.length > 0) {
// 每次 DOM 更新時,重新翻譯表格並添加校正時間
translateTable();
addAdjustedTime();
}
});
});
// 配置和啟動 MutationObserver
const config = { childList: true, subtree: true };
observer.observe(document.body, config);
})();