Подтвердить что ты не робот

Как обрабатывать одиночные кавычки в константах интернационализации?

Мы определяем все наши интернационализированные константные строки в одном файле свойств 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-коде, не сталкиваясь с раздражающими проблемами с одиночной кавычкой?

4b9b3361

Ответ 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; вместо <' >

Надеюсь, что это решает вашу проблему.