2009-06-24 18 views
7

Voglio usare i tasti del mio dizionario per l'output in una tabella raggruppata. Questo deve essere localizzato con tutti i miei altri contenuti. Posso usare NSLocalizedString come chiave?Va bene usare NSLocalizedString come chiave in un dizionario?

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
    first_array, NSLocalizedString(@"First Array", @"The First Array"), 
    second_array, NSLocalizedString(@"Second Array", @"The Second Array"), nil]; 

risposta

13

È possibile, poiché è solo una stringa. Detto questo, non usare questa tecnica per i dizionari che dovrai scrivere e in seguito leggere di nuovo, perché l'utente potrebbe cambiare la sua lingua in mezzo, e quindi cercherai le chiavi sbagliate.

2

Questo appare come un dizionario statico che sta per essere creata una volta nel programma e quindi non è cambiato di nuovo. In quanto tale, non vedo alcun problema. Considero che mentre stai creando un dizionario non modificabile, questo non verrà modificato e archiviato; perché se lo è, allora il file di archivio non sarà in grado di essere scambiato tra utenti con impostazioni locali diverse, perché le chiavi saranno diverse.

Se, tuttavia, invece di creare array localizzati e il loro caricamento in un dizionario, si può solo avere un file plist localizzato che viene caricato nel dizionario. Potrebbe rendere il tuo codice più leggibile.

4

Come Peter ha sottolineato, il dizionario si preoccupa solo che la chiave è un oggetto che implementa il protocollo NSCopying. Una stringa lo soddisfa, e il suo contenuto non ha importanza per quanto riguarda la legalità.

Forse non sarà un problema in questo caso, ma ci sono molte volte in cui una parola in una lingua si mapperà a due parole diverse in una lingua diversa a seconda del contesto dell'uso della parola. È anche possibile il contrario, due parole in una lingua possono essere mappate sulla stessa parola in una lingua diversa. Questo è un problema improbabile da eseguire, ma probabilmente è meglio trattare i valori localizzati solo come valori che mostri all'utente, e usare qualche altro valore più strettamente definito come chiave.

Problemi correlati