Есть ли возможность неявно локализовать метки в 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, UITextFields (включая подсказку) и т. д.

Другие вопросы по тегам