Enable users to switch seamlessly between English and Arabic languages
Adds i18next, LanguageDetector, locales (en.json, ar.json), and LanguageSwitcher component for internationalization. Replit-Commit-Author: Agent Replit-Commit-Session-Id: ff0be73b-afdd-4747-978b-bb8301fb0a82 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/9777c70b-fc38-4831-8d6b-78dfffe041b0/d552135c-0e60-4fc7-98a2-0e9cddf2b4b3.jpg
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import i18n from 'i18next';
|
||||
import { initReactI18next } from 'react-i18next';
|
||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||
|
||||
// Import translation files
|
||||
import enTranslations from './locales/en.json';
|
||||
import arTranslations from './locales/ar.json';
|
||||
|
||||
i18n
|
||||
.use(LanguageDetector)
|
||||
.use(initReactI18next)
|
||||
.init({
|
||||
resources: {
|
||||
en: {
|
||||
translation: enTranslations
|
||||
},
|
||||
ar: {
|
||||
translation: arTranslations
|
||||
}
|
||||
},
|
||||
lng: 'en', // default language
|
||||
fallbackLng: 'en',
|
||||
debug: false,
|
||||
|
||||
interpolation: {
|
||||
escapeValue: false, // React already does escaping
|
||||
},
|
||||
|
||||
detection: {
|
||||
order: ['localStorage', 'navigator', 'htmlTag'],
|
||||
lookupLocalStorage: 'language',
|
||||
caches: ['localStorage'],
|
||||
},
|
||||
});
|
||||
|
||||
export default i18n;
|
||||
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"common": {
|
||||
"save": "حفظ",
|
||||
"cancel": "إلغاء",
|
||||
"delete": "حذف",
|
||||
"edit": "تعديل",
|
||||
"add": "إضافة",
|
||||
"create": "إنشاء",
|
||||
"update": "تحديث",
|
||||
"search": "بحث",
|
||||
"filter": "تصفية",
|
||||
"loading": "جاري التحميل...",
|
||||
"error": "خطأ",
|
||||
"success": "نجح",
|
||||
"confirm": "تأكيد",
|
||||
"back": "رجوع",
|
||||
"next": "التالي",
|
||||
"previous": "السابق",
|
||||
"close": "إغلاق",
|
||||
"open": "فتح",
|
||||
"yes": "نعم",
|
||||
"no": "لا"
|
||||
},
|
||||
"navigation": {
|
||||
"dashboard": "لوحة التحكم",
|
||||
"tasks": "المهام",
|
||||
"finances": "الماليات",
|
||||
"ai": "المساعد الذكي",
|
||||
"voice": "الصوت",
|
||||
"analytics": "التحليلات",
|
||||
"settings": "الإعدادات",
|
||||
"logout": "تسجيل الخروج",
|
||||
"profile": "الملف الشخصي"
|
||||
},
|
||||
"tasks": {
|
||||
"title": "المهام",
|
||||
"createTask": "إنشاء مهمة",
|
||||
"editTask": "تعديل المهمة",
|
||||
"taskTitle": "عنوان المهمة",
|
||||
"description": "الوصف",
|
||||
"priority": "الأولوية",
|
||||
"dueDate": "تاريخ الاستحقاق",
|
||||
"status": "الحالة",
|
||||
"category": "الفئة",
|
||||
"project": "المشروع",
|
||||
"assignee": "المكلف",
|
||||
"tags": "العلامات",
|
||||
"subtasks": "المهام الفرعية",
|
||||
"attachments": "المرفقات",
|
||||
"timeTracking": "تتبع الوقت",
|
||||
"completed": "مكتمل",
|
||||
"inProgress": "قيد التنفيذ",
|
||||
"todo": "للعمل",
|
||||
"high": "عالية",
|
||||
"medium": "متوسطة",
|
||||
"low": "منخفضة",
|
||||
"addSubtask": "إضافة مهمة فرعية",
|
||||
"addAttachment": "إضافة مرفق",
|
||||
"startTimer": "بدء المؤقت",
|
||||
"stopTimer": "إيقاف المؤقت",
|
||||
"totalTime": "إجمالي الوقت",
|
||||
"noTasks": "لا توجد مهام",
|
||||
"taskCreated": "تم إنشاء المهمة بنجاح",
|
||||
"taskUpdated": "تم تحديث المهمة بنجاح",
|
||||
"taskDeleted": "تم حذف المهمة بنجاح"
|
||||
},
|
||||
"finances": {
|
||||
"title": "الماليات",
|
||||
"overview": "نظرة عامة مالية",
|
||||
"income": "الدخل",
|
||||
"expenses": "المصروفات",
|
||||
"balance": "الرصيد",
|
||||
"budget": "الميزانية",
|
||||
"categories": "الفئات",
|
||||
"transactions": "المعاملات",
|
||||
"recurring": "متكررة",
|
||||
"reports": "التقارير",
|
||||
"addTransaction": "إضافة معاملة",
|
||||
"editTransaction": "تعديل المعاملة",
|
||||
"amount": "المبلغ",
|
||||
"type": "النوع",
|
||||
"date": "التاريخ",
|
||||
"description": "الوصف",
|
||||
"category": "الفئة",
|
||||
"tags": "العلامات",
|
||||
"recurring": "متكررة",
|
||||
"frequency": "التكرار",
|
||||
"budgetPlanning": "تخطيط الميزانية",
|
||||
"budgetLimit": "حد الميزانية",
|
||||
"budgetUsed": "الميزانية المستخدمة",
|
||||
"budgetRemaining": "الميزانية المتبقية",
|
||||
"monthlyBudget": "الميزانية الشهرية",
|
||||
"yearlyBudget": "الميزانية السنوية",
|
||||
"exportData": "تصدير البيانات",
|
||||
"billReminders": "تذكيرات الفواتير",
|
||||
"upcomingBills": "الفواتير القادمة",
|
||||
"overdueBills": "الفواتير المتأخرة"
|
||||
},
|
||||
"ai": {
|
||||
"title": "المساعد الذكي",
|
||||
"chat": "المحادثة",
|
||||
"history": "تاريخ المحادثات",
|
||||
"dailyJoke": "نكتة اليوم",
|
||||
"insights": "رؤى ذكية",
|
||||
"askAnything": "اسأل عن أي شيء...",
|
||||
"generating": "جاري إنشاء الرد...",
|
||||
"voiceCommand": "أمر صوتي",
|
||||
"personalizedResponse": "رد شخصي",
|
||||
"conversationSaved": "تم حفظ المحادثة",
|
||||
"noHistory": "لا يوجد تاريخ محادثات"
|
||||
},
|
||||
"voice": {
|
||||
"title": "الأوامر الصوتية",
|
||||
"listening": "جاري الاستماع...",
|
||||
"notListening": "غير مفعل",
|
||||
"startListening": "بدء الاستماع",
|
||||
"stopListening": "إيقاف الاستماع",
|
||||
"voiceSettings": "إعدادات الصوت",
|
||||
"language": "اللغة",
|
||||
"microphone": "الميكروفون",
|
||||
"speakers": "السماعات",
|
||||
"voiceCommands": "الأوامر المتاحة",
|
||||
"customCommands": "أوامر مخصصة",
|
||||
"voiceTraining": "تدريب الصوت",
|
||||
"accuracy": "الدقة",
|
||||
"confidence": "الثقة",
|
||||
"transcript": "النص المكتوب",
|
||||
"voiceActivated": "مفعل صوتياً",
|
||||
"speakingRate": "معدل الكلام",
|
||||
"voicePitch": "نبرة الصوت",
|
||||
"voiceVolume": "مستوى الصوت"
|
||||
},
|
||||
"settings": {
|
||||
"title": "الإعدادات",
|
||||
"general": "عام",
|
||||
"appearance": "المظهر",
|
||||
"language": "اللغة",
|
||||
"notifications": "الإشعارات",
|
||||
"privacy": "الخصوصية",
|
||||
"account": "الحساب",
|
||||
"advanced": "متقدم",
|
||||
"theme": "السمة",
|
||||
"lightMode": "الوضع الفاتح",
|
||||
"darkMode": "الوضع الداكن",
|
||||
"systemTheme": "سمة النظام",
|
||||
"fontSize": "حجم الخط",
|
||||
"accessibility": "إمكانية الوصول",
|
||||
"dataExport": "تصدير البيانات",
|
||||
"dataImport": "استيراد البيانات",
|
||||
"changePassword": "تغيير كلمة المرور",
|
||||
"deleteAccount": "حذف الحساب",
|
||||
"backup": "نسخ احتياطي",
|
||||
"restore": "استعادة"
|
||||
},
|
||||
"auth": {
|
||||
"login": "تسجيل الدخول",
|
||||
"register": "تسجيل جديد",
|
||||
"logout": "تسجيل الخروج",
|
||||
"email": "البريد الإلكتروني",
|
||||
"password": "كلمة المرور",
|
||||
"confirmPassword": "تأكيد كلمة المرور",
|
||||
"firstName": "الاسم الأول",
|
||||
"lastName": "الاسم الأخير",
|
||||
"username": "اسم المستخدم",
|
||||
"forgotPassword": "نسيت كلمة المرور؟",
|
||||
"resetPassword": "إعادة تعيين كلمة المرور",
|
||||
"loginSuccess": "تم تسجيل الدخول بنجاح",
|
||||
"registerSuccess": "تم التسجيل بنجاح",
|
||||
"invalidCredentials": "بيانات اعتماد غير صحيحة",
|
||||
"passwordMismatch": "كلمات المرور غير متطابقة"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "لوحة التحكم",
|
||||
"welcome": "مرحباً",
|
||||
"quickStats": "إحصائيات سريعة",
|
||||
"recentTasks": "المهام الأخيرة",
|
||||
"recentTransactions": "المعاملات الأخيرة",
|
||||
"todaysTasks": "مهام اليوم",
|
||||
"weeklyOverview": "نظرة أسبوعية",
|
||||
"monthlyOverview": "نظرة شهرية",
|
||||
"productivity": "الإنتاجية",
|
||||
"financial": "الملخص المالي"
|
||||
},
|
||||
"errors": {
|
||||
"general": "حدث خطأ",
|
||||
"networkError": "خطأ في الشبكة",
|
||||
"unauthorized": "وصول غير مصرح",
|
||||
"notFound": "غير موجود",
|
||||
"serverError": "خطأ في الخادم",
|
||||
"validationError": "خطأ في التحقق",
|
||||
"tryAgain": "حاول مرة أخرى"
|
||||
},
|
||||
"success": {
|
||||
"saved": "تم الحفظ بنجاح",
|
||||
"deleted": "تم الحذف بنجاح",
|
||||
"updated": "تم التحديث بنجاح",
|
||||
"created": "تم الإنشاء بنجاح"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"common": {
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"add": "Add",
|
||||
"create": "Create",
|
||||
"update": "Update",
|
||||
"search": "Search",
|
||||
"filter": "Filter",
|
||||
"loading": "Loading...",
|
||||
"error": "Error",
|
||||
"success": "Success",
|
||||
"confirm": "Confirm",
|
||||
"back": "Back",
|
||||
"next": "Next",
|
||||
"previous": "Previous",
|
||||
"close": "Close",
|
||||
"open": "Open",
|
||||
"yes": "Yes",
|
||||
"no": "No"
|
||||
},
|
||||
"navigation": {
|
||||
"dashboard": "Dashboard",
|
||||
"tasks": "Tasks",
|
||||
"finances": "Finances",
|
||||
"ai": "AI Assistant",
|
||||
"voice": "Voice",
|
||||
"analytics": "Analytics",
|
||||
"settings": "Settings",
|
||||
"logout": "Logout",
|
||||
"profile": "Profile"
|
||||
},
|
||||
"tasks": {
|
||||
"title": "Tasks",
|
||||
"createTask": "Create Task",
|
||||
"editTask": "Edit Task",
|
||||
"taskTitle": "Task Title",
|
||||
"description": "Description",
|
||||
"priority": "Priority",
|
||||
"dueDate": "Due Date",
|
||||
"status": "Status",
|
||||
"category": "Category",
|
||||
"project": "Project",
|
||||
"assignee": "Assignee",
|
||||
"tags": "Tags",
|
||||
"subtasks": "Subtasks",
|
||||
"attachments": "Attachments",
|
||||
"timeTracking": "Time Tracking",
|
||||
"completed": "Completed",
|
||||
"inProgress": "In Progress",
|
||||
"todo": "To Do",
|
||||
"high": "High",
|
||||
"medium": "Medium",
|
||||
"low": "Low",
|
||||
"addSubtask": "Add Subtask",
|
||||
"addAttachment": "Add Attachment",
|
||||
"startTimer": "Start Timer",
|
||||
"stopTimer": "Stop Timer",
|
||||
"totalTime": "Total Time",
|
||||
"noTasks": "No tasks found",
|
||||
"taskCreated": "Task created successfully",
|
||||
"taskUpdated": "Task updated successfully",
|
||||
"taskDeleted": "Task deleted successfully"
|
||||
},
|
||||
"finances": {
|
||||
"title": "Finances",
|
||||
"overview": "Financial Overview",
|
||||
"income": "Income",
|
||||
"expenses": "Expenses",
|
||||
"balance": "Balance",
|
||||
"budget": "Budget",
|
||||
"categories": "Categories",
|
||||
"transactions": "Transactions",
|
||||
"recurring": "Recurring",
|
||||
"reports": "Reports",
|
||||
"addTransaction": "Add Transaction",
|
||||
"editTransaction": "Edit Transaction",
|
||||
"amount": "Amount",
|
||||
"type": "Type",
|
||||
"date": "Date",
|
||||
"description": "Description",
|
||||
"category": "Category",
|
||||
"tags": "Tags",
|
||||
"recurring": "Recurring",
|
||||
"frequency": "Frequency",
|
||||
"budgetPlanning": "Budget Planning",
|
||||
"budgetLimit": "Budget Limit",
|
||||
"budgetUsed": "Budget Used",
|
||||
"budgetRemaining": "Budget Remaining",
|
||||
"monthlyBudget": "Monthly Budget",
|
||||
"yearlyBudget": "Yearly Budget",
|
||||
"exportData": "Export Data",
|
||||
"billReminders": "Bill Reminders",
|
||||
"upcomingBills": "Upcoming Bills",
|
||||
"overdueBills": "Overdue Bills"
|
||||
},
|
||||
"ai": {
|
||||
"title": "AI Assistant",
|
||||
"chat": "Chat",
|
||||
"history": "Conversation History",
|
||||
"dailyJoke": "Daily Joke",
|
||||
"insights": "AI Insights",
|
||||
"askAnything": "Ask me anything...",
|
||||
"generating": "Generating response...",
|
||||
"voiceCommand": "Voice Command",
|
||||
"personalizedResponse": "Personalized Response",
|
||||
"conversationSaved": "Conversation saved",
|
||||
"noHistory": "No conversation history"
|
||||
},
|
||||
"voice": {
|
||||
"title": "Voice Commands",
|
||||
"listening": "Listening...",
|
||||
"notListening": "Not Listening",
|
||||
"startListening": "Start Listening",
|
||||
"stopListening": "Stop Listening",
|
||||
"voiceSettings": "Voice Settings",
|
||||
"language": "Language",
|
||||
"microphone": "Microphone",
|
||||
"speakers": "Speakers",
|
||||
"voiceCommands": "Available Commands",
|
||||
"customCommands": "Custom Commands",
|
||||
"voiceTraining": "Voice Training",
|
||||
"accuracy": "Accuracy",
|
||||
"confidence": "Confidence",
|
||||
"transcript": "Transcript",
|
||||
"voiceActivated": "Voice Activated",
|
||||
"speakingRate": "Speaking Rate",
|
||||
"voicePitch": "Voice Pitch",
|
||||
"voiceVolume": "Voice Volume"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"general": "General",
|
||||
"appearance": "Appearance",
|
||||
"language": "Language",
|
||||
"notifications": "Notifications",
|
||||
"privacy": "Privacy",
|
||||
"account": "Account",
|
||||
"advanced": "Advanced",
|
||||
"theme": "Theme",
|
||||
"lightMode": "Light Mode",
|
||||
"darkMode": "Dark Mode",
|
||||
"systemTheme": "System Theme",
|
||||
"fontSize": "Font Size",
|
||||
"accessibility": "Accessibility",
|
||||
"dataExport": "Data Export",
|
||||
"dataImport": "Data Import",
|
||||
"changePassword": "Change Password",
|
||||
"deleteAccount": "Delete Account",
|
||||
"backup": "Backup",
|
||||
"restore": "Restore"
|
||||
},
|
||||
"auth": {
|
||||
"login": "Login",
|
||||
"register": "Register",
|
||||
"logout": "Logout",
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"confirmPassword": "Confirm Password",
|
||||
"firstName": "First Name",
|
||||
"lastName": "Last Name",
|
||||
"username": "Username",
|
||||
"forgotPassword": "Forgot Password?",
|
||||
"resetPassword": "Reset Password",
|
||||
"loginSuccess": "Login successful",
|
||||
"registerSuccess": "Registration successful",
|
||||
"invalidCredentials": "Invalid credentials",
|
||||
"passwordMismatch": "Passwords do not match"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"welcome": "Welcome",
|
||||
"quickStats": "Quick Stats",
|
||||
"recentTasks": "Recent Tasks",
|
||||
"recentTransactions": "Recent Transactions",
|
||||
"todaysTasks": "Today's Tasks",
|
||||
"weeklyOverview": "Weekly Overview",
|
||||
"monthlyOverview": "Monthly Overview",
|
||||
"productivity": "Productivity",
|
||||
"financial": "Financial Summary"
|
||||
},
|
||||
"errors": {
|
||||
"general": "An error occurred",
|
||||
"networkError": "Network error",
|
||||
"unauthorized": "Unauthorized access",
|
||||
"notFound": "Not found",
|
||||
"serverError": "Server error",
|
||||
"validationError": "Validation error",
|
||||
"tryAgain": "Please try again"
|
||||
},
|
||||
"success": {
|
||||
"saved": "Successfully saved",
|
||||
"deleted": "Successfully deleted",
|
||||
"updated": "Successfully updated",
|
||||
"created": "Successfully created"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user