Wszystkie zlokalizowane zasoby ciągów (plus wiele innych rodzajów zasobów) są pobierane z pakietu. Zwykle aplikacja używa "głównego pakietu", który jest tworzony przez XCode razem z Twoją aplikacją. Możesz jednak utworzyć osobno każdy inny pakiet, pod warunkiem, że utworzysz go z właściwą strukturą, możesz go pobrać w swojej aplikacji i ostatecznie wyodrębnić zlokalizowany łańcuch za pomocą funkcji NSLocalizedStringFromTableInBundle().
Więc powiedzmy, że można wyodrębnić za kluczowy „klucz” do tłumaczy, to normalne składnia byłoby:
NSString *translated = NSLocalizedStringFromTable(@"key",nil,nil);
ale nie jest wariantem tej opcji, która pozwala określić wiązkę:
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
w standardowym przypadku wymiany myBundle
z [NSBundle mainBundle]
ale jeśli chcesz użyć innego wiązkę można określić to w ten sposób:
NSString *myBundlePath = "the path to the downloaded bundle";
NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath];
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
Pełna struktura pakietu można zobaczyć w „Bundle instrukcji programowania” w docs Apple, ale w twoim przypadku można po prostu stworzyć w ten sposób:
- w Mac utworzyć katalog, i nazwij go "MyBundle"
- wewnątrz tego katalogu przenieś swoje zlokalizowane łańcuchy (jeśli masz wiele języków w pakiecie, plik localizable.strings będzie wewnątrz katalogów lproj: en.lproj, it.lproj, fr .lproj, ...)
- następnie zmień nazwę katalogu na "MyBundle.bundle"
Po ostatniej operacji zauważysz, że teraz ten obiekt jest postrzegany jako samodzielny obiekt, ale w rzeczywistości jest katalogiem.
Teraz możesz zdecydować się na podejście z wieloma pakietami lub zastosować technikę z pojedynczym pakietem: w tym ostatnim przypadku możesz spakować wszystkie języki, a następnie użyć unikalnego zaktualizowanego pakietu do tłumaczenia językowego, korzystając z automatycznych reguł lokalizacji systemu ; w drugim przypadku możesz utworzyć pakiet dla każdego języka, a następnie - w oparciu o aktualnie wybrany język - załadować odpowiedni pakiet i wybrać go dla swoich tłumaczeń.
To samo pytanie, co http://stackoverflow.com/questions/12358379/is-it-possible-to-access-the-app-bundles-en-lproj? –
Pytanie wydaje się być allready odpowiedział [tutaj] (http://stackoverflow.com/a/6075533/1651167) – Shelm
Jest simular, ale ludzie odpowiadają na różne pytania w zależności od tego, jak są one zadawane. Ta oczywiście ma lepszą odpowiedź poniżej. – mskw