ティラノスクリプトの翻訳ワークフロー — .ks から英語版ビルドまで
ティラノスクリプトで作ったノベルゲームを英語版でも出したい。そう思って .ks を開くと、翻訳に出せる形になっていないことにまず気づきます。プレイヤーが読む文章とエンジンへの命令が同じ行に混ざっていて、テキストはシナリオファイル・マクロ・画像に散らばっており、そもそもテキストになっていない文字もあります。
ティラノスクリプトはウェブ技術で動くノベルゲームエンジンです。プロジェクトは実質的にHTMLアプリケーションで、シナリオはプレーンテキストの .ks ファイルにあり、プレイヤーが読む文章と、それを表示する命令が同じ行に並びます。GUIツールのティラノビルダーも同じ構造のプロジェクトを吐くので、以下はどちらにもほぼそのまま当てはまります。
この記事では、その前提のうえでの進め方を扱います。プレイヤーの目に触れるテキストを全部見つけること、自作の抽出スクリプトを書く前に公式の多言語機能を使うこと、ビルドを壊さないためのルールを翻訳者に渡すこと、そして日本語が英語になった瞬間に出てくるレイアウトの問題です。
見積もる前に、テキストがある場所を全部数える
シナリオファイルは分かりやすい部分です。開けば、プレイヤーが読む地の文と、背景を読み込んだり音を鳴らしたりクリック待ちをしたりする角括弧のタグが交互に並んでいます。翻訳者には地の文だけを訳してもらい、括弧の中は触らないでもらう — 言うのは簡単ですが、4000行目でこれを守り続けるのは別の話です。
見落とされやすいのは、タグとタグの間ではなくタグの中にあるテキストです。選択肢のラベル、ボタンの文言、用語集の項目、コマンドの引数として渡している文字列は、プレイヤーは読むのに、地の文だけを目で追う人にも、タグのない行だけを拾う素朴な抽出スクリプトにも、コードにしか見えません。
さらに、シナリオの外にもテキストがあります。タイトル画面、コンフィグ画面、セーブ・ロードのスロット、確認ダイアログはエンジン側のテンプレートに由来し、開発者が直接手を入れていることも多い部分です。独自に追加したHTMLやCSS、JavaScriptにも文字列が入ります。そしてノベルゲームには、ロゴ、章タイトル、UIパーツ、イベントCGの一部など、画像に焼き込まれた文字がたいてい存在します。これはどんな抽出でも拾えません。
この棚卸しは、スケジュールや金額を決めたあとではなく、決める前にやってください。誰もがまず見るのはシナリオの文字数で、ノベルゲームではそれが作業量の大半を占めるのも事実です。しかし、画像の作業、テンプレート由来の画面、タグの引数に埋まった選択肢は、2週間の仕事を2か月に変える部分であり、.ks だけを眺めていると見えません。ゲームを1周しながら、文字が出る画面をメモに書き出し、抽出結果と突き合わせる。この1時間が、確実に1週間を節約します。
- 全ルート・全分岐のシナリオ本文(.ks)
- タグの引数に入っているテキスト: 選択肢、ボタン、リンク、用語集
- マクロ — 一度定義して各所で使い回すため、定義側に文字が埋まっている
- タイトル・コンフィグ・セーブ・ロード画面などテンプレート由来の文言
- 独自に足したJavaScriptやHTML内の文字列
- 画像に焼き込まれた文字: ロゴ、章タイトル、UI素材、CG内のキャプション
公式の多言語機能をまず使い、5行で通しを検証する
近年のティラノスクリプトには、複数言語で出すための公式の仕組みがあります。翻訳対象のシナリオテキストを取り出し、訳文を原文と対応づけて持ち、ビルドされたゲーム側で言語を選ぶ、という一式です。自前の抽出スクリプトを書く前に必ずこちらを検討してください。自作すると、タグの保全、分岐の網羅、取り込み直しをすべて自分で解決し直すことになります。
具体的なメニューの場所、ファイル名、フォルダ構成、必要なバージョンはリリースによって変わります。手順は、この記事を含む二次情報ではなく、自分が使っているバージョンの公式ドキュメントのローカライズの章で確認してください。先に決めるべきなのは、どこをクリックするかではなく、その仕組みに何を期待するかです。
そして誰かが翻訳を始める前に、5行だけで通しを試します。選択肢を含む行と、文の途中にタグが入る行を必ず混ぜて、抽出・翻訳・取り込み・実際のビルドまで通し、画面で確認します。5行の失敗は半日で済みますが、1000行訳したあとで同じ失敗に気づくと、スケジュールごと作り直しになります。
- 抽出で実際に拾えるテキストはどこまでか。前節のリストのうち何が漏れるか
- 出てくるファイル形式は何か。翻訳者がそのまま作業できるか、変換が要るか
- 取り込みで元に戻るか。文中にタグが入る行でも壊れないか
- ビルドされたゲームはどうやって言語を決めるか。プレイ中に切り替えられるか
- 訳がまだ無い行はどうなるか。原文にフォールバックするか、何も出ないか
タグはコード。テキストと一緒にルールを渡す
壊れたティラノ製の翻訳の大半は、翻訳の問題ではありません。翻訳者が括弧を打ち直した、誤字に見えたクリック待ちのタグを消した、タグの中身まで訳した — 原因はだいたいこれです。そして、それは不注意ではありません。どの文字が動作に効いているのかを誰も伝えていないから起きます。
ルールは一度書いて、毎回のバッチに添付します。タグの正確な名前は公式のタグリファレンスを見てもらうとして、渡すべきルール自体は変わりません。角括弧の中はすべて機械の領域であること、話者名を指定する記号は残したまま名前だけを訳すこと、タグは文に対する位置を保つこと、そしてどうしても英語の語順で位置を変える必要があるときは、勝手に判断せず質問として上げてもらうことです。
ルールシートと一緒に、名前の一覧も渡します。ノベルゲームには登場人物が多く、あだ名があり、敬称があり、地名や造語があります。分岐するスクリプトを頭から順に訳していく人は、放っておけば1章と6章で同じ名前に別の妥当な表記を当てます。表記と敬称の方針を最初のバッチの前に — レビュー中ではなく — 決めておくのは半日の作業で、ノベルゲームでもっとも多い修正依頼の種類をまるごと消せます。
短いビフォー・アフターを1つ添えると、説明を1ページ書くより早く伝わります。どの文字が生き残るのかがそのまま見えるからです。
変更前 #ミサキ そんなの聞いてないよ。[l][r] ……どうして黙ってたの?[p] 変更後 #Misaki You never told me that.[l][r] ...Why did you keep it from me?[p]
中身はブラウザ。フォントと改行はCSSの問題として考える
ティラノスクリプトはウェブ技術で描画するので、書体まわりはエンジンの設定というよりスタイルシートの問題です。これはおおむね良い話で、英語版には英語のために選んだフォントを当てられます。日本語フォントに付属している欧文字形は多くの場合おまけで、メッセージ枠のサイズで見ると不自然に見えることがあります。英語以外のヨーロッパ言語も足すなら、アクセント付きの文字が出るかを個別に確認してください。日本語フォントでは収録が怪しい領域です。
もう一つの定番が手打ちの改行です。日本語のシナリオでは、メッセージ枠の見栄えを整えるために改行を手で入れているのが普通ですが、その改行はすべて英語では位置が違います。翻訳を始める前に方針を決めてください。英語版では手動改行を落として枠の自動折り返しに任せるか、テキスト確定後に言語ごとに入れ直す人を用意するかのどちらかです。どちらもやらないと、英語版だけ文の途中でぶつ切りになった画面が量産されます。
枠そのものも確認します。同じ内容でも英語は行数が増えがちなので、枠の大きさが足りるかどうかを決めるのは平均的な行ではなく最長の行です。長い行を探して実機で見て、バックログや選択肢ボタンも同様に確認します。表示速度も見直す価値があります。日本語では気持ちよかった間が、文字数が倍になると間延びして感じられるためです。ルビを使っている場合、英語には持ち越せないので、ルビ用に確保していた行間はそのぶん使えます。
プレビューではなくビルドを、全ルートで確認する
エディタ上のプレビューと、書き出したパッケージの動作は同じではありません。アセットのパス、フォント、言語の選択はどれも書き出し後に挙動が変わりうるので、実際に配布するものを、配布する環境で確認してください。ノベルゲームはこの差が効きやすい種類のプロジェクトです。
もう一つの罠がルートの網羅です。未翻訳の日本語は、誰も再プレイしない分岐に残ります。バッドエンド、条件付きのおまけシーン、前の周回のフラグが要るルートなどです。全ルート・全エンディングのチェックリストを作って翻訳版で潰すか、ラベルへのジャンプ機能で意図的に到達してください。偶然たどり着くのを待つ方法では終わりません。
最後に、言語を切り替えたときの挙動を見ます。片方の言語で作ったセーブがもう片方で読めること、セーブデータに保存された文字(入力した名前、単語として保存されたフラグ、しおりの見出しなど)が保存時の言語のまま戻ってこないこと。ついでに、セーブ・ロード画面自体を両言語で眺めておいてください。テンプレート由来の画面は、プロジェクト全体でもっとも忘れられやすい場所です。