Интернационализация iPhone: откат к языку по умолчанию - PullRequest
1 голос
/ 15 апреля 2010

Рассмотрим следующую ситуацию:

  • У нас есть два файла Localizable.string, один в en.lproj и один в it.lproj
  • Когда пользователь переключается на английский или итальянский язык, соответствующая локализованная строка загружается с использованием NSLocalizedString (@ "keyword", nil)
  • Если в одном из файлов отсутствует ключевое слово, строка не извлекается

Есть ли способ заставить этот макрос загружать строку из определенного языка, если его ключевое слово не найдено в Localizable.string текущей локали?

Ответы [ 3 ]

1 голос
/ 15 апреля 2010

NSLocalizedStringWithDefaultValue функция, вероятно, то, что вам нужно - используя ее, вы можете указать значение по умолчанию для случая, если для данного ключа не найдена локализация.

1 голос
/ 27 августа 2010

Я столкнулся с той же проблемой. Я думал, что он будет использовать строку из файла строк языка разработки, если не сможет найти локализованную строку на языке пользователя, но, очевидно, нет.

В итоге я создал собственную функцию для получения локализованной строки.

@interface Localization : NSObject {
    NSBundle* fallbackBundle;
}

- (NSString*) localizedStringForKey:(NSString*)key;

@end


@implementation Localization

- (id)init {
    if (self = [super init]) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
        fallbackBundle = [[NSBundle bundleWithPath:path] retain];
    }
    return self;
}

- (void)dealloc {
    [fallbackBundle release];
    [super dealloc];
}

- (NSString*) localizedStringForKey:(NSString*)key {
    NSString* result = [[NSBundle mainBundle] localizedStringForKey:key value:@"!#€NOTFOUND%&/" table:nil];
    if (result == nil || [result isEqualToString:@"!#€NOTFOUND%&/"]) {
        result = [fallbackBundle localizedStringForKey:key value:nil table:nil];
    }
    if (result == nil) {
        result = key;
    }
    return result;
}

@end

Вы можете сделать это синглтоном и иметь макросы, похожие на NSLocalizedString, которые вызывают localizedStringForKey, или что-то подобное, если хотите.

0 голосов
/ 15 апреля 2010

Предоставляя второй параметр функции NSLocalizedString, вы можете указать строку, которая будет использоваться, если ключевое слово не найдено в Localizable.string.

Это то, что вы хотели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...