2010-12-15 11 views
64

El apóstrofo no se traduce correctamente cuando se coloca en un paquete de recursos.El apóstrofo 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 perdió si puedo dar formato a la clave anterior de un java.util.ResourceBundle Cuál podría ser el problema aquí?

+3

+1 Me encontré con este problema yo mismo y escribí una pequeña publicación en el blog al respecto. Tal vez puede proporcionar información adicional para las personas que se encuentran con esta "característica": http://www.mscharhag.com/2013/10/single-quote-escaping-in-java-resource.html – micha

Respuesta

92

Debe escapar la comilla simple como

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

Me creer firmemente que el problema no es el paquete ressource pero el MessageFormater utilizar para imprimir el mensaje:

From MessageFormater java doc:

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

por lo que necesita para escribir:

{0}''s brush is {1} centimeters tall 
5

Es necesario duplicar comilla simple es decir, {0} '' s cepillo es {1} centímetros de altura

6

Mira el javadoc here

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

1

Para todos los que tienen problemas de Android en el string.xml, utilice \ '\' en lugar de comilla simple.

3

Agregando a @ respuesta de Ralph: Se darán cuenta de que esto es una cosa MessageFormat cuando se tiene un texto como

text1=It's too late 

frente

text2={0}''s too late 

text1 probablemente no iría a través de un MessageFormater (por ejemplo, primavera tiene diferentes rutas de código si se pasan los argumentos o no), mientras que text2 lo haría. Por lo tanto, si utilizó dos comillas simples en text1, pueden/se mostrarán como tales. Por lo tanto, deberá verificar si los argumentos están formateados o no y usar una o dos comillas simples en consecuencia.

3

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

Cuestiones relacionadas