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

_ Minetestは、ゲームエンジンでMinetestのみでは遊べません。Minetestのゲームを遊ぶには、Luaで書かれた ゲーム を動かして初めてゲームとして遊べます。
そのMinetestのリファレンスゲームとして付属しているのが「Minetest game」です。よくリファレンスゲーム「Minetest game」を指して「Minetest」という人がいますが、それは間違いで「Minetest」と「Minetest game」は別のものです。
さて、MinetestとMinetest Gameの違いについて説明したところで翻訳の話です。
Minetest本体は、ある程度翻訳されています。しかし、Minetest付属のリファレンスゲームの「minetest_game」は、まったく翻訳されておらずゲーム内メッセージやアイテムは全部英語です。
翻訳していない理由はいろいろあると思いますが、一番の理由は面倒だからだと思います。
ゲームの実装は、メイン以外は機能ごとにmodとして実装されています。ゲームのmodsフォルダー以下にはフォルダーに分かれた各機能のmodが細かくあります。翻訳するテキストは、その細かく分かれたフォルダーのさらに中にあるlocaleフォルダーのtemplate.txtを翻訳します。
GUIのファイルマネージャーで細かく分かれたフォルダーを行ったり来たりしてファイルを翻訳するのは面倒なので、template.txtを同じフォルダー構造で抜き出すbashスクリプトとOmegaTで翻訳して生成した訳文ファイルをフォルダーの命名規則に則ってファイルのリネームをするbashスクリプトを書きました。
modsフォルダー内のtemplate.txtを同じフォルダー構造でコピーする
これはゲームの翻訳するファイルをディレクトリ構造そのまま抜き出してコピーするbashスクリプトです。
ゲームがある~/.minetest/games/(ゲーム)
(flatpakでは~/.var/app/net.minetest.Minetest/.minetest/games/(ゲーム)
)フォルダーに移動して下の1行スクリプトを実行するとスクリプトで作成したtransolation
フォルダーにフォルダー構造そのままでtemplate.txt
だけ抜き出したフォルダーができます。
w="translation";mkdir -p ${w};for i in $(find ./mods/ | grep template.txt);do mkdir -p "${w}/$(dirname ${i#\./})" && cp -a "${i}" "${w}/${i#\./}"; done
翻訳は、作成されたtranslation
フォルダーをまるごとをOmegaT翻訳プロジェクトのsouce
フォルダーに移動して翻訳すればOK。
OmegaTで生成した訳文を命名規則に沿ってリネームする
OmegaTで翻訳すると翻訳プロジェクトのtarget
フォルダーに訳文が生成されますが、訳文のファイル名がtemplate.txt
のままです。それを翻訳ファイル名の命名規則に沿ってファイル名を変更するのがこのbashスクリプトです。
OmegaT翻訳プロジェクトのtarget
フォルダーに移動して下のスクリプトを実行します。するとmodフォルダーの名前に従ってtemplate.txt
がリネームされます。
for i in $(find ./mods/ | grep template.txt); do mv "$i" "$(dirname $i)/$(echo $i | cut -d'/' -f4).ja.tr" ;done
スクリプトでファイル名をリネームしたらtranslation
フォルダーの中のフォルダーを~/.minetest/games/(ゲーム)
(flatpakでは~/.var/app/net.minetest.Minetest/.minetest/games/(ゲーム)
)にフォルダーごと上書きコピーすれば日本語メッセージを確認できます。