Files
unai/src/components/providers/LanguageProvider.tsx
T
2025-07-12 22:36:47 +04:00

311 lines
10 KiB
TypeScript

'use client'
import React, { createContext, useContext, useState, useEffect } from 'react'
type Language = 'en' | 'ar'
type LanguageContextType = {
language: Language
setLanguage: (lang: Language) => void
t: (key: string) => string
dir: 'ltr' | 'rtl'
}
const LanguageContext = createContext<LanguageContextType | undefined>(undefined)
export const useLanguage = () => {
const context = useContext(LanguageContext)
if (context === undefined) {
throw new Error('useLanguage must be used within a LanguageProvider')
}
return context
}
type TranslationKeys = keyof typeof translations.en;
// Comprehensive translations for UTAS portal
const translations = {
en: {
// Navigation
'welcome': 'Welcome to University Portal',
'login': 'Login',
'logout': 'Logout',
'dashboard': 'Dashboard',
'chat': 'Chat',
'wellbeing': 'Wellbeing',
'accessibility': 'Accessibility',
'admin': 'Admin',
'courses': 'Courses',
'research': 'Research',
'admissions': 'Admissions',
'scholarships': 'Scholarships',
'privacy': 'Privacy',
// Common actions
'search': 'Search',
'filter': 'Filter',
'apply_now': 'Apply Now',
'learn_more': 'Learn More',
'read_more': 'Read More',
'contact_us': 'Contact Us',
'get_started': 'Get Started',
'download': 'Download',
'register': 'Register',
'book_now': 'Book Now',
'submit': 'Submit',
'cancel': 'Cancel',
'save': 'Save',
'edit': 'Edit',
'delete': 'Delete',
'view_all': 'View All',
'back': 'Back',
'next': 'Next',
'previous': 'Previous',
// Chat interface
'ask_question': 'Ask a question...',
'send': 'Send',
'type_message': 'Type your message...',
'chat_with_ai': 'Chat with AI Assistant',
'how_can_help': 'How can I help you today?',
// Forms and inputs
'first_name': 'First Name',
'last_name': 'Last Name',
'email': 'Email',
'phone': 'Phone',
'message': 'Message',
'subject': 'Subject',
'required_field': 'Required field',
'optional': 'Optional',
// Academic content
'undergraduate': 'Undergraduate',
'postgraduate': 'Postgraduate',
'research_degrees': 'Research Degrees',
'study_areas': 'Study Areas',
'entry_requirements': 'Entry Requirements',
'course_duration': 'Course Duration',
'annual_fees': 'Annual Fees',
'campus_locations': 'Campus Locations',
'career_outcomes': 'Career Outcomes',
'key_features': 'Key Features',
// Specific content
'mental_health_support': 'Mental Health Support',
'book_counselor': 'Book with Counselor',
'upload_image': 'Upload Image',
'alt_text_suggestion': 'Alt Text Suggestion',
'wcag_score': 'WCAG Score',
'survey_rating': 'How would you rate your experience?',
'submit_feedback': 'Submit Feedback',
'registration_opens': 'Registration opens August 15th',
'tuition_balance': 'Tuition Balance',
'advisor_contact': 'Advisor Contact',
'my_courses': 'My Courses',
'scholarship_deadlines': 'Scholarship Deadlines',
'transfer_engineering': 'Transfer to Engineering',
'library_location': 'Library Location',
'contact_advisor': 'Contact Advisor',
'class_registration': 'Class Registration',
// Status and notifications
'loading': 'Loading...',
'error': 'Error',
'success': 'Success',
'warning': 'Warning',
'info': 'Information',
'no_results': 'No results found',
'try_again': 'Try again',
// Homepage content
'hero_title': 'Shape Your Future at UTAS',
'hero_subtitle': 'Join the world\'s #1 university for climate action and discover limitless possibilities in Tasmania\'s unique island campus.',
'climate_action_leader': 'Climate Action Leader',
'global_ranking': 'Global Ranking #1',
'students_worldwide': 'Students Worldwide',
'research_excellence': 'Research Excellence',
// Features
'ai_assistant': 'AI Assistant',
'ai_assistant_desc': 'Get instant help with courses, applications, and campus life',
'accessibility_tools': 'Accessibility Tools',
'accessibility_desc': 'AI-powered tools for inclusive education and digital accessibility',
'mental_health': 'Mental Health Support',
'mental_health_desc': 'Comprehensive wellbeing services and counseling support',
'smart_analytics': 'Smart Analytics',
'analytics_desc': 'Data-driven insights for better student outcomes',
// About UTAS
'about_utas': 'About UTAS',
'utas_description': 'The University of Tasmania is a world-class institution dedicated to creating brighter futures through transformative education and research that benefits our island, our nation, and our world.',
'why_choose_utas': 'Why Choose UTAS?',
'island_advantage': 'Island Advantage',
'island_desc': 'Our unique island location provides an unparalleled living laboratory',
'research_impact': 'Research Impact',
'research_desc': 'Contributing to global solutions through world-leading research',
'student_experience': 'Student Experience',
'experience_desc': 'Personalized education with strong industry connections',
// Footer
'quick_links': 'Quick Links',
'contact_info': 'Contact Information',
'follow_us': 'Follow Us',
'copyright': '© 2024 University of Tasmania. All rights reserved.',
// Accessibility
'accessibility_statement': 'Accessibility Statement',
'keyboard_navigation': 'Keyboard Navigation',
'screen_reader': 'Screen Reader Compatible',
'high_contrast': 'High Contrast Mode',
'text_size': 'Text Size',
'increase_text': 'Increase Text Size',
'decrease_text': 'Decrease Text Size',
// Error messages
'page_not_found': 'Page Not Found',
'something_went_wrong': 'Something went wrong',
'network_error': 'Network error. Please check your connection.',
'invalid_input': 'Please check your input and try again',
// Success messages
'form_submitted': 'Form submitted successfully',
'application_received': 'Application received',
'email_sent': 'Email sent successfully',
'profile_updated': 'Profile updated',
// Date and time
'today': 'Today',
'yesterday': 'Yesterday',
'tomorrow': 'Tomorrow',
'this_week': 'This Week',
'next_week': 'Next Week',
'this_month': 'This Month',
'next_month': 'Next Month',
// Campus names
'hobart_campus': 'Hobart Campus',
'launceston_campus': 'Launceston Campus',
'burnie_campus': 'Burnie Campus',
'sydney_campus': 'Sydney Campus',
// Study modes
'full_time': 'Full-time',
'part_time': 'Part-time',
'online': 'Online',
'blended': 'Blended',
'evening': 'Evening',
'weekend': 'Weekend',
// Application process
'how_to_apply': 'How to Apply',
'application_deadlines': 'Application Deadlines',
'domestic_students': 'Domestic Students',
'international_students': 'International Students',
'application_fee': 'Application Fee',
'required_documents': 'Required Documents',
'english_requirements': 'English Requirements',
'academic_requirements': 'Academic Requirements',
},
ar: {
// Navigation
'welcome': 'مرحباً بكم في بوابة الجامعة',
'login': 'تسجيل الدخول',
'logout': 'تسجيل الخروج',
'dashboard': 'لوحة التحكم',
'chat': 'المحادثة',
'wellbeing': 'الرفاهية',
'accessibility': 'إمكانية الوصول',
'admin': 'المسؤول',
'courses': 'المقررات',
'research': 'البحث',
'admissions': 'القبول',
'scholarships': 'المنح الدراسية',
'privacy': 'الخصوصية',
// Common actions
'search': 'بحث',
'filter': 'تصفية',
'apply_now': 'قدم الآن',
'learn_more': 'اعرف المزيد',
'read_more': 'اقرأ المزيد',
'contact_us': 'اتصل بنا',
'get_started': 'ابدأ الآن',
'download': 'تحميل',
// Chat related
'chat_placeholder': 'اكتب رسالتك هنا...',
'chat_start': 'ابدأ المحادثة',
'chat_end': 'إنهاء المحادثة',
'chat_loading': 'جارٍ التحميل...',
'chat_error': 'عذراً، حدث خطأ. يرجى المحاولة مرة أخرى.',
'chat_welcome': 'مرحباً! كيف يمكنني مساعدتك اليوم؟',
// Wellbeing
'mental_health_support': 'دعم الصحة النفسية',
'book_counselor': 'احجز موعداً مع مستشار',
'emergency_contacts': 'جهات اتصال للطوارئ',
'wellness_resources': 'موارد العافية',
// Course related
'course_search': 'البحث عن المقررات',
'course_apply': 'التقدم للمقرر',
'course_details': 'تفاصيل المقرر',
'prerequisites': 'المتطلبات السابقة',
'course_duration': 'مدة المقرر',
'start_dates': 'تواريخ البدء',
// Research
'research_areas': 'مجالات البحث',
'publications': 'المنشورات',
'funding': 'التمويل',
'partnerships': 'الشراكات',
// Student services
'student_support': 'دعم الطلاب',
'library_services': 'خدمات المكتبة',
'it_support': 'الدعم التقني',
'housing': 'السكن',
// Accessibility
'accessibility_options': 'خيارات إمكانية الوصول',
'screen_reader': 'قارئ الشاشة',
'high_contrast': 'تباين عالي',
'text_size': 'حجم النص',
// Error messages
'error_404': 'الصفحة غير موجودة',
'error_500': 'خطأ في الخادم',
'try_again': 'حاول مرة أخرى',
'go_back': 'العودة'
}
}
export const LanguageProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [language, setLanguage] = useState<Language>('en')
const [dir, setDir] = useState<'ltr' | 'rtl'>('ltr')
useEffect(() => {
setDir(language === 'ar' ? 'rtl' : 'ltr')
document.documentElement.dir = language === 'ar' ? 'rtl' : 'ltr'
document.documentElement.lang = language
}, [language])
const t = (key: string) => {
return translations[language][key as TranslationKeys] || key
}
const value = {
language,
setLanguage,
t,
dir,
}
return (
<LanguageContext.Provider value={value}>
{children}
</LanguageContext.Provider>
)
}