2010-12-15 30 views
64

放置在資源包中時,撇號不會正確翻譯。放置在資源包中時,撇號無法正確翻譯

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

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

如果我格式化從java.util.ResourceBundle上述關鍵可能是什麼問題就在這裏撇號可能會錯過?

+3

+1我自己遇到這個問題,並寫了一篇關於它的小博客文章。也許它可以爲運行此功能的用戶提供更多信息:http://www.mscharhag.com/2013/10/single-quote-escaping-in-java-resource.html – micha 2013-10-04 17:30:15

回答

92

你應該逃避單引號

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

我強烈相信的,這個問題是不是的ressource束但MessageFormater您使用打印的郵件:

From MessageFormater java doc

在一個字符串中,''(兩個單引號)代表一個 單引號。一個QuotedString可以包含 任意字符,除了 單引號;周圍的單個 報價被刪除。 UnquotedString 可以包含任意字符 ,除了單引號和左括號 括號。因此,如果字符串 導致格式化消息 '{0}'可以寫爲'''{'0}'' 或'''{0}'''。

所以你需要寫:

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

你需要加倍的單引號,即{0}「的刷{1}釐米高

6

看那javadoc here

在一個字符串中,「''」代表一個 單引號。一個QuotedString可以包含 任意字符,除了 單引號;周圍的單個 報價被刪除。 UnquotedString 可以包含任意字符 ,除了單引號和左括號 括號。因此,如果字符串應該爲 或「'''{0}'''」,則應將格式爲 的「{0}」格式的消息寫入爲「''''''''''」。

1

對於每個人都已經在Android的string.xml問題,請使用\ '\',而不是單引號。

3

添加到@拉爾夫的回答是: 你會意識到,這是一個MessageFormat的事情,當你有一個像

text1=It's too late 

text2={0}''s too late 

text1可能不會通過MessageFormater運行文本(例如,如果參數被傳遞,spring將使用不同的代碼路徑),而text2會。 因此,如果您在text1中使用了兩個單引號,則它們可能會顯示。所以你需要檢查是否有參數被格式化,並相應地使用一個或兩個單引號。

3

如果你完全卡住了,像我一樣(以上都沒有工作),你可以使用Unicode代替撇號:\ u0027。請記住,您始終可以在屬性文件中使用UTF符號。