From c1ef5fc1a068361448905f9b998d3b5126f88e25 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Chlo=C3=A9=20JACOB?= <chloe.jacob4@etu.unistra.fr>
Date: Sun, 26 Feb 2023 01:10:24 +0100
Subject: [PATCH] mise en place des langues (part.1)

---
 package-lock.json                 | 14 +++++++-------
 package.json                      |  2 +-
 src/assets/locales/en/common.json | 16 ++++++++++++++--
 src/assets/locales/fr/common.json | 16 ++++++++++++++--
 src/views/AddPostView.tsx         | 27 ++++++++++++++++----------
 src/views/Profile.tsx             | 32 +++++++++++++++++++++++++++++++
 6 files changed, 85 insertions(+), 22 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 345aa03..2b444aa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
         "@fortawesome/react-fontawesome": "^0.2.0",
         "@jmetterrothan/instalike": "1.3.7",
         "axios": "0.27.2",
-        "i18next": "^22.4.9",
+        "i18next": "^22.4.10",
         "i18next-browser-languagedetector": "^7.0.1",
         "react": "^18.2.0",
         "react-dom": "^18.2.0",
@@ -3371,9 +3371,9 @@
       }
     },
     "node_modules/i18next": {
-      "version": "22.4.9",
-      "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.9.tgz",
-      "integrity": "sha512-8gWMmUz460KJDQp/ob3MNUX84cVuDRY9PLFPnV8d+Qezz/6dkjxwOaH70xjrCNDO+JrUL25iXfAIN9wUkInNZw==",
+      "version": "22.4.10",
+      "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.10.tgz",
+      "integrity": "sha512-3EqgGK6fAJRjnGgfkNSStl4mYLCjUoJID338yVyLMj5APT67HUtWoqSayZewiiC5elzMUB1VEUwcmSCoeQcNEA==",
       "funding": [
         {
           "type": "individual",
@@ -7843,9 +7843,9 @@
       }
     },
     "i18next": {
-      "version": "22.4.9",
-      "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.9.tgz",
-      "integrity": "sha512-8gWMmUz460KJDQp/ob3MNUX84cVuDRY9PLFPnV8d+Qezz/6dkjxwOaH70xjrCNDO+JrUL25iXfAIN9wUkInNZw==",
+      "version": "22.4.10",
+      "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.10.tgz",
+      "integrity": "sha512-3EqgGK6fAJRjnGgfkNSStl4mYLCjUoJID338yVyLMj5APT67HUtWoqSayZewiiC5elzMUB1VEUwcmSCoeQcNEA==",
       "requires": {
         "@babel/runtime": "^7.20.6"
       }
diff --git a/package.json b/package.json
index 5ca02d9..91d1ae9 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
     "@fortawesome/react-fontawesome": "^0.2.0",
     "@jmetterrothan/instalike": "1.3.7",
     "axios": "0.27.2",
-    "i18next": "^22.4.9",
+    "i18next": "^22.4.10",
     "i18next-browser-languagedetector": "^7.0.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/src/assets/locales/en/common.json b/src/assets/locales/en/common.json
index abef38a..d0ff8e8 100644
--- a/src/assets/locales/en/common.json
+++ b/src/assets/locales/en/common.json
@@ -1,6 +1,18 @@
 {
-    "followers": "followers {{ count }}",
+    "languages": {
+        "aaa": "EN",
+        "french": "french",
+        "english": "english"
+    },
     "actions": {
-        "follow": "follow"
+        "follow": "follow",
+        "send": "send",
+        "cancel": "cancel"
+    },
+    "addpost": {
+        "title": "Create a post",
+        "image": "Add an image",
+        "place": "Place",
+        "caption": "Caption"
     }
 }
\ No newline at end of file
diff --git a/src/assets/locales/fr/common.json b/src/assets/locales/fr/common.json
index 745b9eb..a2b1e9b 100644
--- a/src/assets/locales/fr/common.json
+++ b/src/assets/locales/fr/common.json
@@ -1,6 +1,18 @@
 {
-    "followers": "Abonnés {{ count }}",
+    "languages": {
+        "aaa": "FR",
+        "french": "français",
+        "english": "anglais"
+    },
     "actions": {
-        "follow": "suivre"
+        "follow": "suivre",
+        "send": "envoyer",
+        "cancel": "annuler"
+    },
+    "addpost": {
+        "title": "Créer un post",
+        "image": "Ajouter une image",
+        "place": "Lieu",
+        "caption": "Description"
     }
 }
\ No newline at end of file
diff --git a/src/views/AddPostView.tsx b/src/views/AddPostView.tsx
index 1d21ae2..328beec 100644
--- a/src/views/AddPostView.tsx
+++ b/src/views/AddPostView.tsx
@@ -9,9 +9,16 @@ import useAppDispatch from '../hooks/useAppDispatch';
 import usePost from '../hooks/usePostItems';
 import { addPost } from '../redux/post/thunks';
 
+// LANGUAGE
+import i18n from 'i18next';
+import {useTranslation} from "react-i18next";
+import Language from '../assets/enums/Language';
+
+
 const AddPostView = () => {
-const dispatch = useAppDispatch();
-const [selectedImg, setSelectedImg] = useState<File[]>([]);
+    const { t,i18n } = useTranslation();
+    const dispatch = useAppDispatch();
+    const [selectedImg, setSelectedImg] = useState<File[]>([]);
     const [location, setLocation] = useState("");
     const [caption, setCaption] = useState("");
     const [redirect, setRedirect] = useState(false);
@@ -33,11 +40,11 @@ const [selectedImg, setSelectedImg] = useState<File[]>([]);
         <Navbar />
         {/* MODAL */}
         <div className="max-w-[640px] mx-auto p-6 border rounded-xl mt-10 bg-white flex flex-col">
-            <p className="text-center font-bold text-2xl">Créer un post</p>
+            <p className="text-center font-bold text-2xl">{t('addpost.title')}</p>
             <form className="flex flex-col gap-4 mt-6">
                 {/* IMAGE */}
                 <div className="flex flex-col gap-1">
-                    <label htmlFor="image-upload" className="font-bold">Ajouter une image :</label>
+                    <label htmlFor="image-upload" className="font-bold">{t('addpost.image')} :</label>
                     <input type="file" accept="image/*" id="image-upload" onChange={(test)=> {
                         if (test.target.files) {
                         setSelectedImg(selectedImg.concat(test.target.files[0]));
@@ -47,13 +54,13 @@ const [selectedImg, setSelectedImg] = useState<File[]>([]);
                 </div>
                 {/* LOCATION */}
                 <div className="flex flex-col gap-1">
-                    <label htmlFor="location-input" className="font-bold">Lieu :</label>
+                    <label htmlFor="location-input" className="font-bold">{t('addpost.place')} :</label>
                     <input className="h-10 p-2 rounded-sm border" id="location-input" placeholder="Lieu" value={location} onChange={(e)=>
                     setLocation(e.target.value)} />
                 </div>
                 {/* DESCRIPTION */}
                 <div className="flex flex-col gap-1">
-                    <label htmlFor="caption-input" className="font-bold">Description :</label>
+                    <label htmlFor="caption-input" className="font-bold">{t('addpost.caption')} :</label>
                     <input className="h-10 p-2 rounded-sm border" id="caption-input" placeholder="Description" value={caption} onChange={(e)=>
                     setCaption(e.target.value)} />
                 </div>
@@ -62,7 +69,7 @@ const [selectedImg, setSelectedImg] = useState<File[]>([]);
                     {/* CANCEL BTN */}
                     <Link to="/feed">
                     <button
-                        className="bg-red-600 text-white font-bold h-10 rounded-md mt-2 uppercase w-full">Annuler</button>
+                        className="bg-red-600 text-white font-bold h-10 rounded-md mt-2 uppercase w-full">{t('actions.cancel')}</button>
                     </Link>
                     {/* SUBMIT BTN */}
                     <button className="bg-green-700 text-white font-bold h-10 rounded-md mt-2 uppercase w-full"
@@ -70,7 +77,7 @@ const [selectedImg, setSelectedImg] = useState<File[]>([]);
                             dispatch(addPost(selectedImg, location, caption)); //ajouter les autres éléments (accessibilityCaption, hasCommentsDisabled) ?
                         }}
                         >
-                        Envoyer
+                        {t('actions.send')}
                     </button>
                 </div>
             </form>
@@ -81,6 +88,6 @@ const [selectedImg, setSelectedImg] = useState<File[]>([]);
 
     </>
     );
-    };
+};
 
-    export default AddPostView;
\ No newline at end of file
+export default AddPostView;
\ No newline at end of file
diff --git a/src/views/Profile.tsx b/src/views/Profile.tsx
index 86b52e4..5ca144f 100644
--- a/src/views/Profile.tsx
+++ b/src/views/Profile.tsx
@@ -3,10 +3,20 @@ import Navbar from '../components/Navbar';
 import useAppDispatch from '../hooks/useAppDispatch';
 import { logoutAsync } from '../redux/auth/thunks';
 
+// LANGUAGE
+import i18n from 'i18next';
+import {useTranslation} from "react-i18next";
+import Language from '../assets/enums/Language';
+
+
+
+
 const Profile = () => {
+    const { t,i18n } = useTranslation();
     const dispatch = useAppDispatch();
     const navigate = useNavigate();
 
+
 return <>
     {/* HEADER */}
     <Navbar />
@@ -16,7 +26,29 @@ return <>
         <button className="bg-red-500 text-white font-bold h-10 rounded-md mt-2 py-2 px-4" onClick={() => {
             dispatch(logoutAsync());
             }}>Se déconnecter</button>
+        {/* CHANGEMENT DE LANGUE */}
+        <div className="flex gap-10 mt-10">
+            <button className="bg-blue-500 text-white font-bold h-10 rounded-md mt-2 py-2 px-4"
+            type="button"
+            onClick={() => {
+                i18n.changeLanguage(Language.EN);
+            }}
+            >
+            {t('languages.english')}
+            </button>
+            <button className="bg-blue-500 text-white font-bold h-10 rounded-md mt-2 py-2 px-4"
+            type="button"
+            onClick={() => {
+                i18n.changeLanguage(Language.FR);
+            }}
+            >
+            {t('languages.french')}
+            </button>
+        </div>
+        <p>{t('languages.aaa')}</p>
     </div>
+
+
 </>;
 };
 
-- 
GitLab