我正在用 c# 和 Xaml 编写一个 Windows 8 应用程序。
目前我有两个资源文件。
- 当地的
----de-DE
------资源.resw
----zh-CN
------资源.resw
我正在加载这样的文本部分:
private ResourceLoader _resources = new ResourceLoader();
_resources.GetString("Menu_Contacts")
现在这是我的问题,如何在运行时更改资源?
我正在用 c# 和 Xaml 编写一个 Windows 8 应用程序。
目前我有两个资源文件。
- 当地的
----de-DE
------资源.resw
----zh-CN
------资源.resw
我正在加载这样的文本部分:
private ResourceLoader _resources = new ResourceLoader();
_resources.GetString("Menu_Contacts")
现在这是我的问题,如何在运行时更改资源?
最简单的方法是设置PrimaryLanguageOverride
属性:
ApplicationLanguages.PrimaryLanguageOverride = "de-DE";
请注意,这将更改应用程序的语言,但您当前已加载的屏幕不会刷新。要刷新当前屏幕上的文本,您可以实现以下事件处理程序:
core.ResourceManager.Current.DefaultContext.QualifierValues.MapChanged
+= async (s, m) =>
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
settingsLanguageLabel.Text = core.ResourceManager.Current.MainResourceMap.GetValue("Resources/SettingsLanguageLabel/Text").ValueAsString;
settingsRestartLabel.Text = core.ResourceManager.Current.MainResourceMap.GetValue("Resources/SettingsRestartLabel/Text").ValueAsString;
});
};
您可以直接访问资源键:
Properties.Resources.myResourceKey = "new value";
或者您可以重写密钥:
resourceWriter = new ResXResourceWriter(Server.MapPath("/App_GlobalResources/Resource.resx"));
foreach (var cnes_ in _ResList)
{
resourceWriter.AddResource(cnes_.Key, cnes_.Value);
}
resourceWriter.Close();