在PCL中使用本地化

问题描述:

我有我的Xamarin.Forms项目localizedPCL 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