我正在使用.NET标准库处理Xamarin Forms应用。我已使用the docs中提到的TranslateExtension
。我添加了三个资源文件:
AppResources.resx
(带有匹配的代码隐藏文件,自动生成)AppResources.nl.resx
(荷兰语翻译)AppResources.fr.resx
(英文翻译)调试(UWP)应用程序时,我无法显示默认文化(英文)。以下行返回null:
ResMgr.Value.GetString(Text, ci);
我添加了一些用于调试的行,而其他两种语言确实返回了已翻译的值:
ResMgr.Value.GetString(Text, new CultureInfo("nl")); // OK
ResMgr.Value.GetString(Text, new CultureInfo("fr")); // OK
ResMgr.Value.GetString(Text, new CultureInfo("en")); // returns null
这可能是什么原因?
我尝试的事情:
"en-GB"
,"en-US"
,CultureInfo.InvariantCulture
。en-US
更改为en
。答案 0 :(得分:1)
On UWP, watch that your resource name does not have a period in it.
您可能还需要告诉UWP项目它的默认语言是什么。这可以通过添加<PropertyGroup>
(使用适合您的方案的文化)在顶部<DefaultLanguage>en-US</DefaultLanguage>
元素(没有条件的元素)中的.csproj中完成。
不要忘记为包含资源的程序集设置[assembly: NeutralResourcesLanguage("en-US")]
- 这是.NET Standard 2.0和PCL所必需的。
答案 1 :(得分:0)
答案 2 :(得分:0)
我注意到你讲的是 NET标准库
从 PCL 迁移到 .NET标准 后, ResourceManager.GetString
开始为新条目提供null
我还观察到文件 AppResources.Designer.cs 从解决方案资源管理器中消失(但我不知道如何,仍在考虑中),并且在VS res编辑中< strong> AppResources.resx ,访问修饰符为No Code Generation
。
以下是我采取的措施:
注意强>
.\bin
和.\obj
并重新启动VS.这是为了确保您的问题得到修复或使用非常新生成的真实代码:)