From 1ca1e1bcc6cecd0e99e757ff6becefb5c01582bb Mon Sep 17 00:00:00 2001 From: YannBirba Date: Tue, 16 Jul 2024 18:28:15 +0200 Subject: [PATCH] feat: implement french translation --- apps/web/next.config.mjs | 2 +- apps/web/src/assets/france-flag.png | Bin 0 -> 16395 bytes apps/web/src/locales/de.ts | 1 + apps/web/src/locales/en.ts | 1 + apps/web/src/locales/fr.ts | 194 ++++++++++++++++++++++++++ apps/web/src/locales/id.ts | 1 + apps/web/src/locales/index.ts | 1 + apps/web/src/pages/settings/index.tsx | 20 +++ 8 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 apps/web/src/assets/france-flag.png create mode 100644 apps/web/src/locales/fr.ts diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index cf0c818d..90acf3fd 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -35,7 +35,7 @@ const config = withMyBundleAnalyzer(withPWA( transpilePackages: ['@weatherio/api', '@weatherio/ui', '@weatherio/types', '@weatherio/city-data'], i18n: { defaultLocale: 'en', - locales: ['en', 'de', 'id'] + locales: ['en', 'de', 'id', 'fr'] } })) ) diff --git a/apps/web/src/assets/france-flag.png b/apps/web/src/assets/france-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ab41933913e2036ccfa8d4bf139722fb19494c GIT binary patch literal 16395 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

7C{32 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 H(fj`aX8y", + + "search.my location button": "Choisir mon emplacement", + + // legal page translations + "legal.main text": + "Le contenu de ce site a été soigneusement examiné et créé. Cependant, nous ne garantissons pas l'exactitude, l'exhaustivité et la pertinence des informations fournies. Nous ne sommes pas responsables des dommages ou pertes résultant de l'utilisation de ce site. Les opérateurs des pages liées sont seuls responsables de leur contenu. Toute responsabilité pour le contenu externe est expressément exclue.", + "legal.germany": "Allemagne", + "legal.information disclaimer": "Informations conformément au § 5 TMG", + + // home page translations + "home.today": "Aujourd'hui", + "home.9 day forecast": "Prévisions sur 9 jours", + "home.precipitation": "Précipitations", + "home.feels like": "Ressenti", + "home.visibility": "Visibilité", + "home.wind pressure": "Vent et Pression", + "home.air quality": "Qualité de l'air", + "home.pressure": "Pression", + "home.speed": "Vitesse", + "home.moon phase": "Phase de la Lune", + + "home.early morning": "Tôt le matin", + "home.morning": "Matin", + "home.noon": "Midi", + "home.afternoon": "Après-midi", + "home.night": "Nuit", + + "home.feels like phrase extremely warm": "Le soleil brûle aujourd'hui !", + "home.feels like phrase very warm": + "Le soleil cherche probablement à se rafraîchir !", + "home.feels like phrase warm": "Même la glace trouve la chaleur excessive !", + "home.feels like phrase slightly more warm": "C'est une journée torride !", + "home.feels like phrase slightly warm": + "Une journée parfaite pour un pique-nique !", + "home.feels like phrase neutral": + "La température idéale, ni trop chaude, ni trop froide.", + "home.feels like phrase slightly cold": + "Une veste légère pourrait être nécessaire.", + "home.feels like phrase slightly more cold": "C'est une journée glaciale !", + "home.feels like phrase cold": + "Les pingouins commandent du chocolat chaud à cause du froid !", + "home.feels like phrase very cold": + "Le temps glacial d'aujourd'hui fait même frissonner les bonshommes de neige !", + "home.feels like phrase extremely cold": + "Il fait si froid que même les ours polaires restent à l'intérieur !", + + "home.air quality text very poor": "Très Mauvaise", + "home.air quality text poor": "Mauvaise", + "home.air quality text fair": "Moyenne", + "home.air quality text moderate": "Modérée", + "home.air quality text good": "Bonne", + "home.air quality text excellent": "Excellente", + + "home.sunset": "Coucher du Soleil", + "home.sunrise": "Lever du Soleil", + + "home.moonset": "Coucher de la Lune", + "home.moonrise": "Lever de la Lune", + + "home.weather state stormy": "Orageux", + "home.weather state snowy": "Neigeux", + "home.weather state rainy": "Pluvieux", + "home.weather state very cloudy": "Très Nuageux", + "home.weather state cloudy": "Nuageux", + "home.weather state windy": "Venteux", + "home.weather state sunny": "Ensoleillé", + + "home.this hour": "Cette Heure", + "home.early hour time ending": "AM", + "home.late hour time ending": "PM", + + "home.9 day forecast card content": + 'Les prévisions pour les 9 prochains jours.
Les températures sont les températures moyennes de la journée. Une pour la journée et une pour la nuit.', + + "home.precipitation card title": "Précipitations Actuelles", + + "home.feels like card content": + "Ce paramètre de température prend en compte la perception humaine du temps", + + "home.visibility card title": "Visibilité Actuelle", + + "home.wind pressure card title": "Vent et Pression Actuels", + "home.wind pressure card content": + "Pression atmosphérique au niveau de la mer.
Au niveau de la mer, la pression atmosphérique est la force exercée par le poids de l'air au-dessus, avec une moyenne d'environ 1013,25 hPa.", + + "home.not available": "Non disponible", + + "home.moon phase card title": "Phase Lunaire Actuelle", + "home.moon phase card content": + "La phase de la lune est la forme de la partie éclairée par le soleil de la lune vue de la Terre.", + + "home.moon phase new moon": "Nouvelle Lune", + "home.moon phase waxing crescent": "Premier Croissant", + "home.moon phase first quarter": "Premier Quartier", + "home.moon phase waxing gibbous": "Gibbeuse Croissante", + "home.moon phase full moon": "Pleine Lune", + "home.moon phase waning gibbous": "Gibbeuse Décroissante", + "home.moon phase last quarter": "Dernier Quartier", + "home.moon phase waning crescent": "Dernier Croissant", + + "home.more information": "Plus d'Informations", + "home.less information": "Moins d'Informations", + + "home.sun hours": "Heures d'ensoleillement", + + "home.from": "De", + + // contact page translations + "contact.send button": "Envoyer", + "contact.sent button": "Envoyé", + "contact.first name": "Prénom", + "contact.last name": "Nom", + "contact.email": "Email", + "contact.message": "Message", + + "contact.sent toast": "Message envoyé !", + "contact.sending email loading toast": "Envoi de l'email...", + + "contact.invalid email": "Adresse email invalide", + "contact.at least 2 characters": + "Ce champ doit contenir au moins 2 caractères", + "contact.at least 10 characters": + "Ce champ doit contenir au moins 10 caractères", + + // contributors page translations + "contributors.made with love text": + 'Fait avec ♥\uFE0F par', + "contributors.founder": "Fondateur", + "contributors.engineer": "Ingénieur", + "contributors.designer": "Designer", + "contributors.translator": "Traducteur", +} as const; diff --git a/apps/web/src/locales/id.ts b/apps/web/src/locales/id.ts index 0910bacc..53e33ca9 100644 --- a/apps/web/src/locales/id.ts +++ b/apps/web/src/locales/id.ts @@ -37,6 +37,7 @@ export default { "settings.english": "Inggris", "settings.german": "Jerman", "settings.indonesian": "Indonesia", + "settings.french": "Perancis", // locationsettings page translations "locationsettings.add new location": "Tambah lokasi baru", diff --git a/apps/web/src/locales/index.ts b/apps/web/src/locales/index.ts index 35d22cf2..8788b695 100644 --- a/apps/web/src/locales/index.ts +++ b/apps/web/src/locales/index.ts @@ -10,4 +10,5 @@ export const { en: () => import("./en"), de: () => import("./de"), id: () => import("./id"), + fr: () => import("./fr"), }); diff --git a/apps/web/src/pages/settings/index.tsx b/apps/web/src/pages/settings/index.tsx index 430a3ce6..95615ed0 100644 --- a/apps/web/src/pages/settings/index.tsx +++ b/apps/web/src/pages/settings/index.tsx @@ -6,6 +6,7 @@ import { RxCheck } from "react-icons/rx"; import type { TemperatureUnitType, WindSpeedUnitType } from "~/states"; import germanFlag from "~/assets/german-flag.png"; import indonesianFlag from "~/assets/indonesian-flag.png"; +import franceFlag from "~/assets/france-flag.png"; import usaFlag from "~/assets/usa-flag.png"; import Layout from "~/components/Layout"; import { @@ -199,6 +200,25 @@ const Settings = observer(() => { )} +