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

时间:2014-01-23 14:22:40

标签: ios localization

我们可以使用File Inspector像这样在Localize...中本地化图片:

enter image description here

然后我们可以得到这个:

enter image description here

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

6 个答案:

答案 0 :(得分:89)

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

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

答案 1 :(得分:8)

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

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

enter image description here

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

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

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

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

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

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

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

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

答案 2 :(得分:7)

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

答案 3 :(得分:3)

我找到了另一种方式:

  1. 在asset.xcassets中添加每种语言的文件夹(例如:en,it,de)
  2. 设置标志"提供命名空间"到每个文件夹
  3. 复制该文件夹中的所有图片和资源
  4. 在您的代码中通过调用
  5. 加载资产
    let languageCode = UIApplication.shared.languageCode
    let image = UIImage(named: "\(languageCode)\assetname")
    

答案 4 :(得分:1)

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

答案 5 :(得分:0)

该“ Localize ...”按钮又回到了Xcode 11中!因此,现在您可以按预期在“资产”目录中本地化图像和资产了:

enter image description here