Как обрабатывать одиночные кавычки в константах интернационализации?
Мы определяем все наши интернационализированные константные строки в одном файле свойств LocalizableResource_xx.properties
(по одному на язык), расположенном в google.gwt.i18n.client
.
Таким образом, можно получить доступ к константам в Java-коде через интерфейс констант
Window.alert(myConstants.helloWorld());
а также использовать их внутри UiBinder .ui.xml
<ui:attribute key="some.key" name="text" description="useful info" />
Этот подход не работает, если строка содержит одиночную кавычку ('
). Это связано с тем, что компилятор GWT генерирует java.text.ParseException: Unterminated single quote:
при обработке файлов .ui.xml
. Если мы избежим цитаты, что означает double it (''
), компилятор проходит, но строки, к которым обращаются через постоянный интерфейс, содержат как одинарные кавычки (например, в You can''t do that
).
Замена одинарных кавычек на кодировку utf-8\u0027 не помогает (такое же исключение, как указано выше).
Можно ли использовать один и тот же файл свойств в шаблонах UiBinder, а также в Java-коде, не сталкиваясь с раздражающими проблемами с одиночной кавычкой?
Ответы
Ответ 1
Поскольку, похоже, не существует другого решения, я опубликую наше обходное решение по указанной проблеме:
Мы создали класс-оболочку, реализующий интерфейс констант, который просто передает константы i18n в String modify(String)
, прежде чем они будут переданы вызывающему.
public class ConstantsWrapper implements MyConstants {
private static MyConstants sConstants = GWT.create(MyConstants.class);
public static String transform(String text) {
return text.replaceAll("''", "'");
}
@Override
public String someText() {
return transform(sConstants.someText());
}
...
}
Я все еще жду реального решения.
Ответ 2
Эта проблема, похоже, исправлена в текущей версии.
''
(что две одинарные кавычки) отлично подходит для нас!
Ответ 3
Выход char - это одиночная кавычка '
(вместо обычной обратной косой черты \
)
Пример:
register.form.success=Un courriel a 'ét'é envoy'é a l''adresse suivante ': {0}
Ответ 4
Перед сохранением их в файле локализации вам придется избегать ваших символов с помощью символов escape-кода HTML (например, & # 39; для представления одной кавычки):
Вы найдете список escape-символов HTML в
http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
(или вы можете найти "html escape list" в google).
В вашем случае вам нужно написать & # 39; вместо <' >
Надеюсь, что это решает вашу проблему.
Ответ 5
Создал отчет об ошибке для этого трекера gwt issue - проголосуйте за него:
http://code.google.com/p/google-web-toolkit/issues/detail?id=6647