private static ILocalizationManager Create(string desiredUiLangId, string appId,
                                                   string appName, string relativeSettingPathForLocalizationFolder,
                                                   Icon applicationIcon, Func <string, ILocalizationManagerInternal <T> > createMethod)
        {
            if (string.IsNullOrEmpty(relativeSettingPathForLocalizationFolder))
            {
                relativeSettingPathForLocalizationFolder = appName;
            }
            else if (Path.IsPathRooted(relativeSettingPathForLocalizationFolder))
            {
                throw new ArgumentException("Relative (non-rooted) path expected", "relativeSettingPathForLocalizationFolder");
            }

            var directoryOfWritableTranslationFiles = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
                                                                   relativeSettingPathForLocalizationFolder, "localizations");

            if (!LoadedManagers.TryGetValue(appId, out var lm))
            {
                lm = createMethod(directoryOfWritableTranslationFiles);

                LoadedManagers[appId] = lm;
                PreviouslyLoadedManagers.Remove(appId);
            }

            lm.ApplicationIcon = applicationIcon;

            if (string.IsNullOrEmpty(desiredUiLangId))
            {
                desiredUiLangId = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
            }

            var ci = L10NCultureInfo.GetCultureInfo(desiredUiLangId);

            if (!GetUILanguages(true).Contains(ci))
            {
                using (var dlg = new LanguageChoosingDialog(ci, applicationIcon))
                {
                    dlg.ShowDialog();
                    desiredUiLangId = dlg.SelectedLanguage;
                }
            }

            LocalizationManager.SetUILanguage(desiredUiLangId, false);

            LocalizationManager.EnableClickingOnControlToBringUpLocalizationDialog = true;

            return(lm);
        }
示例#2
0
        /// ------------------------------------------------------------------------------------
        public static void SetUILanguage(string langId,
                                         bool reapplyLocalizationsToAllObjectsInAllManagers)
        {
            if (UILanguageId == langId || string.IsNullOrEmpty(langId))
            {
                return;
            }
            var ci = L10NCultureInfo.GetCultureInfo(langId);

            if (ci.RawCultureInfo != null)
            {
                Thread.CurrentThread.CurrentUICulture = ci.RawCultureInfo;
            }
            else
            {
                Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
            }
            L10NCultureInfo.CurrentCulture = ci;
            s_uiLangId = langId;

            switch (TranslationMemoryKind)
            {
            default:
                LocalizationManagerInternal <TMXDocument> .SetAvailableFallbackLanguageIds(GetAvailableLocalizedLanguages());

                break;

            case TranslationMemory.XLiff:
                LocalizationManagerInternal <XLiffDocument> .SetAvailableFallbackLanguageIds(GetAvailableLocalizedLanguages());

                break;
            }

            if (reapplyLocalizationsToAllObjectsInAllManagers)
            {
                ReapplyLocalizationsToAllObjectsInAllManagers();
            }
        }