Unity

Unity公式のローカライズ(多言語対応)とGoogle Sheets連携、そして翻訳自動化

Unityの公式Asset「Localization」の導入方法と使い方、そして管理を楽にするためにGoogle Sheetsと連携させる方法から、DeepL APIを利用して外国語への翻訳を自動化する方法まで、丁寧に解説していきます!

結構複雑ですが、設定できると作業効率が爆上がりしますので、ぜひ頑張ってみてください!

現在開発中の「猫クレーンシミュレータ」というゲームに、実際にローカライズを適用していく形で説明してきます。

開発環境はこんな感じです。

  • Unity2021.3.25f1
  • macOS Ventura13.4
  • MacBook Pro M1

 

Localizationの導入

まずは、Unity公式のLocalizationアセットを入れていきます。

Unityのメニューから
Window > Package Manager

でPackage Managerを開いて、Packagesの欄を「Unity Registry」に変えたら「Localization」で検索し、install。

インストールが終わったら、Edit > Project Settings… > Localization > Create
を押します。

するとLocalizationアセットの設定ファイルの保存場所を指定させられるので、Assetsフォルダ直下にLocalizationというフォルダを作って保存しておきます。

これでLocalization Settings.assetというファイルが作成されて、InspectorからLocalizationの設定ができるようになります。

が、このままProject Settingsからもローカライズの設定ができるので、続けて、ローカライズ対象にしたい言語を登録していきます。

設定画面にある「Locale Generator」を押すと言語一覧が表示されるので、ローカライズしたい言語にチェックを入れたら「Generate Locales」を押します。

すると選んだ言語の定義ファイルの保存場所を指定させられるので、先程作ったLocalizationフォルダを指定します。

これで各種言語の設定ファイルが作成されます。

最後に、ローカライズしたい言語以外のユーザーに表示させる言語 (Specific Locale Selector)と、開発環境で表示させておきたい言語 (Project Locale Identifier)を設定して、初期化設定は完了です。

今回は、ローカライズ対象として、中国語、英語、日本語、韓国語、スペイン語を追加し、デフォルト言語に英語を選んだので、中国語、英語、日本語、韓国語、スペイン語以外の言語圏のユーザーには英語が表示されます。

 

Localizationの使い方

早速、コイツに文言のローカライズを追加してみます。

Window > Asset Management > Localization Tablesを開きます。
そして「New Table Collection」タブを選び、Typeに「String Table Collection」を選んだら「Create」

文言のローカライズ定義ファイルの保存場所が聞かれるので、最初に作成したLocalizationフォルダに保存しておきます。

 

そして、Window > Asset Management > Localization Scene Controlsを開いたら、

  • Active Locale (今登録(表示)させたい言語)に、Japanese(ja)
  • Track Changes (エディタ上で変更したら自動登録)を、チェック
  • String Table (文言のローカライズを登録するファイル)に、先程作ったファイルを。
  • Asset Tableは、画像のローカライズに使用するのでNoneのまま、にします。

この状態で、TextMeshProに文言を入力すると、自動的に日本語のローカライズ文言として登録され、登録された事がわかりやすいよう入力欄が緑色になります。
今回は、3つ (あと5つ、猫です、犬だと思った?)の文言を日本語として登録しました。

 

次に、先程開いたLocalization Scene Controlsの「Track Changes (自動保存)」のチェックを外してから、「Active Locale (今登録(表示)させたい言語)」を「English (en)」に変えます。

Track Changesのチェックを外した場合、まだローカライズ対象に入れていないTextを新しくローカライズ対象に登録することはできなくなりますが、既に登録済みのTextの変更や他の言語の登録はできます。

チェックを外す前にEnglishに変更すると、先程登録した日本語が全部英語のローカライズとしても登録されちゃいます。

すると、英語のローカライズはまだないよ!表示になります。(大惨事)

DeepL APIを使って自動化したいので、今回は「犬だと思った?」のTextMeshProにだけ、英語の文言を入力します。
(エラー表示で見づらいので、他のTextMeshProには仮で、あとで、と入れました)

これで、英語用の文言が登録されます。

試しにLocalization Scene ControlsのActive Localeを切り替えると、アプリ上の文言が自動的に切り替わります。

Window > Asset Management > Localization Tables
を開くと、今登録したローカライズ文言を確認できます。

英語と日本語に登録されていますね。

 

Google Sheetsとの連携

次は、このローカライズ文言をGoogle Sheetsで管理できるようにしていきます。

Localization Tablesでもローカライズ登録した文言を一覧で管理できますが、Google Sheetsの方が管理しやすいですし、翻訳の外注や作業分担もしやすく、また、次の項で説明するDeepLとの連携で、夢の自動化も実現できます。

ちょっと手順が複雑でやっかいですが、頑張っていきましょう!

 

Google Sheets APIの有効化

Google Cloud Consoleにログインします。

プロジェクトがまだない場合は、上の欄からプロジェクトを作成します。
設定を追加したいプロジェクトを上部で選んだら「APIs & Services」をクリック。

左メニューから、Enabled APIs & servicesを選んだら、上の検索窓でGoogle Sheets APIを検索して、候補からGoogle Sheets APIを選択。

 

Google Sheets APIを有効化します。

OAuthのCredentialsを用意

次に、UnityからOAuthを使ってGoogle Sheetsにアクセスできるようにしたいので、まずは、OAuthを有効にする時に表示する同意画面を作ります。

左メニューから、OAuth consent screenを選び、用途に応じてUser Typeを選んだら、CREATE。

User Typeの「Internal」は有料のグループウェアGoogle Workspaceに登録していないと選択できません。

次の画面で、必要最低限の事項、App name、User support email、Developer contact information、を入力したら、SAVE AND CONTINUEをクリック。

次の画面は何も触らず、SAVE AND CONTINUE。

Test Users画面に来たら、+ADD USERSで、UnityからGoogle Sheetsにアクセスする時に使うGoogleアカウントを登録しておきます。

後は、SAVE AND CONTINUEで最後まで進めてOAuthの同意画面作成は完了です。

 

次に、Credentialsを選んで、上のメニュにある+ CREATE CREDENTIALSを押し、出てくるメニューからOAuth client IDをクリック。

次の画面で、Application typeに、Desktop app、を選んで、Nameにサービス名を適当に入れたら、CREATEをクリック。

これでOAuth接続のためのClient IDとClient secretが発行されるので、コピペして控えておきます。

 

UnityでOAuth認証

Unityに戻って、Google Sheetsに接続するためのService Providerを作成します。

最初に作ったAssets/Localizationフォルダで右クリックをして
Create > Localization > Google Sheets Service、を選択。

作成されたGoogle Sheets Serviceを選択して、Inspectorから項目を入力して、Authorize..を押し、テストユーザーに登録したGoogleアカウントでログイン。

何も起こらないけど、Unityの方でエラー表示がなければOAuth認証成功です。

 

String TableとGoogle Sheetsの連携

次は、ローカライズ文言が登録されているString Tableと、Google Sheetsを連携させます。

Assets/Localizationの中に保存してある、New Table、というファイルを選択して、Inspectorから、+を押して、Google Sheets Extension、を選択します。

するとGoogle Sheetsの設定項目が追加されるので、右下の+ボタンを押して、Add Default Columnsを選択すると、ローカライズ対象の言語が自動で全部登録されます。

 

これは、Google Sheetsのレイアウトになるので、必要に応じて、Column欄にある、AやBなどを書き換えて、順番を入れ替えてください。

僕は、次の節で説明するように、日本語以外はDeepLで自動化したいので、日本語を一番最初にしました。

そうしたら、Create New Spreadsheetボタンを押します。
何かエラーも表示されますが、何も入っていないスプレッドシートファイルがGoogle Sheetsに作成されます。

 

何も入っていないGoogle Sheetsのスプレッドシートを開いたら、URLから、SpreadSheet IDと、Sheet IDを確認します。

そうしたら、Unityに戻って、Spreadsheet IDと、Sheet IDの入力欄に入れ、下のPushボタンを押します。

 

すると、今まで登録した分のローカライズ文言が自動的にGoogle Sheetsに反映されます。

逆に、Pullを押すと、Google Sheetsの内容がUnityに反映されます。

 

DeepL APIを使った自動化

最後の仕上げ、翻訳の自動化です。
DeepL APIを使うので、DeepL Proの登録をします。

月50万文字まで無料なので、ひとまず無料版プランに登録。
登録するとAPIキーが発行されるので、コピペして控えておきます。

DeepL Proに登録すると、サイト上で無料で使えていた翻訳機能が利用できなくなります。ログアウトすれば使えますが。

 

次に、Unityと連動させたスプレッドシートを開いて
拡張機能 > App Script、を選択。

最初から書かれているmyFunctionの記述を消して、次のgitにある内容を貼り付けます。
一番上にある、authKey、の内容はDeepL APIの契約で発行されたAPI Keyに差し替えて、Cmd + Sで保存。

反映に少し時間がかかるので、ちょっと待つと、DeepL APIを使って翻訳できる関数が追加されます。

 

関数を書いておけば、こんな感じで一括翻訳ができます。

言語コードはDeepLの公式サイトのRequest Parametesの欄を見てみてください。

 

Unityの方でPullをすれば4外国語のローカライズ対応が一気に完了します。
内容の精査は必要でしょうけど。