Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Visual Studio - Projekt Launcher

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petr Zahradník:29.9.2023 17:50

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

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 LocalizationMa­nager.GetTran­slation("LblFi­le");

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)

Zkusil jsem: Zkoušel jsem dostupný návody na internetu, s kterými ale jsem nedošel k zdárnému konci.

Chci docílit: Zahrnout složku Lang a soubory do samostatného souboru exe, tak aby nebyla externí složka Lang s danými soubory.

 
Odpovědět
29.9.2023 17:50
Avatar
Petr Zahradník:29.9.2023 18:02

Již vyřešený :)

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);
    }
}
 
Nahoru Odpovědět
29.9.2023 18:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.