Ссылка на конкретную страницу в файле свойств Wicket i18n - PullRequest
0 голосов
/ 02 ноября 2018

Я строю свой первый в истории проект Wicket и обнаружил, что количество файлов свойств в моей кодовой базе быстро растет. В идеале я хотел бы содержать всю интернационализацию в одном файле для каждого языка / региона. Просто, чтобы я мог легко найти вещи.

Я обнаружил, что мой файл свойств приложения может быть идеальным для этого. Файл свойств моего приложения называется ApiAdminApplication.properties. Теперь я пытаюсь добавить свои переводимые файлы в этот файл, не беспорядочно.

Согласно javadoc ComponentStringResourceLoader это должно быть возможно. Видимо порядок поиска следующий:

  page1.properties => form1.input1.Required
  page1.properties => Required
  form1.properties => input1.Required
  form1.properties => Required
  input1.properties => Required
  myApplication.properties => page1.form1.input1.Required
  myApplication.properties => Required

От второй до последней строки указано поведение, которое я ищу, но не могу приступить к работе.

У меня есть страница с именем CustomerEditPage, которая в свою очередь содержит форму с идентификатором customerForm

Итак, вот что я добавляю к ApiAdminApplication.properties, и, как мне кажется, должно работать в соответствии с приведенным выше фрагментом:

CustomerEditPage.customerForm.name=Customer name

К сожалению, это не работает. Тем не менее, я могу заставить это работать, опуская имя страницы и начиная с customerForm, но это не то, что я хочу. Я хочу, чтобы на странице интернационализация содержалась в одном файле.

Кто-нибудь может дать мне несколько советов по этому поводу? Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

После сообщения об ошибке я закончил делать то, что предложил martin-g, и расширил ClassStringResourceLoader. Для вашего удобства вот что я сделал:

public class PrefixedStringResourceLoader extends ClassStringResourceLoader {

    public PrefixedStringResourceLoader(Class<?> clazz) {
        super(clazz);
    }

    protected String getResourcePath(final Component component) {
        final Class<? extends Page> parentClass = component.getPage().getClass();

        final String resPath = super.getResourcePath(component);

        if (!resPath.isEmpty())
            return String.format("%s.%s", parentClass.getSimpleName(), resPath);

        return parentClass.getSimpleName();
    }

}

В этом есть небольшая ошибка. Это всегда требует от вас работы с полными путями ресурсов. Это может быть немного сложно, у меня были некоторые проблемы с фрагментом ниже:

<input type="submit" wicket:id="save" wicket:message="value:save" />

Это оценивается как CustomerEditPage.customerForm.save.save, где я ожидал, что оно станет: CustomerEditPage.customerForm.save. Это не так, потому что сообщение wicket: фактически становится дочерним по отношению к вводу формы сохранения.

В итоге я пошел на:

<input type="submit" wicket:id="save" wicket:message="value:caption" />

Что оценивается как CustomerEditPage.customerForm.save.caption, что я считаю несколько более читабельным. Конечно, вы можете свернуть свой собственный более продвинутый загрузчик ресурсов, но этот достаточно хорош для меня.

0 голосов
/ 02 ноября 2018

Я думаю, что javadoc ComponentStringResourceLoader просто неверен и должен быть исправлен.

Чтобы выполнить то, что вам нужно, вам нужно расширить ClassStringResourceLoader и переопределить getResourcePath () . В вашем значении вам нужно добавить к результату имя страницы, которой принадлежит Компонент, переданный в качестве параметра.

Тогда вам нужно будет зарегистрировать ваш загрузчик по методу ApiAdminApplication#init():

getResourceSettings().getStringResourceLoaders().add(new MyClassStringResourceLoader(ApiAdminApplication.class))

см. значения по умолчанию .

Пожалуйста, отправьте сообщение об ошибке на https://issues.apache.org/jira/projects/WICKET/issues, чтобы исправить проблему с javadoc (или кто-то другой, кто знает лучше меня, как это сделать, может объяснить нам).

...