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> 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>>(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 GetAllLanguages() { Dictionary result = new Dictionary(); 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 languages; public Dictionary> ToDictionary() { var dict = new Dictionary>(); foreach (var lang in languages) dict.Add(lang.languageCode, lang.entries); return dict; } } [System.Serializable] private class LanguageWrapper { public string languageCode; public Dictionary entries; } } [System.Serializable] public class LocalizationData { public Dictionary> languages; }