Как использовать локализованный UIImage с определенным языком?

#objective-c #ios #localization #uiimage

#objective-c #iOS #локализация #пользовательский интерфейс

Вопрос:

У меня есть настройки в моем приложении, и я хочу предоставить пользователю возможность переключать язык приложения. Язык может отличаться от настроек устройства.

Для NSStrings я нашел решение, но как я могу сделать это с UIImages?

Я локализовал все свои изображения, но теперь они выбираются в зависимости от языка устройства. Что мне нужно сделать, чтобы это заработало? Мой единственный вариант, который у меня есть прямо сейчас, это поместить имена в Localizable.strings и загрузить их оттуда.

Есть ли лучший способ сделать это?

Спасибо 😉

Ответ №1:

Что-то вроде:

  • - [NSBundle URLForResource:withExtension:subdirectory:localization:]
  • - [NSBundle pathForResource:ofType:inDirectory:forLocalization:]

должен это сделать.

Тогда просто используйте что-то вроде:

  • -[UIImage initWithContentsOfFile:]
  • -[UIImage initWithData:]

для создания UIImage .

Комментарии:

1. Это выглядит очень хорошо, и я думаю, что это должно сработать, но это не так. Возможно, я делаю что-то неправильно, но метод всегда возвращает nil для этого: [[[NSBundle alloc] init] pathForResource:@»test» OfType:@»png» Косвенный:@»» forLocalization:@»en»];

2. @MoFuRo вам нужно использовать назначенный инициализатор или удобный конструктор, предоставляемый классом. В этом случае NSBundle необходимо знать путь, URL или идентификатор пакета, чтобы вернуть действительный экземпляр пакета, который способен находить свои ресурсы. [NSBundle mainBundle] возвращает пакет вашего приложения, который часто является тем, что вам нужно. Итак, вы могли бы попробовать это: [[NSBundle mainBundle] pathForResource:..... .

3. Это выглядит намного лучше, но не добавляет en.proj к пути. Это вызов: ‘[[NSBundle mainBundle] pathForResource:@»test» OfType:@»png» Косвенный: nil для локализации:@»en»]’.

4. Возможно, я добавлю .lproj к языку и использую его в качестве подкаталога, если это не сработает.

5. да, если решение, которое я опубликовал, по какой-либо причине не работает, вы можете создать пакет из каталога локализации.