8

Buduję aplikację na iOS, która będzie dostępna w języku angielskim i francuskim. Czytałem kilka tutoriali dotyczących internacjonalizacji i rozumiem, jak to działa i co muszę zrobić.iOS Uzyskaj zlokalizowaną wersję ciągu znaków dla określonego języka

Problem, który mam, to konkretny przypadek, w którym chcę załadować ciągi francuskie dla użytkownika angielskiego.

Rozumiem, że możliwe jest ustawienie języka dla całej aplikacji, ale wymaga to ponownego uruchomienia aplikacji, zanim zacznie obowiązywać. Chciałbym tego uniknąć i zamiast tego móc wybrać, by ładować francuskie lub angielskie napisy na żądanie.

Czy można załadować łańcuchy z pliku .strings dla konkretnego języka programowo?

+0

Powiązane: [link] (http://stackoverflow.com/q/13816451/335858). – dasblinkenlight

+0

@dasblinkenlight Wygląda na to, że to dobre rozwiązanie, dzięki. – raydowe

Odpowiedz

6

Tak, jest to możliwe, ale nie jest to łatwe do zrealizowania.

Po prostu mam przypadek, w którym powinienem wysłać jedno i to samo imię (dla wszystkich języków) ViewController dla GAI (Google Analytics dla iOS).

Warunki:

1) Używam rozszerzenie NSBundle stąd https://stackoverflow.com/a/20257557/3883492 - być może jest to dobry pomysł, aby szukać tam pierwszy. (To jest dość geniuszem, aby być uczciwym)

2) Używam Swift 2

Oto dość prosty przykładowy kod do zilustrowania mój pomysł:

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 "" 
} 

Również trzeba mieć „fr. lproj "folder z zlokalizowanym łańcuchem w twoim projekcie.