Apostrof tidak diterjemahkan dengan benar ketika ditempatkan dalam bundel sumber daya

90

Apostrof tidak diterjemahkan dengan benar ketika ditempatkan dalam bundel sumber daya.

key = {0}'s brush is {1} centimeters tall

(e.g. Sam's brush is 4 centimeters tall)

Tanda kutip terlewatkan jika saya memformat kunci di atas dari a. java.util.ResourceBundleApa masalahnya di sini?

pengguna339108
sumber
4
+1 Saya sendiri mengalami masalah ini dan menulis entri blog kecil tentangnya. Mungkin ini dapat memberikan informasi tambahan bagi orang-orang yang mengalami "fitur" ini: mscharhag.com/2013/10/…
micha

Jawaban:

120

Anda harus menghindari kutipan tunggal sebagai

key = {0}''s brush is {1} centimeters tall
Raghuram
sumber
Jawaban bagus. Ini telah memecahkan masalah saya dengan tanda kutip tunggal. Terima kasih :) +1
Anish B.
35

Saya sangat yakin bahwa masalahnya bukanlah bundel ressource tetapi pada MessageFormater yang Anda gunakan untuk mencetak pesan:

Dari MessageFormater java doc :

Dalam String, '' ( dua tanda kutip tunggal ) mewakili satu kutipan. QuotedString dapat berisi karakter sembarang kecuali tanda kutip tunggal; tanda kutip tunggal di sekitarnya dihapus. Sebuah UnquotedString dapat berisi karakter sembarang kecuali tanda kutip tunggal dan tanda kurung kurawal kiri. Jadi, string yang seharusnya menghasilkan pesan berformat '{0}' dapat ditulis sebagai '' '{' 0} '' atau '' '{0}' ''.

Jadi, Anda perlu menulis:

{0}''s brush is {1} centimeters tall
Muntah
sumber
6

Lihat javadoc di sini

Dalam String, "''" mewakili satu kutipan. QuotedString dapat berisi karakter sembarang kecuali tanda kutip tunggal; tanda kutip tunggal di sekitarnya dihapus. Sebuah UnquotedString dapat berisi karakter acak kecuali tanda kutip tunggal dan tanda kurung kurawal kiri. Jadi, string yang akan menghasilkan pesan berformat "'{0}'" dapat ditulis sebagai "'' '{' 0} ''" atau "'' '{0}' ''".

Aravind Yarram
sumber
5

Anda perlu menggandakan tanda kutip tunggal, misalnya sikat {0} tingginya {1} sentimeter

Samuel Parsonage
sumber
5

Menambah jawaban @ Ralph: Anda akan menyadari bahwa ini adalah MessageFormatsesuatu ketika Anda memiliki teks seperti

text1=It's too late

melawan

text2={0}''s too late

text1mungkin tidak akan berjalan melalui MessageFormater (misalnya pegas memiliki jalur kode yang berbeda jika argumen dilewatkan atau tidak), sedangkan text2akan. Jadi, jika Anda menggunakan dua tanda kutip tunggal text1, mungkin / akan ditampilkan seperti itu. Jadi, Anda harus memeriksa apakah ada argumen yang diformat atau tidak dan gunakan satu atau dua tanda kutip tunggal yang sesuai.

maafmissjackson
sumber
5

Jika Anda benar-benar macet, seperti saya (tidak ada yang berhasil di atas), Anda dapat mengganti tanda apostrof dengan Unicode-nya: \ u0027. Ingat Anda selalu diperbolehkan menggunakan simbol UTF di file properti Anda.

Nestor Milyaev
sumber
1

Untuk semua orang yang memiliki masalah Android di string.xml, gunakan \ '\' sebagai ganti tanda kutip tunggal.

Uriel Frankel
sumber