Вопрос

Я перевожу проект iOS на португальский язык, и я создал файл pt.lproj/localizable.strings, и я добавил nslocalizedstring () в исходный код. Все работает! С одной небольшой проблемой - строки в файлах XIB не переводятся ... Я знаю, что это за дизайн.

Я видел, что команда iBtool может использоваться для разрыва строк из файла XIB с именем x и положить ее в файл, называемый x.strings ... но мой вопрос в том, есть ли способ вытащить строки из всех XIB Файлы и поместите их все в один файл .strings (например, localizable.strings? или даже другой, называемый xibs.strings, будет в порядке?)

Это было полезно?

Решение

У вас есть два варианта, как перевести файлы XIB. Одним из них вы подключаете элементы пользовательского интерфейса к выходам и устанавливаете свои строки в своем методе ViewDidload, используя NSLocalizedString макросы.

Второй вариант - предоставить отдельный XIB для каждого языка, который поддерживает ваше приложение. Вам не нужно создавать их вручную, вы можете использовать ibtool Команда (я предполагаю, что ваш исходный язык - английский, а цель - португальский):

ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib

Чтобы собрать строки, найденные в вашем проекте, вы можете использовать genstrings Команда - однако я рекомендую использовать это Скрипт Python Чтобы собрать все свои строки - он может хорошо справиться с ситуацией, когда вам нужно добавить/удалить строки в свое приложение, не переводив и/или вручную объединять все предыдущие строки

Редактировать

О, и я нашел статья что я узнал этот трюк от

Другие советы

Я сделал категорию, чтобы сделать это:

@implementation UIView (Localise)

- (void)localise
{
    [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
        [view localise];
        if ([view isKindOfClass:[UILabel class]]) {
            UILabel *label = (UILabel *)view;
            [label setText:NSLocalizedString(label.text, nil)];
        }
    }];
}

Затем в ваших взглядах:

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self localise];
}

Вам нужно будет добавить поддержку другим элементам пользовательского интерфейса (TextField.Placeholder = nSlocal ... Blah Blah), но это поможет Uilabel и детям.

Наверное, не отличная производительность, но делает работу.

Это будет зависеть от приложения и количества локализаций, но в целом я предпочитаю отдельные файлы .xib, потому что макет может измениться. Поместите локализованные файлы в pt.lproj/.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top