Всем привет!
Помогите, уже голова кружится.
Проблема вот в чем, сделал мультиязычность в игре на unity с помощью json файлов в папке StreamingAssets. В редакторе (editor) все работает круто, а при установке на телефон json Файлы не подгружают текст. После целого дня гугления появилась мысль, что это из-за того, что необходимо как то специфично загружать файлы.
Перепробовал кучу вариантов, ноль результата.
Помогите, прикладываю код:
using System;
using System.IO;
using System.Collections.Generic;
using UnityEngine;
public class LocalizationManager : MonoBehaviour
{
private string currentLanguage;
private Dictionary<string, string> localizedText;
public static bool isReady = false;
public delegate void ChangeLangText();
public event ChangeLangText OnLanguageChanged;
private void Awake()
{
if (!PlayerPrefs.HasKey("Language"))
{
if (Application.systemLanguage == SystemLanguage.Russian || Application.systemLanguage == SystemLanguage.Belarusian)
{
PlayerPrefs.SetString("Language", "ru_RU");
}else if (Application.systemLanguage == SystemLanguage.English)
{
PlayerPrefs.SetString("Language", "en_US");
}
else if (Application.systemLanguage == SystemLanguage.Ukrainian)
{
PlayerPrefs.SetString("Language", "uk_UA");
}
else if (Application.systemLanguage == SystemLanguage.Polish)
{
PlayerPrefs.SetString("Language", "pl_PL");
}
else if (Application.systemLanguage == SystemLanguage.German)
{
PlayerPrefs.SetString("Language", "de_DE");
}
else if (Application.systemLanguage == SystemLanguage.French)
{
PlayerPrefs.SetString("Language", "fr_FR");
}
else if (Application.systemLanguage == SystemLanguage.Portuguese)
{
PlayerPrefs.SetString("Language", "pt_PT");
}
else if (Application.systemLanguage == SystemLanguage.Spanish)
{
PlayerPrefs.SetString("Language", "es_ES");
}else
{
PlayerPrefs.SetString("Language", "en_US");
}
}
currentLanguage = PlayerPrefs.GetString("Language");
LoadLocalizedText(currentLanguage);
}
public void LoadLocalizedText(string langName)
{
//string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
string dataAsJson;
if (Application.platform == RuntimePlatform.Android)
{
string path = "file://" + Application.streamingAssetsPath + "/Languages/" + langName + ".json";
#pragma warning disable 618
WWW reader = new WWW(path);
while (!reader.isDone) { }
dataAsJson = reader.text;
}
else
{
string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
dataAsJson = File.ReadAllText(path);
}
LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);
localizedText = new Dictionary<string, string>();
for (int i = 0; i < loadedData.items.Length; i++)
{
localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
}
PlayerPrefs.SetString("Language", langName);
isReady = true;
if (OnLanguageChanged != null)
{
OnLanguageChanged.Invoke();
}
}
public string GetLocalizedValue(string key)
{
if (localizedText.ContainsKey(key))
{
return localizedText[key];
}
else
{
throw new Exception("Localized text with key \"" + key + "\" not found");
}
}
public string CurrentLanguage
{
get
{
return currentLanguage;
}set
{
PlayerPrefs.SetString("Language", value);
currentLanguage = PlayerPrefs.GetString("Language");
LoadLocalizedText(currentLanguage);
}
}
public bool IsReady
{
get
{
return isReady;
}
}
}
Проблема, мне кажется, именно в этой части. Но если бы я точно знал, я бы не задал вам этот вопрос
string dataAsJson;
if (Application.platform == RuntimePlatform.Android)
{
string path = "file://" + Application.streamingAssetsPath + "/Languages/" + langName + ".json";
#pragma warning disable 618
WWW reader = new WWW(path);
while (!reader.isDone) { }
dataAsJson = reader.text;
}
else
{
string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
dataAsJson = File.ReadAllText(path);
}
Спасибо