private static void InitializeLocalization() { #if UNITY_EDITOR // Save bundles when running in editor because why not? :D Saves effort. LocalizationOfflineCache.CacheBundledLocalizationTables(); #endif foreach (var localizationTable in LocalizationOfflineCache.LoadAllBundled()) { LoadCachedTable(localizationTable); } Dictionary <string, ILocalizationTableSource> localizationTableSources = new Dictionary <string, ILocalizationTableSource>(); foreach (var localizationConfiguration in UnityEngine.Object.FindObjectsOfType <LocalizationConfiguration>()) { foreach (var tableSource in localizationConfiguration.TableSources) { localizationTableSources[tableSource.TableKey] = tableSource; } } HashSet <string> cachedDownloadTableKeys = new HashSet <string>(); foreach (var cachedLocalizationTable in LocalizationOfflineCache.LoadAllDownloaded()) { // override bundled from cached downloaded LoadCachedTable(cachedLocalizationTable.LocalizationTable); cachedDownloadTableKeys.Add(cachedLocalizationTable.LocalizationTable.TableKey); // if cached downloaded data is expired, request new localization table from source TimeSpan timePassedSinceCached = DateTime.Now - cachedLocalizationTable.DateTime; if (timePassedSinceCached.Days >= kExpireCachedDownloadedDays) { DownloadTable(cachedLocalizationTable.LocalizationTable.TableKey, localizationTableSources); } } foreach (var tableKey in localizationTableSources.Keys) { if (cachedDownloadTableKeys.Contains(tableKey)) { continue; } DownloadTable(tableKey, localizationTableSources); } allCultures_ = cultureMap_.Values.ToHashSet().ToList(); allCultures_.Sort((a, b) => a.DisplayName.CompareTo(b.DisplayName)); }
private static void DownloadTable(string tableKey, Dictionary <string, ILocalizationTableSource> localizationTableSources) { var tableSource = localizationTableSources.GetRequiredValueOrDefault(tableKey); if (tableSource == null) { return; } var localizationTable = tableSource.LoadTable(); if (localizationTable == null) { // Possible network error - we can ignore since LoadTable will log return; } LocalizationOfflineCache.CacheDownloadedTable(localizationTable); LoadTable(localizationTable); }