TapTapTap!!!(46)~多言語化対応を行う~では海外のユーザにも使用できるよう多言語化対応を行ったが、多言語化を行うにあたって上手くいかない点が出てきた。今回はうまく行かなかった点について修正を行う。
1.現状把握
前回の対応で以下のような画面となり、言語ファイルをうまく読み込めていないことがわかった。現象としてはファイルの読み込みが行えず、すべてのテキストが “Localized text not found”となってしまっている。今回はこれに対する修正を行う。
2.修正方法
修正方法については以下のサイトが参考となった。今回、多言語化を行うにあたって「StreamingAssets」フォルダを用いて行ったが、この中にあるデータは直接操作を行うことができないとのことだ。操作するためには「WWW」クラスを用いてアクセスしなければならないとのことなので「WWW」クラスを用いるよう修正を行う。
| はじめに この記事はカヤックUnityアドベントカレンダー2016の2日目の記事になります。 今日の内容は特殊なフォルダについてです。 ソーシャルゲーム事業部所属、Unityエンジニアの荒井です。 昨日のUnityの基本に引き続きの担当になります。 よろしくお願いいたします。 特殊なフォルダとは Unityエディタではプロジェクト内にフォルダを作成することができます。 私が携わっているプロジェクトでは事業部で共通するファイルはAssets/Kayac以下に、そうでないファイルはAssets/ProjectName以下に配置して、管理しやすいようにしていま... 【Unity】特殊なフォルダについて - KAYAC engineers' blog - KAYAC engineers' blog |
3.修正内容
修正したスクリプトは以下の通り。前回作成した「LocalizationManager 」クラス内で json ファイルを参照していた部分に「WWW」クラスの処理を加えている。これによって、言語ファイルが正しく読み込めるようになるはずだ。
[cce_csharp]/// <summary>
/// 言語ファイルの読込
/// </summary>
/// <param name="fileName">言語ファイル名</param>
public void LoadLocalizedText(string fileName)
{
MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
localizedText = new Dictionary<string, string>();
string filePath = Path.Combine(Application.streamingAssetsPath, fileName);
WWW www = new WWW(filePath);
MyLogger.GetInstance().DebugLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name, "load file Path : " + filePath);
if (www.text != null)
{
string dataAsJson = www.text;
LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);
for (int i = 0; i < loadedData.items.Length; i++)
{
localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
}
MyLogger.GetInstance().DebugLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name, "Data loaded, dictionary contains: " + localizedText.Count + " entries");
}
else
{
MyLogger.GetInstance().WorningLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name, "Data loaded, dictionary contains: " + localizedText.Count + " entries");
}
isReady = true;
MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
}[/cce_csharp]
4.Google Play コンソールにアップロードし動作確認を行う
Google Play コンソール上では問題なく動作していることが確認できたので、後はじっきで問題なく動作が行われるか確認を行う。相も変わらずテスターさんを募集しておりますので、テスターをご希望いただける方はお問い合わせまたは以下のフォームからご連絡ください。
