【Unity】[Android]アプリを ローカライズ (英語化)する

Android

Unityで作成したAndroidアプリについて ローカライズ 可能な項目をまとめ、 ローカライズ する手順について説明します。

日本人1億に対して英語圏の人口は10億とも20億とも言われています。作ったアプリを英語対応し ローカライズ することで、より多くの人に使ってもらうことができると期待できます。




そもそもローカライズとは何か?

ローカライズとはアプリを他国の言語に翻訳、対応して外国の方にも使ってもらうようにすることを言います。

Androidアプリローカライズするにあたって、以下でローカライズ対応が必要となります。

  1. アプリ中に表示される言語
  2. アプリアイコンと共に表示されるアプリ名
  3. Google Playで表示されるアプリ名および説明文など

1と2についてはUnityの対応で完結します。3についてはアプリリリースの際に追加での作成が必要となります。

プライマリ言語とは何か?

例えば、アプリのローカライズを行い、英語と日本語に対応したとします。

英語、日本語圏以外(例えば中国)の人がアプリを開いたときに表示される言語がプライマリ言語となります。

対応する言語に設定されていないデバイスでアプリを開いたときに、優先的に表示される言語のことです。

英語対応したアプリであればプライマリ言語は英語にしておくのがよいです。なぜなら日本人には日本語が表示され、それ以外の国では英語で表示がしたいからです。

Unityでアプリをローカライズする手順

アプリ内で表示する言語のローカライズ

Unityはスクリプト内で言語を切り替えます。切り替え方法は以下のようにApplication.systemLanguageを見て言語を判断します。

    private void langDispatcher()
    {
        switch( Application.systemLanguage) {
            case SystemLanguage.Japanese:
                /* 日本語の処理 */
                break;
            case SystemLanguage.English:
                /* 英語の処理 */
                break;
            default:
                /* その他言語の処理 */
                break;
        }
    }

GameObjectをまるごと切り替えたい場合は日本語用のオブジェクトと英語用のオブジェクトの両方をpublicな変数に登録しておいて、それを選んで使用するとよいと思います。

また、スクリプトのいたるところでApplication.systemLanguageを参照するよりも言語を切り替えるためのGameObjectを一つ準備してそれを参照するとよいでしょう。

私は以下のようなスクリプトを準備しました。

using UnityEngine;

public class LocalizationController : MonoBehaviour
{
    public bool ForceEnglish;

    bool _isJapanese;
    private void Awake()
    {
        if (Application.systemLanguage == SystemLanguage.Japanese) {
            _isJapanese = true;
        } else {
            _isJapanese = false;
        }
        if (ForceEnglish) {
            _isJapanese = false;
        }
    }

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {

    }

    public bool IsJapanese()
    {
        return _isJapanese;
    }
}
/* 言語設定を参照する側 */
void setLocality()
{
    if (!GameObject.Find("LocalizationController").GetComponent<LocalizationController>().IsJapanese()) {
        /* is English */
    }
}

 分けておくことで以下のようなメリットがあります。

  • Unity Editor上でForceEnglishをONにするとアプリを簡単に英語化でき、デバッグしやすい(システムの言語設定を変えなくてよい)
  • 言語が増えていったとき拡張しやすい

また、アプリのプライマリ言語もスクリプトで表現します。上の例ですとApplication.systemLanguage != SystemLanguage.Japaneseの時、全て英語で表示するようにしています。

すなわち、日本語設定の端末以外でアプリを開いた場合は全て英語になるので、プライマリ言語は英語ということになります。

アプリ名をローカライズ

アプリ名をローカライズするにはAssets/Plugins/Android/resに設定ファイルを格納します。

まず、言語に応じたフォルダ「values-XX」(XXは言語コード)をresフォルダ下に作成します。例えば、英語のアプリ名を設定したい場合はvalues-en,日本語のアプリ名の場合はvalues-jpというフォルダ名になります。(その他言語はこちらの言語コード参照)

そして、それらフォルダ毎に以下のようなstrings.xmlというファイルを格納します。

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

APP名のところに各言語フォルダに対応した言語のアプリ名を入れます。

xmlデータは文字コードにUTF-8を指定してください。SJISを指定するとAndroid上でアプリ名が文字化けしてしまうので、注意が必要です。

ここで設定した以外の言語の端末ではプライマリ言語でアプリ名を表示することになるのですが、アプリ名のプライマリ言語はUnity EditorのPlayer SettingのProduct Nameに設定した名前が使用されます。

ですので、Product Nameはプライマリ言語を意識したアプリ名を入力しておくとよいです。

アプリ名入力画面

Google Playの掲載情報をローカライズする手順

Google Playにで公開してある情報をローカライズします。Play Consoleからメインストアの掲載情報を選択して翻訳を管理のプルダウンから翻訳を管理を選択します。

翻訳を管理

 すると、多くの言語が出てくるので、英語の言語を一つ選択します。ここではen-USを選択しています。

言語選択

するとメインストアの掲載情報が空白になるので、選択した言語でアプリの詳細を入力します。

また、グラフィックの項目も言語に合わせたスクリーンショットやピクチャーに差し替えてください。

ローカライズする言語のストア情報

アプリ名、簡単な説明、詳しい説明を一通り入力すると右下の保存ボタンが押せるようになるので、保存してください。

最後にデフォルト言語を変更します。翻訳を管理のプルダウンからデフォルトの言語を変更で変更したい言語を選択します。

プライマリ言語設定

ストアの掲載情報で管理されている言語以外の言語の人がストアを訪れた際はこのデフォルトの言語で表示されることになります。

おわりに

Unityアプリの多言語化及びGoogle Playの多言語化について説明しました。自分のアプリは最初日本語だけでしたが、結構海外から使っていただいている方も多く、そういった方のためにローカライズできたことは良かったと思います。

また、ストアのインプレッション数もローカライズすることでかなり増加します。

コメント

  1. […] […]