Apostrophe không được dịch đúng cách khi được đặt trong một gói tài nguyên


89

Apostrophe không được dịch đúng cách khi được đặt trong một gói tài nguyên.

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

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

Dấu nháy đơn bị bỏ sót nếu tôi định dạng khóa ở trên từ một java.util.ResourceBundleVấn đề có thể là gì ở đây?


4
+1 Tôi đã tự mình gặp sự cố này và đã viết một bài đăng trên blog nhỏ về nó. Có lẽ nó có thể cung cấp thêm thông tin cho mọi người chạy vào "tính năng" này: mscharhag.com/2013/10/...
Micha

Câu trả lời:


120

Bạn nên thoát khỏi câu trích dẫn duy nhất là

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

Câu trả lời rất hay. Điều này đã giải quyết vấn đề của tôi với các dấu ngoặc kép. Cảm ơn :) +1
Anish B.

34

Tôi thực sự tin rằng vấn đề không phải là gói nguồn lại mà là MessageFormater bạn sử dụng để in thông báo:

Từ MessageFormater java doc :

Trong một chuỗi, '' ( hai dấu nháy đơn ) đại diện cho một dấu nháy đơn. Chuỗi trích dẫn có thể chứa các ký tự tùy ý ngoại trừ các dấu nháy đơn; các dấu ngoặc kép xung quanh bị loại bỏ. Một chuỗi không được trích dẫn có thể chứa các ký tự tùy ý ngoại trừ dấu ngoặc kép và dấu ngoặc nhọn bên trái. Do đó, một chuỗi sẽ dẫn đến thông báo được định dạng '{0}' có thể được viết là '' '{' 0} '' hoặc '' '{0}' ''.

Vì vậy, bạn cần viết:

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

6

Xem javadoc tại đây

Trong một Chuỗi, "''" đại diện cho một dấu ngoặc kép. Chuỗi trích dẫn có thể chứa các ký tự tùy ý ngoại trừ các dấu nháy đơn; các dấu ngoặc kép xung quanh bị loại bỏ. Một chuỗi không được trích dẫn có thể chứa các ký tự tùy ý ngoại trừ dấu ngoặc kép và dấu ngoặc nhọn bên trái. Do đó, một chuỗi sẽ dẫn đến thông báo được định dạng "'{0}'" có thể được viết là "'' '{' 0} ''" hoặc "'' '{0}' ''".



5

Thêm vào câu trả lời của @ Ralph: Bạn sẽ nhận ra rằng đây là một MessageFormatđiều khi bạn có một văn bản như

text1=It's too late

đấu với

text2={0}''s too late

text1có thể sẽ không chạy qua MessageFormater (ví dụ: mùa xuân có các đường dẫn mã khác nhau nếu các đối số được truyền hay không), ngược lại text2. Vì vậy, nếu bạn sử dụng hai dấu nháy đơn trong text1, chúng có thể / sẽ hiển thị như vậy. Vì vậy, bạn sẽ cần kiểm tra xem có bất kỳ đối số nào được định dạng theo hay không và sử dụng một hoặc hai dấu nháy đơn cho phù hợp.


5

Nếu bạn hoàn toàn bị mắc kẹt, như tôi đã từng (không có cách nào ở trên hoạt động), bạn có thể thay thế dấu nháy đơn bằng Unicode của nó: \ u0027. Hãy nhớ rằng bạn luôn được phép sử dụng ký hiệu UTF trong tệp thuộc tính của mình.



1

Đối với những người gặp sự cố Android trong string.xml, hãy sử dụng \ '\' thay vì một dấu ngoặc kép.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.