Преобразование fr_FR во французский (Франция) в обоих направлениях. (Объектив-C для iPhone)

Я могу легко изменить короткий код региона (en_US) на более длинную строку... но есть ли простой способ двигаться в другом направлении?

[displayInEnglish displayNameForKey:NSLocaleIdentifier value:regionCountryCode];

«en_US» становится «английским (США)».

«Английский (США)» становится «en_US».

В настоящее время я храню короткий код региона в базе данных.... но когда я показываю некоторые совокупные результаты... мне нужно отображать более длинные строки для пользователя.

Или я должен просто хранить более длинные строки прямо в базе данных... и даже не беспокоиться об их "преобразовании" позже?

Я пытаюсь показать «всего в долларах» для каждой страны.

Если бы вы были пользователем... что бы вы, скорее всего, хотели увидеть (для общего списка валют)?

  • Тотал по-французски
  • Итого "Франция"
  • Итого "Франция (Франция)"
  • Итого "fr_Fr"?

person Susanna    schedule 20.05.2010    source источник


Ответы (2)


Один из вариантов — создать карту самостоятельно и сохранить ее. У вас есть все коды, которые вы хотите, и вы можете преобразовать их в более длинную строку, поэтому просто сохраните более длинную строку => сопоставление кода:

NSMutableDictionary * nameToCode = [NSMutableDictionary dictionary];
NSArray * codes = [NSArray arrayWithObjects:@"en_US", @"en_GB", @"fr_FR", @"pt_PT"];
NSLocale * english = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];

for (NSString * code in codes) {
  NSString * displayName = [english displayNameForKey:NSLocaleIdentifier value:code];
  [nameToCode setObject:code forKey:displayName];
}

Затем вы можете сделать:

NSString * code = [nameToCode objectForKey:@"French (France)"];
person Dave DeLong    schedule 20.05.2010

Я согласен с Дэвидом (который печатает быстрее меня): создайте таблицу поиска. Простой. Дешевый. быстро. Если вы знаете, что вы уже вызывали displayInEnglish, то структурируйте его как кеш, а не стройте большую таблицу с ненужными записями.

person Andiih    schedule 20.05.2010