131 lines
3.6 KiB
C#
131 lines
3.6 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using System.IO;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
|
|
public class LocalizationManager : MonoBehaviour
|
|
{
|
|
public string defaultLanguage = "ru";
|
|
private string currentLanguage;
|
|
|
|
private Dictionary<string, Dictionary<string, string>> localizedText;
|
|
|
|
private void Awake()
|
|
{
|
|
currentLanguage = defaultLanguage;
|
|
LoadLocalization();
|
|
}
|
|
|
|
private void LoadLocalization()
|
|
{
|
|
string localizationPath = Application.dataPath + "/localization.json";
|
|
print("Çàãðóçêà ëîêàëèçàöèè èç: " + localizationPath);
|
|
|
|
if (!File.Exists(localizationPath))
|
|
{
|
|
Debug.LogError("Ôàéë ëîêàëèçàöèè íå íàéäåí: " + localizationPath);
|
|
return;
|
|
}
|
|
|
|
string json = File.ReadAllText(localizationPath);
|
|
|
|
// Ðàçáèðàåì JSON â ñëîâàðü
|
|
localizedText = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(json);
|
|
}
|
|
|
|
public string GetText(string key)
|
|
{
|
|
if (localizedText.ContainsKey(currentLanguage) &&
|
|
localizedText[currentLanguage].ContainsKey(key))
|
|
{
|
|
return localizedText[currentLanguage][key];
|
|
}
|
|
if (localizedText.ContainsKey("en") &&
|
|
localizedText["en"].ContainsKey(key) &&
|
|
key != "name")
|
|
{
|
|
return localizedText["en"][key];
|
|
}
|
|
|
|
Debug.LogWarning("Òåêñò íå íàéäåí: " + key);
|
|
return key;
|
|
}
|
|
|
|
public float GetFloat(string key)
|
|
{
|
|
try
|
|
{
|
|
if (localizedText.ContainsKey(currentLanguage) &&
|
|
localizedText[currentLanguage].ContainsKey(key))
|
|
{
|
|
return float.Parse(localizedText[currentLanguage][key]);
|
|
}
|
|
if (localizedText.ContainsKey("en") &&
|
|
localizedText["en"].ContainsKey(key) &&
|
|
key != "name")
|
|
{
|
|
return float.Parse(localizedText["en"][key]);
|
|
}
|
|
}
|
|
finally {}
|
|
Debug.LogWarning("Òåêñò íå íàéäåí: " + key);
|
|
return 27;
|
|
}
|
|
|
|
public void SetLanguage(string lang)
|
|
{
|
|
if (localizedText.ContainsKey(lang))
|
|
currentLanguage = lang;
|
|
else
|
|
Debug.LogWarning("ßçûê íå íàéäåí: " + lang);
|
|
}
|
|
public Dictionary<string, string> GetAllLanguages()
|
|
{
|
|
Dictionary<string, string> result = new Dictionary<string, string>();
|
|
|
|
if (localizedText == null)
|
|
{
|
|
Debug.LogWarning("Ëîêàëèçàöèÿ íå çàãðóæåíà!");
|
|
return result;
|
|
}
|
|
|
|
foreach (var langPair in localizedText)
|
|
{
|
|
string langCode = langPair.Key;
|
|
if (!langPair.Value.ContainsKey("name")) { continue; }
|
|
string name = langPair.Value.ContainsKey("name") ? langPair.Value["name"] : langCode;
|
|
result.Add(name, langCode);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
// Âñïîìîãàòåëüíûé êëàññ äëÿ JsonUtility
|
|
[System.Serializable]
|
|
private class Wrapper
|
|
{
|
|
public List<LanguageWrapper> languages;
|
|
|
|
public Dictionary<string, Dictionary<string, string>> ToDictionary()
|
|
{
|
|
var dict = new Dictionary<string, Dictionary<string, string>>();
|
|
foreach (var lang in languages)
|
|
dict.Add(lang.languageCode, lang.entries);
|
|
return dict;
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
private class LanguageWrapper
|
|
{
|
|
public string languageCode;
|
|
public Dictionary<string, string> entries;
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class LocalizationData
|
|
{
|
|
public Dictionary<string, Dictionary<string, string>> languages;
|
|
} |