2010-05-20 14 views
0

Je peux facilement changer un code régional court (en_US) en une chaîne plus longue ... mais y-a-t-il un moyen facile de se déplacer également dans l'autre sens?Conversion de "fr_FR" en "français (France)" dans les deux sens. (Objective-C iPhone)

[displayInEnglish displayNameForKey:NSLocaleIdentifier value:regionCountryCode]; 

"en_US" devient "anglais (États-Unis)".

"Anglais (États-Unis)" devient "en_US".

Je stocke actuellement le code de région court dans une base de données .... mais quand je montre quelques résultats agrégés ... j'ai besoin d'afficher les chaînes plus longues à l'utilisateur. Ou devrais-je simplement stocker les chaînes les plus longues directement dans la base de données ... et ne pas même vous soucier de les "convertir" plus tard? J'essaie d'afficher un «total en dollars» pour chaque pays.

Si vous étiez un utilisateur ... que souhaiteriez-vous voir (pour une liste de devises totales)?

  • A "français" au total
  • A "France" au total
  • A "français (France)" total
  • A "Fr_FR" total?

Répondre

1

Une option consiste à créer vous-même la carte et à la stocker. Vous avez tous les codes que vous voulez, et vous pouvez les convertir dans la chaîne plus longue, donc il suffit de stocker plus long chaîne => mappage de code:

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]; 
} 

Ensuite, vous pouvez faire:

NSString * code = [nameToCode objectForKey:@"French (France)"]; 
0

Je suis d'accord avec David (qui tape plus vite que moi): Construire une table de recherche. Simple. Pas cher. rapide. Si vous savez que vous aurez déjà appelé displayInEnglish, structurez-le en cache plutôt que de créer une grande table avec des entrées inutiles.