Приложение весенней загрузки не может загрузить файлы свойств пакета - PullRequest
0 голосов
/ 10 февраля 2020

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

Я создал 3 файла, один с именем файла по умолчанию и еще два с указанными c языками. Файлы, созданные с использованием intellij IDE, который я использую.

Я следовал этому руководству https://www.baeldung.com/java-resourcebundle, однако при каждом запуске получаю:

MissingResourceException: Can't find bundle for base name tp_app_strings, locale en_US

Я перепробовал множество статей но ни один из них, похоже, не решил проблему.

Один забавный факт заключается в том, что если я использую @Value("classpath:tp_app_strings.properties") в поле «Ресурс», я могу получить ссылку на этот файл, поэтому он смог найти его.

Еще одна вещь, которую я пытался создать, - создать каталог WEB-INF и поместить туда файлы (читайте его в какой-то статье), но все равно безрезультатно

Структура проекта совершенно прямолинейно:

enter image description here

Пружинная версия версии 2.2 под управлением tomcat.

Любые предложения будут очень ценными

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вы можете загрузить файл .properties в контекст приложения, используя аннотацию @ PropertySource вместо использования @Value для загрузки файла .properties в экземпляр org.springframework.core.io.Resource.

Использование;

@Configuration
@PropertySource("classpath:tp_app_strings.properties")
public class DefaultProperties {

    @Value("${property1.name}") // Access properties in the above file here using SpringEL.
    private String prop1;

    @Value("${property2.name}")
    private String prop2;
}

Вам не понадобится java.util.ResourceBundle доступ к свойствам таким образом. Используйте другой или тот же класс для загрузки других файлов .properties.

Обновление 1:

Чтобы иметь функциональность java.util.ResourceBundle, вы можете ' просто используйте org.springframework.core.io.Resource класс. Этот класс или его подклассы не предоставляют функции для доступа к свойствам по его имени java.util.ResourceBundle. 1023 *

Однако, если вам нужна такая функциональность, как java.util.ResourceBundle, вы можете реализовать нечто подобное использование org.springframework.core.io.Resource;

@Configuration
public class PropertyConfig {

    @Value("classpath:tp_app_strings.properties")
    private Resource defaultProperties;

    @Bean("default-lang")
    public java.util.Properties getDefaultProperties() throws IOException {
        Properties props = new Properties();
        props.load(defaultProperties.getInputStream());

        return props;
    }
}

Обязательно следуйте правильному соглашению об именах, когда определяете файл свойств как java .util.Properties # load (InputStream) ожидайте этого.

Теперь вы можете @Autowire и использовать этот боб java.util.Properties везде, где вы хотите, как с java.util.ResourceBundle, используя java.util.Properties#getProperty(String) или его перегруженный аналог.

0 голосов
/ 10 февраля 2020

Я думаю, это проблема соглашения о присвоении имен файлам свойств. используйте подчеркивание "_" для указания языкового стандарта файла, например

filename_[languageCode]_[regionCode]

[languageCode] и [regionCode] - это двухбуквенный стандартный код, который в разделе [regionCode] является необязательным

о стандартном взятии аббревиатуры кода посмотрите на этот вопрос

, в вашем случае измените имя файла на tp_app_strings_en_US.properties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...