Xamarin.Forms: 如何管理分享弹窗的本地化?
Xamarin.Forms: how to manage localization of the Share pop-up?
我想在我的 Xamarin.Forms 项目中使用 SharePlugin,但我不知道如何管理 本地化。我有 Android 和一个 iPhone 设备,均以法语配置。
在 Android 上,共享弹出窗口可以很好地以法语显示。
但是在 iOS 上,共享弹出窗口显示为英文。
我尝试在 Info.plist
中指定语言:
<key>CFBundleDevelopmentRegion</key>
<string>fr</string>
<key>CFBundleLocalizations</key>
<array>
<string>fr</string>
</array>
但这并没有改变任何东西。
SharePlugin共享对话框的屏幕截图:
如果我使用其他应用程序(如 Safari 或 Facebook)的“共享”对话框,该对话框会以法语很好地显示。
来自 Safari 的 "default" 共享对话框 的屏幕截图:
你能解释一下吗?
[Edit] 重新打开解决方案后,效果很好。
我认为那是因为我在 Visual Studio 之外编辑了 info.plist
:所以可能没有考虑到更改。
要显示正确的语言,我们需要查询每个平台上的操作系统以确定用户选择的语言。
我们应该做的是使用 依赖服务 在 Xamarin.Forms 应用程序中公开该信息并为每个平台实现它。
Here 官方简单。在PCL中找到ILocalize.cs
,在Xamarin.iOS中找到Localize.cs
,复制到相应的文件夹中。(不要忘记更改class中的命名空间)
应用程序中的代码
public App()
{
InitializeComponent();
if (Device.OS == TargetPlatform.iOS || Device.OS == TargetPlatform.Android)
{
// determine the correct, supported .NET culture
var ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo();
DependencyService.Get<ILocalize>().SetLocale(ci); // set the Thread for locale-aware methods
}
MainPage = new FormsApp.MainPage();
}
更多细节参考here。
我的测试:
我想在我的 Xamarin.Forms 项目中使用 SharePlugin,但我不知道如何管理 本地化。我有 Android 和一个 iPhone 设备,均以法语配置。
在 Android 上,共享弹出窗口可以很好地以法语显示。 但是在 iOS 上,共享弹出窗口显示为英文。
我尝试在 Info.plist
中指定语言:
<key>CFBundleDevelopmentRegion</key>
<string>fr</string>
<key>CFBundleLocalizations</key>
<array>
<string>fr</string>
</array>
但这并没有改变任何东西。
SharePlugin共享对话框的屏幕截图:
如果我使用其他应用程序(如 Safari 或 Facebook)的“共享”对话框,该对话框会以法语很好地显示。
来自 Safari 的 "default" 共享对话框 的屏幕截图:
你能解释一下吗?
[Edit] 重新打开解决方案后,效果很好。
我认为那是因为我在 Visual Studio 之外编辑了 info.plist
:所以可能没有考虑到更改。
要显示正确的语言,我们需要查询每个平台上的操作系统以确定用户选择的语言。
我们应该做的是使用 依赖服务 在 Xamarin.Forms 应用程序中公开该信息并为每个平台实现它。
Here 官方简单。在PCL中找到ILocalize.cs
,在Xamarin.iOS中找到Localize.cs
,复制到相应的文件夹中。(不要忘记更改class中的命名空间)
应用程序中的代码
public App()
{
InitializeComponent();
if (Device.OS == TargetPlatform.iOS || Device.OS == TargetPlatform.Android)
{
// determine the correct, supported .NET culture
var ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo();
DependencyService.Get<ILocalize>().SetLocale(ci); // set the Thread for locale-aware methods
}
MainPage = new FormsApp.MainPage();
}
更多细节参考here。
我的测试: