Commit 6707e48d by asranov0003

feat: add uzbek language

parent ad791fa2
export type Language = "en" | "ru";
export type Language = "en" | "ru" | "uz";
export interface LanguageContextType {
language: Language;
......
......@@ -21,7 +21,7 @@
"auth": {
"entrance": "Sign In",
"login": "Login",
"loginPlaceholder": "example@mail.com",
"loginPlaceholder": "example@gmail.com",
"password": "Password",
"passwordPlaceholder": "Enter your password",
"noAccount": "Don't have an account?",
......
......@@ -3,6 +3,7 @@ import { initReactI18next } from "react-i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import enTranslation from "./en/en.json";
import ruTranslation from "./ru/ru.json";
import uzTranslation from "./uz/uz.json";
if (!localStorage.getItem("i18nextLng")) {
localStorage.setItem("i18nextLng", "en");
......@@ -24,6 +25,9 @@ i18n
ru: {
translation: ruTranslation,
},
uz: {
translation: uzTranslation,
},
},
});
......
......@@ -21,7 +21,7 @@
"auth": {
"entrance": "Вход",
"login": "Логин",
"loginPlaceholder": "example@mail.com",
"loginPlaceholder": "example@gmail.com",
"password": "Пароль",
"passwordPlaceholder": "Введите ваш пароль",
"noAccount": "Нет аккаунта?",
......
{
"common": {
"yes": "Ha",
"no": "Yo'q",
"granted": "Berildi",
"denied": "Rad etildi",
"loading": "Yuklanmoqda...",
"selectDates": "Sanalarni tanlang",
"selectTime": "Vaqtni tanlang",
"selectAppAndDates": "Ilova va sanalarni tanlang",
"from": "Dan",
"to": "Gacha",
"confirm": "Tasdiqlash",
"password": "Parol",
"passwordPlaceholder": "Parolingizni kiriting",
"selectDevice": "Qurilmani tanlang",
"noData": "Hech qanday ma'lumot topilmadi",
"downloadForAndroid": "Android uchun yuklab olish",
"downloadForIos": "iOS uchun yuklab olish"
},
"auth": {
"entrance": "Kirish",
"login": "Kirish",
"loginPlaceholder": "example@gmail.com",
"password": "Parol",
"passwordPlaceholder": "Parolingizni kiriting",
"noAccount": "Akkauntingiz yo'qmi?",
"register": "Ro'yxatdan o'tish",
"forgetPassword": "Parolni unutdingizmi?",
"recover": "Tiklash",
"passwordRecovery": "Parolni tiklash",
"newPassword": "Yangi parol",
"newPasswordPlaceholder": "Yangi parolni kiriting",
"repeatPassword": "Parolni takrorlang",
"repeatPasswordPlaceholder": "Yangi parolni takrorlang",
"passwordsDoNotMatch": "Parollar mos kelmaydi",
"iaccept": "Men qabul qilaman",
"terms": "foydalanish shartlari",
"privacyPolicy": "maxfiylik siyosati"
},
"navs": {
"home": "Bosh sahifa",
"notifications": "Bildirishnomalar",
"news": "Yangiliklar",
"subscriptions": "Obunalar",
"settings": "Sozlamalar",
"logout": "Chiqish"
},
"menu": {
"routes": "Yo'nalishlar",
"manageApps": "Ilovalarni boshqarish",
"browserHistory": "Brauzer tarixi",
"messengers": "Xabarlar",
"calls": "Qo'ng'iroqlar",
"permissions": "Ruxsatlar",
"recordingEnvironment": "Yozib olish muhiti",
"removeDevice": "Qurilmani olib tashlash"
},
"home": {
"kmh": "km/soat"
},
"manage": {
"usage": "Foydalanishni boshqarish",
"blockUnwantedApps": "Keraksiz ilovalarni bloklash",
"setTimeLimit": "Telefon foydalanish vaqti chegarasini o'rnatish",
"lockDevice": "Qurilmani bloklash",
"unlockDevice": "Qurilmani ochish",
"lockDeviceTitle": "Qurilmani bloklash",
"lockDeviceDesc": "Davom etishni xohlaysizmi?",
"unlockDeviceTitle": "Qurilmani ochish",
"unlockDeviceDesc": "Davom etishni xohlaysizmi?"
},
"blockapps": {
"allapps": "Barcha ilovalar",
"allappsDesc": "Bloklangan ilovalar har qanday vaqtda foydalanishga yaroqsiz bo'ladi. Ruxsat berilgan ilovalar qurilma bloklangan bo'lsa ham, har doim foydalanish uchun mavjud bo'ladi.",
"block": "Bloklash",
"allow": "Ruxsat berish",
"noFoundApps": "Ilovalar topilmadi",
"blockedApps": "Bloklangan ilovalar",
"allowedApps": "Ruxsat berilgan ilovalar",
"unBlock": "Blokdan chiqarish",
"remove": "Olib tashlash"
},
"recording": {
"audioFiles": "Audio fayllar",
"audioFilesEmpty": "Audio fayllar topilmadi.",
"imageFiles": "Rasm fayllari",
"imageFilesEmpty": "Rasm fayllari topilmadi.",
"recordNow": "Hozir yozib olish",
"audio": "Audio",
"image": "Rasm"
},
"session": {
"activeTill": "Faoliyat davom etadi",
"noSubscription": "Obuna yo'q",
"emailStatus": "Elektron pochta holati",
"verified": "Tasdiqlangan",
"unVerified": "Tasdiqlanmagan"
},
"notification": {
"title": "Bildirishnomalar",
"empty": "Hech qanday bildirishnoma yo'q"
},
"settings": {
"title": "Sozlamalar",
"account": "Hisob",
"deleteAccount": "Hisobni o'chirish",
"recoverPassword": "Parolni tiklash",
"logout": "Chiqish"
},
"permissions": {
"title": "Ruxsatlar",
"installedApp": "O'rnatilgan ilovalar",
"installedAppDescription": "Telefoningizdagi o'rnatilgan ilovalar haqida ma'lumot to'plash uchun ruxsat bergan",
"microphone": "Mikrofon",
"microphoneDescription": "Farzandingiz qurilmasining atrof-muhitini yozib olish imkonini beradi",
"acctivity": "Faoliyatni tanib olish",
"activityDescription": "Farzandingizning faoliyatini kuzatishga imkon beradi",
"location": "Joylashuv",
"locationDescription": "Ilova, hatto yopiq bo'lsa ham, farzandingizning joylashuvini yig'adi",
"accessibility": "Kirish imkoniyati",
"accessibilityDesctiption": "Bu ruxsat sizga keraksiz ilovalar va veb-saytlarni bloklash va ekran vaqtini chegaralash imkonini beradi",
"systemAlert": "Ilovalar ustida chizish",
"systemAlertDescription": "Bu ruxsat, faqat ruxsat berilgan ilovalar uchun kirishni boshqarish imkonini beradi.",
"batteryOptimization": "Batareya optimizatsiyasi",
"batteryOptimizationDescription": "Ilova fon rejimida ishlashini ta'minlash uchun batareya optimizatsiyasini o'chirib qo'yish zarur",
"deviceAdmin": "Qurilma ma'muri",
"deviceAdminDescription": "Qurilmani bloklash va o'chirishdan himoya qilish uchun ma'mur huquqlari zarur",
"notifications": "Bildirishnomalar",
"notificationsDescription": "Bildirishnomalarni ko'rsatish uchun zarur",
"phoneState": "Telefon holati",
"phoneStateDescription": "Bu farzandingizning telefon holatini, masalan, batareya zaryadini bilishga imkon beradi"
},
"browserHistory": {
"title": "Brauzer tarixi",
"empty": "Brauzer tarixi topilmadi.",
"website": "Veb-sayt",
"date": "Sana"
},
"callHistory": {
"title": "Qo'ng'iroqlar tarixi",
"empty": "Qo'ng'iroqlar tarixi topilmadi."
},
"messengers": {
"title": "Chats",
"empty": "Xabarlar topilmadi."
},
"usageLimits": {
"title": "Telefon foydalanish vaqti chegaralari",
"desc": "Kunlik telefon foydalanish cheklovini o'rnating.",
"allowedApps": "Ruxsat berilgan ilovalar hali ham foydalanishga ochiq bo'ladi."
},
"pincode": {
"enterTitle": "PIN kodni kiriting",
"createTitle": "PIN kodni yarating",
"confirmTitle": "PIN kodni tasdiqlang"
},
"device": {
"deleteDevice": "Qurilmani o'chirish",
"deleteDeviceDesc": "Siz ushbu qurilmani o'chirishni xohlaysizmi?"
},
"logout": {
"title": "Chiqish",
"desc": "Davom etishni xohlaysizmi?"
},
"help": {
"howToStart": "Qanday boshlash kerak?",
"howToStartDesc": "* Bir hisobni bir nechta qurilmada ishlatishingiz mumkin",
"parentPhone": "Ota-onaning telefoni",
"parentPhoneDesc1": "• Ota-onaning telefoniga ilovani yuklab oling va o'rnating",
"parentPhoneDesc2": "• Barcha oilangiz uchun bitta hisob yarating",
"parentPhoneDesc3": "• Ota-ona rejimini tanlang",
"childPhone": "Farzandning telefoni",
"childPhoneDesc1": "• Farzandingizning telefoniga ilovani yuklab oling va o'rnating",
"childPhoneDesc2": "• Hisobingiz bilan tizimga kiring",
"childPhoneDesc3": "• Farzand rejimini tanlang"
},
"subscription": {
"selectTariff": "Tarifni tanlang",
"selectPaymentMethod": "To'lov usulini tanlang",
"cancellPaymentTitle": "To'lovni 24 soat ichida bekor qilish mumkin",
"pay": "Obunani to'lash"
},
"button": {
"login": "Kirish",
"register": "Ro'yxatdan o'tish",
"recover": "Tiklash",
"continue": "Davom etish",
"resetPassword": "Parolni tiklash",
"logout": "Chiqish",
"cancel": "Bekor qilish",
"delete": "O'chirish",
"search": "Qidirish",
"save": "Saqlash",
"confirm": "Tasdiqlash",
"share": "Ulashish",
"ok": "Ok"
},
"notFound": {
"code": "404",
"message": "Bu sahifa topilmadi."
},
"error": {
"requiredField": "Bu maydonni to'ldirish zarur",
"requiredCheckbox": "Siz bu ro'yxatni qabul qilishingiz kerak"
},
"weekdays": {
"monday": "Dushanba",
"tuesday": "Seshanba",
"wednesday": "Chorshanba",
"thursday": "Payshanba",
"friday": "Juma",
"saturday": "Shanba",
"sunday": "Yakshanba"
}
}
......@@ -3,6 +3,7 @@ import "./AuthHeader.css";
import CSelect from "../../../components/CSelect";
import en from "../../../assets/images/flag-en.png";
import ru from "../../../assets/images/flag-ru.png";
import uz from "../../../assets/images/flag-uz.png";
import { useLanguage } from "../../../contexts/LanguageContext/useLanguage";
import type { AuthHeaderProps } from "./AuthHeader.types";
import { IoArrowBack } from "react-icons/io5";
......@@ -12,11 +13,11 @@ const AuthHeader: React.FC<AuthHeaderProps> = ({ back, onBack }) => {
return (
<div className="authheader">
{back && <IoArrowBack onClick={onBack} className="header__back"/>}
{back && <IoArrowBack onClick={onBack} className="header__back" />}
<CSelect
value={language}
onChange={(flag: string) => changeLanguage(flag as "en" | "ru")}
onChange={(flag: string) => changeLanguage(flag as "en" | "ru" | "uz")}
options={[
{
label: "English",
......@@ -40,6 +41,17 @@ const AuthHeader: React.FC<AuthHeaderProps> = ({ back, onBack }) => {
/>
),
},
{
label: "Uzbek",
value: "uz",
image: (
<img
src={uz}
alt="uz"
style={{ width: 20, height: 20, objectFit: "cover" }}
/>
),
},
]}
/>
</div>
......
......@@ -4,6 +4,7 @@ import { useLanguage } from "../../contexts/LanguageContext/useLanguage";
import CSelect from "../../components/CSelect";
import en from "../../assets/images/flag-en.png";
import ru from "../../assets/images/flag-ru.png";
import uz from "../../assets/images/flag-uz.png";
import { FiUserMinus } from "react-icons/fi";
import { IoKeyOutline } from "react-icons/io5";
import { MdOutlineLogout } from "react-icons/md";
......@@ -47,7 +48,9 @@ const Settings: React.FC = () => {
<div className="settings__content">
<CSelect
value={language}
onChange={(flag: string) => changeLanguage(flag as "en" | "ru")}
onChange={(flag: string) =>
changeLanguage(flag as "en" | "ru" | "uz")
}
options={[
{
label: "English",
......@@ -71,6 +74,17 @@ const Settings: React.FC = () => {
/>
),
},
{
label: "Uzbek",
value: "uz",
image: (
<img
src={uz}
alt="uz"
style={{ width: 20, height: 20, objectFit: "cover" }}
/>
),
},
]}
/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment