İOS info.plist dosyası içindeki bir dizeyi nasıl yerelleştirebilirim?


260

Bildiğiniz gibi iOS 8 , kullanıcının konumunu kullanmak için NSLocationWhenInUseUsageDescription anahtarı gerektirir . Bu anahtarı ve bazı genel bilgileri bilgi plistime ekledim. resim açıklamasını buraya girin

Çeviri dizesini plist dosyasında nasıl kullanabilirim?

-- Güncelleme --

Zaten bir Yerelleştirilebilir dizem var. Ben sadece plist dize içinde NSLocalizedString (MYSTRING, nil) gibi bir şey kullanabilir miyim merak ediyorum. Yerelleştirme için birden fazla info.plist dosyası oluşturabileceğimi biliyorum ama daha kolay bir yol olabileceğini merak ediyordum.


Bunu hiç çözdünüz mü, NSLocationWhenInUseUsageDescription'ı da yerelleştirmek için mücadele ediyorum?
Oliver Pearmain

Yanıtlar:


491

InfoPlist.stringsDeğerlerini yerelleştirmek için dosya kullanmalısınız Info.plist. Bunu yapmak için adresine gidin File->New->File, sekmesi Strings Filealtında seçin , adlandırın ve oluşturun. Yerelleştirmek istediğiniz değerleri aşağıdaki gibi açın ve ekleyin :ResourceiOSInfoPlistInfo.plist

NSLocationWhenInUseUsageDescription = "Description of this";

Artık InfoPlist.stringsdosyayı çevirilerle yerelleştirebilirsiniz . İyi şanslar!

DÜZENLE:

yerelleştirme seçeneklerini seçin veya gerekirse yerelleştirmeyi etkinleştirin,

sağ taraf editör

dosyayı sol taraftaki düzenleyicide de görebilmeniz gerekir.

sol taraf editör

DÜZENLE:

İşte için resmi belgeler olduğu Info.plisttuşlar yerelleştirme.

Kredi için Marco bu yanıtında resimler de dahil olmak üzere, teşekkürler!


15
Dizeler dosyasını oluşturduktan sonra, anahtarı Info.plist dosyasına da eklemeniz mi gerekiyor yoksa oradan silmek güvenli mi?
rounak

11
İpucu: Tam olarak "InfoPlist.strings" adını kullanın ve başka bir şey kullanmayın. Örneğin, orijinal infoplist dosyama başka bir şey adı verildi, ancak çalışmasını sağlamak için bu adı tam olarak kullanmam gerekiyordu.
Sjoerd Perfors

22
Simülatördeki yerelleştirmeleri test ederken. Sadece xcode hedefindeki dili değil, simülatörün kendisinin dilini de değiştirmek zorunda kaldım. Sadece başkası için bir uyarı.
John Webb

10
doğru kullanım keyname = "metniniz" dir; örneğin: NSLocationWhenInUseUsageDescription = "metniniz"
Magurizio

10
Dikkat: Bu dosyadaki anahtar, normal yerelleştirmeden farklı olan tırnak işaretine sahip olmamalıdır. örneğin: NSMicrophoneUsageDescription = "açıklamanız";
Yuchao Zhou

33

Yukarıdakilerin hepsi benim için (XCode 7.3) işe yaramadı, bu yüzden nasıl yapılacağına dair Apple referansını okudum ve yukarıda tarif edilenden çok daha basit. Apple'a göre:

Yerelleştirilmiş değerler Info.plist dosyasının kendisinde saklanmaz. Bunun yerine, belirli bir yerelleştirme için değerleri InfoPlist.strings adıyla bir dizeler dosyasında depolarsınız. Bu dosyayı, aynı yerelleştirme için diğer kaynakları depolamak için kullandığınız dile özgü proje dizinine yerleştirirsiniz.

Buna göre, InfoPlist.strings adlı bir dize dosyası oluşturdum ve "xx" dilinin xx.lproj klasörüne yerleştirdim (ve Dosya-> Dosya Ekle ... kullanarak projeye ekledim). Bu kadar. "Yerelleştirilmiş kaynaklar karıştırılabilir" anahtarına gerek yoktur = EVET ve base.lproj veya en.lproj dosyasında InfoPlist.strings dosyasına gerek yoktur.

Uygulama, dile özgü dosyada bir anahtar bulamazsa, varsayılan değer olarak Info.plist anahtar / değer çiftini kullanır. Bu nedenle, İngilizce değerimi Info.plist dosyasına ve çevrilen dile özgü dosyaya koydum, test edildi ve her şey çalışıyor.

Özellikle, InfoPlist.strings (base.lproj, en.lroj ve xx.lproj içinde dosyanın bir sürümünü oluşturur) yerelleştirmeye gerek yoktur ve benim durumumda bu şekilde işe yaramadı.


2
Neden uygun belgenin bağlantısını eklemediniz?
Jurasic

3
Herkesin ilgilenmesi durumunda Apple doc'nin ilgili sayfasına bağlantı: developer.apple.com/library/archive/documentation/General/…
viraj

ve bu xx'e nasıl karar veriyoruz? örneğin ingilizce için en, en, eng, ingilizce vb olabilir? Üzgünüm, ben acemi olduğum için aptalca bir soru
Awais Nasir

Geri dönüş dili senaryosu dışında cevabım benim için çalıştı, uygulama her zaman daha önce kullanılan dil ve İngilizce değil yedek dili alıyor, İngilizce değerim Info.plist dosyasında olsa da, ayrıca base.lproj'u da denedim
Awais Nasir

19

Bir şey çalışmazsa eklediğinizden emin olun:

"Yerelleştirilmiş kaynaklar karıştırılabilir" = EVET

info.plist içine. Benim durumumda InfoPlist.strings dosyaları göz ardı edildi.


15

İpuçları

  1. İOS Simulator'ın varsayılan olarak sistem dilinizden yararlandığını unutmayın. Çevirilerinizi test etmek için lütfen iOS Simülatör Ayarı'ndaki dili (ve bölgeyi) de değiştirin.

  2. Yerelleştirme dizesi ( buradaki Apple dokümanlarına bakın )

    NSLocationWhenInUseUsageDescription = "Description of this";

    ve değil (alıntı "..." ile)

    "NSLocationWhenInUseUsageDescription" = "Description of this";

Değerli eklemeler, ama bunun yeni bir cevap değil, ilgili cevap altında bir yorum olması gerektiğini düşünüyorum. Ayrıca, "363" ün bir gönderi tanımlayıcısı değil, cevabın sahip olduğu oy sayısı olduğuna dikkat edin (sayı o zamandan beri değişmiştir).
John J. Camilleri

7
Orada yorum eklemek için 50 itibarım yok.
Giuseppe Beccari

Anahtarın çevresinde "..." tırnak işareti kullanmanız önemli değildir, örneğin: ( "NSLocationWhenInUseUsageDescription"="description"geçerlidir). Olsun ya da olmasın olabilir.
mluisbrown

12

Apple'ın kılavuzlarını okumanızı ve burada listelenen WWDC kaynaklarını görüntülemenizi önemle tavsiye ederim: Uluslararasılaşma ve Yerelleştirme Konuları

Sorunuza özel olarak cevap vermek için, projenize yeni bir dil eklediğinizderesim açıklamasını buraya girin , hangi InfoPlist dosyalarının ekleneceğini seçme şansınız olur (birden fazla hedefiniz varsa, birden fazla Info plist dosyanız olacaktır). Aşağıdaki ekranı elde etmek için yapmanız gereken tek şey Yerelleştirmeler altındaki + işaretine basın ve destek eklemek için yeni bir dil seçin. resim açıklamasını buraya girin

Ekledikten sonra, verilen dilde uygun lproj dizinlerinde gerekli dize dosyalarını oluşturur.

--DÜZENLE--

Açık olmak gerekirse, iOS, Plist dosyanızın dizesini, yerelleştirilmiş dizeler dosyasında anahtar olarak plist girişinin anahtarını kullanarak kullanıcının seçtiği dile göre değiştirir.


3
Tüm plist'i sadece bir anahtar için çevirmek aşırı bir işlemdir. Burada daha fazla bilgi bulabilirsiniz: bit.ly/1yBUTru
RGML

2
Sadece XCode 9 için geçerli değil. Yeni bir dil eklerken nevers plist yerelleştirme ister.
Tom

Xcode 9 için buna bakmam gerekecek - yeni Xcode'u henüz test etme şansı olmadı.
Matt S.

11

Info.plist'i adım adım yerelleştirin:

  1. Xcode'da Kaynaklar klasörünü bulun (kök dizinine yerleştirilir)
  2. Kaynaklar klasörünü seçin
  3. Ardından Dosya-> Yeni-> Dosya ... ana menüsüne basın.
  4. "Kaynak" Dizeleri Dosyası bölümünde seçin ve İleri'ye basın
  5. Daha sonra Save As alana SADECE InfoPlist ("I" sermayesi ve "P" sermayesi) yazın
  6. Ardından Oluştur'a basın
  7. Ardından, Kaynaklar klasöründe oluşturulan InfoPlist.strings dosyasını seçin ve sağdaki menüde "Yerelleştir" düğmesine basın
  8. Sonra Proje Gezgini'nden Proje seçin ve Proje listesinden Proje seçin
  9. En alttaki bilgi sekmesinde istediğiniz kadar dil yapabilirsiniz (Yerelleştirmeler bölümünde)
  10. Kaynaklar Klasöründe görebileceğiniz dil
  11. İnfo.plist dosyasındaki değerleri ("anahtar") yerelleştirmek için bir metin düzenleyicisiyle açabilir ve yerelleştirmek istediğiniz tüm anahtarları alabilirsiniz
  12. Yukarıdaki örnek gibi herhangi bir InfoPlist.strings dosyasına herhangi bir anahtarı örnek olarak yazarsınız

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

Hepsi bu kadar ve info.plist dosyanızı yerelleştirdiniz!


4

Xcode 9'daki gibi yerelleştirme eklemeye çalışırken info.plist sorununun bulunmadığı herkes için.

Aşağıda gösterildiği gibi, info.plist dosyasını içine girip dosya denetçisindeki yerelleştir düğmesine tıklayarak localiazble yapmanız gerekir.

Daha sonra yeni Yerelleştirmeler eklemeye gittiğinizde info.plist dosya kaynaklarına dahil edilir.

resim açıklamasını buraya girin


3
Herhangi bir sorunla karşılaştın mı? Xcode "böyle bir dosya olmadığından
info.plist

2
@mkkrolik Şimdi aynı sorunu yaşıyorum. Bir çözüm buldun mu?
Todanley

@Todanley bu çözümü atla benim için çalışmıyor. Bunun yerine InfoPlist.strings kullanın.
mkkrolik

@mkkrolik Çalıştığınız için teşekkür ederiz. Ayrıca simülatörle test yaparken, çalışabilmesi için simülatörün dil ayarını hedefim yerine değiştirmek zorunda kaldım.
Todanley

3

RGML'nin dediği gibi, bir InfoPlist.strings oluşturabilir, yerelleştirebilir, ardından anahtarınızı ve bunun gibi bir değer ekleyebilirsiniz: "NSLocationWhenInUseUsageDescription" = "Beni bulmak için Yardım!";

Anahtarı, belirtilen dil için info.plist'inize ekler.


0

Benim durumumda her şey doğru kuruldu ancak yine de InfoPlist.strings dosyası bulunamadı.

Gerçekten işe yarayan tek şey , InfoPlist.strings dosyalarını kaldırıp projeye yeniden eklemekti .


0

Benim durumumda yerelleştirme işe yaramadı adındaki '-' sembolünün nedeni. Örnek: "aero-Info.plist" Ve yerelleştirilmiş dosyalar: "aero-InfoPlist.strings" ve "aeroInfoPlist.strings" çalışmadı.


0

InfoPlist.stringsDosya kullanırken (XCode'da Info.plistdosyanın yanına yerleştirilmelidir - gerçek dosya konumu muhtemelen projenin herhangi bir yerinde olabilir

XCode'da görüntüle

) çeviri için anahtarın kısa adını kullanmaya dikkat edin.

Kullanmaya çalışıyordum Privacy - Camera Usage Description, ama çalışma anahtarıNSCameraUsageDescription

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.