From 2e0df529cb4447ae90414ebd1d4637ba11f7ecfc Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Sun, 12 Mar 2023 12:58:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D0=BB=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http/examples.http | 3 +++ .../example/spring/i18n/AppConfig.java | 25 +++++++++++++++++++ .../example/spring/i18n/HelloController.java | 23 +++++++++++++++++ .../i18n}/SpringBootI18nApplication.java | 2 +- .../spring/i18n/UserLocaleResolver.java | 22 ++++++++++++++++ src/main/resources/application.yml | 1 - src/main/resources/messages_en.properties | 1 + src/main/resources/messages_ru.properties | 1 + 8 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 http/examples.http create mode 100644 src/main/java/dev/struchkov/example/spring/i18n/AppConfig.java create mode 100644 src/main/java/dev/struchkov/example/spring/i18n/HelloController.java rename src/main/java/dev/struchkov/example/{springbooti18n => spring/i18n}/SpringBootI18nApplication.java (87%) create mode 100644 src/main/java/dev/struchkov/example/spring/i18n/UserLocaleResolver.java create mode 100644 src/main/resources/messages_en.properties create mode 100644 src/main/resources/messages_ru.properties diff --git a/http/examples.http b/http/examples.http new file mode 100644 index 0000000..d058c52 --- /dev/null +++ b/http/examples.http @@ -0,0 +1,3 @@ +### Запрос эндпойнта hello +GET http://localhost:8080/hello?name=Петька +Language: en \ No newline at end of file diff --git a/src/main/java/dev/struchkov/example/spring/i18n/AppConfig.java b/src/main/java/dev/struchkov/example/spring/i18n/AppConfig.java new file mode 100644 index 0000000..3a51f15 --- /dev/null +++ b/src/main/java/dev/struchkov/example/spring/i18n/AppConfig.java @@ -0,0 +1,25 @@ +package dev.struchkov.example.spring.i18n; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; +import org.springframework.web.servlet.LocaleResolver; + +@Configuration +public class AppConfig { + + @Bean + public ReloadableResourceBundleMessageSource messageSource() { + ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); + messageSource.setBasename("classpath:messages"); + messageSource.setCacheSeconds(3600); + messageSource.setDefaultEncoding("UTF-8"); + return messageSource; + } + + @Bean + public LocaleResolver localeResolver() { + return new UserLocaleResolver(); + } + +} diff --git a/src/main/java/dev/struchkov/example/spring/i18n/HelloController.java b/src/main/java/dev/struchkov/example/spring/i18n/HelloController.java new file mode 100644 index 0000000..16b3481 --- /dev/null +++ b/src/main/java/dev/struchkov/example/spring/i18n/HelloController.java @@ -0,0 +1,23 @@ +package dev.struchkov.example.spring.i18n; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.context.MessageSource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.LocaleResolver; + +@RestController +@RequiredArgsConstructor +public class HelloController { + + private final MessageSource messageSource; + private final LocaleResolver localeResolver; + + @GetMapping("/hello") + public String hello(@RequestParam("name") String name, HttpServletRequest request) { + return messageSource.getMessage("welcome", new Object[]{name}, localeResolver.resolveLocale(request)); + } + +} diff --git a/src/main/java/dev/struchkov/example/springbooti18n/SpringBootI18nApplication.java b/src/main/java/dev/struchkov/example/spring/i18n/SpringBootI18nApplication.java similarity index 87% rename from src/main/java/dev/struchkov/example/springbooti18n/SpringBootI18nApplication.java rename to src/main/java/dev/struchkov/example/spring/i18n/SpringBootI18nApplication.java index bffda64..62af520 100644 --- a/src/main/java/dev/struchkov/example/springbooti18n/SpringBootI18nApplication.java +++ b/src/main/java/dev/struchkov/example/spring/i18n/SpringBootI18nApplication.java @@ -1,4 +1,4 @@ -package dev.struchkov.example.springbooti18n; +package dev.struchkov.example.spring.i18n; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/main/java/dev/struchkov/example/spring/i18n/UserLocaleResolver.java b/src/main/java/dev/struchkov/example/spring/i18n/UserLocaleResolver.java new file mode 100644 index 0000000..1dd0848 --- /dev/null +++ b/src/main/java/dev/struchkov/example/spring/i18n/UserLocaleResolver.java @@ -0,0 +1,22 @@ +package dev.struchkov.example.spring.i18n; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.servlet.LocaleResolver; + +import java.util.Locale; + +public class UserLocaleResolver implements LocaleResolver { + + @Override + public Locale resolveLocale(HttpServletRequest request) { + final String lang = request.getHeader("Language"); + return Locale.forLanguageTag(lang); + } + + @Override + public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { + // Not needed for this example + } + +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 8b13789..e69de29 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1 +0,0 @@ - diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties new file mode 100644 index 0000000..4d17e01 --- /dev/null +++ b/src/main/resources/messages_en.properties @@ -0,0 +1 @@ +welcome=Hello, {0}! \ No newline at end of file diff --git a/src/main/resources/messages_ru.properties b/src/main/resources/messages_ru.properties new file mode 100644 index 0000000..abf8772 --- /dev/null +++ b/src/main/resources/messages_ru.properties @@ -0,0 +1 @@ +welcome=??????, {0}! \ No newline at end of file