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;
我正在尝试为多语言设置 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;