🌎

Mac向けにビルドしたUnity Localizationを使ったアプリが多言語対応されない問題についての対処法

2024/09/17に公開

なぜかMacについての情報がなかったのである限定的な環境のみ起きるのかもしれない。

結論

Assets/Editorに以下PostBuildProcess.csを配置
※英語、日本語を用いる例

using UnityEditor;
using UnityEditor.Callbacks;
using System.IO;
using System.Xml.Linq;

public class PostBuildProcess
{
    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
    {

        if (target == BuildTarget.StandaloneOSX)
        {
            // Info.plistファイルのパスを取得
            var plistPath = Path.Combine(pathToBuiltProject, "Contents", "Info.plist");

            // ファイルが存在するか確認
            if (File.Exists(plistPath))
            {
                // Info.plistファイルをXML形式でロード
                var doc = XDocument.Load(plistPath);

                // CFBundleLocalizationsのキーを追加
                var dict = doc.Element("plist").Element("dict");
                dict.Add(new XElement("key", "CFBundleLocalizations"));
                var array = new XElement("array");
                array.Add(new XElement("string", "en")); // 英語
                array.Add(new XElement("string", "ja")); // 日本語
                dict.Add(array);

                // 変更した内容を保存
                doc.Save(plistPath);
            }
        }
    }
}

説明

Macでアプリが多言語対応していることを認識させるためにはInfo.plistに以下記述が必要

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

多分iOSとやっていることは基本的に一緒(iOSのLocalization対応の情報は大量にある)

[PostProcessBuild]を記述することでビルド時に処理を差し込むことができる。
ここでInfo.plistにCFBundleLocalizationsを追記する処理を加えた。

検証

Macの設定で「優先する言語」に従った言語選択がされる。

Discussion