2017-01-12 93 views
11

Mam aplikację z 2 celami. Zasoby ciągów w aplikacji są rozrzucone po całym kodzie i pliku scenorysu. Teraz potrzebuję całkowicie odrębnego zestawu ciągów dla obu celów (chociaż w języku angielskim dla obu celów). Udało mi się utworzyć 2 różne wersje wersji Localized.strings na ciąg następujący po tym łączu - Alternative strings for different targets of same App - use NSLocalizedString?Dostosuj Mainstoryboard.strings na cel

Ale nie mogłem znaleźć żadnego podobnego podejścia do segregowania pliku Mainstoryboard.strings na cel. Czy powinienem wykonać 2 kopie pliku MAinstoryboard.strings i przypisać dla każdego celu. Nie próbowałem tego, ale coś mi mówi, że to może nie być najlepsze podejście.

Zaskakująco nic na ten temat w samouczkach firmy Apple. Jakieś sugestie ?

+0

Zgaduję, że musisz ustawić wszystkie ciągi według kodu. Zaimplementuj metodę, która pobiera odpowiedni ciąg w zależności od celu, uzyskując dostęp do właściwej ścieżki pakowania. – hasan83

+0

Robię to już dla ciągów, które są w kodzie. Ale mam wiele ciągów w storybooku, a przeniesienie ich na kod nie jest opcją (wielka przeróbka). – Dibzmania

+0

Co powiesz na dodanie fałszywego języka lokalizacji i zlokalizowanie swojego scenariusza zamiast z hali innego storyboardu. możesz sprawdzić preferowany język urządzenia na początku aplikacji i odpowiednio zresetować język aplikacji (tylko na jednym z celów). – hasan83

Odpowiedz

3

Kod urywek za dodanie fałszywego języka, który mógłby być rozwiązaniem:

language = Bundle.main.preferredLocalizations[0] 

if target == SOME_TARGET { 

    if language == "en" { 
     language = "fr" // fake language  
    } else if language == "ar" { 
     language = "rs" // another fake language 
    } else { 
     // default app language 
     language = "whatever" // default fake language 
    } 

    UserDefaults.standard.set([language], forKey: "AppleLanguages") 
    UserDefaults.standard.synchronize() 
} else { 
    // do nothing 
} 

Innym proponowanym rozwiązaniem. Ma mieć dwa pliki lokalizacyjne dla każdego języka. i zamień je ręcznie przy użyciu wyszukiwarki OS X, gdy przełączasz się między celami. Ale myślę, że to nie pomoże w napisach na samym scenorysie.

+0

Nie zdążyłem znaleźć czasu na zapoznanie się z pierwszym zaproponowanym rozwiązaniem. Drugie rozwiązanie nie będzie działać, ponieważ mam konfigurację CI, która generuje paczki aplikacji dla różnych celów i nie ma ręcznej interwencji – Dibzmania

1

Zrobiłem Github project dla problemów z lokalizacją.

Korzystając z moich komponentów iOS, będziesz mógł umieścić localizedString bezpośrednio w pliku Storyboard.

Xcode Example