2012-12-21 2 views
6

Sto riscontrando qualche problema durante il debug della mia implementazione NSLocalizedString. Dovrebbe essere semplice, ma qualunque cosa faccia, la funzione restituisce solo la stringa KEY.iOS - NSLocalizedString restituisce solo la stringa di chiavi

sto utilizzando XCode 4.5 e iOS6, così ho:

  1. Aggiunto un nuovo file chiamato File.strings.
  2. Nelle impostazioni del mio progetto ho aggiunto inglese e spagnolo come impostazioni della lingua.
  3. Facendo clic su "Rendi localizzato" nell'ispettore file, assicurandosi che fossero selezionate sia le opzioni in inglese che in spagnolo e anche che l'appartenenza di destinazione alla mia destinazione fosse selezionata.
  4. Aggiunto "KEY" = "TestEnglish"; per il mio inglese File.strings
  5. Aggiunto "KEY" = "TestSpanish"; al mio spagnolo File.strings
  6. Aggiunto NSLog(@"Localization: %@\n", NSLocalizedString(@"KEY", nil)); al mio file .m.

Quando si esegue l'applicazione, il valore "KEY" viene sempre visualizzato stampato nello NSLog.

Per saltare in questo un po 'di più, ho provato anche questo:

NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
NSString *str = [[NSBundle bundleWithPath:path] localizedStringForKey:@"KEY" value:@"" table:nil]; 
NSLog(@"Localization: %@\n", str); 

e ancora il valore "KEY "viene stampato, tuttavia, path è un percorso valido

Qualcuno ha qualche. indovina come eseguire il debug di questo? Mi sento come se avessi letto ogni domanda/risposta SO là fuori, ma nessuno dei suggerimenti aiuta.

Mi rendo conto che NSLocalizedString restituisce la stringa KEY quando non può corrispondere ak ey, ma non vedo come posso eseguire il debug perché la mia app potrebbe non corrispondere alla KEY.

Ho anche cancellato/ripulito l'app circa una dozzina di volte.

+0

Non si dovrebbe trovare 'table: nil' be' table: @ "File" '? –

+0

@ H2CO3: Wow, sì, grazie. Che afferra la versione inglese, e sono molto contento che funzioni.Ma alla fine, ho bisogno che NSLocalizedString funzioni così che possa usare la praticità di quel metodo. Devo rinominare "File.strings" in qualcos'altro per far funzionare NSLocalizedString forse ??? – Brett

+0

inserirai tutte le localizzazioni a cui prevedi di accedere in "XXX.lproj/Localized.strings". Inoltre, perché ** devi ** usare 'NSLocalizedString()'? –

risposta

10

Se si specifica table:nil, quindi NSBundle tenterà di recuperare la localizzazione dalla tabella predefinita (quella in SOMELANG.lproj/Localizable.strings). Se avete la localizzazione altrove, è necessario specificare in modo esplicito la tabella utilizzando table:@"File" (o utilizzare la macro NSLocalizedStringFromTable() in un modo simile:

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil); 
+0

Perfetto! Grazie! – Brett

0

Rinominare il file InfoPlist.strings a Localizable.strings (doppio clic) e poi si . otterrà la stringa corretta per quella chiave

1

Nel mio caso il problema era con il caso della stringa: "bla.bla.blabla.Book S molto" mentre i Localizable.strings l'avevo definito come " bla.bla.blabla.Book s lotto "

Quindi, controllare che la stringa di chiavi sia nel caso corretto. Meglio ancora, copia-incolla.

+0

Sono identici ... – Warpzit

+0

@ Warpzit, nel suo caso - forse. Sto solo sottolineando che i tasti fanno distinzione tra maiuscole e minuscole. – user3099609

+0

Stai dicendo che ho avuto il problema con X = X ... Questo non è un problema, ora se hai detto nel mio caso X! = Y. Questo avrebbe senso ... – Warpzit