O apóstrofo não é traduzido corretamente quando colocado em um pacote de recursos

90

O apóstrofo não é traduzido corretamente quando colocado em um pacote de recursos.

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

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

O apóstrofo passa despercebido se eu formatar a chave acima de um java.util.ResourceBundleQual poderia ser o problema aqui?

user339108
fonte
4
+1 Eu tive esse problema sozinho e escrevi um pequeno post no blog sobre isso. Talvez ele possa fornecer informações adicionais para pessoas que acessam
micha

Respostas:

120

Você deve escapar da aspa simples como

key = {0}''s brush is {1} centimeters tall
Raghuram
fonte
Boa resposta. Isso resolveu meu problema com aspas simples. Obrigado :) +1
Anish B.
35

Acredito fortemente que o problema não é o pacote de recursos, mas o MessageFormater que você usa para imprimir a mensagem:

Do documento java MessageFormater :

Em uma String, '' ( duas aspas simples ) representa uma aspa simples. Um QuotedString pode conter caracteres arbitrários, exceto aspas simples; as aspas simples são removidas. Um UnquotedString pode conter caracteres arbitrários, exceto aspas simples e chaves à esquerda. Assim, uma string que deve resultar na mensagem formatada '{0}' pode ser escrita como '' '{' 0} '' ou '' '{0}' ''.

Então você precisa escrever:

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

Olhe para o javadoc aqui

Dentro de uma String, "''" representa uma aspa simples. Um QuotedString pode conter caracteres arbitrários, exceto aspas simples; as aspas simples são removidas. Um UnquotedString pode conter caracteres arbitrários, exceto aspas simples e chaves à esquerda. Assim, uma string que deve resultar na mensagem formatada "'{0}'" pode ser escrita como "'' '{' 0} ''" ou "'' '{0}' ''".

Aravind Yarram
fonte
5

Você precisa fazer aspas simples, ou seja, o pincel de {0} tem {1} centímetros de altura

Samuel Parsonage
fonte
5

Adicionando à resposta de @Ralph: Você vai perceber que isso é uma MessageFormatcoisa quando você tem um texto como

text1=It's too late

versus

text2={0}''s too late

text1provavelmente não seria executado por meio de um MessageFormater (por exemplo, spring tem caminhos de código diferentes se os argumentos são passados ​​ou não), mas text2sim. Portanto, se você usou duas aspas simples text1, elas podem / serão exibidas como tal. Portanto, você precisará verificar se algum argumento foi formatado ou não e usar uma ou duas aspas simples de acordo.

desculpemissjackson
fonte
5

Se você estiver completamente preso, como eu estava (nenhuma das opções acima funcionou), você pode substituir o sinal de apóstrofo por seu Unicode: \ u0027. Lembre-se de que você sempre tem permissão para usar o símbolo UTF em seu arquivo de propriedades.

Nestor Milyaev
fonte
1

Para todos que têm problemas com Android no string.xml, use \ '\' em vez de aspas simples.

Uriel Frankel
fonte