2013-02-25 10 views
12

(Są podobne pytania, niektóre zaowocowały odpowiedziami, które próbowałem i okazały się nieskuteczne, inne nie otrzymały odpowiedzi, zakładam, że kwarki nie podaj tyle detali co ja.)Storyboard + lokalizacja bazy + plik .strings nie jest lokalizowany w czasie wykonywania

Zacząłem od storyboardu, który sprawdził się w mojej aplikacji; ciągi, które zawiera, są w języku angielskim. Chciałem dodać francuską lokalizację. Zrobiłem to:

  • dodał lokalizacja bazowa, która przenoszona MainStoryboard.storyboard od en.lproj do Base.lproj.
  • Dodano francuską lokalizację, która została sklonowana InfoPlist.strings (angielska) i MainStoryboard.storyboard (baza) do fr.lproj.
  • Zmieniono kilka ciągów (tytuły segmentów w UISegmentedControl) we francuskim MainStoryboard.storyboard.
  • W symulatorze ustaw język na francuski.
  • Uruchomiono aplikację z Xcode.

Wynik: To zadziałało; moje zmienione ciągi pojawiły się w uruchomionej aplikacji.

Ale chcę być wyjątkowa. Chcę zrobić francuską lokalizację przy użyciu pliku .strings. (To nie jest tylko kwestia bycia fantazyjne, Francuzi lokalizacja zostanie przekazany nietechnicznych tłumaczy, którzy nie mogą się spodziewać do opanowania interfejsu Builder.) Więc:

  • Wybrane bazy MainStoryboard.storyboard w Xcode projektu nawigator.
  • W Inspektorze plików w obszarze Lokalizacja zmieniono francuską lokalizację z "Kreatora interfejsu dotykowego Cocoa Touch Storyboard" na "Ścieżki do zlokalizowania".
  • Zaakceptowano ostrzeżenie Xcode, że francuski scenorys zostanie odrzucony na rzecz pliku .strings, który pojawi się w edytorze asystenta.
  • Wykonano te same dwie zmiany; nie ma wątpliwości, że są to nieprawidłowe ciągi znaków, ponieważ wszystkie są skomentowane jako IBUISegmentedControl...segmentTitles; a tekst etykiety nie pojawia się nigdzie indziej w pliku .strings.
  • Usunięto istniejącą (działającą) kopię aplikacji z symulatora.
  • Uruchom aplikację.

Wynik: Widok wykorzystuje bazę (oryginalnie w języku angielskim) lokalizację, zamiast ładowania francuskich sznurki.

To nie jest zadowalające. Próbowałem usunąć aplikację z symulatora, a nawet usunąć folder danych pochodnych. Błąd nadal występuje.

Jak już powiedziałem, nie mogę zmienić pliku .storyboard na nietechnicznego tłumacza. Jak mogę sprawić, by iOS akceptował lokalizacje scenorysów z pliku .strings?

+0

Konwersja storyboard do Auto Układ miał bez efektu. – user698970

+0

Odpowiedź na inne podobne pytanie sugerowała uruchomienie ibtool na podstawowym scenorysie i użycie go jako startera dla pliku .strings zamiast jednego dostarczonego kreatora interfejsu. Te dwa pliki są identyczne. – user698970

+0

Oto kolejna zmienna: scenorys ma wiele nieosiągalnych scen: nie są one początkowymi kontrolerami i nie mają żadnych sekwencji prowadzących do nich. (Nie robię tego, będę musiał porozmawiać z programistą, który myślał, że to dobry pomysł.) Czy to może kolidować z lokalizacją .strings? – user698970

Odpowiedz

6

Miałem ten sam problem z moimi UISegmentedControl s. Okazuje się, że w iOS 6 występuje błąd: lokalizacja storyboardu .strings nie zadziała na tekstach UISegmentedControl i na elementach zastępczych UISearchBar. Zobacz ten openradar: http://openradar.appspot.com/radar?id=2159402

próbowałeś lokalizowania innych elementów, takich jak UILabel s? To powinno działać.

+0

Miałem ten sam problem, ponieważ tylko UISearchBar nie był zlokalizowany, a wszystkie inne rzeczy działały. Rozwiązanie opisane przez Susan Sabaria poniżej jest dobrym obejściem tego błędu, który łatwo można również rozszerzyć na tytuły zakresu. – ecotax

8

Oto jak rozwiązać go:

w viewDidLoad:

[self.segmentedControl setTitle:NSLocalizedString(@"Title", @"Your localize comment") forSegmentAtIndex:0]; 

Można zrobić to samo dla zastępczy frazy:

[self.searchBar setPlaceholder:NSLocalizedString(@"Your string placeholder", @"Your comment for localizers")]; 

Następnie wystarczy utworzyć plik Localizable.strings i to zadziała.

0

Dla osób rozwijających dla iOS 7 lub nowszy i poszukujących formacie .strings dla paska wyszukiwania, to w jaki sposób należy tłumaczyć pole placeholder na przykład:

/* Class = "UISearchBar"; normalTitle = "Search for Places"; ObjectID = "F3d-Ir-fni"; */ 
"F3d-Ir-fni.placeholder" = "Nach Orten suchen"; 
Powiązane problemy