После в этой статье в блоге Я включил мое приложение для загрузки сообщений 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 использует по умолчанию, чтобы посмотреть на источник.
UPDATE: Благодаря doelleri я теперь понимаю, что мне нужно сделать, это нечто вроде расширения ResourceBundleMessageSource. К сожалению, есть несколько проблем с этим подходом. В моем файле resources.groovy у меня есть следующее:
messageSource(DatabaseMessageSource)
Прежде всего, если я просто расширяю ResourceBundleMessageSource и переопределяю метод resolveCode, этот метод никогда не вызывается. Поэтому в моем блоке else вызов super.resolveCode является спорным.
Затем я попытался просто реализовать свой класс DatabaseMessageSource со всем кодом из ResourceBundleMessageSource, но я, очевидно, что-то пропустил в resource.groovy, потому что пакеты по умолчанию не подключаются.
Итак, в этот момент я все еще теряюсь в том, что мне нужно делать. Я хочу сначала проверить базу данных. Если код не существует, вернитесь к тому же поведению по умолчанию, что и ResourceBundleMessageSource.