Jak zlokalizować ciąg w pliku info.plist na iOS?

258

Jak zapewne wiesz, iOS 8 wymaga klucza NSLocationWhenInUseUsageDescription do korzystania z lokalizacji użytkownika. Dodałem ten klucz i kilka ogólnych informacji do mojej listy informacji. wprowadź opis zdjęcia tutaj

Jak mogę użyć łańcucha tłumaczenia w pliku plist?

-- Aktualizacja --

Mam już ciąg lokalizowalny. Zastanawiam się tylko, czy mogę użyć czegoś takiego jak NSLocalizedString (MYSTRING, zero) w łańcuchu plist. Wiem, że mogę utworzyć wiele plików info.plist do lokalizacji, ale zastanawiałem się, czy może być łatwiejszy sposób.

Soheil
źródło
Czy zdarzyło ci się to kiedyś wypracować, staram się również zlokalizować NSLocationWhenInUseUsageDescription?
Oliver Pearmain

Odpowiedzi:

489

Należy użyć InfoPlist.stringspliku do zlokalizowania wartości Info.plist. Aby to zrobić, przejdź do File->New->File, wybierz Strings Filew Resourcezakładce iOS, nazwij go InfoPlisti utwórz. Otwórz i wstaw Info.plistwartości, które chcesz zlokalizować, takie jak:

NSLocationWhenInUseUsageDescription = "Description of this";

Teraz możesz zlokalizować InfoPlist.stringsplik z tłumaczeniem. Powodzenia!

EDYTOWAĆ:

wybierz opcje lokalizacji lub włącz lokalizację, jeśli to konieczne,

edytor po prawej stronie

powinieneś zobaczyć plik również w edytorze po lewej stronie.

edytor po lewej stronie

EDYTOWAĆ:

Oto oficjalna dokumentacja Info.plistlokalizacji kluczy.

Podziękowania dla Marco , dziękuję za uwzględnienie zdjęć w tej odpowiedzi!

Fahri Azimov
źródło
15
Czy po utworzeniu pliku ciągów należy również dołączyć klucz do pliku Info.plist, czy można go bezpiecznie usunąć?
rounak
11
Wskazówka: użyj dokładnie nazwy „InfoPlist.strings” i nic więcej. Na przykład mój oryginalny plik infoplist został nazwany czymś innym, ale musiałem użyć tej nazwy dokładnie, aby ją uruchomić.
Sjoerd Perfors
22
Podczas testowania lokalizacji na symulatorze. Musiałem zmienić język samego symulatora, a nie tylko język docelowy xcode. Tylko ostrzeżenie dla każdego innego.
John Webb,
10
poprawne użycie to keyname = "twój tekst"; np .: NSLocationWhenInUseUsageDescription = "twój tekst"
Magurizio
10
Uwaga: klucz w tym pliku nie powinien mieć znaku cudzysłowu, co jest inne w przypadku normalnej lokalizacji. np .: NSMicrophoneUsageDescription = "twój opis";
Yuchao Zhou,
33

Wszystkie powyższe nie działały dla mnie (XCode 7.3), więc przeczytałem referencje Apple o tym, jak to zrobić, i jest to o wiele prostsze niż opisano powyżej. Według Apple:

Zlokalizowane wartości nie są przechowywane w samym pliku Info.plist. Zamiast tego przechowujesz wartości dla konkretnej lokalizacji w pliku ciągów o nazwie InfoPlist.strings. Umieszczasz ten plik w tym samym katalogu projektu specyficznym dla języka, którego używasz do przechowywania innych zasobów dla tej samej lokalizacji.

W związku z tym utworzyłem plik ciągu o nazwie InfoPlist.strings i umieściłem go w folderze xx.lproj w języku „xx” (i dodałem go do projektu przy użyciu Plik-> Dodaj pliki do ...). Otóż ​​to. Nie ma potrzeby używania klucza „Lokalizowane zasoby mogą być mieszane” = TAK i nie ma potrzeby używania InfoPlist.strings w base.lproj lub en.lproj.

Aplikacja używa wartości klucza Info.plist jako wartości domyślnej, jeśli nie może znaleźć klucza w pliku specyficznym dla języka. Dlatego umieściłem moją angielską wartość w pliku Info.plist, a przetłumaczony w pliku specyficznym dla języka, przetestowałem i wszystko działa.

W szczególności nie ma potrzeby lokalizowania pliku InfoPlist.strings (który tworzy wersję pliku w base.lproj, en.lroj i xx.lproj), aw moim przypadku przejście w ten sposób nie zadziałało.

Zvi
źródło
2
Dlaczego nie podałem linku do odpowiedniego dokumentu?
Jurasic
3
Tutaj link do odpowiedniej strony firmy Apple doc w przypadku gdy ktoś jest zainteresowany: developer.apple.com/library/archive/documentation/General/...
zakręt
i jak zdecydujemy, że xx? na przykład dla angielskiego może to być en, en, eng, angielski itp.? Przepraszam, jeśli to głupie pytanie, ponieważ jestem początkujący
Awais Nasir
Twoja odpowiedź zadziałała dla mnie, z wyjątkiem scenariusza języka rezerwowego, aplikacja staje się językiem rezerwowym zawsze wcześniej używanym językiem, a nie angielskim, moja angielska wartość jest jednak obecna w pliku Info.plist, próbowałem również base.lproj
Awais Nasir
19

Jeśli coś nie działa, upewnij się, że dodałeś:

„Zlokalizowane zasoby można mieszać” = TAK

do info.plist. W moim przypadku pliki InfoPlist.strings zostały po prostu zignorowane.

tuvok
źródło
15

Porady

  1. Pamiętaj, że iOS Simulator domyślnie wykorzystuje język systemu. Zmień język (i region) również w ustawieniach symulatora systemu iOS, aby przetestować swoje tłumaczenia.

  2. Ciąg lokalizacji (patrz tutaj dokumenty Apple ) powinien być

    NSLocationWhenInUseUsageDescription = "Description of this";

    i nie (z cytatem „...”)

    "NSLocationWhenInUseUsageDescription" = "Description of this";
Giuseppe Beccari
źródło
Wartościowe uzupełnienia, ale myślę, że powinien to być komentarz pod odpowiednią odpowiedzią, a nie nowa odpowiedź. Zauważ też, że „363” nie jest identyfikatorem postu, ale liczbą głosów, jaką ma odpowiedź (liczba się zmieniła).
John J. Camilleri,
7
Nie mam 50 reputacji, aby dodać tam komentarz.
Giuseppe Beccari,
Nie ma znaczenia, czy użyjesz cudzysłowu „...” wokół klawisza, np .: ( "NSLocationWhenInUseUsageDescription"="description"jest poprawny). Może być z lub bez.
mluisbrown
12

Gorąco polecam przeczytanie przewodników Apple i przejrzenie wymienionych tutaj zasobów WWDC: tematy internacjonalizacji i lokalizacji

Aby dokładnie odpowiedzieć na twoje pytanie, kiedy dodajesz nowy język do swojego projektu wprowadź opis zdjęcia tutaj, masz możliwość wyboru, które pliki InfoPlist mają zostać uwzględnione (jeśli masz wiele obiektów docelowych, będziesz mieć wiele plików Info plist). Wszystko, co musisz zrobić, aby wyświetlić poniższy ekran, to nacisnąć + w obszarze Lokalizacje i wybrać nowy język, aby dodać obsługę. wprowadź opis zdjęcia tutaj

Po dodaniu utworzy niezbędne pliki ciągów w odpowiednich katalogach lproj dla danego języka.

--EDYTOWAĆ--

Dla jasności iOS zamieni ciąg pliku Plist na podstawie aktualnie wybranego języka użytkownika, używając klucza wpisu plist jako klucza w zlokalizowanym pliku ciągów.

Matt S.
źródło
3
Tłumaczenie całego listy dla jednego klucza to przesada. Znajdź więcej informacji tutaj: bit.ly/1yBUTru
RGML
2
Po prostu nie jest to prawdą w przypadku XCode 9. Nigdy nie prosi o lokalizację plist podczas dodawania nowego języka.
Tom
Będę musiał to sprawdzić w Xcode 9 - nie miałem jeszcze okazji przetestować w nowym Xcode.
Matt S.,
11

Krok po kroku zlokalizuj Info.plist:

  1. Znajdź w Xcode folder Zasoby (jest umieszczony w katalogu głównym)
  2. Wybierz folder Zasoby
  3. Następnie naciśnij menu główne Plik-> Nowy-> Plik ...
  4. Wybierz w sekcji Plik ciągów „Zasób” i naciśnij Dalej
  5. Następnie w Save Aspolu napisz TYLKO InfoPlist (kapitał „I” i kapitał „P”)
  6. Następnie naciśnij Utwórz
  7. Następnie wybierz plik InfoPlist.strings utworzony w folderze Zasoby i naciśnij w prawym menu przycisk „Lokalizuj”
  8. Następnie wybierz Projekt z Nawigatora projektu i wybierz Projekt z listy projektów
  9. W zakładce informacyjnej na dole możesz wybrać tyle, ile chcesz języka (w dziale Lokalizacje)
  10. Język widoczny w folderze zasobów
  11. Aby zlokalizować wartości („klucz”) z pliku info.plist, możesz otworzyć w edytorze tekstu i uzyskać wszystkie klucze, które chcesz zlokalizować
  12. Pisz dowolny klucz jako przykład w dowolnym pliku InfoPlist.strings, takim jak powyższy przykład

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

To wszystko działa i zlokalizowałeś swój plik info.plist!

Costas Bakoulias
źródło
4

Dla każdego, kto ma problem z nieuwzględnieniem info.plist podczas próby dodania lokalizacji, jak w Xcode 9.

Musisz ustawić lokalizację info.plist, wchodząc w nią i klikając przycisk lokalizowania w inspektorze plików, jak pokazano poniżej.

Info.plist zostanie wówczas dołączony do zasobów pliku, gdy przejdziesz do dodawania nowych lokalizacji.

wprowadź opis zdjęcia tutaj

Edward
źródło
3
Czy napotkałeś jakieś problemy? Nie mogę zbudować projekt kiedy dodać dwa języki do Localization od Xcode mówi „Plik Info.plist nie można otworzyć, bo nie ma takiego pliku.
mkkrolik
2
@mkkrolik Mam teraz ten sam problem. Znalazłeś rozwiązanie?
Todanley
@Todanley pomiń to rozwiązanie, nie działa dla mnie. Zamiast tego użyj pliku InfoPlist.strings.
mkkrolik
@mkkrolik Dziękuję, że działa. A także podczas testowania za pomocą symulatora musiałem zmienić ustawienie języka symulatora, a nie mojego celu, aby działało.
Todanley,
3

Jak mówi RGML, możesz utworzyć InfoPlist.strings, zlokalizować go, a następnie dodać swój klucz i wartość w następujący sposób: "NSLocationWhenInUseUsageDescription" = "Pomoc, aby mnie zlokalizować!";

Dodaje klucz do twojej info.plist dla określonego języka.

Czapka
źródło
0

W moim przypadku wszystko zostało poprawnie skonfigurowane, ale nadal nie znaleziono pliku InfoPlist.strings.

Jedyną rzeczą, która naprawdę działała, było ponowne usunięcie i dodanie plików InfoPlist.strings do projektu.

d.ennis
źródło
0

W moim przypadku lokalizacja nie działała z powodu symbolu „-” w nazwie. Przykład: „aero-Info.plist” I zlokalizowane pliki: „aero-InfoPlist.strings” i „aeroInfoPlist.strings” nie działały.

Mike Glukhov
źródło
0

Podczas używania InfoPlist.stringspliku (w XCode należy go umieścić obok Info.plistpliku - prawdopodobnie rzeczywista lokalizacja pliku może znajdować się w dowolnym miejscu projektu)

Zobacz w XCode

), używaj krótkiej nazwy klucza do tłumaczenia.

Próbowałem użyć Privacy - Camera Usage Description, ale działa kluczNSCameraUsageDescription

Klepsydra
źródło