Visual Studio - Projekt Launcher

Visual Studio - Projekt Launcher
« kdy: 29. 09. 2023, 16:04:01 »
Dobrý den,
jdu si pro radu, mám launcher / patcher pro herní klient kde jsem nově přidal možnost více jazyků (multilang) ten mi funguje správně. Ale můj dotaz spočívá jak začlenit soubory .resx do vytvořeného exe.
Nyní mám externě složku Lang a v ní soubory cz.resx, en.resx, de.resx .... Načítám jej pomocí tohoto scriptu

Kód: [Vybrat]
        public static void LoadLanguage()
        {
            string language = GetLanguageFromConfig();
            if (string.IsNullOrEmpty(language))
            {
                language = GetWindowsLanguage();
            }

            translations.Clear();

            string resourceFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lang", $"{language}.resx");

            if (File.Exists(resourceFile))
            {
                using (ResXResourceReader reader = new ResXResourceReader(resourceFile))
                {
                    foreach (DictionaryEntry entry in reader)
                    {
                        string key = entry.Key.ToString();
                        string value = entry.Value.ToString();
                        translations[key] = value;
                    }
                }
            }
        }

        ...

        public static string GetTranslation(string key)
        {
            if (translations.ContainsKey(key))
                return translations[key];
            else
                return string.Empty;
        }


Volání funkce LocalizationManager.GetTranslation("LblFile");

Bohužel se mi nedaří najít správná možnost pro načítání když soubory dám jako Build action: Embedded Resource

Děkuji Vám za navedení správným směrem (Stále se učím)


Re:Visual Studio - Projekt Launcher
« Odpověď #1 kdy: 29. 09. 2023, 18:01:59 »
Vyřešeno

Kód: [Vybrat]
        public static void LoadLanguage()
        {
            string language = GetLanguageFromConfig();
            if (string.IsNullOrEmpty(language))
            {
                language = GetWindowsLanguage();
            }

            translations.Clear();

            // Load the resource manager for the current assembly
            resourceManager = new ResourceManager(typeof(LocalizationManager).Namespace + ".Lang." + language, Assembly.GetExecutingAssembly());

            // Load all resources into translations
            ResourceSet resourceSet = resourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
            if (resourceSet != null)
            {
                foreach (DictionaryEntry entry in resourceSet)
                {
                    string key = entry.Key.ToString();
                    string value = entry.Value.ToString();
                    translations[key] = value;
                }
            }
            else
            {
                MessageBox.Show("Failed to load language modules.", "Error - MultiLang", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

Změněno a funguje to :)