mirror of
https://github.com/kmitresse/Cards-Rush.git
synced 2026-05-13 17:11:49 +00:00
feat: devWeb - Create a translation system and his translations files
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
package uppa.project.web.servlet;
|
||||||
|
|
||||||
|
import jakarta.servlet.annotation.WebServlet;
|
||||||
|
import jakarta.servlet.http.HttpServlet;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import uppa.project.web.translation.Translator;
|
||||||
|
|
||||||
|
@WebServlet(name = "translationServlet", value = "/translate")
|
||||||
|
public class TranslationServlet extends HttpServlet {
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void doPut(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||||
|
System.out.println("\n ok \n");
|
||||||
|
if (request.getParameter("language") != null) {
|
||||||
|
String language = request.getParameter("language");
|
||||||
|
request.getSession().setAttribute("language", language);
|
||||||
|
Translator translator = Translator.generateTranslator(request.getSession(), request.getServletContext());
|
||||||
|
request.getSession().setAttribute("translator", translator);
|
||||||
|
Translator sessionTranslator = (Translator) request.getSession().getAttribute("translator");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package uppa.project.web.translation;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import jakarta.servlet.ServletContext;
|
||||||
|
import jakarta.servlet.http.HttpSession;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
public class Translator {
|
||||||
|
|
||||||
|
private String language;
|
||||||
|
|
||||||
|
private JsonParser parser = new JsonParser();
|
||||||
|
|
||||||
|
private JsonObject translations;
|
||||||
|
|
||||||
|
public enum Language {EN, FR}
|
||||||
|
|
||||||
|
public Translator(Language language) {
|
||||||
|
System.out.println("Creating translator for language: " + language.name());
|
||||||
|
this.language = language.name();
|
||||||
|
this.parser = new JsonParser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Translator generateTranslator(HttpSession session , ServletContext context) throws IOException {
|
||||||
|
Translator translator;
|
||||||
|
System.out.println("null?" + session.getAttribute("language"));
|
||||||
|
System.out.println("language EN ??: " + session.getAttribute("language").equals(Translator.Language.EN.name()));
|
||||||
|
if (session.getAttribute("language") != null && session.getAttribute("language").equals(Translator.Language.EN.name())) {
|
||||||
|
translator = new Translator(Translator.Language.EN);
|
||||||
|
} else {
|
||||||
|
translator = new Translator(Translator.Language.FR);
|
||||||
|
}
|
||||||
|
translator.setJsonContent(context);
|
||||||
|
return translator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJsonContent(ServletContext context) throws IOException {
|
||||||
|
JsonObject json = new JsonObject();
|
||||||
|
InputStream is = context.getResourceAsStream("/WEB-INF/translations.json");
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
|
||||||
|
//Parse the File as a JSON Object
|
||||||
|
JsonElement fileElement = parser.parse(reader);
|
||||||
|
this.translations = fileElement.getAsJsonObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String translate(String text) {
|
||||||
|
System.out.println("Translating: " + text);
|
||||||
|
System.out.println("langue: " + this.language);
|
||||||
|
return this.translations.get(text).getAsJsonObject().get(this.language).getAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLanguage() {
|
||||||
|
return language;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
<%@tag description="layout/base" pageEncoding="UTF-8" %>
|
<%@tag description="layout/base" pageEncoding="UTF-8" %>
|
||||||
<%@tag import="uppa.project.Global" %>
|
<%@tag import="uppa.project.Global" %>
|
||||||
|
<%@ tag import="uppa.project.web.translation.Translator" %>
|
||||||
|
|
||||||
<%@attribute name="title"%>
|
<%@attribute name="title"%>
|
||||||
<%@attribute name="head" fragment="true" %>
|
<%@attribute name="head" fragment="true" %>
|
||||||
<%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %>
|
<%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %>
|
||||||
|
|
||||||
|
<% Translator translator =(Translator) session.getAttribute("translator"); %>
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="has-navbar-fixed-top">
|
<html class="has-navbar-fixed-top">
|
||||||
<head>
|
<head>
|
||||||
|
|||||||
@@ -0,0 +1,142 @@
|
|||||||
|
{
|
||||||
|
"index_main" : {
|
||||||
|
"EN" : "Dive into the excitement of CardRush!",
|
||||||
|
"FR" : "Plongez dans l'excitation de CardRush!"
|
||||||
|
},
|
||||||
|
"index_description" : {
|
||||||
|
"EN": "Challenge your reactivity and dominate the game with friends in this fast-paced card race! Join now to experience the adrenaline.",
|
||||||
|
"FR": "Défiez votre réactivité et dominez le jeu avec des amis dans cette course effrénée aux cartes ! Rejoignez maintenant pour vivre l'adrénaline."
|
||||||
|
},
|
||||||
|
"navbar_login" : {
|
||||||
|
"EN": "Login",
|
||||||
|
"FR": "Se connecter"
|
||||||
|
},
|
||||||
|
"navbar_register" : {
|
||||||
|
"EN": "Register",
|
||||||
|
"FR": "S'inscrire"
|
||||||
|
},
|
||||||
|
"navbar_logout" : {
|
||||||
|
"EN": "Logout",
|
||||||
|
"FR": "Se déconnecter"
|
||||||
|
},
|
||||||
|
"navbar_profile" : {
|
||||||
|
"EN": "Profile",
|
||||||
|
"FR": "Profil"
|
||||||
|
},
|
||||||
|
"user_username" : {
|
||||||
|
"EN": "Username",
|
||||||
|
"FR": "Nom d'utilisateur"
|
||||||
|
},
|
||||||
|
"user_password" : {
|
||||||
|
"EN": "Password",
|
||||||
|
"FR": "Mot de passe"
|
||||||
|
},
|
||||||
|
"user_email" : {
|
||||||
|
"EN": "Email",
|
||||||
|
"FR": "Email"
|
||||||
|
},
|
||||||
|
"user_confirm_password" : {
|
||||||
|
"EN": "Confirm Password",
|
||||||
|
"FR": "Confirmer le mot de passe"
|
||||||
|
},
|
||||||
|
"user_confirm_password_input" : {
|
||||||
|
"EN": "Repeat your password",
|
||||||
|
"FR": "Répéter votre mot de passe"
|
||||||
|
},
|
||||||
|
"user_birthdate" : {
|
||||||
|
"EN": "Birthdate",
|
||||||
|
"FR": "Date de naissance"
|
||||||
|
},
|
||||||
|
"user_gender" : {
|
||||||
|
"EN": "Gender",
|
||||||
|
"FR": "Genre"
|
||||||
|
},
|
||||||
|
"user_gender_select_option" : {
|
||||||
|
"EN": "Choose an option",
|
||||||
|
"FR": "Choisir une option"
|
||||||
|
},
|
||||||
|
"user_gender_male" : {
|
||||||
|
"EN": "Male",
|
||||||
|
"FR": "Homme"
|
||||||
|
},
|
||||||
|
"user_gender_female" : {
|
||||||
|
"EN": "Female",
|
||||||
|
"FR": "Femme"
|
||||||
|
},
|
||||||
|
"user_gender_other" : {
|
||||||
|
"EN": "Other",
|
||||||
|
"FR": "Autre"
|
||||||
|
},
|
||||||
|
"login_title" : {
|
||||||
|
"EN": "Login",
|
||||||
|
"FR": "Se connecter"
|
||||||
|
},
|
||||||
|
"login_forgotten_password" : {
|
||||||
|
"EN": "Forgotten password?",
|
||||||
|
"FR": "Mot de passe oublié?"
|
||||||
|
},
|
||||||
|
"login_submit" : {
|
||||||
|
"EN": "Login",
|
||||||
|
"FR": "Se connecter"
|
||||||
|
},
|
||||||
|
"login_not_registered" : {
|
||||||
|
"EN": "Not registered?",
|
||||||
|
"FR": "Pas encore de compte?"
|
||||||
|
},
|
||||||
|
"login_register" : {
|
||||||
|
"EN": "Register now!",
|
||||||
|
"FR": "S'inscrire"
|
||||||
|
},
|
||||||
|
"login_error" : {
|
||||||
|
"EN": "Invalid username or password",
|
||||||
|
"FR": "Nom d'utilisateur ou mot de passe invalide"
|
||||||
|
},
|
||||||
|
"register_title" : {
|
||||||
|
"EN": "Register",
|
||||||
|
"FR": "S'inscrire"
|
||||||
|
},
|
||||||
|
"register_submit" : {
|
||||||
|
"EN": "Register",
|
||||||
|
"FR": "S'inscrire"
|
||||||
|
},
|
||||||
|
"register_already_registered" : {
|
||||||
|
"EN": "Already registered?",
|
||||||
|
"FR": "Déjà inscrit?"
|
||||||
|
},
|
||||||
|
"register_login" : {
|
||||||
|
"EN": "Login now!",
|
||||||
|
"FR": "Se connecter"
|
||||||
|
},
|
||||||
|
"register_error_username" : {
|
||||||
|
"EN": "Username already taken",
|
||||||
|
"FR": "Nom d'utilisateur déjà pris"
|
||||||
|
},
|
||||||
|
"register_error_email" : {
|
||||||
|
"EN": "Email already taken",
|
||||||
|
"FR": "Email déjà utilisé"
|
||||||
|
},
|
||||||
|
"register_error_password" : {
|
||||||
|
"EN": "Passwords do not match",
|
||||||
|
"FR": "Les mots de passe ne correspondent pas"
|
||||||
|
},
|
||||||
|
"forgotten_title" : {
|
||||||
|
"EN": "Forgotten password",
|
||||||
|
"FR": "Mot de passe oublié"
|
||||||
|
},
|
||||||
|
"forgotten_submit" : {
|
||||||
|
"EN": "Send email",
|
||||||
|
"FR": "Envoyer l'email"
|
||||||
|
},
|
||||||
|
"forgotten_error" : {
|
||||||
|
"EN": "The email entered is not associated with any account",
|
||||||
|
"FR": "L'email renseigné n'est associé à aucun compte"
|
||||||
|
},
|
||||||
|
"forgotten_success" : {
|
||||||
|
"EN": "Email sent successfully",
|
||||||
|
"FR": "Email envoyé avec succès"
|
||||||
|
},
|
||||||
|
"forgotten_email_description" : {
|
||||||
|
"EN": "Enter the email address associated with your account to receive a password reset link.",
|
||||||
|
"FR": "Entrez l'adresse email associée à votre compte pour recevoir un lien de réinitialisation de mot de passe."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,3 +14,19 @@ $navbarBurgers.forEach(el => {
|
|||||||
$target.classList.toggle('is-active');
|
$target.classList.toggle('is-active');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let languageSelector = document.getElementById('language-select');
|
||||||
|
|
||||||
|
languageSelector.addEventListener('change', function() {
|
||||||
|
const contextPath = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1);
|
||||||
|
const action = contextPath + "/translate";
|
||||||
|
console.log(action);
|
||||||
|
const method = "PUT";
|
||||||
|
|
||||||
|
const url = new URL(action);
|
||||||
|
url.searchParams.append("language", languageSelector.value);
|
||||||
|
|
||||||
|
fetch(url, {headers: {"Content-Type": "application/json"}, method})
|
||||||
|
.then(() => window.location.href = window.location.href)
|
||||||
|
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user