Локализация WPF Несколько языков ResourceDictionary и Resource File (.RESX) - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь установить WPF для нескольких языков.

Я использовал ResourceDictionary, как и в других сообщениях, но просто напомню:

1 - Создание файлов ResourceDictionary: \ Resources \ StringResources.xaml для default (en) и \ Resources \ FR \ StringResources.xaml для французского (fr)

2 - вызовите метод ниже при запуске приложения, я поместил его в свой app.xaml.cs

    private void SetLanguageDictionary()
        {
            ResourceDictionary dict = new ResourceDictionary();
            switch (Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName)
            {
                case "en":
                    dict.Source = new Uri("..\\Resources\\StringResources.xaml", UriKind.Relative);
                    break;

                case "fr":
                    dict.Source = new Uri("..\\Resources\\FR\\StringResources.xaml", UriKind.Relative);
                    break;

                default:
                    dict.Source = new Uri("..\\Resources\\StringResources.xaml", UriKind.Relative);
                    break;
            }
            this.Resources.MergedDictionaries.Add(dict);
        }

3 - вызовите его из ваших файлов xaml, например:

<button Text="{DynamicResource settings}" />

4 - в файле ResourceDictionary:

xmlns:system="clr-namespace:System;assembly=mscorlib"

<system:String x:Key="settings">Settings</system:String>

Это очень просто, но сначала проблема заключается в следующем: как вы установите его в коде позади? Я просматривал другие посты, и они, кажется, упоминают такие вещи, как: (Однако у меня не работает ..)

string str = Resources.ResourceManager.GetString(settings); 

Есть ли что-то особенное?

Теперь, если это работает очень хорошо, как насчет использования файлов .resx? Кажется, ими гораздо легче управлять и даже можно автоматически переводить. Но предпочтительнее ли это go?

Будут ли они также использовать 1 файл на язык? Где бы мы установили файл для выбора при запуске приложения? Я, кажется, изо всех сил пытаюсь найти какую-то помощь по этому вопросу, к сожалению ...

1 Ответ

1 голос
/ 16 апреля 2020

TryFindResource - это способ динамического поиска ресурса из кода:

object resource = Application.Current.TryFindResource("settings");
string settingsString = resource as string;
if(settingsString!=null)
{
   // Use it
}

Для StaticResources вы можете просто использовать:

string settingsString = Application.Current.Resources["settings"] as string;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...