Как локализовать изображения в Images.xcassets?
Мы можем локализовать изображение в File Inspector
с помощью Localize...
следующим образом:
![enter image description here]()
Тогда мы можем получить это:
![enter image description here]()
Но теперь я использую Images.xcassets для управления моими изображениями в моем проекте iOS, как мне локализовать эти изображения в Images.xcassets?
Ответы
Ответ 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
Я нашел другой способ:
- добавьте в ваш asset.xcassets папку для каждого языка (например, en, it, de)
- установите флажок "Обеспечивает пространство имен" для каждой папки
- скопировать все изображения и активы в этой папке
- В своем коде загрузите ресурсы, вызвав
let languageCode = UIApplication.shared.languageCode
let image = UIImage(named: "\(languageCode)\assetname")
Ответ 5
Эта кнопка "Localize..." вернулась в Xcode 11! Так что теперь вы можете локализовать свои изображения и активы в каталоге активов, как вы ожидаете:
![enter image description here]()
Ответ 6
В настоящий момент я вытаскиваю изображения, которые нуждаются в локализации из Images.xcassets, и помещаю их в стандартную папку проекта. Я оставляю нелокализованные изображения в .xcassets. Я использую ваш метод для изображений, которые необходимо локализовать.