ЛОКАЛИЗАЦИЯ WPF для Windows .NET

Я новичок в локализации ... Сначала я создал файл ресурсов (файл .resx), затем использовал команду resgen для создания соответствующего файла .resource ... он был создан ... затем я использовал al.exe для создания соответствующей вспомогательной сборки. . он также был создан ... но дальше, когда я попытался получить доступ к файлу .resx из выделенного кода с помощью класса диспетчера ресурсов, он выдал ошибку, что-то вроде -

Исключение манифеста сборки ..

Я не понимаю, где я ошибаюсь ... пожалуйста, дайте мне знать, если есть какие-либо дальнейшие действия (пожалуйста, не предлагайте инструмент LOCBAML) .. Я хочу, чтобы решение использовало только файлы ресурсов ..


person Karteek    schedule 29.09.2011    source источник


Ответы (2)


Твой старт был неплохим. Использование LocBaml для меня тоже было слишком сложным. Так что мне пришлось придумать кое-что попроще. Вот решение: во-первых, вам нужно создать файл ресурса .resx (этот шаг у вас уже выполнен); Простой способ получить все строки из файла ресурсов - сохранить их в словаре. Сделать это можно с помощью этого метода:

public Dictionary<string, string> ApplicationStrings(string locale)
    {
        Dictionary<string, string> result = new Dictionary<string, string>();

        ResourceManager manager = null;
// Here is two locales (custom and english locale), but you can use more than two if there's a need
            if (locale == "Your locale")
            {
                manager = new ResourceManager(typeof(your_locale_resource_file));
            }
            else
            {
                manager = new ResourceManager(typeof(ApplicationStrings_en));
            }
        ResourceSet resources = manager.GetResourceSet(CultureInfo.CurrentCulture, true, true);

        IDictionaryEnumerator enumerator = resources.GetEnumerator();

        while (enumerator.MoveNext())
        {
            result.Add((string)enumerator.Key, (string)enumerator.Value);
        }

        return result;
    }

Вы должны установить DataContext для MainWindow в качестве результата этого метода и привязать все свои строки к словарю. Пример привязки:

Text="{Binding [YourKey]}"

Вы можете вызвать этот метод, а затем изменить DataContext в любое время и в любом месте. Благодаря привязке данных он очень хорошо работает во время выполнения. Уверен, что это не лучшее решение, но оно работает просто. Я надеюсь, что это помогает.

person Community    schedule 05.05.2012

Взгляните на эти статьи с подробностями об использовании файлов Resx для локализации в WPF -

Локализация приложения WPF с Файлы ResX

Локализация WPF

Я также предлагаю вам пройти через это -

Обзор глобализации и локализации WPF

Руководство по локализации WPF - технический документ

person akjoshi    schedule 09.05.2012