OldTerminal/Assets/Scripts/LocalizationManager.cs

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;
}