Как обрабатывать одинарные кавычки в константах интернационализации? - PullRequest
14 голосов
/ 30 июня 2011

Мы определяем все наши интернационализированные константные строки в одном файле свойств 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.Если мы избегаем кавычки, то есть удваиваем ее (''), компилятор пропускает, но строки, доступные через интерфейс констант, содержат обе одинарные кавычки (как в You can''t do that).

Замена одинарных кавычек наКодировка utf-8 \ u0027 не помогает (то же исключение, что и выше).

Возможно ли как-то использовать один и тот же файл свойств в шаблонах UiBinder, а также в коде Java, не сталкиваясь с назойливыми кавычками?

Ответы [ 5 ]

12 голосов
/ 23 сентября 2011

Эта проблема, похоже, исправлена ​​в текущем выпуске.

'' (это две одинарные кавычки) отлично работает для нас!

6 голосов
/ 23 июля 2013

Символ escape - это одиночная кавычка ' (вместо обычной обратной косой черты \)

Пример:

register.form.success=Un courriel a 'ét'é envoy'é a l''adresse suivante ': {0}
3 голосов
/ 03 августа 2011

Создан отчет об ошибке для этого на трекере проблем gwt - проголосуйте за него: http://code.google.com/p/google-web-toolkit/issues/detail?id=6647

3 голосов
/ 01 июля 2011

Вы должны экранировать свои символы, используя экранирующие символы HTML (например, «для представления одинарных кавычек»), прежде чем сохранять их в файле локализации:

Список экранирующих символов HTML вы найдете на http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php (или вы можете искать "html escape list" в google).

В вашем случае вы должны написать "вместо" "

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

1 голос
/ 04 июля 2011

Поскольку другого решения, похоже, не существует, я опубликую наш обходной путь для упомянутой проблемы:

Мы создали класс-оболочку, реализующий интерфейс констант, который просто передает константы 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());
    }

    ...
}

Я все еще жду реального решения.

...