使用ResourceLoader.GetString方法检索具有键中点的资源

8

我正在使用ResourceLoader.GetString从我的.resw文件中获取字符串资源。我可以检索没有点的关键字,但带有点的关键字返回为空字符串。例如:

var rl = new Windows.ApplicationModel.Resources.ResourceLoader();
rl.GetString("HelpText"); // gets the string "Help"
rl.GetString("Forget.Text"); // gets "", even though it's defined in resw file as "Forgotten"

我尝试使用其他字符替换了句点:

rl.GetString("Forget_Text");
rl.GetString("Forget:Text");
rl.GetString("Forget-Text");

运气不是很好。MSDN上的所有示例都巧妙地避免提到这个小问题,所以我有点困惑。有人能帮忙吗?


2
这个问题及其答案同样适用于从resx文件获取UWP(以及使用Xamarin.Forms的UWP)。如果您使用System.Resources.ResourceManager.GetString(_name_),并且_name_包含句点或点号,即使存在有效资源,也将返回null。在Xamarin Android和.NET 4.5.2中,句号检索资源,正斜杠则不然。希望这个评论能够通过搜索找到答案。故事的寓意是,在资源名称中不要使用句号。 - Steven Bone
2个回答

28

实际上,它通过斜杠访问:

rl.GetString("Forget/Text");

谢谢,问题解决了。我非常喜欢开发Windows Phone应用,但是一些根本性的未记录的“怪异行为”会让我们花费很多时间去解决。没有Stack Overflow,Windows Phone开发会变成什么样呢?老实说,微软这种做法非常糟糕,难怪这个平台上有这么大的应用缺口。 - RogerW
实际上,点/斜杠“怪癖”在这里有记录:https://learn.microsoft.com/en-us/windows/uwp/app-resources/localize-strings-ui-manifest - Jasper
是的,那份文档是2017年的,所以比原来的问题晚了很多。不过很高兴他们终于添加了一些内容! - jaucourt
干得好!微软。为自己感到骄傲。 - Daniel Cheung

0

你如何处理最后一个句点?例如:

ResourceManager.GetString("My string.")

正斜杠对于字符串中嵌入的句点可以正常工作,但是对于最后一个句点则不行。例如,这会导致编译错误(错误:PRI175:0x80070057-处理资源时出错:参数不正确):

ResourceManager.GetString("My string/")

我发现唯一的解决方法是在将其放入resw文件之前用其他字符替换句点。例如,这看起来很奇怪,但它确实有效:

ResourceManager.GetString("My string0x2e")

谢谢。


这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时收到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - LordWilmore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接