xamarin - Xamarin Forms 在运行时本地化图像未在 iOS 中更新
问题描述
我有一个 Xamarin Forms 应用程序,其中包含将向客户公开的语言选择器。当我切换语言时,我调用一个 SetLocale() 方法来切换当前语言。
public static void SetLocale(CultureInfo culture)
{
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
AppResources.Culture = culture;
}
所有文本都更新得很好(它们来自 resx 文件),但图像仍然来自我在 info.plist 中定义的默认应用程序语言(在应用程序设置中选择)。
我按照 xamarin 文档将图像放入 Resources/.lproj 的 iOS 项目中
我像往常一样将它们绑定在 xaml 文件中
<Image Source="{Binding Image}"></Image>
我怎样才能使翻译也适用于图像?
解决方案
经过大量研究,我找不到使用 iOS 原生捆绑包的方法。
我最终按照本教程进行了标记扩展,并对其进行了自定义,以在图像不存在时回退到默认语言环境。
using System;
using System.Globalization;
using System.Linq;
using System.Reflection;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace XamarinTest.Custom
{
[ContentProperty(nameof(Source))]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Source == null)
return null;
var resourceName = string.Format("XamarinTest.Images.{0}.{1}", CultureInfo.CurrentUICulture.Name.Replace('-', '_'), Source);
if (ResourceExists(resourceName))
return ImageSource.FromResource(resourceName, typeof(ImageResourceExtension).GetTypeInfo().Assembly);
return ImageSource.FromResource(string.Format("XamarinTest.Images.default.{0}", Source), typeof(ImageResourceExtension).GetTypeInfo().Assembly);
}
private string[] resourceNames;
private bool ResourceExists(string resourceName)
{
if (resourceNames == null)
{
resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();
}
return resourceNames.Contains(resourceName);
}
}
}
我将每个图像的构建操作设置为 EmbeddedResource
然后在一个视图中,我只是添加
xmlns:l="clr-namespace:XamarinTest.Custom"
...
<Image Source="{l:ImageResource qr.png}"
HeightRequest="160"
WidthRequest="160"></Image>
推荐阅读
- angular - 如何使用纱线离线标志使用 ng 命令创建新的 Angular 应用程序?
- r - R错误:优化导致“未使用的参数(x)”
- java - 我的解决方法出错并且不打印真假
- dolphindb - 一个关于计算共享内存表中数据的问题
- android - 如何确保在需要之前初始化 lateinit 变量?
- python - 如何在 Flask 中导入 settings.py 文件?
- robotframework - 如何检查数据是否显示在 html 表格中,否则如果数据未显示在表格中,则使用机器人框架将失败
- fp-ts - io-ts 嵌套类型实现
- c - 变量的声明和赋值在 K&R 中的不同行上是否有原因?
- css - 如何加载一个在 React 谷歌地图组件之上?