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 import="uppa.project.Global" %>
|
||||
<%@ tag import="uppa.project.web.translation.Translator" %>
|
||||
|
||||
<%@attribute name="title"%>
|
||||
<%@attribute name="head" fragment="true" %>
|
||||
<%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %>
|
||||
|
||||
<% Translator translator =(Translator) session.getAttribute("translator"); %>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="has-navbar-fixed-top">
|
||||
<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');
|
||||
});
|
||||
});
|
||||
|
||||
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