Апостроф не переводится должным образом, когда помещается в пакет ресурсов - PullRequest
79 голосов
/ 15 декабря 2010

Апостроф не переводится должным образом при размещении в комплекте ресурсов.

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

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

Апостроф пропускается, если я отформатирую вышеуказанный ключ из java.util.ResourceBundle В чем здесь может быть проблема?

Ответы [ 8 ]

112 голосов
/ 15 декабря 2010

Вы должны экранировать одинарную кавычку как

key = {0}''s brush is {1} centimeters tall
30 голосов
/ 15 декабря 2010

Я твердо верю, что проблема не в пакете ресурсов, а в MessageFormater , который вы используете для печати сообщения:

Из MessageFormater java doc :

Внутри строки, '' ( две одинарные кавычки ) представляет собой одиночная кавычка. QuotedString может содержать произвольные символы, кроме одинарные кавычки; окружающий сингл цитаты удалены. UnquotedString может содержать произвольные символы кроме одинарных кавычек и оставленных фигурных скобки. Таким образом, строка, которая должна результат в отформатированном сообщении '{0}' можно записать как '' '{' 0} '' или '' '{0}' ''.

Так что вам нужно написать:

{0}''s brush is {1} centimeters tall
6 голосов
/ 15 декабря 2010

Посмотрите на javadoc здесь

Внутри строки, "'" "представляет одну кавычку.QuotedString может содержать произвольные символы, кроме одинарных кавычек;окружающие одинарные кавычки удаляются.UnquotedString может содержать произвольные символы, кроме одинарных кавычек и левых фигурных скобок.Таким образом, строка, которая должна приводить к форматированному сообщению «{0}», может быть записана как «», «0» или «0».

5 голосов
/ 24 июня 2016

Если вы полностью застряли, как и я (ничего из вышеперечисленного не сработало), вы можете заменить знак апостроф на Юникод: \ u0027.Помните, что вам всегда разрешено использовать символ UTF в вашем файле свойств.

5 голосов
/ 02 февраля 2016

Добавление к ответу @ Ralph: Вы поймете, что это вещь MessageFormat, когда у вас есть текст, такой как

text1=It's too late

против

text2={0}''s too late

text1, вероятноне запускается через MessageFormater (например, Spring имеет разные пути кода, если аргументы переданы или нет), тогда как text2 будет.Так что если вы использовали две одинарные кавычки в text1, они могут / будут отображаться как таковые.Поэтому вам нужно проверить, отформатированы ли какие-либо аргументы или нет, и соответственно использовать одну или две одинарные кавычки.

5 голосов
/ 15 декабря 2010

Вам нужно сделать двойную одинарную кавычку, т.е. кисть {0} имеет высоту {1} ​​сантиметров

2 голосов
/ 15 декабря 2010

Рассмотрите возможность использования плагина редактора свойств (для Eclipse)

http://propedit.sourceforge.jp/index_en.html

1 голос
/ 30 июля 2014

Для всех, у кого проблемы с Android в файле string.xml, используйте \ '\' вместо одинарных кавычек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...