Saya memiliki fungsi ini untuk menampilkan teks yang dilokalkan dengan parameter:

func displayLocalizedMessage(key: String, args: [CVarArg]) {
    someLabel.text = String.localizedStringWithFormat(NSLocalizedString(key, comment: ""), args)
}

Jika saya menyebutnya melewati dua parameter, misalnya, notificationPostTagging sebagai key dan ["Joshua"] untuk args dan string yang dilokalkan seperti ini:

"notificationPostTagging" = "%@ tagged you in a post.";

Saya mendapatkan ini dicetak di aplikasi:

(
  Joshua
) tagged you in a post.

Apakah ada yang punya ide bagaimana untuk memperbaiki ini. Saya tidak dapat melewatkan parameter kedua sebagai daftar yang dipisahkan koma karena berasal dari beberapa objek lain.

Terima kasih

1
CainaSouza 14 Desember 2017, 22:20

2 jawaban

Jawaban Terbaik

localizedStringWithFormat tidak mengambil array argumen, dibutuhkan daftar variabel argumen. Jadi, saat Anda meneruskan args, array itu akan diperlakukan hanya sebagai satu argumen. Penentu format %@ kemudian mengonversi array menjadi string yang menghasilkan tanda kurung.

Anda harus menggunakan penginisialisasi String yang menggunakan argumen format sebagai larik.

func displayLocalizedMessage(key: String, args: [CVarArg]) {
    someLabel.text = String(format: NSLocalizedString(key, comment: ""), locale: Locale.current, arguments: args)
}
3
rmaddy 14 Desember 2017, 19:43

Saya juga menghadapi masalah seperti ini dan setelah menghabiskan beberapa jam saya menyelesaikannya dengan baris ini

textlabel.text = "my_string_key".localized(with: ["store_name"])

Dan string lokal saya seperti bahasa Arab ini

 "my_string_key" = "إذا كنت قد أجريت عملية شراء بالفعل ، فسيقوم %@ بإعلامنا بذلك.";

Perancis

"my_string_key"="Si vous avez déjà effectué un achat, %@ nous en informera.";

Jawaban ini berdasarkan Swift 5 atau lebih tinggi

0
Md. Shofiulla 8 Desember 2020, 09:28