Bagaimana cara melokalkan string di dalam file iOS info.plist?

259

Seperti yang Anda ketahui, iOS 8 memerlukan NSLocationWhenInUseUsUageDescription kunci untuk menggunakan lokasi pengguna. Saya telah menambahkan kunci ini dan beberapa informasi umum ke dalam daftar info saya. masukkan deskripsi gambar di sini

Bagaimana saya bisa menggunakan string terjemahan di dalam file plist?

- Perbarui -

Saya sudah memiliki string yang dapat dilokalisasi. Saya hanya ingin tahu apakah saya dapat menggunakan sesuatu seperti NSLocalizedString (MYSTRING, nil) di dalam string plist. Saya tahu bahwa saya dapat membuat beberapa file info.plist untuk pelokalan, tetapi saya bertanya-tanya mungkin ada cara yang lebih mudah.

Soheil
sumber
Apakah Anda pernah mengatasinya, saya berjuang untuk mendapatkan NSLocationWhenInUseUsageDescription terlokalisasi juga?
Oliver Pearmain

Jawaban:

490

Anda harus menggunakan InfoPlist.stringsfile untuk melokalkan nilai Info.plist. Untuk melakukan ini, buka File->New->File, pilih di Strings Filebawah Resourcetab iOS, beri nama InfoPlist, dan buat. Buka dan masukkan Info.plistnilai yang ingin Anda pelokalkan seperti:

NSLocationWhenInUseUsageDescription = "Description of this";

Sekarang Anda dapat melokalkan InfoPlist.stringsfile dengan terjemahan. Semoga berhasil!

EDIT:

pilih opsi pelokalan, atau aktifkan pelokalan jika diperlukan,

editor sisi kanan

Anda harus dapat melihat file juga di editor sisi kiri.

editor sisi kiri

EDIT:

Berikut ini adalah dokumentasi resmi untuk Info.plistpelokalan kunci.

Penghargaan untuk Marco , terima kasih telah menyertakan foto dalam jawaban ini!

Fahri Azimov
sumber
15
Setelah membuat file string, apakah Anda perlu memasukkan kunci dalam file Info.plist juga, atau apakah aman untuk menghapusnya dari sana?
rounak
11
Kiat: Gunakan persis nama "InfoPlist.strings" dan bukan yang lain. Sebagai contoh, file infoplist asli saya bernama sesuatu yang lain, tetapi saya harus menggunakan nama ini persis untuk membuatnya berfungsi.
Sjoerd Perfors
22
Saat menguji pelokalan pada simulator. Saya harus mengubah bahasa pada simulator itu sendiri bukan hanya bahasa dalam target xcode. Hanya peringatan untuk orang lain.
John Webb
10
penggunaan yang benar adalah keyname = "teks Anda"; mis: NSLocationWhenInUseUsageDescription = "your text"
Magurizio
10
Perhatian: kunci dalam file ini tidak boleh memiliki tanda kutip, yang berbeda dengan lokalisasi normal. mis: NSMicrophoneUsageDescription = "deskripsi Anda";
Yuchao Zhou
33

Semua hal di atas tidak bekerja untuk saya (XCode 7.3) jadi saya membaca referensi Apple tentang cara melakukannya, dan itu jauh lebih sederhana daripada yang dijelaskan di atas. Menurut Apple:

Nilai yang dilokalkan tidak disimpan dalam file Info.plist itu sendiri. Sebagai gantinya, Anda menyimpan nilai untuk pelokalan tertentu dalam file string dengan nama InfoPlist.strings. Anda menempatkan file ini dalam direktori proyek khusus bahasa yang sama yang Anda gunakan untuk menyimpan sumber daya lain untuk lokalisasi yang sama.

Oleh karena itu, saya membuat file string bernama InfoPlist.strings dan meletakkannya di folder xx.lproj dari bahasa "xx" (dan menambahkannya ke proyek menggunakan File-> Tambah File ke ...). Itu dia. Tidak perlu untuk kunci "Sumber daya lokal dapat dicampur" = YA, dan tidak perlu untuk InfoPlist.strings di base.lproj atau en.lproj.

Aplikasi menggunakan nilai kunci Info.plist sebagai nilai default jika tidak dapat menemukan kunci dalam file bahasa tertentu. Jadi, saya meletakkan nilai bahasa Inggris saya di file Info.plist dan yang diterjemahkan dalam file khusus bahasa, diuji dan semuanya berfungsi.

Secara khusus, tidak perlu melokalisasi InfoPlist.strings (yang membuat versi file di base.lproj, en.lroj, dan xx.lproj), dan dalam kasus saya seperti itu tidak akan berhasil.

Zvi
sumber
2
Mengapa tidak menyertakan tautan ke dokumen yang sesuai?
Jurasic
3
Di sini tautan ke laman Apple doc yang relevan jika ada yang tertarik: developer.apple.com/library/archive/documentation/General/…
tikungan
dan bagaimana kita memutuskan xx itu? misalnya untuk bahasa Inggris itu bisa en, En, Eng, Bahasa Inggris dll? Maaf jika ini pertanyaan bodoh karena saya pemula
Awais Nasir
Jawaban Anda bekerja untuk saya kecuali skenario bahasa fallback, aplikasi mendapatkan bahasa fallback selalu bahasa yang digunakan sebelumnya dan bukan bahasa Inggris, nilai bahasa Inggris saya ada di file Info.plist, juga saya telah mencoba base.lproj juga
Awais Nasir
19

Jika ada yang tidak berfungsi, pastikan Anda menambahkan:

"Sumber daya lokal dapat dicampur" = YA

ke dalam info.plist. Dalam kasus saya, file InfoPlist.strings diabaikan.

tuvok
sumber
15

Kiat

  1. Ingatlah bahwa Simulator iOS mengeksploitasi secara default bahasa sistem Anda. Silakan ubah bahasa (dan wilayah) di Pengaturan Simulator iOS juga untuk menguji terjemahan Anda.

  2. String pelokalan (lihat dokumen Apple di sini ) seharusnya

    NSLocationWhenInUseUsageDescription = "Description of this";

    dan tidak (dengan kutipan "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";
Giuseppe Beccari
sumber
Tambahan yang berharga, tetapi saya pikir ini harus menjadi komentar di bawah masing-masing jawaban, bukan jawaban baru. Perhatikan juga bahwa "363" bukan pengidentifikasi pos tetapi jumlah suara yang dijawab (jumlah tersebut telah berubah).
John J. Camilleri
7
Saya belum punya 50 reputasi untuk menambahkan komentar di sana.
Giuseppe Beccari
Tidak masalah apakah Anda menggunakan tanda kutip "..." di sekitar kunci mis:: ( "NSLocationWhenInUseUsageDescription"="description"valid). Bisa dengan atau tanpa.
mluisbrown
12

Saya akan sangat merekomendasikan membaca panduan Apple, dan melihat sumber WWDC yang tercantum di sini: Topik Internasionalisasi dan Lokalisasi

Untuk secara spesifik menjawab pertanyaan Anda, ketika Anda menambahkan bahasa baru ke proyek masukkan deskripsi gambar di siniAnda, Anda mendapat kesempatan untuk memilih file InfoPlist apa yang akan dimasukkan (jika Anda memiliki beberapa target, Anda akan memiliki beberapa file info Info). Yang perlu Anda lakukan untuk mendapatkan layar berikut adalah tekan + di bawah Lokalisasi dan pilih bahasa baru untuk menambahkan dukungan. masukkan deskripsi gambar di sini

Setelah Anda menambahkan, itu akan membuat file string yang diperlukan di direktori lproj yang sesuai untuk bahasa yang diberikan.

--EDIT--

Untuk lebih jelasnya, iOS akan menukar string untuk file Plist Anda berdasarkan bahasa yang saat ini dipilih pengguna menggunakan kunci entri plist sebagai kunci dalam file string terlokalisasi.

Matt S.
sumber
3
Menerjemahkan seluruh daftar hanya untuk satu kunci adalah kerja keras. Temukan info lebih lanjut di sini: bit.ly/1yBUTru
RGML
2
Itu tidak benar untuk XCode 9. Ia tidak perlu meminta lokalisasi plist saat menambahkan bahasa baru.
Tom
Saya perlu memeriksa bahwa untuk Xcode 9 - belum memiliki kesempatan untuk menguji Xcode baru.
Matt S.
11

Langkah demi langkah melokalkan Info.plist:

  1. Temukan di Xcode, folder Resources (ditempatkan di root)
  2. Pilih Sumber Daya folder
  3. Kemudian tekan menu utama File-> New-> File ...
  4. Pilih di bagian "Resource" Strings File dan tekan Next
  5. Kemudian di Save Aslapangan tulis InfoPlist ONLY (modal "I" dan "P")
  6. Lalu tekan Buat
  7. Kemudian pilih file InfoPlist.strings yang dibuat di folder Resources dan tekan di menu kanan tombol "Localize"
  8. Kemudian Anda Pilih Proyek dari Navigator Proyek dan pilih proyek dari daftar proyek
  9. Di tab info di bagian bawah Anda dapat sebanyak bahasa yang Anda inginkan (Ada di bagian Lokalisasi)
  10. Bahasa yang dapat Anda lihat di Resources Folder
  11. Untuk melokalkan nilai ("kunci") dari file info.plist, Anda dapat membuka dengan editor teks dan mendapatkan semua kunci yang ingin Anda pelokalkan
  12. Anda menulis kunci apa saja sebagai contoh di InfoPlist.strings seperti contoh di atas

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

Itu semua berfungsi dan Anda telah melokalkan file info.plist Anda!

Costas Bakoulias
sumber
4

Bagi siapa pun yang mengalami masalah info.plist tidak disertakan ketika mencoba menambahkan pelokalan, seperti pada Xcode 9.

Anda perlu membuat localiazble info.plist dengan masuk ke dalamnya dan mengklik tombol pelokalan di inspektur file, seperti yang ditunjukkan di bawah ini.

Info.plist kemudian akan dimasukkan dalam sumber daya file ketika Anda pergi untuk menambahkan Lokalisasi baru.

masukkan deskripsi gambar di sini

Edward
sumber
3
Apakah Anda menemui masalah? Saya tidak dapat membangun proyek ketika saya menambahkan dua bahasa ke Pelokalan karena xcode mengatakan "File info.plist tidak dapat dibuka karena tidak ada file seperti itu.
mkkrolik
2
@mkkrolik Saya mengalami masalah yang sama sekarang. Sudahkah Anda menemukan solusinya?
Todanley
@Todanley melewatkan solusi ini tidak berfungsi untuk saya. Gunakan InfoPlist.strings sebagai gantinya.
mkkrolik
@mkkrolik Terima kasih. Dan juga saat pengujian dengan simulator, saya harus mengubah pengaturan bahasa simulator daripada target saya agar bisa berfungsi.
Todanley
3

Seperti yang dikatakan RGML, Anda dapat membuat InfoPlist.strings, melokalkannya lalu menambahkan kunci Anda dan nilai seperti ini: "NSLocationWhenInUseUsUageDescription" = "Bantuan untuk menemukan saya!";

Ini akan menambahkan kunci ke info.plist Anda untuk bahasa yang ditentukan.

Topi
sumber
0

Dalam kasus saya semuanya sudah diatur dengan benar tetapi masih file InfoPlist.strings tidak ditemukan.

Satu-satunya hal yang benar-benar berfungsi adalah, untuk menghapus dan menambahkan file InfoPlist.strings lagi ke proyek.

d.ennis
sumber
0

Dalam kasus saya pelokalan tidak berfungsi karena simbol '-' dalam nama. Contoh: "aero-Info.plist" Dan file yang dilokalkan: "aero-InfoPlist.strings" dan "aeroInfoPlist.strings" tidak berfungsi.

Mike Glukhov
sumber
0

Saat menggunakan InfoPlist.stringsfile (dalam XCode itu harus ditempatkan di sebelah Info.plistfile - lokasi file nyata dapat di mana saja di dalam proyek mungkin

Lihat di XCode

) hati-hati menggunakan nama pendek kunci untuk terjemahan.

Saya mencoba menggunakan Privacy - Camera Usage Description, tetapi kunci kerjanyaNSCameraUsageDescription

Hourglasser
sumber