【RPGツクールMV】GameStrings的なあれを作ってみた
某discordの某チャンネルにて
はー、ローカライズするのめんどくせー。
みたいなあれを見て簡単に作ってみました。
ちなみに強そうなのは既にあります
完成物
とりあえず出来たやつです。とりあえず「文章の表示」にのみ対応してます。
流れ
簡単な流れは下記の通り
簡単でしょ?
SpreadSheetの用意
まず、こんな感じでデータを作ります。
次にjsonを出力する必要があるので ツール → スクリプトエディタ
からエディタを開きます。
開けたら何も考えず以下のコードをコピペ
function onOpen() { var menu=[ {name: "To Json", functionName: "convert"} ]; SpreadsheetApp.getActive().addMenu("Convert", menu); } function convert() { var sheet = SpreadsheetApp.getActiveSheet(); var keys = sheet.getRange(2, 1, 1, sheet.getLastColumn()).getValues()[0]; var data = sheet.getRange(3, 1, sheet.getLastRow()-2, sheet.getLastColumn()).getValues(); var list = []; data.forEach(function(row){ var obj = {}; for(var i=0; i < keys.length; i++) { obj[keys[i]] = row[i]; } list.push(obj); }); sheet.getRange(1,2).setValue(JSON.stringify(list)); }
ざっくり説明すると、メニューに出力の項目を追加して、それを押すと2行目をインデックスにして、3行目からをデータとして、json作って、1行目に表示、です。
何も考えては行けない。
このスクリプトを保存するとスプレッドシートのメニューにConvert → To Json
が追加されている筈なのでそいつをクリックしましょう。jsonが1行目に出力されます。
jsonをdataに入れる
出力したjsonをdataの下(なんちゃら.jsonが沢山あるところ)にGameStrings.jsonという名前で保存しましょう。
MVにおいてjsonは命の源です。
プラグインを導入
いつも通りプラグインとして入れましょう。説明は省きます。
文章を表示
いつも通りにイベントを作って文章を入力・・・とは行きません。下の画像の様に入れましょう。
MESSAGE_001
はスプレッドシートに入力したkeyと同じ物を入れます。要するにこれを元に言語別に文章を探し、表示するわけです。
試しにここで実行してみると、対象のイベントに話しかけると日本語文章(jaの列に入力した文章)が表示されると思います。
言語を切り替えてみる
プラグインの70行目付近のGameStrings.language = "jp";
をGameStrings.language = "en";
にして実行してみましょう。
なんと英語(enの列に入力した文章)になります。
何をやっているか
入力された文章をkeyとしてデータ内を探索します。
見つかったら喜々として選択中の言語に合わせたデータを出力します。
見つからなかったら絶望に飲まれてキーのまま出力します。
嬉しい所
ローカライズが楽になります。日本語版開発中は日本語だけデータとして入れておいて、いざローカライズしたくなったら翻訳していってjsonを更新&言語変更すれば英語になるのです。便利。
また、文章がスプレッドシートで管理出来るようになります。ライターさんがスプレッドシートに記入していって終わったらデータを出力すればよいのです。ちょっとした変更も簡単に出来ます。チーム開発が捗りますね。
つらい所
翻訳すると文章の長さって変わりますよね。不思議です。
増えてメッセージウィンドウからはみ出した所で我々には何もする手立てはありません。諦めましょう。
また、エディタ上では「MESSAGE_001」みたいな意味が分からない言葉が並びます。人間にはもはや読めません。ツクラーの皆さんがんばってください。
更に、データに不備があるとそのまま「MESSAGE_001」みたいに表示されます。テスターの皆さん頑張ってください。
さいごに
いかがでしょうか。取り敢えず今回は文章の表示だけ対応しましたが、選択肢の文言なんか表示しているコードをフックしてモニョモニョすれば対応出来るはずです。メニューの文言なんかは冒頭に紹介したプラグインの方が管理がしやすそうですが文章ではこういう形も良いのではないでしょうか。冒頭のプラグインで簡単に管理出来たらごめんね。