2012-12-21 16 views
6

Mam problemy z debugowaniem mojej implementacji NSLocalizedString. Powinny być proste, ale cokolwiek robię, funkcja zwraca tylko ciąg znaków KEY.iOS - NSLocalizedString zwraca tylko ciąg klucza

Używam XCode 4.5 i iOS6, więc:

  1. dodał nowy plik o nazwie File.strings.
  2. W ustawieniach projektu dodałem angielski i hiszpański jako ustawienia językowe.
  3. Kliknięto przycisk "Zrobiono zlokalizowane" w inspektorze plików i upewniono się, że wybrano opcje w języku angielskim i hiszpańskim, a także wybrano docelowe miejsce docelowe dla mojego celu.
  4. Dodano "KEY" = "TestEnglish"; do mojego angielskiego File.strings
  5. Dodane "KEY" = "TestSpanish"; do mojego hiszpańskiego File.strings
  6. Dodane NSLog(@"Localization: %@\n", NSLocalizedString(@"KEY", nil)); do mojego pliku .m.

Po uruchomieniu aplikacji wartość "KEY" jest zawsze wyświetlana jako wydrukowana w postaci NSLog.

wskoczyć do tego nieco więcej, próbowałem to także:

NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
NSString *str = [[NSBundle bundleWithPath:path] localizedStringForKey:@"KEY" value:@"" table:nil]; 
NSLog(@"Localization: %@\n", str); 

i nadal wartość "KEY "jest drukowany, a jednak path jest prawidłową ścieżką

Czy ktoś ma żadnego. trop jak do debugowania to? czuję się jak czytałem każde więc pytanie/odpowiedź tam, ale żadna z propozycji pomocy.

Zdaję sobie sprawę, że NSLocalizedString zwraca łańcuch KEY gdy nie może się równać ak ale nie rozumiem, jak mogę debugować, dlaczego moja aplikacja może nie pasować do KEY.

Usunąłem/wyczyściłem aplikację kilkanaście razy.

+0

Nie powinien "tabela: zero" być "tabela: @" Plik "zamiast tego? –

+0

@ H2CO3: Wow, tak, dziękuję. To chwyta angielską wersję i jestem bardzo zadowolony, że działa.Ale ostatecznie potrzebuję NSLocalizedString do pracy, aby móc korzystać z wygody tej metody. Czy muszę zmienić nazwę pliku "File.strings" na coś innego, aby NSLocalizedString działał? – Brett

+0

umieścisz wszystkie lokalizacje, które spodziewasz się mieć, w "XXX.lproj/Localized.strings". Ponadto, dlaczego ** musisz ** używać 'NSLocalizedString()'? –

Odpowiedz

10

Jeśli podasz table:nil, wtedy NSBundle spróbuje pobrać lokalizację z domyślnej tabeli (ta w SOMELANG.lproj/Localizable.strings). Jeśli masz lokalizację gdzie indziej, należy wyraźnie określić tabelę korzystając table:@"File" (lub użyj NSLocalizedStringFromTable() makro w podobny sposób:

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil); 
+0

Idealne! Dzięki! – Brett

0

zmienić nazwę pliku InfoPlist.strings do Localizable.strings (double clic) a następnie . dostanie prawidłowy ciąg dla tego klucza

1

w moim przypadku problem był z przypadku napisu: „bla.bla.blabla.Book S partia” natomiast Localizable.strings miał go określić jako " bla.bla.blabla.Book s lot "

Sprawdź więc, czy klucz jest we właściwym miejscu. Jeszcze lepiej, kopiuj i wklej.

+0

Są identyczne ... – Warpzit

+0

@Warpzit, w jego przypadku - być może. Po prostu wskazuję, że klawisze są wrażliwe na wielkość liter. – user3099609

+0

Mówisz, że miałem problem z X = X ... To nie jest problem, teraz jeśli powiedziałeś w moim przypadku X! = Y. To by miało sens ... – Warpzit

Powiązane problemy