.NET Windows WPF ЛОКАЛИЗАЦИЯ - PullRequest
       14

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

1 голос
/ 29 сентября 2011

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

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

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

Ответы [ 2 ]

3 голосов
/ 06 мая 2012

Ваш старт был довольно хорош. Использование 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 в любое время и в любом месте. Благодаря привязке данных он очень хорошо работает во время выполнения. Я гарантирую, что это решение не самое лучшее, но оно работает простым способом. Надеюсь, это поможет.

0 голосов
/ 09 мая 2012

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

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

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

Я бы также предложил вам ознакомиться с ними -

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

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

...