public static void TryToSaveCSV(string data, bool loadCacheOnFail = true) { try { var parsed = CSVParser.ReadCSV(data); if (GameDataSystem.currentVersion == default(Version)) { var defaultVersion = parsed[0][0]; GameDataSystem.currentVersion = new Version(defaultVersion); if (GameDataSystem.instance == null || GameDataSystem.instance.logEnabled == true) { WindowSystemLogger.Warning(GameDataSystem.GetName(), string.Format("Default version is used: {0}", GameDataSystem.currentVersion)); } } GameDataSystem.defaultVersion = GameDataSystem.currentVersion; var keysCount = 0; #region KEYS var keys = new List <string>(); for (int i = 0; i < parsed.Count; ++i) { if (i == 0) { continue; } var row = parsed[i]; var str = row[0].Trim(); if (string.IsNullOrEmpty(str) == true) { //str = string.Empty; continue; } keys.Add(str.ToLower()); ++keysCount; } GameDataSystem.keys = keys.ToArray(); #endregion var verCount = 0; #region VERSIONS var versions = new List <Version>(); for (int i = 0; i < parsed[0].Length; ++i) { if (i == 0) { continue; } var col = parsed[0][i]; var version = new Version(col); versions.Add(version); if (version == GameDataSystem.defaultVersion) { GameDataSystem.currentVersionNumber = int.Parse(parsed[1][i]); } ++verCount; } GameDataSystem.versions = versions.ToArray(); #endregion #region VALUES var values = new Dictionary <VersionCrc, float[]>(); for (int j = 0; j < versions.Count; ++j) { var version = versions[j]; var crc = new VersionCrc(version); var output = new List <float>(); for (int i = 0; i < parsed.Count; ++i) { if (i == 0) { continue; } var value = parsed[i][j + 1]; if (string.IsNullOrEmpty(value.Trim()) == true) { //value = "0"; continue; } value = value.Replace(",", ".").Replace(" ", string.Empty); var col = float.Parse(value); output.Add(col); } if (values.ContainsKey(crc) == false) { values.Add(crc, output.ToArray()); } } GameDataSystem.valuesByVersion = values; #endregion var path = GameDataSystem.GetCachePath(); #if STORAGE_NOT_SUPPORTED PlayerPrefs.SetString(path, data); #else System.IO.File.WriteAllText(path, data); #endif #if UNITY_EDITOR path = GameDataSystem.GetBuiltinCachePath(); System.IO.File.WriteAllText(path, data); #endif GameDataSystem.currentVersion = GameDataSystem.defaultVersion; if (GameDataSystem.instance == null || GameDataSystem.instance.logEnabled == true) { WindowSystemLogger.Log(GameDataSystem.GetName(), string.Format("Loaded version {3}. Cache saved to: {0}, Keys: {1}, Versions: {2}, Version: {4}", path, keysCount, verCount, GameDataSystem.GetCurrentVersionId(), GameDataSystem.currentVersion)); } GameDataSystem.isReady = true; } catch (System.Exception ex) { if (GameDataSystem.instance == null || GameDataSystem.instance.logEnabled == true) { // Nothing to do: failed to parse WindowSystemLogger.Error(GameDataSystem.GetName(), string.Format("Parser error: {0}\n{1}", ex.Message, ex.StackTrace)); } if (loadCacheOnFail == true) { GameDataSystem.TryToLoadCache(); } } }
public static void TryToSaveCSV(string data, bool loadCacheOnFail = true) { try { #if UNITY_EDITOR var monoMemorySize = Profiler.GetMonoUsedSizeLong(); #endif var parsed = CSVParser.ReadCSV(data); var defaultLanguage = parsed[0][0]; LocalizationSystem.defaultLanguage = (UnityEngine.SystemLanguage)System.Enum.Parse(typeof(UnityEngine.SystemLanguage), defaultLanguage); var keysCount = 0; #region KEYS var keys = new List <string>(); for (int i = 0; i < parsed.Count; ++i) { if (i == 0) { continue; } var row = parsed[i]; if (string.IsNullOrEmpty(row[0].Trim()) == true) { continue; } keys.Add(row[0].ToLower()); ++keysCount; } LocalizationSystem.keys = keys.ToArray(); #endregion var langCount = 0; #region LANGUAGES var languages = new List <UnityEngine.SystemLanguage>(); for (int i = 0; i < parsed[0].Length; ++i) { if (i == 0) { continue; } var col = parsed[0][i]; try { var lng = (UnityEngine.SystemLanguage)System.Enum.Parse(typeof(UnityEngine.SystemLanguage), col); languages.Add(lng); } catch (Exception) { } if (col == LocalizationSystem.defaultLanguage.ToString()) { LocalizationSystem.currentVersionNumber = int.Parse(parsed[1][i]); } ++langCount; } LocalizationSystem.languages = languages.ToArray(); #endregion #region VALUES var values = new Dictionary <UnityEngine.SystemLanguage, string[]>(); for (int j = 0; j < languages.Count; ++j) { var lang = languages[j]; var output = new List <string>(); for (int i = 0; i < parsed.Count; ++i) { if (i == 0) { continue; } var col = parsed[i][j + 1]; if (string.IsNullOrEmpty(col.Trim()) == true) { continue; } output.Add(col); } values.Add(lang, output.ToArray()); } LocalizationSystem.valuesByLanguage = values; #endregion foreach (var lang in languages) { var val = LocalizationSystem.Get("Last", lang, forced: true); if (val != "Last") { Debug.Log("Last Key: " + keys.Last()); Debug.Log("Value: " + val); foreach (var key in keys) { Debug.Log(key + " :: " + LocalizationSystem.Get(key, lang, forced: true)); } throw new Exception(string.Format("Language `{0}` has errors", lang)); } } var path = LocalizationSystem.GetCachePath(); #if STORAGE_NOT_SUPPORTED PlayerPrefs.SetString(path, data); #else System.IO.File.WriteAllText(path, data); #endif #if UNITY_EDITOR path = LocalizationSystem.GetBuiltinCachePath(); System.IO.File.WriteAllText(path, data); #endif LocalizationSystem.currentLanguage = LocalizationSystem.defaultLanguage; if (LocalizationSystem.instance == null || LocalizationSystem.instance.logEnabled == true) { WindowSystemLogger.Log(LocalizationSystem.GetName(), string.Format("Loaded version {3}. Cache saved to: {0}, Keys: {1}, Languages: {2}", path, keysCount, langCount, LocalizationSystem.GetCurrentVersionId())); } LocalizationSystem.isReady = true; #if UNITY_EDITOR var monoMemorySizeAfter = Profiler.GetMonoUsedSizeLong(); var deltaMemory = monoMemorySizeAfter - monoMemorySize; WindowSystemLogger.Warning(LocalizationSystem.GetName(), string.Format("Allocated: {0} bytes ({1}MB)", deltaMemory, (deltaMemory / 1024f / 1024f))); #endif } catch (System.Exception ex) { Debug.LogError("LocalizationSystem parse failed"); if (LocalizationSystem.instance == null || LocalizationSystem.instance.logEnabled == true) { // Nothing to do: failed to parse WindowSystemLogger.Error(LocalizationSystem.GetName(), string.Format("Parser error: {0}\n{1}", ex.Message, ex.StackTrace)); } if (loadCacheOnFail == true) { LocalizationSystem.TryToLoadCache(); } } }
public static void TryToSaveCSV(string data, bool loadCacheOnFail = true) { try { var parsed = CSVParser.ReadCSV(data); var defaultLanguage = parsed[0][0]; LocalizationSystem.defaultLanguage = (UnityEngine.SystemLanguage)System.Enum.Parse(typeof(UnityEngine.SystemLanguage), defaultLanguage); var keysCount = 0; #region KEYS var keys = new List <string>(); for (int i = 0; i < parsed.Count; ++i) { if (i == 0) { continue; } var row = parsed[i]; if (string.IsNullOrEmpty(row[0].Trim()) == true) { continue; } keys.Add(row[0].ToLower()); ++keysCount; } LocalizationSystem.keys = keys.ToArray(); #endregion var langCount = 0; #region LANGUAGES var languages = new List <UnityEngine.SystemLanguage>(); for (int i = 0; i < parsed[0].Length; ++i) { if (i == 0) { continue; } var col = parsed[0][i]; languages.Add((UnityEngine.SystemLanguage)System.Enum.Parse(typeof(UnityEngine.SystemLanguage), col)); if (col == LocalizationSystem.defaultLanguage.ToString()) { LocalizationSystem.currentVersionNumber = int.Parse(parsed[1][i]); } ++langCount; } LocalizationSystem.languages = languages.ToArray(); #endregion #region VALUES var values = new Dictionary <UnityEngine.SystemLanguage, string[]>(); for (int j = 0; j < languages.Count; ++j) { var lang = languages[j]; var output = new List <string>(); for (int i = 0; i < parsed.Count; ++i) { if (i == 0) { continue; } var col = parsed[i][j + 1]; if (string.IsNullOrEmpty(col.Trim()) == true) { continue; } output.Add(col); } values.Add(lang, output.ToArray()); } LocalizationSystem.valuesByLanguage = values; #endregion var path = LocalizationSystem.GetCachePath(); System.IO.File.WriteAllText(path, data); LocalizationSystem.currentLanguage = LocalizationSystem.defaultLanguage; if (LocalizationSystem.instance == null || LocalizationSystem.instance.logEnabled == true) { WindowSystemLogger.Log(LocalizationSystem.GetName(), string.Format("Loaded version {3}. Cache saved to: {0}, Keys: {1}, Languages: {2}", path, keysCount, langCount, LocalizationSystem.GetCurrentVersionId())); } LocalizationSystem.isReady = true; } catch (System.Exception ex) { if (LocalizationSystem.instance == null || LocalizationSystem.instance.logEnabled == true) { // Nothing to do: failed to parse WindowSystemLogger.Error(LocalizationSystem.GetName(), string.Format("Parser error: {0}\n{1}", ex.Message, ex.StackTrace)); } if (loadCacheOnFail == true) { LocalizationSystem.TryToLoadCache(); } } }