Apostroph wird nicht richtig übersetzt, wenn es in ein Ressourcenpaket gestellt wird

89

Apostroph wird nicht richtig übersetzt, wenn es in ein Ressourcenpaket gestellt wird.

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

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

Der Apostroph wird übersehen, wenn ich den obigen Schlüssel aus einem java.util.ResourceBundleWas könnte hier das Problem sein?

user339108
quelle
4
+1 Ich bin selbst auf dieses Problem gestoßen und habe einen kleinen Blog-Beitrag darüber geschrieben. : Vielleicht kann er zusätzliche Informationen für die Menschen in diesem „Feature“ läuft bieten mscharhag.com/2013/10/...
micha

Antworten:

120

Sie sollten dem einfachen Anführungszeichen als entkommen

key = {0}''s brush is {1} centimeters tall
Raghuram
quelle
Gute Antwort. Dies hat mein Problem mit einfachen Anführungszeichen gelöst. Danke :) +1
Anish B.
34

Ich bin der festen Überzeugung, dass das Problem nicht das Ressourcenpaket ist, sondern der MessageFormater, mit dem Sie die Nachricht drucken:

Aus MessageFormater Java Doc :

Innerhalb eines Strings steht '' ( zwei einfache Anführungszeichen ) für ein einfaches Anführungszeichen. Ein QuotedString kann beliebige Zeichen außer einfachen Anführungszeichen enthalten. Die umgebenden einfachen Anführungszeichen werden entfernt. Ein UnquotedString kann beliebige Zeichen außer einfachen Anführungszeichen und linken geschweiften Klammern enthalten. Daher kann eine Zeichenfolge, die zur formatierten Nachricht '{0}' führen soll, als '' '{' 0} '' oder '' '{0}' '' geschrieben werden.

Sie müssen also schreiben:

{0}''s brush is {1} centimeters tall
Ralph
quelle
6

Schauen Sie sich hier den Javadoc an

Innerhalb eines Strings steht "''" für ein einfaches Anführungszeichen. Ein QuotedString kann beliebige Zeichen außer einfachen Anführungszeichen enthalten. Die umgebenden einfachen Anführungszeichen werden entfernt. Ein UnquotedString kann beliebige Zeichen außer einfachen Anführungszeichen und linken geschweiften Klammern enthalten. Daher kann eine Zeichenfolge, die zur formatierten Nachricht "'{0}'" führen soll, als "'' '{' 0} ''" oder "'' '{0}' ''" geschrieben werden.

Aravind Yarram
quelle
5

Sie müssen ein einfaches Anführungszeichen verdoppeln, dh der Pinsel von {0} ist {1} Zentimeter groß

Samuel Pfarrhaus
quelle
5

Hinzufügen zu @ Ralphs Antwort: Sie werden feststellen, dass dies eine MessageFormatSache ist, wenn Sie einen Text wie haben

text1=It's too late

gegen

text2={0}''s too late

text1würde wahrscheinlich nicht durch einen MessageFormater laufen (z. B. hat spring unterschiedliche Codepfade, wenn Argumente übergeben werden oder nicht), wohingegen text2würde. Wenn Sie also zwei einfache Anführungszeichen verwendet haben text1, werden diese möglicherweise als solche angezeigt. Sie müssen also überprüfen, ob Argumente formatiert wurden oder nicht, und entsprechend ein oder zwei einfache Anführungszeichen verwenden.

sorrymissjackson
quelle
5

Wenn Sie wie ich völlig feststecken (keiner der oben genannten Punkte hat funktioniert), können Sie das Apostrophzeichen durch den Unicode ersetzen: \ u0027. Denken Sie daran, dass Sie in Ihrer Eigenschaftendatei immer das UTF-Symbol verwenden dürfen.

Nestor Miljew
quelle
1

Verwenden Sie für alle, die Android-Probleme in der Datei string.xml haben, \ '\' anstelle von einfachen Anführungszeichen.

Uriel Frankel
quelle