経緯:
前回作った拙作にて、通常ツクール作品を作るのと同じようにエディタに「文章の表示」で文章を入力したり、スクリプトの$gameMessage.add()を用いてメッセージを表示させていました。
前作発売後英語に翻訳してもらう機会に恵まれましたが、ツクールは仕様上ゲームの実際の処理とゲームで表示する文章が同じ位置に書かれるため、日本語用と英語用とでプロジェクトを分ける必要が出てきてしまいました。
ゲームの要素やシステムをアップデートする際、日本語と英語とでプロジェクトが分かれているため、日本語版で変更した箇所と同じ箇所を外国語版でも変更しなければならず、手間である上にコピペ間違いで不具合の原因にもなりました。
https://i.imgur.com/jEl5eOk.png
https://i.imgur.com/wUX7epr.png
言語別にプロジェクトが分かれているとアップデートのたびに同じ変更を言語分のプロジェクトにコピペしなければならないし、前作は発売後のアップデート回数も多かったため、ヒューマンエラーがとても発生しやすい構造になってしまっていました。
そのため次作でははじめから翻訳とアップデートを想定した設計で作り始めたいと思っています。
どういった設計にすればこれらを実現できるか、お知恵をお貸し願えないでしょうか。
なお完成した翻訳ツールやプラグインは無償公開する予定です。
---
目的:
・ゲーム内に登場するメッセージ(文章の表示、選択肢、注釈、スクリプト等)の翻訳に手間がかからないようにしたい。
・言語ごとにでプロジェクトを分けずに済むような設計にしたい。
→ゲームをアップデートする際に、同じ処理を複数回コピペせずに済ますため。
→処理差分のコピペがなくなるなら、プロジェクト自体は別々でも可
そのために考えたこと:
ボツ案:
『ゲーム内に登場する全ての文章を別の場所にまとめて、ツクールのエディタ側からはそれを参照するだけの構造にする』
https://i.imgur.com/1oG2mKP.png
https://i.imgur.com/eEh6WOn.png
https://i.imgur.com/MFuAxip.png
問題点:
・イベントを編集する際常時エディタと文章編集の2画面が必要なこと
→イベントを切り替えるたびに別の文章用ファイルを開かないといけないので操作が煩雑になる
→エディタのどの部分に何という文章が表示されるのか直感的に分かりづらい
・jsonファイルに直書きすると改行文字などを手動で入れなければならないこと
→jsファイルにテンプレートリテラルで書いてexportsすれば改行文字などは書きやすくなる。
・今回は参照するために"hallo"キーを使ったが、毎回キーに名前を付けるのは大変
この方法だとエディタのみで作業が完結せず、イベント毎に編集ファイルを移動しなければならず作業コストが高くなってしまいました。
そこで考えたのが次の方法です。
---
現在の案:
『制作の際はエディタに直接文章を書く。
配布時にエディタから文章だけを抜き出してエクスポートし、エクスポートされた文章を翻訳してインポートし直す』
エディタでいつもと同じように作り、
https://i.imgur.com/AJg1Poy.png
文章部分だけをエクスポート
https://i.imgur.com/ci4g040.png
翻訳しインポートし直す
https://i.imgur.com/Lrp19Nd.png
https://i.imgur.com/7BZkWrD.png
利点:
・エディタで編集できるので、前案と比べて製作時に余計な手間がかからない
・文章をごっそり自動で抜き出すので、翻訳依頼の際によくある、EXCELでの翻訳のために手動で文章を抜き出す作業がなくなる
・エクスポートしたjsonファイルを直接翻訳機に放り込んで、簡易的に各言語のプレイヤーの言語でプレイしてもらうこともできそう
・画像例では「日本語エクスポート」→jsonを翻訳→「翻訳語インポート」の手順だったが、
「日本語エクスポート」→「日本語インポート」→エディタ上で翻訳の手順もできそう
課題:
・エクスポートの際どうやって文章と処理を分けるか
→イベントコマンドの場合、commandのcodeを読んで文章用コマンドを判別する
→スクリプトコマンドや外部プラグインに文章を書いた際の抽出が難しい
・エクスポートされた後にイベント内の文章を再編集した場合、↑の画像例のように配列で管理していると順番が崩れる
→文章オブジェクトひとつひとつにIDやタグを付ける必要がある?
→文章ひとつひとつに手動で名前を付けるのは労力に見合わない
→文章から固有のハッシュキーを生成し、文章が変わらない限りはハッシュも変わらないようにする?
2020/5/18追記
抽象的なフローチャートにしてみました
書き出して翻訳した文章を、どうやって元の位置に戻すか、というのが一番の問題になりそうですね。
ツクール標準のデータベース構造では、ゲームの処理と文章が癒着しているため、処理と文章を引き剥がすことができれば快適な翻訳環境が得られるのではないか、というのが私の現時点での考えです。
もちろんまったく別の切り口からでも構いません、何かアイデア、思いつきの書き込みをお待ちしております。
ツクールMVのメッセージを翻訳しやすく設計したい
ツクールMVのメッセージを翻訳しやすく設計したい
最後に編集したユーザー utako [ 2020年5月18日(月) 20:53 ], 累計 1 回
--------------------------------------------------------------------------
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!
- Plasma Dark
- 記事: 731
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: ツクールMVのメッセージを翻訳しやすく設計したい
汎用的なシステムは難しいので、ある程度簡単な仕様にしないといけなさそうです。
コマンド数が1:1とは限らないので、ハッシュに対応したコマンドの配列を呼び出してゴニョゴニョしないといけない気はしますが。
あと、原文と訳語が必ず1:1対応するという前提も、本当に受け入れて良いのか熟考したほうが良さそうです。
有名なコマンドーの「オッケイ!」(原文はなんと "wrong!" )のように、文脈で洒落た翻訳をしようとするとこの前提は崩れ去ります。
原文が同じ場合に訳語が必ず同じになる、という前提を受け入れるのであれば、テキスト表示処理の前に原文テキストからハッシュを計算して、言語設定ごとにハッシュに対応する文章を表示する、みたいなこともできそうではありますね。文章から固有のハッシュキーを生成し、文章が変わらない限りはハッシュも変わらないようにする?
コマンド数が1:1とは限らないので、ハッシュに対応したコマンドの配列を呼び出してゴニョゴニョしないといけない気はしますが。
あと、原文と訳語が必ず1:1対応するという前提も、本当に受け入れて良いのか熟考したほうが良さそうです。
有名なコマンドーの「オッケイ!」(原文はなんと "wrong!" )のように、文脈で洒落た翻訳をしようとするとこの前提は崩れ去ります。
Re: ツクールMVのメッセージを翻訳しやすく設計したい
Plasma Darkさん
書き込みありがとうございます。
返信が遅くなりました。
ご指摘いただいたように、ハッシュで出力出来たとしても、それをどうやってエディタ側に戻すか、という問題がありますね。。
別の方法で考え直してみます。
書き込みありがとうございます。
返信が遅くなりました。
ご指摘いただいたように、ハッシュで出力出来たとしても、それをどうやってエディタ側に戻すか、という問題がありますね。。
別の方法で考え直してみます。
--------------------------------------------------------------------------
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!
ゲーム作りました
https://freegame-mugen.jp/roleplaying/game_7109.html
MVプラグインも作りました
https://github.com/asakayu/Mihil_RPGMakerMV_plugins
コードレビュー歓迎します
Please feel free to throw me Masakari!