Есть ли возможность неявно локализовать метки в Interfacebuilder?
Где-то в блоге я наткнулся на файл строк, который выглядел так:
// de.lproj/Localizable.strings
"This is the title" = "Das ist der Titel"
Для меня это выглядело так, как будто фактические метки в Интерфейсном компоновщике были обработаны компилятором, так что никаких явных переводов с использованием NSLocalizedString(@"SOME_IDENTIFIER", @"");
будет необходимо больше.
Теперь у меня вопрос, есть ли какой-нибудь ярлык или мне нужно локализовать все мои отдельные ярлыки на моем виде, например, в awakeFromNib
метод.
1 ответ
Я нашел способ полуавтоматизировать процесс, чтобы мне не пришлось делать это:
label1.text = NSLocalizedString(@"label1_key", @"");
label2.text = NSLocalizedString(@"label2_key", @"");
....
labeln.text = NSLocalizedString(@"labeln_key", @"");
Поэтому для всех ярлыков, которые должны быть локализованы, я установил их текст __KeyForLabelX
в IB. Тогда в viewWillAppear
Метод viewcontroller Я перебираю элементы в представлении и устанавливаю текст в локализованное значение:
for (UIView *view in self.view){
if([view isMemberOfClass:[UILabel class]]){
UILabel *l = (UILabel *)view;
BOOL shouldTranslate = [l.text rangeOfString:@"__"].location != NSNotFound;
NSString *key = [l.text stringByReplacingOccurrencesOfString:@"__" withString:@"TranslationPrefix"];
if (shouldTranslate){
l.text = NSLocalizedString(key, @"");
}
}
}
Мой файл.strings тогда выглядит так:
"TranslationPrefixKeyForLabelX" = "Translation of Label X";
Обновление: для дальнейшей адаптации механизма вы также можете проверить другие UIView
как UIButtons
, UITextField
s (включая подсказку) и т. д.