feat: add language filter
This commit is contained in:
parent
a9c5268c46
commit
9fccc6e1de
@ -2,4 +2,13 @@
|
||||
<div>
|
||||
<h3>Charm <3</h3>
|
||||
<hr>
|
||||
|
||||
<form action="/lang" method="post">
|
||||
<button name="lang" value="ru">Русский</button>
|
||||
<button name="lang" value="en">English</button>
|
||||
</form>
|
||||
|
||||
<h3>My current language: ${cookie["lang"].value}</h3>
|
||||
|
||||
<hr>
|
||||
</div>
|
||||
@ -7,54 +7,50 @@
|
||||
<body>
|
||||
<%@ include file="header.jsp" %>
|
||||
<div>
|
||||
<c:if test="${requestScope.profile.id == null}">
|
||||
<h1>Hello new user!</h1>
|
||||
</c:if>
|
||||
<form method="post" action="/profile">
|
||||
<c:if test="${requestScope.profile.id != null}">
|
||||
<input hidden name="_method" value="PUT">
|
||||
<input type = "hidden" name = "_method" value = "put"/>
|
||||
</c:if>
|
||||
<input hidden type="text" name="id" value="${requestScope.profile.id}">
|
||||
<input type = "hidden" name="id" value="${requestScope.profile.id}">
|
||||
<table>
|
||||
<tr>
|
||||
<td><h3>Email</h3></td>
|
||||
<td><h3>${requestScope.wordBundle.getWord("email")}</h3></td>
|
||||
<td><input type="email" name="email" value="${requestScope.profile.email}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><h3>Name</h3></td>
|
||||
<td><h3>${requestScope.wordBundle.getWord("name")}</h3></td>
|
||||
<td><input type="text" name="name" value="${requestScope.profile.name}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><h3>Surname</h3></td>
|
||||
<td><h3>${requestScope.wordBundle.getWord("surname")}</h3></td>
|
||||
<td><input type="text" name="surname" value="${requestScope.profile.surname}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><h3>About</h3></td>
|
||||
<td><h3>${requestScope.wordBundle.getWord("about")}</h3></td>
|
||||
<td><input type="text" name="about" value="${requestScope.profile.about}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><h3>Gender</h3></td>
|
||||
<td><h3>${requestScope.wordBundle.getWord("gender")}</h3></td>
|
||||
<td>
|
||||
<select name="gender">
|
||||
<option value="${requestScope.profile.gender}" selected hidden>${requestScope.profile.gender}</option>
|
||||
<c:forEach var="gender" items="${applicationScope.genders}">
|
||||
<option value="${gender}">${gender}</option>
|
||||
<option value="${gender}">${requestScope.wordBundle.getWord(gender)}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<button type="submit">Save</button>
|
||||
<button type="submit">${requestScope.wordBundle.getWord("save")}</button>
|
||||
</form>
|
||||
|
||||
<c:if test="${requestScope.profile.id != null}">
|
||||
<form action="/profile" method="post">
|
||||
<input hidden name="_method" value="DELETE">
|
||||
<input hidden name="id" value="${requestScope.profile.id}">
|
||||
<button type="submit">Delete</button>
|
||||
<form method="post" action="/profile">
|
||||
<input type = "hidden" name = "_method" value = "delete"/>
|
||||
<input type = "hidden" name="id" value="${requestScope.profile.id}">
|
||||
<button type="submit">${requestScope.wordBundle.getWord("delete")}</button>
|
||||
</form>
|
||||
</c:if>
|
||||
</div>
|
||||
<%@ include file="footer.html" %>
|
||||
<%@ include file="footer.jsp" %>
|
||||
</body>
|
||||
</html>
|
||||
11
resources/words.properties
Normal file
11
resources/words.properties
Normal file
@ -0,0 +1,11 @@
|
||||
about=About
|
||||
all-rights-reserved=All rights reserved
|
||||
delete=Delete
|
||||
email=Email
|
||||
female=Female
|
||||
gender=Gender
|
||||
male=Male
|
||||
name=Name
|
||||
other=Other
|
||||
save=Save
|
||||
surname=Surname
|
||||
11
resources/words_en.properties
Normal file
11
resources/words_en.properties
Normal file
@ -0,0 +1,11 @@
|
||||
about=About
|
||||
all-rights-reserved=All rights reserved
|
||||
delete=Delete
|
||||
email=Email
|
||||
female=Female
|
||||
gender=Gender
|
||||
male=Male
|
||||
name=Name
|
||||
other=Other
|
||||
save=Save
|
||||
surname=Surname
|
||||
11
resources/words_ru.properties
Normal file
11
resources/words_ru.properties
Normal file
@ -0,0 +1,11 @@
|
||||
about=\u041E \u0441\u0435\u0431\u0435
|
||||
all-rights-reserved=\u0412\u0441\u0435 \u043F\u0440\u0430\u0432\u0430 \u0437\u0430\u0449\u0438\u0449\u0435\u043D\u044B
|
||||
delete=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
|
||||
email=\u041F\u043E\u0447\u0442\u0430
|
||||
female=\u0416\u0435\u043D\u0449\u0438\u043D\u0430
|
||||
gender=\u041F\u043E\u043B
|
||||
male=\u041C\u0443\u0436\u0447\u0438\u043D\u0430
|
||||
name=\u0418\u043C\u044F
|
||||
other=\u0414\u0440\u0443\u0433\u043E\u0435
|
||||
save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
|
||||
surname=\u0424\u0430\u043C\u0438\u043B\u0438\u044F
|
||||
31
src/ru/charm/back/controller/LanguageController.java
Normal file
31
src/ru/charm/back/controller/LanguageController.java
Normal file
@ -0,0 +1,31 @@
|
||||
package ru.charm.back.controller;
|
||||
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.annotation.WebServlet;
|
||||
import jakarta.servlet.http.Cookie;
|
||||
import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@WebServlet("/lang")
|
||||
public class LanguageController extends HttpServlet {
|
||||
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
String lang = req.getParameter("lang");
|
||||
|
||||
System.out.println("Cookie header" + req.getHeader("Cookie"));
|
||||
|
||||
Cookie cookie = new Cookie("lang", "en");
|
||||
if ("ru".equals(lang)) {
|
||||
cookie.setValue("ru");
|
||||
}
|
||||
|
||||
resp.addCookie(cookie);
|
||||
|
||||
String referer = req.getHeader("Referer");
|
||||
resp.sendRedirect(referer);
|
||||
}
|
||||
}
|
||||
34
src/ru/charm/back/controller/filter/LanguageFilter.java
Normal file
34
src/ru/charm/back/controller/filter/LanguageFilter.java
Normal file
@ -0,0 +1,34 @@
|
||||
package ru.charm.back.controller.filter;
|
||||
|
||||
import jakarta.servlet.*;
|
||||
import jakarta.servlet.annotation.WebFilter;
|
||||
import jakarta.servlet.http.Cookie;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import ru.charm.back.service.WordBundle;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
@WebFilter("/*")
|
||||
public class LanguageFilter implements Filter {
|
||||
@Override
|
||||
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
|
||||
HttpServletRequest req = (HttpServletRequest) servletRequest;
|
||||
HttpServletResponse res = (HttpServletResponse) servletResponse;
|
||||
|
||||
Cookie[] cookies = req.getCookies() != null ? req.getCookies() : new Cookie[]{};
|
||||
|
||||
String lang = Arrays.stream(cookies)
|
||||
.filter(cookie -> "lang".equals(cookie.getName()))
|
||||
.map(Cookie::getValue)
|
||||
.findFirst()
|
||||
.orElse("en");
|
||||
|
||||
WordBundle wordBundle = new WordBundle(lang);
|
||||
|
||||
req.setAttribute("wordBundle", wordBundle);
|
||||
|
||||
filterChain.doFilter(req, res);
|
||||
}
|
||||
}
|
||||
32
src/ru/charm/back/service/WordBundle.java
Normal file
32
src/ru/charm/back/service/WordBundle.java
Normal file
@ -0,0 +1,32 @@
|
||||
package ru.charm.back.service;
|
||||
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
|
||||
public class WordBundle {
|
||||
private final ResourceBundle resourceBundle;
|
||||
|
||||
public WordBundle(String lang) {
|
||||
Locale locale = Locale.of("en");
|
||||
if ("ru".equals(lang)) {
|
||||
locale = Locale.of("ru");
|
||||
}
|
||||
this.resourceBundle = ResourceBundle.getBundle("words", locale);
|
||||
}
|
||||
|
||||
public String getWord(String key) {
|
||||
String result;
|
||||
try {
|
||||
result = resourceBundle.getString(key.toLowerCase());
|
||||
} catch (MissingResourceException | ClassCastException e) {
|
||||
String[] pathArray = key.split("\\.");
|
||||
result = pathArray[pathArray.length - 1];
|
||||
} catch (Exception e) {
|
||||
return "* empty *";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user