Unityでゲームアセンブリに翻訳情報を追加する方法

ゲームを翻訳するだけでは十分ではありません。この事実をアプリストアに納得させる必要もあります。 なんで? 原則として、ストア内のアプリケーションの説明にはサポートされている言語が含まれており、プレーヤーの購入決定に影響する場合があります。 残念ながら、各プラットフォームには、アセンブリへの転送に関する情報を追加するための独自のアプローチが必要ですが、3つのメインストアで最も便利な方法を収集しようとしました。



iOSおよびMacOS



iOSのXcodeのプロジェクトビルドのルートにあるInfo.plistファイルは、 GAMENAME.app / ContentsフォルダーのMacOSのビルドに同じファイルがあります。 ゲームでサポートされているすべての言語の値の配列でCFBundleLocalizationsキーを追加する必要があります。



<key>CFBundleLocalizations</key> <array> <string>en</string> <string>ru</string> </array>
      
      





問題は、ゲームの次のビルド後にこのファイルが上書きされ、すべてを何度も繰り返す必要があることです。 Unity自体のスクリプトを簡単に自動化できると便利です。



 #if UNITY_EDITOR using UnityEngine; using UnityEditor; using UnityEditor.Callbacks; using System.IO; using System.Xml; public class LocalizationPostBuildProcess { //       static string[] kProjectLocalizations = { "en", "ru" }; [PostProcessBuild] public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS || buildTarget == BuildTarget.StandaloneOSXUniversal || buildTarget == BuildTarget.StandaloneOSXIntel || buildTarget == BuildTarget.StandaloneOSXIntel64) { string infoPList = System.IO.Path.Combine(path, buildTarget == BuildTarget.iOS ? "Info.plist" : "/Contents/Info.plist"); if (File.Exists(infoPList) == false) { Debug.LogError("Could not add localizations to Info.plist file."); return; } XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(infoPList); XmlNode pListDictionary = xmlDocument.SelectSingleNode("plist/dict"); if (pListDictionary == null) { Debug.LogError("Could not add localizations to Info.plist file."); return; } XmlElement localizationsKey = xmlDocument.CreateElement("key"); localizationsKey.InnerText = "CFBundleLocalizations"; pListDictionary.AppendChild(localizationsKey); XmlElement localizationsArray = xmlDocument.CreateElement("array"); foreach (string localization in kProjectLocalizations) { XmlElement localizationElement = xmlDocument.CreateElement("string"); localizationElement.InnerText = localization; localizationsArray.AppendChild(localizationElement); } pListDictionary.AppendChild(localizationsArray); xmlDocument.Save(infoPList); } } } #endif
      
      





Android



Androidの場合、最も便利な方法はローカライズリソースファイルです。 大きな利点は、Unityプロジェクトで直接実行できることです。xmlファイルAssets \ Plugins \ Android \ res \ values-LANGUAGEを作成します(例: values-ru) 。 ファイル内で、1つの値を作成します。



 <!--?xml version="1.0" encoding="utf-8"?--> <resources> <string name="app_name">GodSpeed</string> </resources>
      
      





ローカライズごとにこのプロセスを繰り返します。apkには、ゲームで使用可能なすべての言語に関する情報が含まれます。



Windowsストア



Unityによって作成されたVisual Studioプロジェクトには、Resourcesキーが存在するPackage.appxmanifestファイルがあります。



 <Resources> <Resource Language="x-generate" /> </Resources>
      
      





この値は、パッケージのビルド時にVisual Studioがサポートされている言語をここに追加する必要があることを示します。 ただし、必要な値を手動で入力できます。



 <Resources> <Resource Language=”en-us” /> <Resource Language=”fr-fr” /> </Resources>
      
      





Microsoftのドキュメントとは異なり、パッケージをダウンロードした後、ストアはこれらの値を無視し、デフォルト言語のみを検出します。



リソースファイルを追加する必要があります。 原則はAndroidのメソッドに似ていますが、UnityではなくVisual Studioプロジェクト自体にファイルを追加する必要があります。 言語の名前(ru、en-USなど)で、 Resources.reswファイル内にフォルダーを作成します。 必ずファイルを開き、内部に少なくとも1つの値を追加してください。 デフォルト言語を除くすべてのローカライズについてこのプロセスを繰り返します。 これを行う必要があるのは1回だけです;以降のビルドでは、Unityはこれらのファイルを削除しません。 できた! これで、プロジェクトをビルドすると、Visual Studioはすべてのリソースファイルを検索し、サポートされる言語に関する情報をappxuploadに自動的に追加します。



おわりに



これらの操作の実行は、情報がある場合、最大1時間の問題ですが、Unityには、アセンブリ中に必要なすべての情報を追加するオプションがあります。 みんなありがとう、これがあなたの助けになることを願っています!



All Articles