Apostrophe non viene tradotto correttamente quando viene inserito in un pacchetto di risorse


90

Apostrophe non viene tradotto correttamente quando viene inserito in un pacchetto di risorse.

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

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

L'apostrofo viene perso se formatto la chiave sopra da a java.util.ResourceBundleQuale potrebbe essere il problema qui?


4
+1 Mi sono imbattuto in questo problema da solo e ho scritto un piccolo post sul blog al riguardo. Forse può fornire ulteriori informazioni alle persone che si imbattono
micha

Risposte:


120

Dovresti eseguire l'escape della virgoletta singola come

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

Bella risposta. Questo ha risolto il mio problema con le virgolette singole. Grazie :) +1
Anish B.

35

Credo fermamente che il problema non sia il bundle delle risorse ma il MessageFormater che usi per stampare il messaggio:

Da MessageFormater java doc :

All'interno di una stringa, "" ( due virgolette singole ) rappresenta una virgoletta singola. Una QuotedString può contenere caratteri arbitrari tranne le virgolette singole; le virgolette singole circostanti vengono rimosse. Un UnquotedString può contenere caratteri arbitrari tranne le virgolette singole e le parentesi graffe a sinistra. Pertanto, una stringa che dovrebbe restituire il messaggio formattato "{0}" può essere scritta come "'' {'0}' 'o' '' {0} '' '.

Quindi devi scrivere:

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

6

Guarda il javadoc qui

All'interno di una stringa, "''" rappresenta una virgoletta singola. Una QuotedString può contenere caratteri arbitrari tranne le virgolette singole; le virgolette singole circostanti vengono rimosse. Un UnquotedString può contenere caratteri arbitrari tranne le virgolette singole e le parentesi graffe a sinistra. Pertanto, una stringa che dovrebbe restituire il messaggio formattato "'{0}'" può essere scritta come "'' '{' 0} ''" o "'' '{0}' ''".


5

Devi doppiare virgolette singole, ad esempio il pennello di {0} è alto {1} centimetri


5

In aggiunta alla risposta di @ Ralph: ti renderai conto che questa è una MessageFormatcosa quando hai un testo come

text1=It's too late

contro

text2={0}''s too late

text1probabilmente non verrà eseguito attraverso un MessageFormater (ad esempio, la primavera ha percorsi di codice diversi se gli argomenti vengono passati o meno), mentre lo text2farebbe. Quindi, se hai usato due virgolette singole in text1, potrebbero / verranno visualizzate come tali. Quindi dovrai controllare se gli argomenti vengono formattati o meno e utilizzare di conseguenza una o due virgolette singole.


5

Se sei completamente bloccato, come me (nessuno dei precedenti ha funzionato), puoi sostituire il segno apostrofo con il suo Unicode: \ u0027. Ricorda che puoi sempre usare il simbolo UTF nel tuo file delle proprietà.



1

Per tutti coloro che hanno problemi con Android nel file string.xml, usa \ '\' invece di virgolette singole.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.