예제 #1
0
        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));
        }
예제 #2
0
        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);
        }