2012-05-31 11 views
7

È possibile ottenere una stringa localizzata da un file localized.strings specifico, piuttosto che dal file localized.strings scelto dal sistema, SOLTANTO UNA VOLTA. Non ho bisogno di cambiare tutti i testi localizzati, solo alcuni di essi.Iphone sdk - Trova il testo localizzato da un file localized.strings specifico

Quello che voglio fare è avere stringhe localizzate definite dalle preferenze di lingua ma anche localizzazione. In modo che un utente dal Brasile con l'inglese lang otterrà l'applicazione in inglese, ma alcuni testi saranno specifici per la regione, quindi li voglio in portoghese.

Ma un utente dall'Argentina, anche con iPhone in inglese otterrà l'applicazione in inglese ma alcuni testi saranno in spagnolo.

Qualcosa di simile

NSLocalizedStringFromTable("string.key","pt_BR",nil) 

ho pensato che l'invio che al tavolo parametro avrebbe funzionato ma non ha come sembra per il nome del file e non per la lingua.

risposta

3

Forse si desidera utilizzare NSBundle localizedStringForKey:value:table: anziché NSLocalizedString(). Questo metodo ti darà l'opportunità di specificare una tabella diversa.

[[NSBundle mainBundle] localizedStringForKey:@"stringKey" 
    value:defaultString table:tableName]; 

A proposito, non dimenticate il vostro @ davanti stringhe Objective-C ;-).

+0

Sì, lo ha fatto sì che, ma il parametro Tabella è un nome di file .strings, quindi ho bisogno di avere due file aggiuntivi pt.strings e es.strings, piuttosto che usare il file Localizable.strings desiderato e. Non è un problema da implementare ma non risponde alla mia domanda però. – htafoya

1
+1

Sì, intendevo farlo, ma il parametro Table è un nome file .strings, quindi ho bisogno di avere due file aggiuntivi pt.strings e es.strings, piuttosto che usare il file Localizable.strings desiderato. – htafoya

+0

La tua domanda non era poi così chiara perché sembrava chiedere come ottenerla da un altro file. "È possibile ottenere una stringa localizzata da un file specifico, piuttosto che dal file localized.strings predefinito." – Dad

4

È possibile utilizzare il diverso fascio di scegliere la lingua specifica:

NSString * path = [[NSBundle mainBundle] pathForResource:@"pt-PT" ofType:@"lproj"]; 
NSBundle * bundle = nil; 
if(path == nil){ 
    bundle = [NSBundle mainBundle]; 
}else{ 
    bundle = [NSBundle bundleWithPath:path]; 
} 
NSString * str = [bundle localizedStringForKey:@"a string" value:@"comment" table:nil]; 

Swift 3.0:

extension Bundle { 
    static let base: Bundle = { 
     if let path = Bundle.main.path(forResource: "Base", ofType: "lproj") { 
      if let baseBundle = Bundle(path: path) { 
       return baseBundle 
      } 
     } 
     return Bundle.main 
    }() 
} 

let localizedStr = Bundle.base.localizedString(forKey: key, value: nil, table: table) 
+1

Questo è geniale - non so perché non ha più upvotes. Molto più facile di tutti gli altri metodi suggeriti. Lo sto usando per ottenere la versione di una stringa nel linguaggio di sviluppo, quindi uso '[[NSBundle mainBundle] pathForResource: @" Base "ofType: @" lproj "];' – deltacrux

+0

Questa è la risposta migliore, ho provato e funziona! Aggiunta la versione Swift 3.0. – kelin