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




localization (4)

我们可以使用Localize...File InspectorLocalize...图像Localize...像这样:

然后我们可以得到这个:

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

https://code.i-harness.com


在互联网上进行一些搜索后,我认为此功能目前不是由xcassets提供的。 所以只是不要使用xcassets来管理您的本地化图像。


当Apple给你柠檬,做柠檬水,或者在这种情况下,lemonade_en,lemonade_es或任何适合你需要的东西。

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

接下来,您需要获取设备的语言代码。 这里要记住的重要一点是用户可能使用不受支持的语言,因此如果是这种情况,请返回默认值(我使用英语)。

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

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

        return supportedLanguageCodes.contains(languageCode) ? languageCode : "en"
    }
}

此扩展程序执行以下操作:

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

现在,我们将两者结合起来以获得正确的图像:

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

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


虽然(显然)目前没有直接显式本地化xcassets文件的方法,但您可以使用Localizable.strings文件本地化资产的名称。 例如,假设您对需要本地化的游戏主菜单有图形徽标处理。 您可以使用不同的名称将本地化徽标处理放在assets文件中,将名称添加到Localizable.strings文件中,然后使用以下代码获取相应的图像:

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




localization