8

Sto costruendo un'applicazione per iOS che sarà disponibile in entrambe le lingue inglese e francese. Ho letto alcuni tutorial sull'internazionalizzazione e ho capito come funziona e cosa devo fare.iOS Ottieni la versione localizzata di una stringa per una lingua specifica

Il problema che sto avendo è un caso specifico in cui voglio caricare le stringhe francesi per un utente inglese.

Capisco che è possibile impostare la lingua per l'intera applicazione, ma che richiede il riavvio dell'applicazione prima che abbia effetto. Mi piacerebbe evitare questo, e invece essere in grado di scegliere di caricare stringhe francesi o inglesi su richiesta.

È possibile caricare le stringhe da un file .strings per una lingua specifica a livello di programmazione?

+0

Correlati: [collegamento] (http://stackoverflow.com/q/13816451/335858). – dasblinkenlight

+0

@dasblinkenlight Sembra una buona soluzione, grazie. – raydowe

risposta

6

Sì, è possibile, ma non è così facile da realizzare.

Ho solo il caso, dove dovrei inviare uno e lo stesso nome (per tutte le lingue) di un ViewController per GAI (Google Analytics per iOS).

Presupposti:

1) Io uso l'estensione NSBundle da qui https://stackoverflow.com/a/20257557/3883492 - forse è una buona idea di guardare in alto per primi. (E 'abbastanza genio per essere onesti)

2) Sto usando rapida 2

Ecco un esempio di codice piuttosto semplice per illustrare la mia idea:

func getFrenchString(forKey key: String) -> String { 
    if let currentLanguage = (NSUserDefaults.standardUserDefaults().arrayForKey(AppleLanguages)?.first as? String) { 
     if currentLanguage == "fr" { 
      return NSLocalizedString(key, comment: "") 
     } 
     else { 
      //the application is not currently on `fr` 
      //change application to `fr` 
      NSBundle.setLanguage("fr") 

      //get the localized string on `fr` 
      let frString = NSLocalizedString(key, comment: "") 

      //return the application to the old language 
      NSBundle.setLanguage(currentLanguage) 

      return frString 
     } 
    } 

    return "" 
} 

Inoltre si dovrebbe avere "fr. lproj "cartella con stringa localizzata nel tuo progetto.

Problemi correlati