JSFiddle - React, Tailwind, and code Playground
by MKGaru
HTML
<pre>
旧バージョンの2つの言語(たとえば 英語と日本語)をもとに、
新バージョンの1つの言語(たとえば英語) を、
新バージョンの1つの言語(たとえば日本語)に、変換するシステム。
具体的には、
[old_en_US.lang]
foo.bar.name=Bar
と
[old_ja_JP.lang]
foo.bar.name=ばぁ
をもとに、
[new_en_US.lang]
foo.project.bar_0.name=Bar
を、
[new_ja_JP.lang]
foo.project.bar_0.name=ばぁ
こんな感じに変換するシステム。
</pre>
<form>
<fieldset>
<legend>言語統合</legend>
<fieldset>
<legend>旧版言語ファイル[original]</legend>
<div><small>辞書登録用の、言語ファイル(以前のバージョンのen_US.lang等)を登録</small></div>
<input type="file" onchange="tr.onLoadDictOriginal(event.target.files[0])">
</fieldset>
<fieldset>
<legend>旧版言語ファイル[localize]</legend>
<div><small>辞書登録用の、翻訳済み言語ファイル(以前のバージョンのja_JP.lang等)を登録</small></div>
<input type="file" onchange="tr.onLoadDictLocalize(event.target.files[0])">
</fieldset>
<fieldset>
<legend>新版言語ファイル[original]</legend>
<div><small>翻訳対象の、言語ファイル(新しいバージョンのen_US.lang等)を登録</small></div>
<input type="file" onchange="tr.onLoadTarget(event.target.files[0])">
</fieldset>
<div style="text-align:center">
<button type="button" onclick="tr.translate()">翻訳実行</button>
</div>
</fieldset>
</form>
<textarea id="result" style="width:100%" rows="25"></textarea>
TypeScript
namespace tr{
let dict = new Map();
let original = new Map();
let localize = new Map();
let target;
let result;
export function onLoadDictOriginal(file){
if(!file) return;
var reader = new FileReader();
reader.onload = function(e){
e.target.result
.split('\n')
.filter(line=>{return line.match(/=/)})
.forEach(line=>{
let [target,_original] = line.split('=');
original.set(target,_original);
})
}
reader.readAsText(file);
}
export function onLoadDictLocalize(file){
if(!file) return;
var reader = new FileReader();
reader.onload = function(e){
e.target.result
.split('\n')
.filter(line=>{return line.match(/=/)})
.forEach(line=>{
let [target,_localize] = line.split('=');
localize.set(target,_localize);
})
}
reader.readAsText(file);
}
export function onLoadTarget(file){
if(!file) return;
var reader = new FileReader();
reader.onload = function(e){
target = e.target.result;
}
reader.readAsText(file);
}
export function translate(){
for(let [k,v] of localize){
if(original.has(k))
dict.set(original.get(k),v)
}
result = target.split('\n')
.map(line=>{
if(!line.match(/=/)) return line;
let [target,value] = line.split('=');
if(localize.has(target)) return [target,localize.get(target)].join('=');
if(dict.has(value)) return [target,dict.get(value)].join('=');
return line;
})
.join('\n')
document.getElementById('result').value = result;
}
export function spy(code){
return eval(code);
}
}
window.tr = tr;