Резервный язык локализации

Я хочу локализовать пару строк в своем приложении для iPhone, и пока это работает для 5 языков, которые я выбрал. Однако у меня есть одна проблема: если я не определил ключ для определенного языка, я хочу, чтобы он выбрал английский в качестве запасного варианта, потому что я знаю, что я точно определил каждую строку на английском языке. Дело в том, что не очень важно, чтобы все клавиши были переведены, поэтому можно показывать английский, даже если, например, iPhone настроен на испанский.

Пример:

en:

"HELLO" = "hello" ;
"PERSON" = "my friend" ;

es:

"HELLO" = "hola" ;

Ожидаемый результат:

Если iPhone настроен на английский язык, я хочу, чтобы он сказал: hello, my friend, а если установлен испанский язык, я хочу, чтобы он сказал hola, my friend. В настоящее время приложение будет выводить hola, PERSON. (Я использую метод NSLocalizedString).

Вероятно, есть действительно простое решение, но я не смог найти хороших. Спасибо за помощь,

Маттиас


person Mattias Farnemyhr    schedule 24.03.2013    source источник
comment
Обычный способ сделать это NSLocalizedStringWithDefaultValue().   -  person mrueg    schedule 24.03.2013


Ответы (3)


Другие ответы были определенно правильными, но это было не совсем то, что я хотел. Вместо этого я нашел другой способ сделать это и написал статический метод, который отлично работает для меня в моей среде, и я хотел добавить его здесь, если кто-то еще хочет добиться того же:

+ (NSString *)localizedStringForKey:(NSString *)key table:(NSString *)table
{
    NSString *str = [[NSBundle mainBundle] localizedStringForKey:key value:@"NA" table:table];
    if ([str isEqualToString:@"NA"])
    {
        NSString *enPath = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
        return [[NSBundle bundleWithPath:enPath] localizedStringForKey:key value:@"NA" table:table];
    }

    return str;
}
person Mattias Farnemyhr    schedule 24.03.2013

документация функции NSLocalizedString гласит:

Возвращаемое значение

Результат вызова localizedStringForKey:value:table: для основного пакета и нулевой таблицы.

и для localizedStringForKey:value:table: говорит:

Возвращаемое значение

Локализованная версия строки, обозначенной ключом в таблице tableName. Если значение равно nil или пустой строке, а локализованная строка не найдена в таблице, возвращает ключ. Если ключ и значение равны nil, возвращает пустую строку.

поэтому вы локализовали строку для всех ваших языков или изменили значение key, которое вы используете

person tkanzakic    schedule 24.03.2013

Простое решение — использовать английский текст в качестве ключа. Например:

[NSString stringWithFormat:NSLocalizedString(@"%@, %@", "format for greeting"),
                           NSLocalizedString(@"Hello", "salutation"),
                           NSLocalizedString(@"my friend", "person")]

Если локализованной версии строки нет, используется английский ключ.

person Ken Thomases    schedule 24.03.2013