効率よく、漏れなく、大量に翻訳!自作ツールや日本語キーも使った『カゲマス』『ダンクロ』のローカライズ手法【CEDEC2023】

2023.09.04
注目記事ゲームづくりの知識しくみをつくるゲームの舞台裏講演レポートCEDECCEDEC2023ローカライズ
この記事をシェア!
twitter facebook line B!
twitter facebook line B!

国内最大規模のゲーム業界カンファレンス「CEDEC2023」が、2023年8月23日(水)から8月25日(金)までの日程で開催されました。1日目となる8月23日には、Aiming 第二事業部エンジニア部部長の吉田 正広氏、第二事業部アート部 部長の板井 諒輔氏が登壇し、『「陰の実力者になりたくて!マスターオブガーデン」「ダンジョンに出会いを求めるのは間違っているだろうか バトル・クロニクル」におけるローカライズ手法』と題した講演が行われました。これらのタイトルや過去作のローカライズで作業効率化のために行なったデータの持ち方や作成したツールについて解説された本講演をレポートします。

TEXT / HATA

EDIT / 酒井 理恵

目次

登壇者紹介と本講演で扱うタイトル『カゲマス』・『ダンクロ』などの紹介

講演は、Aiming第二事業部エンジニア部部長の吉田 正広氏が解説し、Aiming第二事業部アート部 部長の板井 諒輔氏が質問をする形式で進みました。

陰の実力者になりたくて!マスターオブガーデン』(以下、『カゲマス』)において、吉田氏はサーバーサイドエンジニアのリード、板井氏はエフェクト制作をを担当しています。

Aiming第二事業部エンジニア部部長の吉田 正広氏。熊本サテライトオフィス「Team CARAVAN熊本ベース」の代表も務める

Aiming第二事業部アート部 部長の板井 諒輔氏。熊本サテライトオフィス「Team CARAVAN熊本ベース」の副代表も務める

『カゲマス』は2022年にリリースした3DアニメーションRPG、『ダンジョンに出会いを求めるのは間違っているだろうか バトル・クロニクル』(以下、『ダンクロ』)は2023年8月24日にリリースしたバトルアクションRPGです。両作ともにライトノベルをゲーム化したもので、対象プラットフォームはiOS/Android/Windows、開発環境はUnityです。

Aimingチームキャラバン(以下、チームキャラバン)では『CARAVAN STORIES』で初めてローカライズに取り組みました。その際に制作したローカライズの基礎システムが本講演で扱う2作に引き継がれています。そして、本講演の2作品の反省はまだ公開されていない新規開発タイトルのローカライズでさらに活かされる予定です。

本講演で扱うローカライズと「やらなかった」こと

吉田氏はローカライズとは広く言えば「配信される国に合わせた対応をすること」としたうえで「言語の翻訳」と「文化的背景に合わせた修正」の2つがあるとしました。「文化的背景に合わせた修正」には、肌の露出の範囲などその国の法律に合わせた変更も含みます。

本講演で扱うのは「言語の翻訳」についての解説です。

また、今回の翻訳は、アラビア語には対応しませんでした。そもそも配信対象でなかったこともありますが、アラビア語は右から左に読むためUIが左右逆になったり、バイト列の右側が1バイト目になったりとアラビア語固有の仕様にする必要があるためです。

もうひとつ、「設定画面で言語を切り替えた後に即時反映する」という機能も対応しませんでした。この機能を実現するには、プレイ言語だけでなく切り替え後の言語もあらかじめダウンロードしておく必要がある他、メモリにロードされたリソースも読み直す必要があります

「タイトル画面に戻ってから反映する」としてもユーザーエクスペリエンスは大きく変わらないため、こうした実装にしたと吉田氏は述べました。

「未完成」の状態から走り始める、ローカライズのワークフローとは?

同社のローカライズワークフローは、日本語版開発チームが日々行ったアップデートを翻訳管理・反映の担当者が翻訳会社とやりとりをして実装を進めて行くという流れになります。翻訳作業は日本語版の完成を待たずに始まるため、翻訳管理・反映の担当者は毎日更新される日本語データがどこまで翻訳データに反映されているのかを把握しながら作業します。

今回解説する『カゲマス』は160万文字、『ダンクロ』は45万文字を翻訳しました。これを効率よく、事故なく、行うにはできる限り自動化や人力での入力をしない工夫が必要です。

この講演では「アートリソースのローカライズ」、「マスターデータのローカライズ」、「プレゼントボックスメッセージのローカライズ」の3つの領域に分けて、同社のローカライズ手法を解説します。

アートリソースのローカライズ――効率よい画像設定作業のためにツールを自作

アートリソースのローカライズは、バナーなどのローカライズを行うもので画像ごと差し替える作業になります。

緑枠部分がアートリソースのローカライズ対象。画像の中に文字があるので翻訳が必要になる

吉田氏は最初はUnityが提供する「Localization Package」を使用した対応を考えました。しかし、この方法は各言語のキーに対して一つ一つ手動でリソースを設定する必要がありました。そこで、フォルダ名を基準にしてリソースの自動設定ができないかの検証もしましたが、断念しました。

画面左のボックスにあるのがキー、国旗の部分が各言語版で表示される画像。これを各キーごとに設定する必要がある

そこでエンジニアは、そもそもゲームを実行するランタイム時ではなく、アセットやアプリのビルド時に言語ごとにリソースを差し替えるツールの作成を考えました。こうして作成されたのが「画像コピペツール」です。

このツールはUnityProject内のExternalResorcesフォルダ以下に収録された日本語版のUIやMovieなどを、ビルドする時にそれぞれの言語でリソースを上書きします。

このツールはデザイナーの使うツールとして採用となりました。

ただし、このツールは他言語に切り替えた状態でコミットすると、日本語の画像がその言語の画像に変わってしまいます。同社では、そういった問題も起きず開発を進めることができたそうです。

このツールのメリットとして「Unity環境じゃなくても使えるシステム」という点も吉田氏は挙げました。

各言語のAssetsフォルダ以下が日本語版と同じディレクトリ構成になっている。「画像コピペツール」は日本語版のリソースを各言語のリソースで上書きする

マスターデータのローカライズ――日本語キーから専用キー使用に至るまで

マスターデータのローカライズについて、まず一般的な方法から解説が始まりました。

マスターデータとは、水色の枠部分のようなセリフやミッション内容などテキスト全般を指す

一般的に、マスターデータのローカライズでは文字列ごとにキーを作ります。使用する文字列ごとにキーの名称(画像右のStringMaster中のITEM_NAME_10001など)を設定し、英語や日本語など各言語の名称を紐づけます。ItemMasterには先ほどのキーの名称がItemCodeとともに登録されており、キーの値をもとに文字列のマスターから各言語の文字列を読み込んで英語や日本語を表示させます。

ItemMasterの「ITEM_NAME_10001」をキーにして、StringMasterから日本語の「木の剣」、英語の「Wooden Sword」を読み込む

この方法は、マスターデータを見た時に日本語の表示がないのでアイテム名がわかりづらくキーの入力作業を行なう必要もあります。

さらに、同社の事情として、初めてローカライズ対応を行った『キャラバンストーリーズ』は、開発時にローカライズを意識していなかったため、ItemMasterに日本語が設定されており、そもそもキーが設定されていませんでした。

そこで同社では「日本語そのものをキーにする」という方法を試みました。

実際のゲーム内の翻訳データは、翻訳テーブルのExcelファイルから出力されたテキストファイルをさらにバイナリデータに変換したものが使われています。

日本語版はItemMasterのデータ(MasterData.Japanese.bytes)をそのままインポートして使用します。

ローカライズ版ではItemMasterTranslationというテーブルに日本語・対応する英語を設定します。ゲームにインポートする時には、ItemMasterTranslation上の日本語とItemMasterの日本語を照らし合わせ、合致した日本語を英語に置き換えたバイナリデータを作成するという方法を採っています。

こうしたデータはGit上にTSV形式(※)で管理しています。

※ タブを区切り文字として使用したテキストデータ

この際にCSVでなく、TSVを用いたのは、英語圏では文章中にカンマを多用するためです。

「Column」列には項目名が入る。たとえば、アイテムを説明する項目を追加する場合は、「Column」に「Description」と設定した行が加わり、「Japanese」「English」に各言語のアイテム説明文が入るイメージだ

ItemMasterTranslationテーブルのEnglish列を埋める作業翻訳担当者が行います。どの項目を埋める必要があるかはTranslate Toolで検出しています。このツールは、データ上に日本語を検出すると、翻訳用のItemMasterTranslationを作り出します。この状態では、翻訳対象となるEnglish列、Taiwan列などが空欄となって出力されます。

なお、日本語のデータがアップデートされたときには、アップデート前の言葉が何で、どのように翻訳されていたかの情報も参照できるようになっています。

台湾語翻訳と英語翻訳は別の翻訳会社が担当するため、各言語でTSVが出力されるようにしている

この日本語をキーとしたローカライズ方法は『キャラバンストーリーズ』の時に行い、特に問題なく運用できていたことから『カゲマス』でもこのノウハウを活かそうとしました。しかし、ここに課題が発生したと吉田氏は言います。

というのは、日本語版の文字を少し変えるだけでもTranslate Toolは「新しいデータ」とみなすため、翻訳漏れが発生してしまうのです。

誤って入力してしまった「ぁ」を1つ減らす修正をしただけでも新しい日本語データとみなされた。翻訳されていない箇所は日本語を表示する仕様だったため、英語版で日本語が表示されてしまった

ここで、板井氏から質問が出ます。

「ということは、修正の数だけデータが増えるということですか?」

吉田氏は「その通りです」と回答。日本語としての意味が変わらなくても、ツールからは判別できない点がこの方法の課題となりました。

なお、まったく同じ日本語が他の箇所で登場した時はどうなるのだろう?という疑問があるかもしれませんが、このケースはあまり発生しなかったそうです。発生したケースとしては、日本語では同じ「はい」という言葉が一方は「Yes」、一方は「Yes」でないニュアンスの翻訳文が必要となるケースがありました。この場合は、日本語の一方の「はい」の後にスペースを入力してツールに別のキーだと判断させて回避したそうです。

新規タイトルでのローカライゼーションに際し、エンジニアからは「やはり日本語キーはやめたい」という意見が出ました。しかし、そうするとキーの名前を考えなければならない煩わしさが生まれます。そこで、更新版のツールでは、キーの名前を自動生成する機能を作りました。

キー名となるItemMasterの「TranlateKey_Name」はExcelの関数で自動生成

更新版ツールでは、TSVデータから翻訳会社受け渡し用のTSVデータを生成するのではなくExcelデータを生成します。見た目はItemMasterTranslationのときとあまり変わりませんが、翻訳のステータスを入力できる列が加わりました。ここには「翻訳済みで翻訳する必要がない」、「再翻訳の可能性あり」、「新規」といったステータスが入力される想定です。

ExcelからTSVを出力する際も、キーの値以外に日本語と翻訳言語双方の値が出力するようにしました。キーさえあれば翻訳言語の対応する値は取り出せるのですが、Git上で差分を確認しやすいように、このようなデータ構造にしました。また、日本語の値は、翻訳済みの日本語変更時にGithub Actionsで通知をしてもらうのにも必要となりました。

ここで再び板井氏から「ItemCodeとTranslateKey_Nameは何が違うのでしょう?」と質問。

これに対し吉田氏は次のように回答しました。

ItemCodeゲーム内で管理される値。例えば、ユーザーがゲーム内で所持しているアイテムはItemCodeの何番と何番……といった使われ方をします。

一方、TranslateKey_Name翻訳のために使うものです。ItemCodeが同じ10001の値であってもアイテム名アイテムの説明など使用箇所によってキーの名称は「ITEM_NAME_10001」、「ITEM_DESCRIPTION_10001」のように変える必要があります。

プレゼントボックスメッセージのローカライズ――翻訳を組み合わせて文章生成

最後に、プレゼントボックスのメッセージのローカライズについて解説が行われました。

オレンジの枠の部分がプレゼントボックスのローカライズ対象

プレゼントボックスには、数々の配布物が届きます。ここに表示される文字列には「システムから送られる文字列」と「運営が管理ツールで入力した文字列」の2種類があります。

システムから送られる文字列」は、ランキング報酬のメッセージなどが該当します。このメッセージはマスターデータ内の単語を参照して組み合わせて、文字列を表示しています。一方、「運営が管理ツールで入力したメッセージ」は管理ツールから直接入力されています。この2種類のメッセージを1つのシステムで表示することを目指した結果、JSONで表現することになりました。

システムから送られる文字列の表示

表示したい文字列が『「毎日幻魔石パス」報酬。残り28日』である場合の例で見ていきます。

下図のJSONの黄色文字の箇所は、リフレクションを使用し、日本語テキスト出力のためのデータを読み込む箇所を指定しています。キーとして指定されている「PRESENT_BOX_TITLE_SHOP_PASS_EVERY_DAY」のTextには『「{0}」報酬。残り期間:{1}』という値が入っています。この{0}や{1}は適宜数字やアイテムが置き換えられるようになっています

{0}を参照している箇所がJSONの緑文字の部分です。ShopMasterTableからアイテムコード10001(※)をキーにしてNameに設定されている「毎日幻魔パス」という文字列を読み込んでいます。

{1}を参照している箇所がJSONの水色文字の部分です。こちらはDirectMessageを読み込んでおり、その内容はJp、EnUsともに「28」という値が設定されています。

これらを組み合わせて、日本語の『「毎日幻魔石パス」報酬。残り期間28日』、英語の『Reward:”Daily Phantasm Gem Pass” | Days left:28』という文字列を生成しています。

※ 画像内緑文字の”100001″は正しくは”10001″である、と講演中に訂正あり

JSON(画面右側)を使うとデータベースが長くなりがちではあるが、その点は許容した

板井氏から「JSONを採用した理由は何か」と質問。吉田氏は「キーとバリューがあれば辞書のように値を設定できる柔軟性」を挙げました。後から機能が追加となった場合にも対応でき、後方互換性も保ちやすい点がJSONを使うメリットです。

運営が管理ツールで入力した文字列

運営が管理ツールで入力した文字列の場合はDirectMessageを使用して表示します。これは、管理ツール上で入力した日本語と英語の文字列がそのまま入ってくるようにしています。

開発と並行してローカライズを進めるためには、ワークフローとシステムによるサポートが重要と吉田氏。

しかし、チームキャラバンでは大掛かりなシステムを作る方法は取らず、作業をサポートする小さなツールを使いながら対応しました。大がかりなツールを作った場合、そのツールだけを作る専任担当者を置く必要が出てきたり、ツールを改修しようとしたときに負担がかかったりする問題もあるためです。

こうした体制では、プランナーやデザイナーもエンジニア的な視点でツールやローカライズの仕組みを理解して作業を進めるのが効率的だ、と吉田氏は講演を締めくくりました。

『陰の実力者になりたくて!マスターオブガーデン 』公式サイト『ダンジョンに出会いを求めるのは間違っているだろうか バトル・クロニクル』公式サイト「陰の実力者になりたくて!マスターオブガーデン」「ダンジョンに出会いを求めるのは間違っているだろうか バトル・クロニクル」におけるローカライズ手法 - CEDEC2023
HATA

5歳の頃、実家喫茶店のテーブル筐体に触れてゲームライフが始まる。2000年代にノベルゲーム開発を行い、異業種からゲーム業界に。ゲームメディアで記事執筆を行いながらゲーム開発にも従事する。

関連記事

バンダイナムコスタジオ、「CEDEC2023」から6セッションの動画を公開。インタラクティブミュージック作曲の舞台裏や、『BLUE PROTOCOL』のAI実装など
2024.04.01
CEDEC2024セッション講演者の公募が受付開始。締切は4/1まで。「CEDEC ゲーム開発技術ロードマップ2023 年度版」も公開
2024.02.01
カプコン技研の開発者がCEDEC2015からCEDEC2018にて登壇したセッション資料がDocswellにて公開
2024.01.22
ユニティ・テクノロジーズ・ジャパン、『CEDEC2023』4講演の動画・スライドをUnity Learning Materialsに公開。CEDECのYouTubeチャンネルで未公開の『推論ライブラリを実装する』など
2023.12.27
バンダイナムコスタジオが『CEDEC2023』での講演資料を公開。『BLUE PROTOCOL』の AI 実装やインタラクティブミュージックなどジャンルも多様な6セッション
2023.12.20
ゲームフリークによるSplunk活用術。ジョブ利用状況の可視化やログの自動収集により、Jenkinsのデータ分析を強化【CEDEC2023】
2023.12.14

注目記事ランキング

2024.04.22 - 2024.04.29
1
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
2
フォートナイト クリエイティブとUEFNで使える仕掛け一覧
3
『フォートナイト』で動く本格的なゲームが作れるツール「UEFN」とは?従来のクリエイティブモードから進化したポイントを一挙紹介!
4
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.5「島の設定」
5
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.1「アイテム系」
6
【CHALLENGE1】「クリエイター ポータル」を使って、UEFNで作成した島を世界中に公開する
7
フォートナイトとUEFNがv29.30にアップデート。すでに公開した島をプレイできないようにする機能が導入される
8
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part1
9
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.4「ゲームシステム系」
10
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
11
UEFNで使えるプログラミング言語「Verse」のノウハウが集結。『UEFN.Tokyo 勉強会 03 Verse Night』レポート
12
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.2「ユーティリティ系」
13
【STEP2】UEFNの基本的な使い方を覚えよう
14
フォートナイトとUEFNがv29.20にアップデート。見下ろし視点でもプレイヤーキャラクターの向きを操作できるようになった
15
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.6「チーム・対戦系」Part1
16
フルカラー書籍「UEFN(Unreal Editor For Fortnite)でゲームづくりを始めよう!」、ついに本日発売!全国書店で好評発売中!
17
【CHALLENGE2-1】フレンドと一緒にゲームを作ろう――UEFNプロジェクトをチームメンバーとリアルタイムで共同編集する
18
『フォートナイト』で建築ビジュアライゼーション!?UEFNでオリジナルの世界観をどう作り上げたか、その手法を解説【UNREAL FEST 2023 TOKYO】
19
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part1
20
【CHALLENGE3】UEFNの機能「ランドスケープ」を使ってオリジナルの地形を作る
21
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.8「ゾーン系」
22
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part2
23
「UEFN」って実際どうなの? 編集部が3時間で「みんなで遊べるアクションゲーム(?)」を作ってみた
24
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.3「プレイヤー系」
25
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.9「建築物系」Part1
26
【STEP4-2】リスポーンとチェックポイントの仕組みを作る
27
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part2
28
【STEP4-1】コース外に出たらデスする仕組みを作る
29
【STEP3】オリジナルのアスレチックコースを作ろう
30
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.6「チーム・対戦系」Part2
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

乱数
ランスウ プログラムにおいてランダムに生成される数値。アルゴリズムによって導かれ、実際には完全なランダムではないため疑似乱数とも呼ばれる。
VIEW MORE

Twitterで最新情報を
チェック!