Parcourir la source

Internationalization basics

dagarcos il y a 2 ans
Parent
commit
70a44b7e07

+ 34 - 0
src/main/java/es/uv/garcosda/config/WebConfig.java

@@ -0,0 +1,34 @@
+package es.uv.garcosda.config;
+
+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;
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
+import org.springframework.web.servlet.i18n.SessionLocaleResolver;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+	
+	@Bean
+	public LocaleResolver localeResolver() {
+		final SessionLocaleResolver lr = new SessionLocaleResolver();
+		lr.setDefaultLocale(Locale.ENGLISH);
+	    return lr;
+	}
+	
+	@Bean
+	public LocaleChangeInterceptor localeChangeInterceptor() {
+	    LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
+	    lci.setParamName("lang");
+	    return lci;
+	}
+	
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+	    registry.addInterceptor(localeChangeInterceptor());
+	}
+}

+ 2 - 1
src/main/resources/application.properties

@@ -1 +1,2 @@
-
+spring.messages.basename=messages
+spring.messages.encoding=UTF-8

+ 4 - 0
src/main/resources/messages.properties

@@ -0,0 +1,4 @@
+index.lang=Language
+index.title=Meetup
+index.btn.add=Add Meeting
+index.btn.remove=Remove

+ 4 - 0
src/main/resources/messages_en.properties

@@ -0,0 +1,4 @@
+index.lang=Language
+index.title=Meetup
+index.btn.add=Add Meeting
+index.btn.remove=Remove

+ 4 - 0
src/main/resources/messages_es.properties

@@ -0,0 +1,4 @@
+index.lang=Idioma
+index.title=Meetup
+index.btn.add=Añadir Reunión
+index.btn.remove=Eliminar

+ 11 - 5
src/main/resources/templates/index.html

@@ -1,5 +1,5 @@
 <!doctype html>
-<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
+<html lang="es" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
  <head>
 	<meta charset="utf-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1">
@@ -14,7 +14,13 @@
 	  </div>
 	  <div class="navbar navbar-dark bg-dark shadow-sm">
 	    <div class="container">
-	
+	    	<div class="dropdown">
+			  <button th:text="#{index.lang}" class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown" aria-expanded="false"></button>
+			  <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
+			    <li><a class="dropdown-item" href="/?lang=en">EN</a></li>
+			    <li><a class="dropdown-item" href="/?lang=es">ES</a></li>
+			  </ul>
+			</div>
 	    </div>
 	  </div>
 	</header>
@@ -22,9 +28,9 @@
 		<section class="py-5 text-center container">
 		  <div class="row py-lg-5">
 		    <div class="col-lg-6 col-md-8 mx-auto">
-		      <h1 class="fw-light">Meetup</h1>
+		      <h1 class="fw-light" th:text="#{index.title}">Meetup</h1>
 		      <p>
-		        <span class="btn btn-primary my-2" data-bs-toggle="modal" data-bs-target="#newMeetingModal">Add Meeting</span>
+		        <span class="btn btn-primary my-2" data-bs-toggle="modal" data-bs-target="#newMeetingModal" th:text="#{index.btn.add}">Add Meeting</span>
 		      </p>
 		    </div>
 		  </div>
@@ -40,7 +46,7 @@
 		            <p class="card-text" th:text="${item.date}">Meeting date</p>
 		            <div class="d-flex justify-content-between align-items-center">
 		              <div class="btn-group">
-		                <a type="button" class="btn btn-sm btn-outline-secondary" th:href="@{'/remove/' + ${item.id}}">Remove</a>
+		                <a type="button" class="btn btn-sm btn-outline-secondary" th:href="@{'/remove/' + ${item.id}}" th:text="#{index.btn.remove}">Remove</a>
 		              </div>
 		            </div>
 		          </div>