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?


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

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

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



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.


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.



1

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.