Apostrophe no se traduce correctamente cuando se coloca en un paquete de recursos

90

Apostrophe no se traduce correctamente cuando se coloca en un paquete de recursos.

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

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

El apóstrofe se pierde si formateo la clave anterior desde un java.util.ResourceBundle¿Cuál podría ser el problema aquí?

usuario339108
fuente
4
+1 Me encontré con este problema y escribí una pequeña publicación en un blog al respecto. Tal vez pueda proporcionar información adicional para las personas que se encuentran con esta "función": mscharhag.com/2013/10/…
micha

Respuestas:

120

Debes escapar de la comilla simple como

key = {0}''s brush is {1} centimeters tall
Raghuram
fuente
Buena respuesta. Esto ha resuelto mi problema con comillas simples. Gracias :) +1
Anish B.
35

Creo firmemente que el problema no es el paquete de recursos, sino el MessageFormater que usa para imprimir el mensaje:

Desde MessageFormater java doc :

Dentro de una cadena, '' ( dos comillas simples ) representa una comilla simple. Una QuotedString puede contener caracteres arbitrarios excepto comillas simples; se eliminan las comillas simples circundantes. Una UnquotedString puede contener caracteres arbitrarios, excepto comillas simples y corchetes izquierdos. Por lo tanto, una cadena que debería dar como resultado el mensaje formateado '{0}' puede escribirse como '' '{' 0} '' o '' '{0}' ''.

Entonces necesitas escribir:

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

Mira el javadoc aquí

Dentro de una cadena, "''" representa una comilla simple. Una QuotedString puede contener caracteres arbitrarios excepto comillas simples; se eliminan las comillas simples circundantes. Un UnquotedString puede contener caracteres arbitrarios, excepto comillas simples y corchetes izquierdos. Por lo tanto, una cadena que debería dar como resultado el mensaje formateado "'{0}'" puede escribirse como "'' '{' 0} ''" o "'' '{0}' ''".

Aravind Yarram
fuente
5

Debe escribir comillas simples dobles, es decir, el pincel de {0} '' mide {1} centímetros de alto.

Rectoría de Samuel
fuente
5

Agregando a la respuesta de @ Ralph: te darás cuenta de que esto es MessageFormatalgo cuando tienes un mensaje de texto como

text1=It's too late

versus

text2={0}''s too late

text1probablemente no se ejecutaría a través de MessageFormater (por ejemplo, spring tiene diferentes rutas de código si se pasan argumentos o no), mientras que text2sí. Por lo tanto, si usó dos comillas simples text1, es posible que se muestren como tales. Por lo tanto, deberá verificar si algún argumento se formatea o no y usar una o dos comillas simples en consecuencia.

perdonmissjackson
fuente
5

Si está completamente atascado, como yo (nada de lo anterior funcionó), puede reemplazar el signo de apóstrofo con su Unicode: \ u0027. Recuerde que siempre puede usar el símbolo UTF en su archivo de propiedades.

Nestor Milyaev
fuente
1

Para todos los que tengan problemas de Android en el string.xml, use \ '\' en lugar de comillas simples.

Uriel Frankel
fuente