Forráskód Böngészése

2nd labs: Character encoding and Internationalization i18n

m_sudra 3 éve
szülő
commit
07c76431b6

+ 2 - 1
.gitignore

@@ -1,2 +1,3 @@
 .idea/
-target/
+target/
+*.iml

+ 32 - 0
wpfat_exercises/src/main/java/pl/sudra/configuration/SpringConfiguration.java

@@ -1,12 +1,21 @@
 package pl.sudra.configuration;
 
+import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.support.ReloadableResourceBundleMessageSource;
+import org.springframework.web.servlet.LocaleResolver;
 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.i18n.CookieLocaleResolver;
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
 import org.springframework.web.servlet.view.InternalResourceViewResolver;
 
+import java.time.Duration;
+import java.util.Locale;
+
 
 @Configuration
 @EnableWebMvc
@@ -19,4 +28,27 @@ public class SpringConfiguration implements WebMvcConfigurer {
         viewResolver.setSuffix(".jsp");
         return viewResolver;
     }
+
+    @Bean
+    public MessageSource messageSource() {
+        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
+        messageSource.setBasename("/resources/i18n/messages");
+        messageSource.setDefaultEncoding("UTF-8");
+        return messageSource;
+    }
+
+    @Bean
+    public LocaleResolver localeResolver() {
+        CookieLocaleResolver resolver = new CookieLocaleResolver("myLocaleCookie");
+        resolver.setDefaultLocale(new Locale("en"));
+        resolver.setCookieMaxAge(Duration.ofSeconds(4800));
+        return resolver;
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
+        interceptor.setParamName("lang");
+        registry.addInterceptor(interceptor);
+    }
 }

+ 11 - 0
wpfat_exercises/src/main/java/pl/sudra/configuration/SpringInit.java

@@ -1,8 +1,11 @@
 package pl.sudra.configuration;
 
+import jakarta.servlet.Filter;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.filter.CharacterEncodingFilter;
 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 
+
 @Configuration
 public class SpringInit extends AbstractAnnotationConfigDispatcherServletInitializer {
 
@@ -17,4 +20,12 @@ public class SpringInit extends AbstractAnnotationConfigDispatcherServletInitial
     protected String[] getServletMappings() {
         return new String[]{"/"};
     }
+
+    @Override
+    protected Filter[] getServletFilters() {
+        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
+        characterEncodingFilter.setEncoding("UTF-8");
+        characterEncodingFilter.setForceEncoding(true);
+        return new Filter[]{characterEncodingFilter};
+    }
 }

+ 2 - 1
wpfat_exercises/src/main/java/pl/sudra/controller/HelloController.java

@@ -11,12 +11,13 @@ import java.util.Locale;
 @Controller
 public class HelloController {
     @RequestMapping(value = "/")
-    public String helloWorld(Locale locale, Model model){
+    public String helloWorld(Locale locale, Model model) {
         Date date = new Date();
         DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
         String formattedDate = dateFormat.format(date);
 
         model.addAttribute("serverTime", formattedDate);
+        model.addAttribute("message", "Polish characters encoding: ółżźćśńąęÓŁŻŹĆŚŃĄĘ");
 
         return "hello";
     }

+ 17 - 7
wpfat_exercises/src/main/webapp/appUser.jsp

@@ -1,32 +1,42 @@
-<%@ page contentType="text/html;charset-UTF-@" language="java" %>
+<%@ page contentType="text/html;charset-UTF-@" %>
 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
+<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
 <html>
 <head>
-    <title>App user page</title>
+    <title><spring:message code="label.addAppUser"/></title>
 </head>
 <body>
+
+<div class="header">
+    <span style="display: inline-block; text-align: right; width: 100%">
+        <a style="..." href="?lang=pl">pl</a> |
+        <a style="..." href="?lang=en">en</a> |
+        <a style="..." href="?lang=de">de</a>
+    </span>
+</div>
+
 <h1>App user info:</h1>
 <form:form method="post" action="addAppUser" modelAttribute="appUser">
     <table>
         <tr>
-            <td><form:label path="firstName">First Name</form:label></td>
+            <td><form:label path="firstName"><spring:message code="label.firstName"/></form:label></td>
             <td><form:input path="firstName"/></td>
         </tr>
         <tr>
-            <td><form:label path="lastName">Last Name</form:label></td>
+            <td><form:label path="lastName"><spring:message code="label.lastName"/></form:label></td>
             <td><form:input path="lastName"/></td>
         </tr>
         <tr>
-            <td><form:label path="email">Email</form:label></td>
+            <td><form:label path="email"><spring:message code="label.email"/></form:label></td>
             <td><form:input path="email"/></td>
         </tr>
         <tr>
-            <td><form:label path="telephone">Telephone</form:label></td>
+            <td><form:label path="telephone"><spring:message code="label.telephone"/></form:label></td>
             <td><form:input path="telephone"/></td>
         </tr>
         <tr>
             <td colspan="2">
-                <input type="submit" value="Add AppUser"/>
+                <input type="submit" value="<spring:message code="label.addAppUser"/>"/>
             </td>
         </tr>
     </table>

+ 5 - 2
wpfat_exercises/src/main/webapp/hello.jsp

@@ -1,4 +1,4 @@
-<%@ page contentType="text/html;charset-UTF-@" language="java" %>
+<%@ page contentType="text/html;charset-UTF-@" %>
 <html>
 <head>
     <title>Hello World!</title>
@@ -6,10 +6,13 @@
 <body>
 <h3>Hello World!</h3>
 
-<a href="/appUsers">App Users page</a>
+<a href="${pageContext.request.contextPath}/appUsers">App Users page</a>
 
 <br/>
 ${serverTime}
 
+<br/>
+${message}
+
 </body>
 </html>

+ 5 - 0
wpfat_exercises/src/main/webapp/resources/i18n/messages_de.properties

@@ -0,0 +1,5 @@
+label.firstName     =   Vorname
+label.lastName      =   Familiename
+label.email         =   Email
+label.telephone     =   Telefon
+label.addAppUser    =   Benutzer hinzuf&#252;gen

+ 5 - 0
wpfat_exercises/src/main/webapp/resources/i18n/messages_en.properties

@@ -0,0 +1,5 @@
+label.firstName     =   First Name
+label.lastName      =   Last Name
+label.email         =   Email
+label.telephone     =   Telephone
+label.addAppUser    =   Add App User

+ 5 - 0
wpfat_exercises/src/main/webapp/resources/i18n/messages_pl.properties

@@ -0,0 +1,5 @@
+label.firstName     =   Imię
+label.lastName      =   Nazwisko
+label.email         =   Email
+label.telephone     =   Telefon
+label.addAppUser    =   Dodaj użytkownika apliakcji