Xamarin.Android 中基于 RESX 的本地化

Posted

技术标签:

【中文标题】Xamarin.Android 中基于 RESX 的本地化【英文标题】:RESX-based localization in Xamarin.Android 【发布时间】:2015-07-25 14:01:27 【问题描述】:

我正在尝试研究该主题,但仍不清楚 Xamarin.android 中是否可以使用基于 RESX 的本地化。在我的个人尝试中,我无法获得任何本地化字符串,而只能获得中性文化字符串。

我还可以看到像 this one 这样的帖子,其中指出它应该适用于 Android:

这适用于 Android 和 windows phone。

但我也可以看到像 that one 这样的帖子,其中本地化不起作用。

所以我的问题很简单。如何在 Xamarin 中为 Android 构建基于 RESX 的本地化应用程序?

【问题讨论】:

developer.xamarin.com/guides/android/application_fundamentals/… @Jason,我目前正在将我们的 WPF 应用程序迁移到 Android 上,如果我可以重用 BL(包括模型和视图模型),但不能重用 resx,那将非常难过 【参考方案1】:

[回答我自己的问题]

嗯,首先,是的,Xamarin.Android 中基于 RESX 的本地化是可能的,并且可以按预期工作。

其次,由于缺乏对细节的关注,我已经浪费了很多时间来尝试使其正常工作。我已经多次阅读文章Localizing Xamarin.Forms Apps with RESX Resource Files,但我总是忽略故障排除部分。确实有一把钥匙:

在调试模式下不起作用(仅限 Android)

如果翻译后的字符串 在您的 RELEASE Android 版本中工作,但在调试时不工作, 右键单击 Android 项目并选择选项 > 构建 > Android Build 并确保快速组装部署不是 打勾。此选项会导致加载资源出现问题,并且应该 如果您正在测试本地化的应用程序,则不要使用。

第三,在尝试寻找一些替代方法来解决我的问题时,我发现文章Generating Localized Resources in Mono for Android Using T4 中描述的方法很有趣。与文章 How to transform T4 templates on build without installing a Visual Studio SDK 中描述的来自 Daniel Cazzulino 的酷 NuGet 包配合使用,我能够基于我的 WPF 项目中的 RESX 为 Android 平台构建一个简单的替代方案。

希望它可以帮助某人。

【讨论】:

这是 Resx 的替代品,如果有人感兴趣的话:github.com/xleon/I18N-Portable 等等,您回答“是”但最终使用 T4 创建可能的 xml 文件以进行翻译?虽然我为 web 应用程序创建 .json 文件做了同样的事情,但您自己的问题的答案实际上是“不,但是……您可以使用 T4”。还是我错了?我仍然没有关于如何在 Xamarin.Android 的 axml(不是 xaml)文件中使用翻译的答案 请您告诉我您实现的最终解决方案以及您如何在 XML 和活动中访问字符串?

以上是关于Xamarin.Android 中基于 RESX 的本地化的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.Android 中通过 MVVMCross 绑定 OxyPlot

XAMARIN ANDROID 二维码扫描示例

Xamarin.Android VSTS 持续集成

Xamarin.Android编译CPU类型选择方式

Xamarin挖墙脚系列:Xamarin的核心

Xamarin.Android之封装个简单的网络请求类