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;