Handling Locale as first part of RequestURI.
Example:
HTTP Request RequestURI
https://foo.bar/{locale}/some/path.html -> /{locale}/some/path.html
https://foo.bar/{locale}/a.html -> /{locale}/a.html
https://foo.bar/{locale}/xyz?a=b -> /{locale}/xyz
An example in action can be seen here.
Version | Description |
---|---|
0.3.0 | Release notes |
0.2.0 | Release notes / Breaking Change |
0.1.0 | Release notes |
<dependency>
<groupId>io.github.alaugks</groupId>
<artifactId>spring-requesturi-locale-interceptor</artifactId>
<version>0.3.0</version>
</dependency>
implementation group: 'io.github.alaugks', name: 'spring-requesturi-locale-interceptor', version: '0.3.0'
Options | Description | Required |
---|---|---|
builder(Locale defaultLocale) | Default and fallback Locale. | Yes |
supportedLocales(List<Locale> locales) | List all locales that are supported. | No |
defaultRequestURI(String path) | If the RequestURI is empty, a redirect to the path is performed. | No (If not set the default RequestURI is /{defaultLocale}.) |
import io.github.alaugks.spring.requesturilocaleinterceptor.RequestURILocaleInterceptor;
import io.github.alaugks.spring.requesturilocaleinterceptor.RequestURILocaleResolver;
import java.util.List;
import java.util.Locale;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfigurerConfig implements WebMvcConfigurer {
private final Locale defaultLocale = Locale.forLanguageTag("en");
private final List<Locale> supportedLocales = List.of(
Locale.forLanguageTag("en"),
Locale.forLanguageTag("de"),
Locale.forLanguageTag("en-US")
);
@Bean
public LocaleResolver localeResolver() {
RequestURILocaleResolver resolver = new RequestURILocaleResolver();
resolver.setDefaultLocale(this.defaultLocale);
return resolver;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
RequestURILocaleInterceptor interceptor = RequestURILocaleInterceptor
.builder(this.defaultLocale)
.supportedLocales(this.supportedLocales)
.defaultRequestURI("/en/home")
.build();
registry.addInterceptor(urlInterceptor)
.addPathPatterns("/**")
// Exclude from Interceptor
.excludePathPatterns("/static/**", "/error");
}
}