(function(){ // 状態の翻訳(完全一致) var statusDict = { '空き': 'Available', '運転中': 'In Use', '運転': 'In Use', '異常': 'Error' }; var statusReverse = {}; for (var k in statusDict) statusReverse[statusDict[k]] = k; // 種類の翻訳(部分一致で前方から検索、長い順にマッチ) var typeMap = [ ['小型洗濯乾燥機', 'Small Washer/Dryer'], ['中型洗濯乾燥機', 'Med Washer/Dryer'], ['靴洗濯乾燥機', 'Shoe Washer/Dryer'], ['中型乾燥機上段', 'Med Dryer Upper'], ['中型乾燥機下段', 'Med Dryer Lower'], ['大型乾燥機', 'Large Dryer'], ['中型乾燥機', 'Med Dryer'], ['小型乾燥機', 'Small Dryer'], ['洗濯乾燥機', 'Washer/Dryer'], ['乾燥機', 'Dryer'], ['洗濯機', 'Washer'] ]; var typeReverse = typeMap.map(function(p){ return [p[1], p[0]]; }); function translateType(text, toLang) { var pairs = toLang === 'en' ? typeMap : typeReverse; for (var i = 0; i < pairs.length; i++) { if (text.indexOf(pairs[i][0]) !== -1) { return text.replace(pairs[i][0], pairs[i][1]); } } return text; } // 機械名: X号機 <-> #X function translateMachine(text, toLang) { if (toLang === 'en') return text.replace(/(\d+)号機/, '#$1'); return text.replace(/#(\d+)/, '$1号機'); } function translateMinutes(text, toLang) { if (toLang === 'en') return text.replace(/(\d+)分/, '$1 min'); return text.replace(/(\d+) min/, '$1分'); } function translateUpdate(text, toLang) { if (toLang === 'en') return text.replace('更新:', 'Updated:'); return text.replace('Updated:', '更新:'); } function applyLang(lang) { var sMap = lang === 'en' ? statusDict : statusReverse; document.querySelectorAll('#main td').forEach(function(td) { var col = td.getAttribute('data-col'); var t = td.textContent.trim(); if (col === 'machineName') { td.textContent = translateMachine(t, lang); } else if (col === 'status') { if (sMap[t]) td.textContent = sMap[t]; } else if (col === 'minutes') { td.textContent = translateMinutes(td.textContent, lang); } else if (col === 'type') { td.textContent = translateType(t, lang); } }); var upd = document.querySelector('[data-i18n="update"]'); if (upd) upd.textContent = translateUpdate(upd.textContent, lang); var dir = document.querySelector('[data-i18n="directions"]'); if (dir) dir.textContent = lang === 'en' ? '📍 Get Directions on Google Maps' : '📍 Googleマップで道案内'; var btn = document.getElementById('lang-toggle'); if (btn) btn.className = 'lang-' + lang; } var lang = localStorage.getItem('beloved-lang') || 'ja'; document.addEventListener('DOMContentLoaded', function() { applyLang(lang); var btn = document.getElementById('lang-toggle'); if (btn) { btn.addEventListener('click', function() { lang = lang === 'ja' ? 'en' : 'ja'; localStorage.setItem('beloved-lang', lang); applyLang(lang); }); } }); })();