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?


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

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

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}' ''".


5

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


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.


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.



1

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.