Prism View Navigation 在带有重音符号的注册名称上失败
Prism View Navigation fails on registration name with accent marks
当我使用一个带有重音符号的特定法语注册名称时,我的 Prism WPF 应用程序(Unity 容器)无法导航。我想弄清楚为什么以及我可以做些什么来解决它。
英文版使用了“Settings”这个词并且完美运行:
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<SettingsView>("Settings");
}
public void OnInitialized(IContainerProvider containerProvider)
{
regionManager.RequestNavigate(RegionNames.ContentRegion, "Settings"); // THIS WORKS
}
法语版使用“Réglages”失败
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<SettingsView>("Réglages");
}
public void OnInitialized(IContainerProvider containerProvider)
{
_regionManager.RequestNavigate(RegionNames.ContentRegion, "Réglages"); // FAILS
}
错误是 Prism.Unity.Shared/UnityContainerExtension.cs
中的异常
public object Resolve(Type type, string name, params (Type Type, object Instance)[] parameters)
{
try
{
var c = _currentScope?.Container ?? Instance;
// Unity will simply return a new object() for unregistered Views
if (!c.IsRegistered(type, name))
throw new KeyNotFoundException($"No registered type {type.Name} with the key {name}.");
调试器说它正在查找的名称是 R%C3%A9glages
而不是 Réglages
我要注意
其他模块的其他法语字符串(没有重音符号)导航得很好所以我猜这与重音符号有关。但是我对国际化一无所知,所以我不知道该怎么做。也许我需要对代码页做些什么...?
我的实际应用程序从特定于语言的 .RESX 文件中获取这些名称。它不使用文字。
此外,我正在使用 Prism.WPF 和 Prism.Unity 版本 8.0.0.1909,如果有的话。
Prism(不必要地)限制视图的名称能够强制导航到一个 uri,即使在像 wpf 这样的平台上它根本没有意义。所以你最好坚持使用普通的 ASCII 字符串来查看你的视图...
无论如何,为了公平起见,本地化内部常量是没有意义的。
当我使用一个带有重音符号的特定法语注册名称时,我的 Prism WPF 应用程序(Unity 容器)无法导航。我想弄清楚为什么以及我可以做些什么来解决它。
英文版使用了“Settings”这个词并且完美运行:
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<SettingsView>("Settings");
}
public void OnInitialized(IContainerProvider containerProvider)
{
regionManager.RequestNavigate(RegionNames.ContentRegion, "Settings"); // THIS WORKS
}
法语版使用“Réglages”失败
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<SettingsView>("Réglages");
}
public void OnInitialized(IContainerProvider containerProvider)
{
_regionManager.RequestNavigate(RegionNames.ContentRegion, "Réglages"); // FAILS
}
错误是 Prism.Unity.Shared/UnityContainerExtension.cs
中的异常public object Resolve(Type type, string name, params (Type Type, object Instance)[] parameters)
{
try
{
var c = _currentScope?.Container ?? Instance;
// Unity will simply return a new object() for unregistered Views
if (!c.IsRegistered(type, name))
throw new KeyNotFoundException($"No registered type {type.Name} with the key {name}.");
调试器说它正在查找的名称是 R%C3%A9glages
而不是 Réglages
我要注意
其他模块的其他法语字符串(没有重音符号)导航得很好所以我猜这与重音符号有关。但是我对国际化一无所知,所以我不知道该怎么做。也许我需要对代码页做些什么...?
我的实际应用程序从特定于语言的 .RESX 文件中获取这些名称。它不使用文字。
此外,我正在使用 Prism.WPF 和 Prism.Unity 版本 8.0.0.1909,如果有的话。
Prism(不必要地)限制视图的名称能够强制导航到一个 uri,即使在像 wpf 这样的平台上它根本没有意义。所以你最好坚持使用普通的 ASCII 字符串来查看你的视图...
无论如何,为了公平起见,本地化内部常量是没有意义的。