После этой статьи блога Я включил свое приложение для загрузки сообщений i18n из базы данных. Работает отлично. Однако я не хочу управлять всеми сообщениями в базе данных. Поэтому я хотел бы иметь возможность сказать, что если я не нахожу код в базе данных, то загрузите его, используя механизм по умолчанию.
Вот что у меня есть:
class DatabaseMessageSource extends AbstractMessageSource {
protected MessageFormat resolveCode(String code, Locale locale) {
Message msg = Message.findByCodeAndLocale(code, locale)
def format = null
if (msg) {
format = new MessageFormat(msg.text, msg.locale)
}else{
// What do I do here to grab it from the file
}
return format;
}
}
Я попытался вызвать super.resolveCode (код, локаль), но это привело к ошибкам компиляции. И мне трудно отследить реализацию AbstractMessageSource, которую Grails использует по умолчанию для просмотра источника.
ОБНОВЛЕНИЕ: благодаря doelleri я теперь понимаю, что мне нужно сделать что-то вроде расширения ResourceBundleMessageSource. К сожалению, есть несколько проблем с этим подходом. В моем файле resources.groovy есть следующее:
messageSource(DatabaseMessageSource)
Прежде всего, если я просто расширю ResourceBundleMessageSource и переопределю метод resolCode, этот метод никогда не будет вызван. Поэтому в моем блоке else вызов super.resolveCode является спорным.
Затем я попытался просто реализовать свой класс DatabaseMessageSource со всем кодом из ResourceBundleMessageSource, но я, очевидно, что-то упустил в resources.groovy, потому что пакеты по умолчанию не подключаются.
Так что на данный момент, я все еще потерялся в том, что мне нужно сделать. Я хочу сначала проверить базу данных. Если код не существует, вернитесь к тому же поведению по умолчанию, что и ResourceBundleMessageSource.