[Unity]App Storeにリリースしたゲームのストア画面の言語が英語になってしまう問題

Unity

はじめに

みなさんはこんな経験ありませんか?

Unityでゲームを制作し、App Storeへウキウキと公開。公開されたゲームをいざApp Storeからダウンロードしようと思いApp Storeのストア情報を見たら。。。

言語:英語

え、どういうこと?日本語のみのアプリなんですけど。。。

今回はこの対策方法を紹介します。

環境

  • Unity 2020.3.1f1
  • Xcode 12.4

言語とは

App Storeでユーザーへ表示するサポートしている言語のことです。

ここに表記されているからと言って、本当にサポートされているかわかりません

あくまで、ユーザーに明記しているだけです。

言語はどこで設定するのか?

みんな大好きInfo.plistです!

具体的にはCFBundleLocalizationsに日本語を設定します。

Apple Developer Documentation

対応方法

Xcodeプロジェクトに書き出し

まずはいつもの通り、UnityでiOSをビルドターゲットにしビルドしてください。

XcodeプロジェクトのInfo.plistを開く

書き出されたXcodeプロジェクトのInfo.plistを開きます。

Localizationsを追加

Localizations(CFBundleLocalizations)を追加します。

Localizationsを展開する

Localizationsの左横に展開するためのボタンがあるので押します。

するとそこにはItem0に「English」と書かれています。

Localizationsを書き換える

Item0を「Japanese」に書き換えます。

あとはいつもどおりビルドするだけで、App Storeの言語の欄が「日本語」に変わります

もし多言語対応の場合は。。。

多言語の対応の場合は、Localizationsに言語を追加していくだけです。

下記は例では日本語英語を設定しています。

もしInfo.plistをテキストで編集する場合は以下のような感じで、CFBundleLocalizationsをキーにして配列を追加します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleLocalizations</key>
	<array>
		<string>ja</string>
		<string>en</string>
	</array>
	<key>CFBundleDisplayName</key>
...
</dict>
</plist>

毎回やるのはめんどくさいのでUnityで自動化

この作業を毎回やるのはめんどくさいですし、時々しかリリースしないアプリの場合は忘れがちなので自動化しようと思います。

サンプルコード

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;

public class LocalizationsPostProcessBuild
{
    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget target, string path)
    {
        if (target == BuildTarget.iOS)
        {
            AddLanguage(path, "ja", "en");
            // 日本語のみの場合の例.
//            AddLanguage(path, "ja");
        }
    }

    /// <summary>
    /// 言語を追加.
    /// </summary>
    public static void AddLanguage(string path, params string[] languages)
    {
        var plistPath = System.IO.Path.Combine(path, "Info.plist");
        var plist = new PlistDocument();

        plist.ReadFromFile(plistPath);

        var localizationKey = "CFBundleLocalizations";

        var localizations = plist.root.values
            .Where(kv => kv.Key == localizationKey)
            .Select(kv => kv.Value)
            .Cast<PlistElementArray>()
            .FirstOrDefault();

        if (localizations == null)
        {
            localizations = plist.root.CreateArray(localizationKey);
        }

        foreach (var language in languages)
        {
            if (localizations.values.Select(el => el.AsString()).Contains(language) == false)
            {
                localizations.AddString(language);
            }
        }

        plist.WriteToFile(plistPath);
    }
}

#endif

Editorフォルダーへの配置

以下のコードを必ずEditorフォルダに配置してください。Editorフォルダー以外に配置するとビルドエラーになります。

あとはいつもどおりビルドするだけ

無事、自動で追加されました!

さいごに

App Storeって、こういうところがいちいちめんどくさいですよね。

おすすめ参考書

コメント

タイトルとURLをコピーしました