如何在Images.xcassets中本地化图像?

我们可以使用Localize...File Inspector中对图像进行Localize...像这样:

在这里输入图像说明

那我们可以得到这个:

在这里输入图像说明

但现在,我使用Images.xcassets来pipe理我的iOS项目中的图像,我应该如何将这些图像本地化到Images.xcassets中?

虽然目前显然还没有直接明确本地化xcassets文件的方法,但您可以使用Localizable.strings文件本地化资源的名称。 例如,假设你有一个需要本地化的游戏主菜单的graphics标志处理。 您可以将不同名称的资源文件中的本地化徽标处理,将名称添加到Localizable.strings文件中,然后使用如下代码获取适当的图像:

 UIImage *img = [UIImage imageNamed:NSLocalizedString(@"MAIN_MENU_IMAGE", nil)]; 

在互联网上search一些后,我认为这个function现在不是由xcassets提供的。 所以只是不要使用xcassetspipe理您的本地化图像。

当苹果给你柠檬,做柠檬水,或在这种情况下,柠檬水,柠檬水或任何适合你的需求。

首先,我在资产文件中为每种所需语言创build一个条目,如下所示:

在这里输入图像说明

接下来,您需要获取设备的语言代码。 这里要记住的重要的事情是,用户可能有一个不支持的语言,所以如果是这样的话,返回您的默认(我使用英语)。

UIApplication的以下扩展将为您处理所有这些事情:

 extension UIApplication { var languageCode: String { let supportedLanguageCodes = ["en", "es", "fr"] let languageCode = Locale.current.languageCode ?? "en" return supportedLanguageCodes.contains(languageCode) ? languageCode : "en" } } 

此扩展名执行以下操作:

  • 创build一个我的应用程序支持的语言的数组
  • 获取当前设备的语言代码,或者返回一个默认值(如果为零)
  • 最后,检查当前的代码是否在我的支持列表中。 如果是,则返回它,否则返回我的默认代码

现在,我们结合这两个来获得正确的形象:

 let languageCode = UIApplication.shared.languageCode let image = UIImage(named: "access_\(languageCode)") 

目前,我从Images.xcassets中提取需要本地化的图像,并将其放入标准项目文件夹中。 我将非本地化的图像保留在.xcassets中。 我用你的方法来处理需要本地化的图片。