Apostrof nie jest poprawnie tłumaczony po umieszczeniu w paczce zasobów

90

Apostrof nie jest poprawnie tłumaczony po umieszczeniu w paczce zasobów.

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

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

Apostrof zostanie pominięty, jeśli sformatuję powyższy klucz z a. java.util.ResourceBundleJaki może być tutaj problem?

user339108
źródło
4
+1 Sam napotkałem ten problem i napisałem o nim mały wpis na blogu. Może dostarczy dodatkowych informacji dla osób korzystających z tej „funkcji”: mscharhag.com/2013/10/…
micha

Odpowiedzi:

120

Powinieneś opuścić pojedynczy cudzysłów jako

key = {0}''s brush is {1} centimeters tall
Raghuram
źródło
Niezła odpowiedź. To rozwiązało mój problem z pojedynczymi cudzysłowami. Dzięki :) +1
Anish B.
35

Jestem głęboko przekonany, że problem nie dotyczy pakietu zasobów, ale MessageFormater używanego do drukowania wiadomości:

Z dokumentu MessageFormater java :

W ciągu znaków „” ( dwa pojedyncze cudzysłowy ) reprezentuje pojedynczy cudzysłów. QuotedString może zawierać dowolne znaki z wyjątkiem pojedynczych cudzysłowów; otaczające pojedyncze cudzysłowy są usuwane. UnquotedString może zawierać dowolne znaki z wyjątkiem pojedynczych cudzysłowów i lewych nawiasów klamrowych. Zatem ciąg, który powinien skutkować sformatowaną wiadomością '{0}', można zapisać jako '' '{' 0} '' lub '' '{0}' ''.

Więc musisz napisać:

{0}''s brush is {1} centimeters tall
Ralph
źródło
6

Spójrz na javadoc tutaj

W ciągu znaków „''” reprezentuje pojedynczy cudzysłów. QuotedString może zawierać dowolne znaki z wyjątkiem pojedynczych cudzysłowów; otaczające pojedyncze cudzysłowy są usuwane. UnquotedString może zawierać dowolne znaki z wyjątkiem pojedynczych cudzysłowów i lewych nawiasów klamrowych. Zatem ciąg, który powinien skutkować sformatowaną wiadomością "'{0}'", można zapisać jako "'' '{' 0} ''" lub "'' '{0}' ''".

Aravind Yarram
źródło
5

Musisz podwoić pojedynczy cudzysłów, tj. Pędzel {0} ma {1} centymetrów wysokości

Samuel Parsonage
źródło
5

Dodając do odpowiedzi @ Ralph: Zrozumiesz, że tak jest MessageFormat, gdy masz taki tekst

text1=It's too late

przeciw

text2={0}''s too late

text1prawdopodobnie nie przejdzie przez MessageFormater (np. spring ma różne ścieżki kodu, jeśli argumenty są przekazywane lub nie), podczas gdy text2tak. Więc jeśli użyłeś dwóch pojedynczych cudzysłowów w text1, mogą / będą wyświetlane jako takie. Musisz więc sprawdzić, czy jakiekolwiek argumenty zostały sformatowane, czy nie, i odpowiednio użyć jednego lub dwóch pojedynczych cudzysłowów.

sorrymissjackson
źródło
5

Jeśli całkowicie utkniesz, tak jak ja (żadne z powyższych nie działało), możesz zastąpić znak apostrofu jego Unicode: \ u0027. Pamiętaj, że zawsze możesz używać symbolu UTF w pliku właściwości.

Nestor Milyaev
źródło
1

Dla każdego, kto ma problemy z Androidem w string.xml, użyj \ '\' zamiast pojedynczego cudzysłowu.

Uriel Frankel
źródło