#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. да, если решение, которое я опубликовал, по какой-либо причине не работает, вы можете создать пакет из каталога локализации.