CSV読み込み(途中)
by MKGaru
HTML
<ol>
<li>日本語Localizationを放り込む</li>
<li>日本語Localization - Questを放り込む</li>
<li>バニラLocalizationを放り込む</li>
<li>バニラLocalization - Questを放り込む</li>
<li>対象のLocalizationを放り込む</li>
<li>対象のLocalization - Questを放り込む</li>
</ol>
<ul id="download">
<li><a id="l" href="#" download="localization.txt">localization.txt</a></li>
<li><a id="q" href="#" download="Localization - Quest.txt">Localization - Quest.txt</a></li>
</ul>
CSS
html,
body{
height:100%;
}
.done{
text-decoration: line-through;
color: lightgray;
}
#download{
display:none;
}
JavaScript
const container = document.body;
const headers = {
Key:0,
Source:1,
Context:2,
Changes:3,
English:4,
French:5,
German:6,
Klingon:7,
Spanish:8
}
const jaLocalization = new Map();
const jaLocalizationQuest = new Map();
const originalLocalization = new Map();
const originalLocalizationQuest = new Map();
let localization;
let localizationQuest;
const db = [
jaLocalization,
jaLocalizationQuest,
originalLocalization,
originalLocalizationQuest
];
const translate = new Map();
const unknown = new Map();
let count = 0;
const handlers = {
onDragOver(e){
e.preventDefault();
},
onDrop(e){
if(!e.dataTransfer.files.length) return;
e.stopPropagation();
e.preventDefault();
for(const file of e.dataTransfer.files){
const reader = new FileReader();
reader.onloadend = handlers.onLoad;
reader.readAsText(file);
}
},
onLoad(e){
const result = e.target.result;
if(count<4){
result.replace(/\r/g,'').split('\n').forEach(line=>{
if(!line) return;
const words = line
.match(/[^,"\r\n]+,|"(?:[^"]|"")*",|,/g)
.map(w=>w.substring(0,w.length-1));
if(db[count].has(words[headers.Key])) return;
db[count].set(words[headers.Key],words[headers.English])
})
}
else{
if(count==4) localization = result.replace(/\r/g,'');
if(count==5) localizationQuest = result.replace(/\r/g,'');
}
document.querySelector('ol>li:nth-child('+(++count)+')').classList.add('done');
if(count==6) handlers.onResourcesReady();
},
onResourcesReady(){
// 辞書の生成
db[2/*o_l*/].forEach((v,k)=>{
if(translate.has(v)) return;
if(!db[0/*j_l*/].has(k)) return;
if(v == db[0/*j_l*/].get(k)) {if(k.endsWith('Desc'))unknown.set(v); return;}
translate.set(v,db[0/*j_l*/].get(k));
});
db[3/*o_lq*/].forEach((v,k)=>{
if(translate.has(v)) return;
if(!db[1/*j_lq*/].has(k)) {if(k.endsWith('Desc'))unknown.set(v); return;}
if(v ==...