LocalizationTable ILocalizationTableSource.LoadTable()
        {
            try {
                var localizationTableData = new Dictionary <CultureInfo, Dictionary <string, string> >();

                var localizationGTable = LoadLocalizationEntriesTable();
                if (localizationGTable == null)
                {
                    return(null);
                }

                foreach (var row in localizationGTable.FindAll())
                {
                    GLocalizationRowData rowData = row.Element;
                    CultureInfo          culture = Localization.GetCachedCultureFor(rowData.LanguageCode);
                    localizationTableData.GetAndCreateIfNotFound(culture)[rowData.Key] = rowData.LocalizedText;
                }

                return(new LocalizationTable(localizationTableKey_, localizationTableData));
            } catch (WebException e) {
                Debug.LogWarning("Failed to download latest localization through GDataDB! Exception: " + e);
                return(null);
            }
        }
Beispiel #2
0
        public static void AddNewLocalizationKey()
        {
            if (Application.internetReachability == NetworkReachability.NotReachable)
            {
                Debug.LogWarning("No internet connection - cannot add new localization key!");
                return;
            }

            CheckAndUpdateCurrentDatabaseSource(() => {
                CommandPaletteArgumentWindow.Show("Set Localization Key", (localizationKey) => {
                    CultureInfo masterCulture = EditorLocalizationConfiguration.GetMasterCulture();
                    CommandPaletteArgumentWindow.Show(string.Format("Set {0} Text", masterCulture.EnglishName), (masterText) => {
                        ITable <GLocalizationMasterRowData> localizationMasterTable = currentDatabaseSource_.LoadLocalizationMasterTable();
                        if (localizationMasterTable == null)
                        {
                            return;
                        }

                        ITable <GLocalizationRowData> localizationEntryTable = currentDatabaseSource_.LoadLocalizationEntriesTable();
                        if (localizationEntryTable == null)
                        {
                            return;
                        }

                        GoogleTranslate translation = GoogleTranslateSource.FindAndCreate();
                        if (translation == null)
                        {
                            return;
                        }

                        bool existingKey = localizationMasterTable.FindAll().Any(r => r.Element.Key == localizationKey);
                        if (existingKey)
                        {
                            Debug.LogWarning("Found existing row for localization key: " + localizationKey + " cannot adding as new!");
                            return;
                        }

                        var rowData = new GLocalizationMasterRowData();
                        rowData.Key = localizationKey;
                        localizationMasterTable.Add(rowData);

                        // NOTE (darren): we don't delete pre-existing entries in case of data loss
                        bool duplicateKey = localizationEntryTable.FindAll().Any(r => r.Element.Key == localizationKey);
                        if (duplicateKey)
                        {
                            Debug.LogWarning("Found pre-existing rows for localization key: " + localizationKey + ", please verify that they are correct - will not be deleted!");
                        }

                        foreach (var supportedCulture in EditorLocalizationConfiguration.GetSupportedCultures())
                        {
                            bool isMasterText = supportedCulture.Equals(masterCulture);
                            string translatedText;
                            if (isMasterText)
                            {
                                translatedText = masterText;
                            }
                            else
                            {
                                translatedText = translation.Translate(masterText, masterCulture.TwoLetterISOLanguageName, supportedCulture.TwoLetterISOLanguageName);
                            }

                            var entryRowData           = new GLocalizationRowData();
                            entryRowData.Key           = localizationKey;
                            entryRowData.LanguageCode  = supportedCulture.Name;
                            entryRowData.LocalizedText = translatedText;
                            entryRowData.SetNeedsUpdating(!isMasterText);
                            localizationEntryTable.Add(entryRowData);
                        }

                        // Cache bundled localization tables after new row
                        LocalizationOfflineCache.CacheBundledLocalizationTables();
                        // Rebake fonts after new translations
                        TMPLocalization.DownloadAndBakeAllUsedLocalizationCharactersIntoFonts();
                        Debug.Log("Finished adding new key: " + localizationKey + " to: " + currentDatabaseSource_.TableKey + "!");
                    });
                });
            });
        }