在PCL中使用本地化

时间:2017-09-07 15:33:43

标签: c# msbuild localization xamarin.android xamarin.forms

我有localized我的Xamarin.Forms项目(PCL approach)。此外,我通过引用Debug文件夹中的输出dll添加了另一个PCL作为此项目的参考。通过使用RESX文件并使用AppResources.Culture = ci;

设置文化,此PCL也采用与Xamarin.Forms项目相同的方法进行本地化

目前的问题是,这在我的本地机器上按预期工作,但在构建服务器上没有(Jenkins调用MSBuild)。不同之处在于我在Debug模式下工作,生成的apk文件(Android)以Release模式构建。但无论模式如何,本地化本地化在两种模式下都能正常工作!在构建服务器上,生成的apk文件现在包含两种语言的混合:

  • 根据当前设备语言(Xamarin.Forms项目)的本地化字符串
  • 来自附加PCL的非本地化字符串(仅显示来自语言中性RESX文件的字符串)

现在我不明白为什么它在本地工作,但不在构建服务器端。我尝试了什么:

  • 我在构建服务器上的“故障”生成的apk中记录了文化并正确设置(在应用程序和其他PCL中)
  • 我检查了loaded resources并且显示了一个AppResources.resources(显然它包含所有RESX文件,包括特定于语言的资源?)
  • 我尝试在本地调用MSBuild类似于在Jenkins构建服务器上完成的任务,但是一如既往,本地工作正常
  • 遵循Xamarin的指示,但我没有找到任何解决方案
  • 设备培养是例如en-US,但我的语言中性RESX文件设置为en。我尝试将AppResources.en-US.resx文件添加到其他PCL,但系统仍显示语言中性RESX文件中的内容。

这是构建服务器上与MSBuild组合的配置问题吗?如果是,有什么不同或缺失?或者这是一个代码问题?在两个项目(XF和其他PCL)中使用相同名称AppResources进行本地化是一个问题吗?你有什么提示让我找到这个问题吗?

1 个答案:

答案 0 :(得分:0)

问题是PCL(一个dll)的结果被复制到XF项目中。但PCL的构建工件还包含特定于语言的资源(称为satellite assembly)。文件夹结构如下所示:

  

MyLib中/ bin中/调试/中是指mylib.dll
  MyLib中/ bin中/调试/ EN / MyLib.resources.dl

文件夹en取决于您支持的语言,可能会有所不同。如果我将具有相同文件夹结构的所有必需文件复制到XF项目,则翻译按预期工作。这就是为什么它在当地运作的原因。看来,在附加PCL的资源文件中set the Culture不需要。