Files

329 lines
9.7 KiB
TypeScript

import React, { createContext, useContext, useState, useEffect } from 'react';
import { Platform } from 'react-native';
import { storage } from '../utils/storage';
import { useAppConfig } from './ConfigContext';
export type LanguageType = 'English' | 'Indonesian';
interface Translations {
[key: string]: {
[key: string]: string;
};
}
export const translations: Translations = {
English: {
// Auth
login: 'Login Now',
register: 'Register Now',
createAccount: 'Create New Account',
registerSubtitle: 'Join us to start managing your workspace efficiently.',
email: 'Email Address',
password: 'Password',
fullName: 'Full Name',
forgotPass: 'Forgot Password?',
rememberMe: 'Remember Me',
noAccount: "Don't have an account? ",
haveAccount: 'Already have an account? ',
loginJust: 'Login Now',
termsText: 'By registering, you agree to our ',
termsLink: 'Terms of Service',
privacyLink: 'Privacy Policy',
and: ' and ',
// Auth Extra
signIn: 'Sign In',
emailPlaceholder: 'email@example.com',
passwordPlaceholder: '••••••••',
signInNow: 'Sign In Now',
orContinueWith: 'OR CONTINUE WITH',
signUp: 'Sign Up',
google: 'Google',
apple: 'Apple',
welcomeBack: 'Welcome back!',
invalidEmail: 'Invalid email address',
loginFailed: 'Login failed. Please try again.',
bioConfirm: 'Confirm Identity',
bioFailed: 'Biometric authentication failed',
bioSuccess: 'Biometric Login Successful!',
// Auth Extra 2
fillAll: 'Please fill all required fields',
passMismatch: 'Passwords do not match',
accountCreated: 'Account created successfully!',
confirmPassword: 'Confirm Password',
namePlaceholder: 'John Doe',
registering: 'Creating account...',
// Profile Extra
uploadingAvatar: 'Uploading avatar...',
avatarUpdated: 'Profile picture updated!',
profileUpdated: 'Profile updated successfully!',
logoutSafe: 'Signing out safely...',
confirmLogout: 'Are you sure you want to log out?',
cancel: 'Cancel',
logout: 'Logout',
accCreated: 'Account created successfully!',
regFailed: 'Registration failed',
join: 'Join',
confirmPass: 'Confirm Password',
// Dashboard
halo: 'Hello',
role: 'Your Role: ',
lastStatus: 'Last Status: ',
history: 'Recent Activity',
searchPlaceholder: 'Search items or locations...',
loadMore: 'Load More',
all: 'All',
pending: 'Pending',
completed: 'Success',
high: 'Urgent',
searching: 'Searching server...',
// Dashboard Extra
systemSupport: 'System Support',
instantHelp: 'Instant Help 24/7',
getHelp: 'Get Help',
quickActions: 'Quick Actions',
categories: 'Categories',
latestDiscoveries: 'Latest Discoveries',
account: 'Account',
subscription: 'Subscription',
system: 'System',
explore: 'Explore',
// Profile
personalData: 'PERSONAL DATA',
fullNameLabel: 'Full Name',
editProfile: 'Edit Profile Information',
confirmChanges: 'Confirm Changes',
syncing: 'Syncing...',
preferences: 'PREFERENCES & SECURITY',
darkTheme: 'Dark Mode',
changePass: 'Change Password',
biometrics: 'Biometrics',
language: 'Language',
logout: 'Logout Account',
updateSecurity: 'Update Security',
oldPass: 'Old Password',
newPass: 'New Password',
confirmNew: 'Confirm New',
update: 'Update',
cancel: 'Cancel',
chooseLang: 'Choose Language',
close: 'Close',
confirmLogout: 'Confirm Logout',
areYouSureLogout: 'Are you sure you want to logout from your account?',
// Notifications
notifications: 'Notifications',
markAllRead: 'Mark all as read',
noNotifications: 'No new notifications',
// Help
helpCenter: 'Help Center',
helpSubtitle: 'We are ready to help you with any questions or technical issues.',
emergencyTitle: 'Direct Support',
emergencySubtitle: 'Contact us for urgent assistance',
contactSupport: 'Contact Us',
faqTitle: 'Frequently Asked Questions (FAQ)',
// Help Extra
supportCenter: 'Support Center',
searchDoc: 'Search documentation...',
browseTopics: 'Browse Topics',
popularFaq: 'Popular FAQs',
whatsapp: 'WhatsApp',
emailSupport: 'Email Support',
web: 'Web',
billing: 'Billing',
// Notifications Extra
recentNotifications: 'recent notifications',
},
Indonesian: {
// Auth
login: 'Masuk Sekarang',
register: 'Daftar Sekarang',
createAccount: 'Buat Akun Baru',
registerSubtitle: 'Bergabunglah dengan kami untuk mulai mengelola ruang kerja Anda.',
email: 'Alamat Email',
password: 'Kata Sandi',
fullName: 'Nama Lengkap',
forgotPass: 'Lupa Kata Sandi?',
rememberMe: 'Ingat Saya',
noAccount: 'Belum punya akun? ',
haveAccount: 'Sudah punya akun? ',
loginJust: 'Masuk Saja',
termsText: 'Dengan mendaftar, Anda menyetujui ',
termsLink: 'Ketentuan Layanan',
privacyLink: 'Kebijakan Privasi',
and: ' dan ',
// Auth Extra
signIn: 'Masuk',
emailPlaceholder: 'email@contoh.com',
passwordPlaceholder: '••••••••',
signInNow: 'Masuk Sekarang',
orContinueWith: 'ATAU LANJUTKAN DENGAN',
signUp: 'Daftar',
google: 'Google',
apple: 'Apple',
welcomeBack: 'Selamat datang kembali!',
invalidEmail: 'Alamat email tidak valid',
loginFailed: 'Login gagal. Silakan coba lagi.',
bioConfirm: 'Konfirmasi Identitas',
bioFailed: 'Autentikasi biometrik gagal',
bioSuccess: 'Login Biometrik Berhasil!',
// Auth Extra 2
fillAll: 'Silakan isi semua bidang yang diperlukan',
passMismatch: 'Kata sandi tidak cocok',
accountCreated: 'Akun berhasil dibuat!',
confirmPassword: 'Konfirmasi Kata Sandi',
namePlaceholder: 'John Doe',
registering: 'Membuat akun...',
// Profile Extra
uploadingAvatar: 'Mengunggah foto...',
avatarUpdated: 'Foto profil diperbarui!',
profileUpdated: 'Profil berhasil diperbarui!',
logoutSafe: 'Keluar dengan aman...',
confirmLogout: 'Apakah Anda yakin ingin keluar?',
cancel: 'Batal',
logout: 'Keluar',
accCreated: 'Akun berhasil dibuat!',
regFailed: 'Pendaftaran gagal',
join: 'Bergabunglah dengan',
confirmPass: 'Konfirmasi Kata Sandi',
namePlaceholder: 'Budi Santoso',
// Dashboard
halo: 'Halo',
role: 'Peran Anda: ',
lastStatus: 'Status Terakhir: ',
history: 'Aktivitas Terbaru',
searchPlaceholder: 'Cari item atau lokasi...',
updateNow: 'Perbarui Sekarang',
all: 'Semua',
pending: 'Tertunda',
completed: 'Selesai',
high: 'Penting',
searching: 'Mencari di server...',
// Dashboard Extra
systemSupport: 'Dukungan Sistem',
instantHelp: 'Bantuan Instan 24/7',
getHelp: 'Dapatkan Bantuan',
quickActions: 'Aksi Cepat',
categories: 'Kategori',
latestDiscoveries: 'Penemuan Terbaru',
account: 'Akun',
subscription: 'Langganan',
system: 'Sistem',
explore: 'Jelajahi',
// Profile
personalData: 'DATA PRIBADI',
fullNameLabel: 'Nama Lengkap',
editProfile: 'Ubah Informasi Profil',
confirmChanges: 'Simpan Perubahan',
syncing: 'Menyinkronkan...',
preferences: 'PREFERENSI & KEAMANAN',
darkTheme: 'Mode Gelap',
changePass: 'Ubah Kata Sandi',
biometrics: 'Biometrik',
language: 'Bahasa',
logout: 'Keluar Akun',
updateSecurity: 'Perbarui Keamanan',
oldPass: 'Sandi Lama',
newPass: 'Sandi Baru',
confirmNew: 'Konfirmasi Sandi Baru',
update: 'Perbarui',
cancel: 'Batal',
chooseLang: 'Pilih Bahasa',
close: 'Tutup',
confirmLogout: 'Konfirmasi Keluar',
areYouSureLogout: 'Apakah Anda yakin ingin keluar dari akun Anda?',
// Notifications
notifications: 'Pemberitahuan',
markAllRead: 'Tandai semua dibaca',
noNotifications: 'Tidak ada pemberitahuan baru',
// Notifications Extra
recentNotifications: 'pemberitahuan terbaru',
// Help
helpCenter: 'Pusat Bantuan',
helpSubtitle: 'Kami siap membantu Anda dengan pertanyaan atau kendala teknis.',
emergencyTitle: 'Dukungan Langsung',
emergencySubtitle: 'Hubungi kami untuk bantuan mendesak',
contactSupport: 'Hubungi Kami',
faqTitle: 'Pertanyaan Umum (FAQ)',
// Help Extra
supportCenter: 'Pusat Dukungan',
searchDoc: 'Cari dokumentasi...',
browseTopics: 'Telusuri Topik',
popularFaq: 'FAQ Populer',
whatsapp: 'WhatsApp',
emailSupport: 'Dukungan Email',
web: 'Web',
billing: 'Tagihan',
}
};
interface LanguageContextType {
language: LanguageType;
setLanguage: (lang: LanguageType) => void;
t: any;
}
const LanguageContext = createContext<LanguageContextType | undefined>(undefined);
export function LanguageProvider({ children }: { children: React.ReactNode }) {
const [language, setRawLanguage] = useState<LanguageType>('English');
const { config } = useAppConfig();
useEffect(() => {
loadLanguage();
}, []);
const loadLanguage = async () => {
const saved = await storage.get('pref_language');
if (saved === 'English' || saved === 'Indonesian') {
setRawLanguage(saved);
}
};
const setLanguage = async (newLang: LanguageType) => {
setRawLanguage(newLang);
await storage.save('pref_language', newLang);
};
// Merge static translations with dynamic ones from Laravel
const t = {
...translations[language],
...(config?.localization?.[language] || {})
};
return (
<LanguageContext.Provider value={{ language, setLanguage, t }}>
{children}
</LanguageContext.Provider>
);
}
export function useTranslation() {
const context = useContext(LanguageContext);
if (context === undefined) {
return {
language: 'English',
setLanguage: () => {},
t: translations.English
};
}
return context;
}