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í?


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

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

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



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.


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.



1

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.