WPF 本地化多语言 ResourceDictionary 与资源文件 (.RESX)

WPF Localization Multiple languages ResourceDictionary vs Resource File (.RESX)

我正在尝试为多语言设置 WPF。

我已经使用了其他帖子中的 ResourceDictionary,但只是回顾一下:

1 - 创建 ResourceDictionary 文件:\Resources\StringResources.xaml 用于默认 (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 文件怎么样?它们似乎更易于管理,甚至可以自动翻译。但这是首选方式吗?

他们还会为每种语言使用 1 个文件吗?我们在哪里设置文件以在应用程序启动时选择? 不幸的是,我似乎正在努力寻找任何帮助......

TryFindResource 是如何通过代码动态查找资源的:

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

对于静态资源,您可以使用:

string settingsString = Application.Current.Resources["settings"] as string;