Подтвердить что ты не робот

Как локализовать изображения в Images.xcassets?

Мы можем локализовать изображение в File Inspector с помощью Localize... следующим образом:

enter image description here

Тогда мы можем получить это:

enter image description here

Но теперь я использую Images.xcassets для управления моими изображениями в моем проекте iOS, как мне локализовать эти изображения в Images.xcassets?

4b9b3361

Ответ 1

Пока (по-видимому) нет возможности явно локализовать файл xcassets напрямую, вы можете локализовать имя актива, чтобы вытащить его с помощью файла Localizable.strings. Например, скажем, у вас есть графическое оформление логотипа для главного меню игры, которое необходимо локализовать. Вы можете поместить локализованные логотипы в файл активов с разными именами, добавить имена в свой файл Localizable.strings, а затем получить соответствующее изображение с кодом следующим образом:

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

Ответ 2

Когда Apple дает вам лимоны, делайте лимонад или, в данном случае, lemonade_en, lemonade_es или что-то еще, что соответствует вашим потребностям.

Во-первых, я создаю запись для каждого желаемого языка в моем файле ресурсов следующим образом:

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"
    }
}

Это расширение делает следующее:

  • Создает массив языков, которые поддерживает мое приложение
  • Получает текущий код языка устройства или возвращает значение по умолчанию, если это ноль
  • Наконец, он проверяет, есть ли текущий код в моем списке поддерживаемых. Если это так, он возвращает его, в противном случае он возвращает мой код по умолчанию

Теперь мы объединяем два, чтобы получить правильное изображение:

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

Ответ 3

После некоторых поисков в Интернете, я думаю, что эта функция не предоставляется xcassets прямо сейчас. Поэтому просто не используйте xcassets для управления вашими изображениями локализации.

Ответ 4

Я нашел другой способ:

  1. добавьте в ваш asset.xcassets папку для каждого языка (например, en, it, de)
  2. установите флажок "Обеспечивает пространство имен" для каждой папки
  3. скопировать все изображения и активы в этой папке
  4. В своем коде загрузите ресурсы, вызвав
let languageCode = UIApplication.shared.languageCode
let image = UIImage(named: "\(languageCode)\assetname")

Ответ 5

Эта кнопка "Localize..." вернулась в Xcode 11! Так что теперь вы можете локализовать свои изображения и активы в каталоге активов, как вы ожидаете:

enter image description here

Ответ 6

В настоящий момент я вытаскиваю изображения, которые нуждаются в локализации из Images.xcassets, и помещаю их в стандартную папку проекта. Я оставляю нелокализованные изображения в .xcassets. Я использую ваш метод для изображений, которые необходимо локализовать.