2015-08-11 14 views
6

Sono abbastanza confuso, perché in iOS 9 beta il valore di ritorno del codice lingua è diverso da iOS 8.4?Cambio sintassi ID linguaggio iOS 9 beta

Funzione:

NSUserDefaults.standardUserDefaults().objectForKey("AppleLanguages") 

Basta impostare lingua di "Simple cinese" e Regione per "Cina".

In iOS 8.4, tornare "zh-Hanz" ma in iOS 9 beta 4 di ritorno "zh-Hanz-CN". La sintassi ID lingua è molto più simile a

"[lingua designatore] - [sceneggiatura designatore] - [regione designatore]".

Is different with apple document:

Si tratta di una nuova regola in iOS 9? Qualcuno può aiutarmi a confermare questo.

Grazie per il vostro aiuto.

+0

Mi sembra che Apple stia semplicemente migliorando i codici in iOS 9 per alcune lingue. È per le lingue * all * o solo per "Simple Chinese" (dove potrebbe esserci un codice di regione diverso alla fine, ad esempio "TW"?). –

+0

Grazie per la risposta. Sì, se imposta una regione diversa ottieni un codice di regione diverso alla fine, ad es. "TW". Ho anche testato l'inglese in diverse regioni e ho ottenuto gli stessi risultati di "Simple Chinese". Sembra che se la lingua senza una regione, iOS 9 aggiungi una regione alla fine di iOS 8, ma è per tutte le lingue? Non lo so e voglio essere confermato. – Paul

+0

L''Hanz' nella domanda significa essere' Hans'? – Pang

risposta

6

Sì, ho notato che anche durante l'utilizzo di [NSLocale preferredLanguages]

In iOS 9 beta è tornato zh-Hans-US (con la regione insieme a Stati Uniti e il linguaggio per Cinese), mentre in iOS 8.4 ha usato per restituire solo zh-Hans.

Così nel frattempo ho utilizzato [[NSBundle mainBundle] preferredLocalizations] Questa operazione riporta la localizzazione corrente (zh-hans), che è senza la regione post-fix (-USA)

Per confermare, iOS 9 aggiunge la regione post-fix (come -US o -CN) a tutte le lingue.

0
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSArray *allLanguage = [defaults objectForKey:@"AppleLanguages"]; 
NSString *currentLanguage = [allLanguage objectAtIndex:0]; 
NSLog(@"The current language is : %@", currentLanguage); 

iOS 9 Prima: ritorna: la lingua ID.for esempio: "zh-hans"

iOS 9: ritorna: ID Language + regione ID.for esempio: "zh-Hans-US"

Avviso:
1. Non utilizzare il seguente metodo per verificare la lingua corrente.

if ([currentLanguage isEqualToString:@"zh-Hans"]) 

è possibile utilizzare il seguente metodo, invece:

if ([currentLanguage hasPrefix:@"zh-Hans"]) 

anche: Se vi preoccupate per cinese, si deve prestare attenzione a questi:

  • Cinese semplificato: zh-Hans
  • cinese tradizionale: zh-Hant
  • Hong Kong cinese: zh-HK
  • Macao cinese: zh-MO
  • Taiwan cinese: zh-TW
  • Singapore cinese: zh-SG

Avviso: In alcuni casi, abbiamo risultato diverso, soprattutto quando avete a che fare con il cinese .E 'un piccolo esempio strange.For:

il mio telefono cellulare è: la Cina continentale/China Telecom/A1533/16GB version.When scelgo la lingua come Taiwan, la regione è Cina, Hong Kong o Taiwan, il risultato è "zh-TW" e quando si imposta la regione come Regione non cinese, la lingua passerà al cinese tradizionale .

Quindi si prega di prestare maggiore attenzione alla lingua, specialmente quando si tratta della lingua cinese!

È inoltre possibile controllare i dettagli iOS 9 adattamento qui: https://github.com/ChenYilong/iOS9AdaptationTips

3

Si dovrebbe usare componentsFromLocaleIdentifiert di dividere l'identificatore delle impostazioni e trovare il codice della lingua. Mi piace qui:

+ (NSString*)currentLanguage 
{ 
    NSLocale* locale = [NSLocale currentLocale]; 
    NSString* identifier = locale.localeIdentifier; 
    NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:identifier]; 
    NSLog(@"components:\n%@", components); 
    return [components valueForKey:NSLocaleLanguageCode]; 
}