2010-05-24 14 views
11

Ho creato un UIDatePicker nella mia app e ho anche il supporto per diverse lingue. Il mio UIDatePicker è stato creato in Interface Builder e ho creato un XIB di localizzazione separato in modo da poter personalizzare il mio UIDatePicker.UIDatePicker - Localizzazione problema

L'impostazione dell'opzione "Locale" in IB sembra non fare nulla. Il tentativo di cambiare il mio DatePicker programatically con Locale e NSCalender anche non fare nulla con il seguente codice:

NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"es_ES"]; 
datePicker.locale = locale; 
datePicker.calender = [locale objectForKey:NSLocaleCalender]; 

Ciò si traduce in un selettore inglese.

Ecco la cosa davvero strana però. La parola "oggi" è tradotta. Come visto nello screenshot allegato. (OK Non sono autorizzato a postare immagini, ma immagina una data & Time picker con "May" in inglese e "Today" scritto "Ajourd'hui".

In base a ciò che ho letto, aggiungendo UIDatePicker programatically non sembra aiutare molto.

risposta

10

Dopo un'ulteriore analisi, questo non viene in realtà gestito dall'impostazione della lingua dell'iPhone. localizzato automaticamente in base all'impostazione "Formato regione" e non alla lingua. Questo è strano perché le date sono localizzate, quindi penseresti che la localizzazione del selettore sarebbe collegata alla lingua di iDevice e non al Formato della regione.

In ogni caso, per simulare la DatePicker localizzato nel simulatore:

  1. Exit vostra applicazione, vai a Impostazioni.
  2. Selezionare Generale
  3. Selezionare internazionale
  4. Selezionare l'opzione in basso, Regione Format.
  5. Passare alla regione desiderata.
  6. Riavvia la tua app e guarda il nuovo UI Picker!
1

quello che mi è dato di capire è che il UIDatePicker mostra automaticamente nel locale il dispositivo è impostato come. non sono sicuro di come eseguire l'override, ma sembra che tu probabilmente non deve essere sostituito da.

+4

A volte deve solo essere sostituito. Cioè una lingua sola applicazione. –

0

Dalla mia esperienza il "Oggi" sta seguendo le impostazioni che hai nel tuo info.plist. Per alcuni motivi hanno dimenticato di adattare questo.

3

A partire da iOS 6 UIDatePicker non esamina più le impostazioni del dispositivo per le informazioni sulla locale. È necessario impostare manualmente lo NSLocale o utilizzare le impostazioni internazionali predefinite.

Vedere questa risposta: https://stackoverflow.com/a/12975871/1128896

Una soluzione semplice:

datePicker.locale = [NSLocale currentLocale]; 

Aggiornato

Mentre il locale può ora essere impostato su UIDatePicker, di default è impostato su ' Predefinito 'invece di una lingua particolare. 'Predefinito' controllerà le impostazioni locali del dispositivo e si imposterà su di esso. (vedi il commento di Dave DeLong below).Pertanto, la maggior parte dei nuovi progetti non dovrebbe essere influenzata da questo cambiamento.

Se si lavora con progetti anziani, che desiderano migrare a iOS 6, è possibile che le UIDatePickers che vengono creati in xibs hanno il loro locale default a 'inglese' o un'altra lingua al posto di 'default'. (Ho trovato che tutti i miei vecchi progetti, pre iOS6, seguivano questo comportamento). Per risolvere questo problema, è sufficiente modificare le impostazioni internazionali su "Predefinito" in IB.

+1

Le impostazioni locali predefinite * sono * le impostazioni locali del dispositivo. (cioè, '+ currentLocale') –

+0

Ottimo punto Dave. Ho visto il tuo altro commento sull'impostazione della locale in uno xib se creato lì, [1] (http://stackoverflow.com/questions/1151335/can-i-localize-a-uidatepicker/12975871#comment18351115_12975871). Ho guardato un po 'di più in esso, e sembra che qualsiasi UIDatePicker creato nelle versioni Xcode più recenti, per impostazione predefinita imposta il Locale su' Default '. Ma tutti i miei progetti più vecchi, che includevano build iOS 5 o 4, impostano le impostazioni internazionali su "inglese" per impostazione predefinita. Quindi per la maggior parte dei nuovi progetti questo non dovrebbe essere un problema, ma i vecchi progetti che si spostano solo su iOS 6 sarebbero saggi per verificare le loro impostazioni locali di xibs. – Mike

+0

sì, è corretto. :) –