diff --git a/next-i18next.config.js b/next-i18next.config.js
index aa8f4d6..55c251b 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -2,9 +2,7 @@ const path = require("path");
module.exports = {
i18n: {
- locales: ["en", "de", "es", "ar", "he", "zh", "fa"],
- defaultLocale: "en",
- localeDetection: false,
+ locales: ['en', 'vi', 'fr'], // List all supported locales
+ defaultLocale: 'en', // Set the default locale
},
- localePath: path.resolve("./public/locales"),
-};
\ No newline at end of file
+};
diff --git a/next.config.js b/next.config.js
index 95705ee..b720da2 100644
--- a/next.config.js
+++ b/next.config.js
@@ -5,17 +5,10 @@ const { i18n } = require("./next-i18next.config");
module.exports = {
- typescript: {
- // !! WARN !!
- // Dangerously allow production builds to successfully complete even if
- // your project has type errors.
- // !! WARN !!
- ignoreBuildErrors: true,
- },
+
eslint: {
ignoreDuringBuilds: false,
},
- i18n,
images: {
remotePatterns: [
diff --git a/package-lock.json b/package-lock.json
index 04c4363..0ed4be4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,7 +25,7 @@
"framer-motion": "^10.12.16",
"google-libphonenumber": "^3.2.38",
"google-map-react": "^2.2.1",
- "i18next": "^23.15.1",
+ "i18next": "^23.16.4",
"libphonenumber-js": "^1.11.9",
"lodash": "^4.17.21",
"next": "^13.4.3",
@@ -35,7 +35,7 @@
"react-datepicker": "^4.11.0",
"react-dom": "^18.2.0",
"react-hooks-global-state": "^2.1.0",
- "react-i18next": "^15.0.2",
+ "react-i18next": "^15.1.0",
"react-icons": "^5.3.0",
"react-swipeable": "^7.0.0",
"react-toastify": "^10.0.5",
@@ -2749,9 +2749,9 @@
"license": "BSD-3-Clause"
},
"node_modules/i18next": {
- "version": "23.15.1",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.15.1.tgz",
- "integrity": "sha512-wB4abZ3uK7EWodYisHl/asf8UYEhrI/vj/8aoSsrj/ZDxj4/UXPOa1KvFt1Fq5hkUHquNqwFlDprmjZ8iySgYA==",
+ "version": "23.16.4",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.4.tgz",
+ "integrity": "sha512-9NIYBVy9cs4wIqzurf7nLXPyf3R78xYbxExVqHLK9od3038rjpyOEzW+XB130kZ1N4PZ9inTtJ471CRJ4Ituyg==",
"funding": [
{
"type": "individual",
@@ -4335,9 +4335,9 @@
}
},
"node_modules/react-i18next": {
- "version": "15.0.2",
- "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.2.tgz",
- "integrity": "sha512-z0W3/RES9Idv3MmJUcf0mDNeeMOUXe+xoL0kPfQPbDoZHmni/XsIoq5zgT2MCFUiau283GuBUK578uD/mkAbLQ==",
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.0.tgz",
+ "integrity": "sha512-zj3nJynMnZsy2gPZiOTC7XctCY5eQGqT3tcKMmfJWC9FMvgd+960w/adq61j8iPzpwmsXejqID9qC3Mqu1Xu2Q==",
"dependencies": {
"@babel/runtime": "^7.25.0",
"html-parse-stringify": "^3.0.1"
diff --git a/package.json b/package.json
index 9396ca2..8825d58 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
"framer-motion": "^10.12.16",
"google-libphonenumber": "^3.2.38",
"google-map-react": "^2.2.1",
- "i18next": "^23.15.1",
+ "i18next": "^23.16.4",
"libphonenumber-js": "^1.11.9",
"lodash": "^4.17.21",
"next": "^13.4.3",
@@ -42,7 +42,7 @@
"react-datepicker": "^4.11.0",
"react-dom": "^18.2.0",
"react-hooks-global-state": "^2.1.0",
- "react-i18next": "^15.0.2",
+ "react-i18next": "^15.1.0",
"react-icons": "^5.3.0",
"react-swipeable": "^7.0.0",
"react-toastify": "^10.0.5",
diff --git a/public/locales/en/FAQ.json b/public/locales/en/FAQ.json
new file mode 100644
index 0000000..e70cd29
--- /dev/null
+++ b/public/locales/en/FAQ.json
@@ -0,0 +1,25 @@
+{
+ "faqTitle": "Frequently Asked Questions",
+ "faqSubtitle": "Have Questions? We are here to help you!",
+ "faqQuestion1": "How can I book a tour on your site?",
+ "faqAnswer1": "To book a tour, simply select your desired destination from the 'List of Tours', choose your dates, and follow the steps to complete the booking process.",
+ "faqQuestion2": "Can I customize my tour?",
+ "faqAnswer2": "Yes, our 'Customize Tour' feature allows you to tailor your journey based on your preferences. Click on 'Customize Tour' at the top of the page to start personalizing your experience.",
+ "faqQuestion3": "What payment methods do you accept?",
+ "faqAnswer3": "We accept all major credit cards, PayPal, and bank transfers. You can choose your preferred method during the checkout process.",
+ "faqQuestion4": "How do I know my booking is confirmed?",
+ "faqAnswer4": "Once you complete the payment process, you will receive a confirmation email with all the details of your booking. You can also view your booking details in your account dashboard.",
+ "faqQuestion5": "Can I cancel or modify my booking?",
+ "faqAnswer5": "Yes, you can cancel or modify your booking from your account. Please note that cancellations must be made at least 24 hours before the tour starts to be eligible for a refund.",
+ "faqQuestion6": "Are there any hidden fees?",
+ "faqAnswer6": "No, all fees are transparent and shown upfront before you complete your booking. We ensure there are no hidden fees.",
+ "faqQuestion7": "Do you offer group discounts?",
+ "faqAnswer7": "Yes, we offer group discounts for larger bookings. Please contact our support team for more information on group rates.",
+ "faqQuestion8": "Is travel insurance included in the booking?",
+ "faqAnswer8": "Yes, all our tour packages include basic travel insurance. You can choose to upgrade your insurance package during the checkout process.",
+ "faqQuestion9": "What happens if the tour is canceled by the provider?",
+ "faqAnswer9": "If the tour is canceled by the provider due to unforeseen circumstances, you will receive a full refund or the option to reschedule your tour.",
+ "faqQuestion10": "How can I contact customer support?",
+ "faqAnswer10": "You can contact customer support by clicking the 'Contact Us' button at the bottom of the page or by visiting our support section."
+ }
+
\ No newline at end of file
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 0c3dfe8..f1ff91e 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -1,6 +1,114 @@
{
- "hello": "Hello",
- "welcome": "Welcome to our website",
- "language": "Language"
- }
-
\ No newline at end of file
+ "home": "Home",
+ "allTours": "All Tours",
+ "blogs": "Blogs",
+ "faq": "FAQ",
+ "aboutUs": "About Us",
+ "customTour": "Custom Tour",
+ "searchPlaceholder": "Where to?",
+ "searchDescription": "Anywhere • Any week • Add guests",
+ "beginAdventure": "Begin your spiritual adventure",
+ "planPilgrimage": "Plan your pilgrimage with ease. Find the best accommodations, transportation, and guided experiences to Shia shrines around the world",
+ "startJourney": "Start your journey",
+ "listOfTours": "List of Tours",
+ "exploreTours": "Explore tours and accommodations tailored for a spiritual and memorable journey",
+ "tourPeriod": "Tour period",
+ "tourPeriodDescription": "Start - End",
+ "guests": "Guests",
+ "addGuests": "Add guests",
+ "available": "Available",
+ "soldOut": "Sold Out",
+ "showMore": "Show me more",
+ "happeningCities": "Happening cities",
+ "costEffectiveAdvertising": "Cost-effective advertising",
+ "costEffectiveDescription": "With a free listing, you can advertise your rental with no upfront costs",
+ "reachMillions": "Reach millions with Chisfis",
+ "reachMillionsDescription": "Millions of people are searching for unique places to stay around the world",
+ "secureAndSimple": "Secure and simple",
+ "secureDescription": "A Holiday Lettings listing gives you a secure and easy way to take bookings and payments online",
+ "mobileApps": "Mobile Apps",
+ "mobileAppsDescription": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus porttitor nisl, sit amet finibus libero.",
+ "installation": "Installation",
+ "releaseNotes": "Release Notes",
+ "upgradeGuide": "Upgrade Guide",
+ "browserSupport": "Browser Support",
+ "editorSupport": "Editor Support",
+ "designFeatures": "Design features",
+ "prototyping": "Prototyping",
+ "designSystems": "Design systems",
+ "pricing": "Pricing",
+ "security": "Security",
+ "bestPractices": "Best practices",
+ "support": "Support",
+ "developers": "Developers",
+ "learnDesign": "Learn design",
+ "releases": "Releases",
+ "discussionForums": "Discussion Forums",
+ "codeOfConduct": "Code of Conduct",
+ "communityResources": "Community Resources",
+ "contributing": "Contributing",
+ "concurrentMode": "Concurrent Mode",
+ "goodNews": "Good news from far away",
+ "whatPeopleThink": "Let's see what people think of Chisfis",
+ "testimonial": "This place is exactly like the picture posted on Chisfis. Great service, we had a great stay!",
+ "clientName": "Tiana Abie",
+ "clientLocation": "Malaysia",
+ "myTrips": "My Trips",
+ "account": "Account",
+ "menu": "Menu",
+ "gettingStarted": "Getting started",
+ "explore": "Explore",
+ "resources": "Resources",
+ "community": "Community",
+ "placeType": "Type of place",
+ "noTours": "No tours available",
+ "itinerary": "Itinerary",
+ "itineraryTitle": "Itinerary",
+ "total": "Total",
+ "reserve": "Reserve",
+ "tourFeatures": "Tour Features",
+ "tourFeaturesTitle": "Tour Features",
+ "startRating": "Start Rating",
+ "listingDetails": "Details",
+ "imageAlt": "Image of the tour",
+ "loading": "Loading...",
+ "adults": "Adults",
+ "adultsDesc": "Ages 13 or above",
+ "children": "Children",
+ "childrenDesc": "Ages 2–12",
+ "infants": "Infants",
+ "infantsDesc": "Ages 0–2",
+ "traveler": "Traveler",
+ "responses": "Responses ({{count}})",
+ "submit": "Submit",
+ "cancel": "Cancel",
+ "relatedPosts": "Related Posts",
+ "aboutUsHeading": "👋 About Us.",
+ "aboutUsSubheading": "We are a passionate team dedicated to crafting unforgettable travel experiences for explorers and dreamers alike. From serene escapes on tropical beaches to adrenaline-fueled adventures in exotic locales, we curate journeys that are as unique as you are. Join us and let’s explore the world, one adventure at a time!",
+ "statisticTitle": "🚀 Fast Facts",
+ "statisticDescription": "We’re impartial and independent, and every day we create distinctive, world-class programmes and content.",
+ "statisticHeading1": "10 million",
+ "statisticSubHeading1": "Articles have been public around the world (as of Sept. 30, 2021)",
+ "statisticHeading2": "100,000",
+ "statisticSubHeading2": "Registered users account (as of Sept. 30, 2021)",
+ "statisticHeading3": "220+",
+ "statisticSubHeading3": "Countries and regions have our presence (as of Sept. 30, 2021)",
+ "customTrip": "Custom Trip",
+ "guide": "Guide",
+ "guideDescription": "First, write the origin of your departure, then choose the first destination of your trip, the number of nights of stay, and the means of travel, then choose your travel destinations if you wish.",
+ "beginYourTrip": "Begin your trip",
+ "startDate": "Start Date",
+ "numberOfPassengers": "Number Of Passengers",
+ "destination": "Destination",
+ "selectCity": "Select City",
+ "transportation": "Transportation",
+ "selectTransport": "Select Transport",
+ "hotel": "Hotel",
+ "selectHotel": "Select Hotel",
+ "duration": "Duration",
+ "finishDate": "Finish date",
+ "addDestination": "Add Destination",
+ "continue": "Continue",
+ "successMessage": "Successfully Registered",
+ "to": "to"
+}
diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
new file mode 100644
index 0000000..4bc4bbe
--- /dev/null
+++ b/public/locales/fr/common.json
@@ -0,0 +1,67 @@
+{
+ "home": "Accueil",
+ "allTours": "Tous les Tours",
+ "blogs": "Blogs",
+ "faq": "FAQ",
+ "aboutUs": "À propos de nous",
+ "customTour": "Visite sur mesure",
+ "searchPlaceholder": "Où aller ?",
+ "searchDescription": "Partout • À toute semaine • Ajouter des invités",
+ "beginAdventure": "Commencez votre aventure spirituelle",
+ "planPilgrimage": "Planifiez votre pèlerinage avec facilité. Trouvez les meilleures accommodations, le transport et les expériences guidées vers les sanctuaires chiites à travers le monde",
+ "startJourney": "Commencer votre voyage",
+ "listOfTours": "Liste des Tours",
+ "exploreTours": "Explorez les visites et les hébergements adaptés pour un voyage spirituel et mémorable",
+ "tourPeriod": "Période de visite",
+ "tourPeriodDescription": "Début - Fin",
+ "guests": "Invités",
+ "addGuests": "Ajouter des invités",
+ "available": "Disponible",
+ "soldOut": "Épuisé",
+ "showMore": "Montrez-moi plus",
+ "happeningCities": "Villes en vogue",
+ "costEffectiveAdvertising": "Publicité rentable",
+ "costEffectiveDescription": "Avec une annonce gratuite, vous pouvez promouvoir votre location sans frais initiaux",
+ "reachMillions": "Atteignez des millions avec Chisfis",
+ "reachMillionsDescription": "Des millions de personnes recherchent des lieux uniques où séjourner à travers le monde",
+ "secureAndSimple": "Sécurisé et simple",
+ "secureDescription": "Une annonce de Holiday Lettings vous offre un moyen sécurisé et facile de prendre des réservations et des paiements en ligne",
+ "mobileApps": "Applications Mobiles",
+ "mobileAppsDescription": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus porttitor nisl, sit amet finibus libero.",
+ "installation": "Installation",
+ "releaseNotes": "Notes de version",
+ "upgradeGuide": "Guide de mise à niveau",
+ "browserSupport": "Support des navigateurs",
+ "editorSupport": "Support de l'éditeur",
+ "designFeatures": "Fonctionnalités de conception",
+ "prototyping": "Prototypage",
+ "designSystems": "Systèmes de design",
+ "pricing": "Tarification",
+ "security": "Sécurité",
+ "bestPractices": "Meilleures pratiques",
+ "support": "Support",
+ "developers": "Développeurs",
+ "learnDesign": "Apprendre la conception",
+ "releases": "Versions",
+ "discussionForums": "Forums de discussion",
+ "codeOfConduct": "Code de conduite",
+ "communityResources": "Ressources communautaires",
+ "contributing": "Contribuer",
+ "concurrentMode": "Mode concurrent",
+ "goodNews": "Bonne nouvelle de loin",
+ "whatPeopleThink": "Voyons ce que les gens pensent de Chisfis",
+ "testimonial": "Cet endroit est exactement comme la photo publiée sur Chisfis. Excellent service, nous avons passé un excellent séjour !",
+ "clientName": "Tiana Abie",
+ "clientLocation": "Malaisie",
+ "myTrips": "Mes Voyages",
+ "account": "Compte",
+ "menu": "Menu",
+ "gettingStarted": "Commencer",
+ "explore": "Explorer",
+ "resources": "Ressources",
+ "community": "Communauté",
+ "placeType": "Type de lieu",
+ "noTours": "Aucun tour disponible"
+
+ }
+
\ No newline at end of file
diff --git a/src/app/(account-pages)/(components)/Nav.tsx b/src/app/[locale]/(account-pages)/(components)/Nav.tsx
similarity index 100%
rename from src/app/(account-pages)/(components)/Nav.tsx
rename to src/app/[locale]/(account-pages)/(components)/Nav.tsx
diff --git a/src/app/(account-pages)/account/page.tsx b/src/app/[locale]/(account-pages)/account/page.tsx
similarity index 100%
rename from src/app/(account-pages)/account/page.tsx
rename to src/app/[locale]/(account-pages)/account/page.tsx
diff --git a/src/app/(account-pages)/bills/BillCard.tsx b/src/app/[locale]/(account-pages)/bills/BillCard.tsx
similarity index 100%
rename from src/app/(account-pages)/bills/BillCard.tsx
rename to src/app/[locale]/(account-pages)/bills/BillCard.tsx
diff --git a/src/app/(account-pages)/bills/[slug]/page.tsx b/src/app/[locale]/(account-pages)/bills/[slug]/page.tsx
similarity index 100%
rename from src/app/(account-pages)/bills/[slug]/page.tsx
rename to src/app/[locale]/(account-pages)/bills/[slug]/page.tsx
diff --git a/src/app/(account-pages)/bills/page.tsx b/src/app/[locale]/(account-pages)/bills/page.tsx
similarity index 100%
rename from src/app/(account-pages)/bills/page.tsx
rename to src/app/[locale]/(account-pages)/bills/page.tsx
diff --git a/src/app/(account-pages)/layout.tsx b/src/app/[locale]/(account-pages)/layout.tsx
similarity index 100%
rename from src/app/(account-pages)/layout.tsx
rename to src/app/[locale]/(account-pages)/layout.tsx
diff --git a/src/app/(account-pages)/my-trips/page.tsx b/src/app/[locale]/(account-pages)/my-trips/page.tsx
similarity index 100%
rename from src/app/(account-pages)/my-trips/page.tsx
rename to src/app/[locale]/(account-pages)/my-trips/page.tsx
diff --git a/src/app/(account-pages)/passengers-list/PassengerTable.tsx b/src/app/[locale]/(account-pages)/passengers-list/PassengerTable.tsx
similarity index 100%
rename from src/app/(account-pages)/passengers-list/PassengerTable.tsx
rename to src/app/[locale]/(account-pages)/passengers-list/PassengerTable.tsx
diff --git a/src/app/(account-pages)/passengers-list/[id]/page.tsx b/src/app/[locale]/(account-pages)/passengers-list/[id]/page.tsx
similarity index 99%
rename from src/app/(account-pages)/passengers-list/[id]/page.tsx
rename to src/app/[locale]/(account-pages)/passengers-list/[id]/page.tsx
index d4231ef..c402afa 100644
--- a/src/app/(account-pages)/passengers-list/[id]/page.tsx
+++ b/src/app/[locale]/(account-pages)/passengers-list/[id]/page.tsx
@@ -4,7 +4,7 @@ import React, { useEffect, useState } from "react";
import { FC } from "react";
import ButtonPrimary from "@/shared/ButtonPrimary";
import Input from "@/shared/Input";
-import FormItem from "@/app/add-listing/FormItem";
+import FormItem from "@/app/[locale]/add-listing/FormItem";
import getImageURL from "@/components/api/getImageURL";
import axiosInstance from "@/components/api/axios";
import { useRouter } from "next/navigation";
diff --git a/src/app/(account-pages)/passengers-list/page.tsx b/src/app/[locale]/(account-pages)/passengers-list/page.tsx
similarity index 100%
rename from src/app/(account-pages)/passengers-list/page.tsx
rename to src/app/[locale]/(account-pages)/passengers-list/page.tsx
diff --git a/src/app/(client-components)/(Header)/AvatarDropdown.tsx b/src/app/[locale]/(client-components)/(Header)/AvatarDropdown.tsx
similarity index 100%
rename from src/app/(client-components)/(Header)/AvatarDropdown.tsx
rename to src/app/[locale]/(client-components)/(Header)/AvatarDropdown.tsx
diff --git a/src/app/(client-components)/(Header)/CurrencyDropdown.tsx b/src/app/[locale]/(client-components)/(Header)/CurrencyDropdown.tsx
similarity index 100%
rename from src/app/(client-components)/(Header)/CurrencyDropdown.tsx
rename to src/app/[locale]/(client-components)/(Header)/CurrencyDropdown.tsx
diff --git a/src/app/(client-components)/(Header)/DropdownTravelers.tsx b/src/app/[locale]/(client-components)/(Header)/DropdownTravelers.tsx
similarity index 100%
rename from src/app/(client-components)/(Header)/DropdownTravelers.tsx
rename to src/app/[locale]/(client-components)/(Header)/DropdownTravelers.tsx
diff --git a/src/app/(client-components)/(Header)/Header.tsx b/src/app/[locale]/(client-components)/(Header)/Header.tsx
similarity index 100%
rename from src/app/(client-components)/(Header)/Header.tsx
rename to src/app/[locale]/(client-components)/(Header)/Header.tsx
diff --git a/src/app/(client-components)/(Header)/Header3.tsx b/src/app/[locale]/(client-components)/(Header)/Header3.tsx
similarity index 100%
rename from src/app/(client-components)/(Header)/Header3.tsx
rename to src/app/[locale]/(client-components)/(Header)/Header3.tsx
diff --git a/src/app/(client-components)/(Header)/LangDropdown.tsx b/src/app/[locale]/(client-components)/(Header)/LangDropdown.tsx
similarity index 63%
rename from src/app/(client-components)/(Header)/LangDropdown.tsx
rename to src/app/[locale]/(client-components)/(Header)/LangDropdown.tsx
index 8ec4695..c88ebfb 100644
--- a/src/app/(client-components)/(Header)/LangDropdown.tsx
+++ b/src/app/[locale]/(client-components)/(Header)/LangDropdown.tsx
@@ -1,15 +1,29 @@
-import React, { Fragment, useState } from "react";
+import React, { Fragment, useState, useEffect } from "react";
import { Popover, Tab, Transition } from "@headlessui/react";
+import { useRouter, usePathname } from "next/navigation";
import { ChevronDownIcon } from "@heroicons/react/24/outline";
import { MdOutlineLanguage } from "react-icons/md";
-import { useTranslation } from "next-i18next";
-import { useRouter } from "next/navigation"; // Importing from next/navigation
// Language options
const languageOptions = [
- { id: "en", name: "English", description: "United States", icon: },
- { id: "vi", name: "Vietnamese", description: "Vietnam", icon: },
- { id: "fr", name: "French", description: "France", icon: },
+ {
+ id: "en",
+ name: "English",
+ description: "United States",
+ icon: ,
+ },
+ {
+ id: "vi",
+ name: "Vietnamese",
+ description: "Vietnam",
+ icon: ,
+ },
+ {
+ id: "fr",
+ name: "French",
+ description: "France",
+ icon: ,
+ },
];
interface LangDropdownProps {
@@ -25,14 +39,35 @@ const LangDropdown: React.FC = ({
panelClassName = "top-full right-0 max-w-sm w-96",
className = "hidden md:flex",
}) => {
- const { t } = useTranslation("common");
const router = useRouter();
+ const pathname = usePathname();
const [selectedItem, setSelectedItem] = useState(languageOptions[0]);
- // Handle language selection and route change
- const handleItemClick = (option: any) => {
- setSelectedItem(option);
- router.push(`/${option.id}`); // Change locale using next/navigation's router
+ // Update selectedItem based on the current locale in the URL
+ useEffect(() => {
+ const locales = ["en", "vi", "fr"];
+ const segments = pathname.split("/").filter(Boolean);
+ const currentLocale = locales.includes(segments[0]) ? segments[0] : "en";
+ const newSelectedItem =
+ languageOptions.find((item) => item.id === currentLocale) ||
+ languageOptions[0];
+ setSelectedItem(newSelectedItem);
+ }, [pathname]);
+
+ const handleLanguageChange = (locale: string) => {
+ const segments = pathname.split("/").filter(Boolean);
+
+ // Remove the current locale if present
+ const locales = ["en", "vi", "fr"];
+ if (locales.includes(segments[0])) {
+ segments.shift();
+ }
+
+ // Prepend the new locale
+ const newPathname = `/${locale}/${segments.join("/")}`;
+
+ // Navigate to the new locale path
+ router.push(newPathname);
};
return (
@@ -83,22 +118,32 @@ const LangDropdown: React.FC = ({
-
+