はじめに
みなさんはこんな経験ありませんか?
Unityでゲームを制作し、App Storeへウキウキと公開。公開されたゲームをいざApp Storeからダウンロードしようと思いApp Storeのストア情報を見たら。。。
言語:英語
え、どういうこと?日本語のみのアプリなんですけど。。。
今回はこの対策方法を紹介します。
環境
- Unity 2020.3.1f1
- Xcode 12.4
言語とは
App Storeでユーザーへ表示するサポートしている言語のことです。
ここに表記されているからと言って、本当にサポートされているかわかりません。
あくまで、ユーザーに明記しているだけです。
言語はどこで設定するのか?
みんな大好きInfo.plistです!
具体的にはCFBundleLocalizationsに日本語を設定します。
対応方法
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って、こういうところがいちいちめんどくさいですよね。
コメント