Apostrophe ไม่ได้รับการแปลอย่างถูกต้องเมื่อวางไว้ในชุดทรัพยากร


91

Apostrophe ไม่ได้รับการแปลอย่างถูกต้องเมื่อวางไว้ในชุดทรัพยากร

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

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

เครื่องหมายวรรคตอนจะพลาดถ้าฉันจัดรูปแบบคีย์ข้างต้นจากjava.util.ResourceBundleสิ่งที่อาจเป็นปัญหาที่นี่?


4
+1 ฉันพบปัญหานี้ด้วยตัวเองและเขียนบล็อกโพสต์เล็ก ๆ เกี่ยวกับเรื่องนี้ อาจให้ข้อมูลเพิ่มเติมสำหรับผู้ที่ใช้ "คุณลักษณะ" นี้: mscharhag.com/2013/10/…
micha

คำตอบ:


122

คุณควรหลีกเลี่ยงเครื่องหมายคำพูดเดียวเป็น

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

คำตอบที่ดี สิ่งนี้ช่วยแก้ปัญหาของฉันด้วยเครื่องหมายคำพูดเดี่ยว ขอบคุณ :) +1
Anish B.

35

ฉันเชื่ออย่างยิ่งว่าปัญหาไม่ใช่บันเดิลแหล่งข้อมูล แต่เป็นMessageFormater ที่คุณใช้พิมพ์ข้อความ:

จาก MessageFormater java doc :

ภายในสตริง '' ( เครื่องหมายคำพูดเดี่ยวสองคำ ) แสดงถึงเครื่องหมายคำพูดเดียว QuotedString สามารถมีอักขระตามอำเภอใจยกเว้นเครื่องหมายคำพูดเดี่ยว เครื่องหมายคำพูดเดี่ยวโดยรอบจะถูกลบออก UnquotedString สามารถมีอักขระที่กำหนดเองยกเว้นเครื่องหมายคำพูดเดี่ยวและวงเล็บปีกกาด้านซ้าย ดังนั้นสตริงที่ควรเป็นผลลัพธ์ในข้อความที่จัดรูปแบบ "{0}" จึงสามารถเขียนเป็น "" "{'0}' 'หรือ" "" {0} "' '

ดังนั้นคุณต้องเขียน:

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

6

ดูjavadoc ที่นี่

ภายในสตริง "''" หมายถึงเครื่องหมายคำพูดเดียว QuotedString สามารถมีอักขระตามอำเภอใจยกเว้นเครื่องหมายคำพูดเดี่ยว เครื่องหมายคำพูดเดี่ยวโดยรอบจะถูกลบออก UnquotedString สามารถมีอักขระที่กำหนดเองยกเว้นเครื่องหมายคำพูดเดี่ยวและวงเล็บปีกกาด้านซ้าย ดังนั้นสตริงที่ควรเป็นผลลัพธ์ในข้อความที่จัดรูปแบบ "" {0} "" จึงสามารถเขียนเป็น "'' '{' 0} ''" หรือ "'' '{0}' ''



5

การเพิ่มคำตอบของ @ Ralph: คุณจะรู้ว่านี่เป็นMessageFormatสิ่งที่เกิดขึ้นเมื่อคุณมีข้อความเช่น

text1=It's too late

เทียบกับ

text2={0}''s too late

text1อาจจะไม่ทำงานผ่าน MessageFormater (เช่น spring มีเส้นทางรหัสที่แตกต่างกันหากมีการส่งผ่านอาร์กิวเมนต์หรือไม่) ในขณะที่text2จะ ดังนั้นหากคุณใช้เครื่องหมายคำพูดเดี่ยวสองคำtext1ก็อาจ / จะแสดงเป็นเช่นนั้น ดังนั้นคุณจะต้องตรวจสอบว่ามีการจัดรูปแบบอาร์กิวเมนต์หรือไม่และใช้เครื่องหมายคำพูดเดี่ยวหนึ่งหรือสองรายการตามนั้น


5

หากคุณติดอยู่อย่างสมบูรณ์อย่างที่ฉันเป็น (วิธีข้างต้นไม่ได้ผล) คุณสามารถแทนที่เครื่องหมายอะพอสทรอฟีด้วย Unicode: \ u0027 จำไว้ว่าคุณได้รับอนุญาตให้ใช้สัญลักษณ์ UTF ในไฟล์คุณสมบัติของคุณเสมอ



1

สำหรับทุกคนที่มีปัญหา Android ใน string.xml ให้ใช้ \ '\' แทนเครื่องหมายคำพูดเดี่ยว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.