在PCL中使用本地化
问题描述:
我有我的Xamarin.Forms项目localized(PCL approach)。此外,我通过引用Debug
文件夹中的输出dll,添加了另一个PCL作为此项目的参考。这PCL也像Xamarin.Forms项目同样的方法后,使用RESX文件和设置与AppResources.Culture = ci;
在PCL中使用本地化
目前的问题是文化的本地化,这个作品在我的本地机器上如预期,但不是在构建服务器(詹金斯称MSBuild)。所不同的是,我工作在Debug
模式下,生成的apk文件(Android)以Release
模式构建。但不管模式如何,本地化在两种模式下都能正常工作!在构建服务器所产生的apk文件现在包含两种语言的混合:
- 本地化字符串根据当前设备的语言(Xamarin.Forms项目)
- 非本地化从附加PCL(只显示弦弦从语言中性RESX文件)
现在我不明白为什么这个工作在本地,但不是在构建服务器端。我的尝试:
- 我登录的文化从构建服务器的“故障”生成APK,并正确设置(在应用程序都和附加PCL)
- 我检查了loaded resources和一个
AppResources.resources
被显示出来(显然它包含了所有RESX文件,包括特定语言的资源?) - 我试图在本地拨打
MSBuild
类似于对詹金斯进行构建服务器的任务,但一如既往,在当地它工作正常 - 遵循Xamarin的指示,但我没有找到任何解决方案
- 设备文化是
en-US
,但我的语言中性RESX文件设置为en
。我试图将AppResources.en-US.resx
文件添加到其他PCL,但系统仍显示语言中性RESX文件中的内容。
这是生成服务器上的配置问题与MSBuild
的组合吗?如果是,有什么不同或缺失?或者这是一个代码问题?这是否在两个项目(XF和其他PCL)中使用相同名称AppResources
进行本地化?你有什么提示让我找到这个问题吗?
答
问题是,PCL(一个DLL)的结果被复制到XF项目。但PCL的构建文物还包含语言特定的资源(称为satellite assembly)。文件夹结构如下所示:
MyLib中/斌/调试/中是指mylib.dll
MyLib中/斌/调试/ EN/MyLib.resources.dl
文件夹en
取决于你支持的语言,可以不同。如果我将具有相同文件夹结构的所有必需文件复制到XF项目,则翻译将按预期工作。这就是为什么它在当地工作的原因。看来,在附加PCL的资源文件中不需要set the Culture
。