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