L'apostrophe ne se traduit pas correctement lorsqu'elle est placée dans un ensemble de ressources

90

L'apostrophe n'est pas traduite correctement lorsqu'elle est placée dans un ensemble de ressources.

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

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

L'apostrophe est manquée si je formate la clé ci-dessus à partir d'un java.util.ResourceBundleQuel pourrait être le problème ici?

user339108
la source
4
+1 J'ai rencontré ce problème moi-même et j'ai écrit un petit article de blog à ce sujet. Peut-être que cela peut fournir des informations supplémentaires pour les personnes qui rencontrent cette "fonctionnalité": mscharhag.com/2013/10
...

Réponses:

120

Vous devez échapper au guillemet simple comme

key = {0}''s brush is {1} centimeters tall
Raghuram
la source
Bonne réponse. Cela a résolu mon problème avec les guillemets simples. Merci :) +1
Anish B.
35

Je crois fermement que le problème n'est pas le bundle de ressources mais le MessageFormater que vous utilisez pour imprimer le message:

De MessageFormater java doc :

Dans une chaîne, '' ( deux guillemets simples ) représente un guillemet simple. Une QuotedString peut contenir des caractères arbitraires à l'exception des guillemets simples; les guillemets simples environnants sont supprimés. Une UnquotedString peut contenir des caractères arbitraires à l'exception des guillemets simples et des accolades gauches. Ainsi, une chaîne qui doit aboutir au message formaté '{0}' peut être écrite sous la forme '' '{' 0} '' ou '' '{0}' ''.

Vous devez donc écrire:

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

Regardez le javadoc ici

Dans une chaîne, "''" représente un guillemet simple. Une QuotedString peut contenir des caractères arbitraires à l'exception des guillemets simples; les guillemets simples environnants sont supprimés. Un UnquotedString peut contenir des caractères arbitraires à l'exception des guillemets simples et des accolades gauches. Ainsi, une chaîne qui doit aboutir au message formaté "'{0}'" peut être écrite comme "'' '{' 0} ''" ou "'' '{0}' ''".

Aravind Yarram
la source
5

Vous devez doubler les guillemets simples, c'est-à-dire que le pinceau de {0} mesure {1} centimètres de haut

Samuel Parsonage
la source
5

Ajout à la réponse de @ Ralph: vous vous rendrez compte que c'est une MessageFormatchose quand vous avez un texte comme

text1=It's too late

contre

text2={0}''s too late

text1 ne fonctionnerait probablement pas à travers un MessageFormater (par exemple, spring a des chemins de code différents si des arguments sont passés ou non), alors que text2 ferait. Donc, si vous avez utilisé deux guillemets simples dans text1, ils peuvent / s'afficheront comme tels. Vous devrez donc vérifier si des arguments sont formatés ou non et utiliser un ou deux guillemets simples en conséquence.

désolé missjackson
la source
5

Si vous êtes complètement coincé, comme je l'étais (rien de ce qui précède n'a fonctionné), vous pouvez remplacer le signe d'apostrophe par son Unicode: \ u0027. N'oubliez pas que vous êtes toujours autorisé à utiliser le symbole UTF dans votre fichier de propriétés.

Nestor Milyaev
la source
1

Pour tous ceux qui ont des problèmes Android dans le fichier string.xml, utilisez \ '\' au lieu d'un guillemet simple.

Uriel Frankel
la source