Minetestのgameを翻訳するためのtemplate.txt抜き出しと翻訳したファイルをリネームするワンラインスクリプト

nogajun
nogajun

_ Minetestは、ゲームエンジンでMinetest本体にはゲームは無いし遊べません。Minetestのゲームを遊ぶには、Luaで書かれた game を動かして初めてゲームとして遊べます。勘違いした人が「Minetest」と言っているのは、gameである「minetest_game」のことです。

さて、Minetest本体は、ある程度翻訳されているので日本語メッセージが表示されていますが、Minetestのリファレンスであり付属のgameである「minetest_game」は、まったく翻訳されていないのでゲーム内メッセージやアイテムは全部英語のままです。

翻訳していない理由は、いろいろあると思いますが一番の理由は面倒だからだと思います。

gameの実装は、メイン以外は機能ごとにmodとして実装しています。gameのmodsフォルダー以下にはフォルダーに分かれた各機能のmodが細かくあります。翻訳するテキストは、その細かく分かれたフォルダーのさらに中にあるlocaleフォルダーのtemplate.txtを翻訳します。

GUIのファイルマネージャーで細かく分かれたフォルダーを行ったり来たりしてファイルを翻訳するのは面倒なので、template.txtを同じフォルダー構造で抜き出すスクリプトとOmegaTで翻訳して生成した訳文ファイルをフォルダーの命名規則に則ってファイルのリネームをするスクリプトを書きました。

modsフォルダー内のtemplate.txtを同じフォルダー構造でコピーする

~/.minetest/games/フォルダーの下に移動して、コピー先のtranslationフォルダーを作成する。そして、実行するとtransolationフォルダーにtemplate.txtだけを抜き出したフォルダーができる。

 $ w="translation"; for i in $(find ./ | grep template.txt);do mkdir -p "${w}/$(dirname ${i#\./})" && cp -a ${i} ${w}/${i#\./}; done

生成されたtranslation以下のフォルダーをOmegaTのsouceフォルダーに移動して翻訳する。

OmegaTで生成した訳文を命名規則に沿ってリネーム

OmegaTのtargetフォルダーに移動して実行する。template.txtをmodフォルダーの名前に従ってtemplate.txtをリネームするので、変更したら~/.minetest/games/以下のgameにフォルダごと上書きコピーすると日本語メッセージの確認ができる。

 $ for i in $(find . | grep template.txt); do mv "$i" "$(dirname $i)/$(echo $i | cut -d'/' -f4).ja.tr" ;done