diff --git a/frontend/assets/images/B2BplatformLogo.png b/frontend/assets/images/B2BplatformLogo.png new file mode 100644 index 00000000..407d1fc9 Binary files /dev/null and b/frontend/assets/images/B2BplatformLogo.png differ diff --git a/frontend/assets/images/BankLogo.png b/frontend/assets/images/BankLogo.png new file mode 100644 index 00000000..049bb8db Binary files /dev/null and b/frontend/assets/images/BankLogo.png differ diff --git a/frontend/assets/images/DKstate.png b/frontend/assets/images/DKstate.png new file mode 100644 index 00000000..3879798a Binary files /dev/null and b/frontend/assets/images/DKstate.png differ diff --git a/frontend/assets/images/PezkuwiExchange.png b/frontend/assets/images/PezkuwiExchange.png new file mode 100644 index 00000000..786216ed Binary files /dev/null and b/frontend/assets/images/PezkuwiExchange.png differ diff --git a/frontend/assets/images/Universuitylogo.png b/frontend/assets/images/Universuitylogo.png new file mode 100644 index 00000000..adb3ffb8 Binary files /dev/null and b/frontend/assets/images/Universuitylogo.png differ diff --git a/frontend/assets/images/adaptive-icon.png b/frontend/assets/images/adaptive-icon.png index b402baf3..fa697152 100644 Binary files a/frontend/assets/images/adaptive-icon.png and b/frontend/assets/images/adaptive-icon.png differ diff --git a/frontend/assets/images/app-image.png b/frontend/assets/images/app-image.png index 5d2155c0..5a8a4fa6 100644 Binary files a/frontend/assets/images/app-image.png and b/frontend/assets/images/app-image.png differ diff --git a/frontend/assets/images/divankurulu.jpg b/frontend/assets/images/divankurulu.jpg new file mode 100644 index 00000000..aa67c269 Binary files /dev/null and b/frontend/assets/images/divankurulu.jpg differ diff --git a/frontend/assets/images/favicon - Copy.png:Zone.Identifier b/frontend/assets/images/favicon - Copy.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/frontend/assets/images/favicon - Copy.png:Zone.Identifier differ diff --git a/frontend/assets/images/favicon.png b/frontend/assets/images/favicon.png index b402baf3..fa697152 100644 Binary files a/frontend/assets/images/favicon.png and b/frontend/assets/images/favicon.png differ diff --git a/frontend/assets/images/favicon2.ico b/frontend/assets/images/favicon2.ico new file mode 100644 index 00000000..f1f6bf58 Binary files /dev/null and b/frontend/assets/images/favicon2.ico differ diff --git a/frontend/assets/images/governance.png b/frontend/assets/images/governance.png new file mode 100644 index 00000000..b763fe72 Binary files /dev/null and b/frontend/assets/images/governance.png differ diff --git a/frontend/assets/images/hez_logo_kurdistangunesi.png b/frontend/assets/images/hez_logo_kurdistangunesi.png new file mode 100644 index 00000000..0e2befbb Binary files /dev/null and b/frontend/assets/images/hez_logo_kurdistangunesi.png differ diff --git a/frontend/assets/images/icon.png b/frontend/assets/images/icon.png index b402baf3..d7aa29b5 100644 Binary files a/frontend/assets/images/icon.png and b/frontend/assets/images/icon.png differ diff --git a/frontend/assets/images/kurdistan_sun_light.png b/frontend/assets/images/kurdistan_sun_light.png new file mode 100644 index 00000000..c22767da Binary files /dev/null and b/frontend/assets/images/kurdistan_sun_light.png differ diff --git a/frontend/assets/images/kurdmedia.jpg b/frontend/assets/images/kurdmedia.jpg new file mode 100644 index 00000000..747a097d Binary files /dev/null and b/frontend/assets/images/kurdmedia.jpg differ diff --git a/frontend/assets/images/lotteryLogo.png b/frontend/assets/images/lotteryLogo.png new file mode 100644 index 00000000..062cf197 Binary files /dev/null and b/frontend/assets/images/lotteryLogo.png differ diff --git a/frontend/assets/images/nishtiman.jpeg b/frontend/assets/images/nishtiman.jpeg new file mode 100644 index 00000000..838117cb Binary files /dev/null and b/frontend/assets/images/nishtiman.jpeg differ diff --git a/frontend/assets/images/pezkuwichain_logo.png b/frontend/assets/images/pezkuwichain_logo.png new file mode 100644 index 00000000..7d78edc0 Binary files /dev/null and b/frontend/assets/images/pezkuwichain_logo.png differ diff --git a/frontend/assets/images/pezkuwiportal2.jpg b/frontend/assets/images/pezkuwiportal2.jpg new file mode 100644 index 00000000..d48929ea Binary files /dev/null and b/frontend/assets/images/pezkuwiportal2.jpg differ diff --git a/frontend/assets/images/splash-image.png b/frontend/assets/images/splash-image.png index 5d2155c0..e727ffc0 100644 Binary files a/frontend/assets/images/splash-image.png and b/frontend/assets/images/splash-image.png differ diff --git a/frontend/assets/images/vicdanlogo.jpg b/frontend/assets/images/vicdanlogo.jpg new file mode 100644 index 00000000..b6e8f9ab Binary files /dev/null and b/frontend/assets/images/vicdanlogo.jpg differ diff --git a/frontend/src/config/i18n.ts b/frontend/src/config/i18n.ts index c771a7a2..b93b2280 100644 --- a/frontend/src/config/i18n.ts +++ b/frontend/src/config/i18n.ts @@ -1,10 +1,20 @@ -import { I18n } from 'i18n-js'; -import * as Localization from 'expo-localization'; -import AsyncStorage from '@react-native-async-storage/async-storage'; +// Sadece çevirileri ve desteklenen dilleri export ediyoruz. +export const supportedLocales = ['en', 'ku-sorani', 'ku-kurmanji', 'ar', 'tr', 'fa']; -// Create i18n instance with fallback enabled -const i18n = new I18n({ +export const translations = { en: { + appName: 'PezkuwiChain', + languageNames: { + 'en': { name: 'English', nativeName: 'English', flag: '🇺🇸' }, + 'ku-kurmanji': { name: 'Kurdish (Kurmanji)', nativeName: 'Kurdî (Kurmancî)', flag: '🟨' }, + 'ku-sorani': { name: 'Kurdish (Sorani)', nativeName: 'کوردی (سۆرانی)', flag: '🟥' }, + 'tr': { name: 'Turkish', nativeName: 'Türkçe', flag: '🇹🇷' }, + 'ar': { name: 'Arabic', nativeName: 'العربية', flag: '🇸🇦' }, + 'fa': { name: 'Persian', nativeName: 'فارسی', flag: '🇮🇷' }, + }, + languageSettings: { + info: '6 languages fully supported. Other languages use Google Translator.', + }, // Navigation welcome: 'Welcome', home: 'Home', @@ -31,46 +41,387 @@ const i18n = new I18n({ privacy: 'Privacy Policy', help: 'Help & Support', walletAddress: 'Wallet Address', + // SettingsScreen + settingsScreen: { + comingSoon: 'Coming Soon', + comingSoonMessage: 'This feature will be available in a future update', + subtitles: { + editProfile: 'Update your information', + walletAddress: 'Your primary wallet address', + biometric: 'Use fingerprint or Face ID', + biometricNotAvailable: 'Not available on this device', + changePassword: 'Update your password', + twoFactorAuth: 'Add extra security', + notifications: 'Receive alerts and updates', + darkThemeEnabled: 'Dark theme enabled', + lightThemeEnabled: 'Light theme enabled', + }, + biometricAlerts: { + prompt: 'Authenticate to enable biometrics', + successTitle: 'Success', + enabled: 'Biometric authentication enabled', + disabled: 'Biometric authentication disabled', + failedTitle: 'Failed', + failedMessage: 'Biometric authentication failed', + }, + }, + // EditProfileScreen + editProfileScreen: { + labels: { + phone: 'Phone Number', + }, + placeholders: { + firstName: 'Enter first name', + lastName: 'Enter last name', + email: 'Enter email', + phone: 'Enter phone number', + }, + alerts: { + successTitle: 'Success', + successMessage: 'Profile updated successfully!', + updateFailed: 'Failed to update profile', + networkError: 'Network error occurred', + }, + saveButton: 'Save Changes', + }, + // ChangePasswordScreen + changePasswordScreen: { + info: 'Password must be at least 8 characters long', + labels: { + current: 'Current Password', + new: 'New Password', + confirm: 'Confirm New Password', + }, + placeholders: { + current: 'Enter current password', + new: 'Enter new password', + confirm: 'Confirm new password', + }, + alerts: { + fillFields: 'Please fill in all fields', + noMatch: 'New passwords do not match', + lengthError: 'Password must be at least 8 characters', + successTitle: 'Success', + successMessage: 'Password changed successfully!', + updateFailed: 'Failed to change password', + networkError: 'Network error occurred', + }, + saveButton: 'Change Password', + }, + // WalletAddressScreen + walletAddressScreen: { + info: "Your wallet address is used to receive HEZ and PEZ tokens. Make sure it's correct.", + label: 'Wallet Address', + placeholder: 'Enter wallet address', + noAddress: 'No wallet address set', + editButton: 'Edit Wallet Address', + alerts: { + emptyError: 'Wallet address cannot be empty', + successTitle: 'Success', + successMessage: 'Wallet address updated successfully!', + updateFailed: 'Failed to update wallet address', + networkError: 'Network error occurred', + copiedTitle: 'Copied', + copiedMessage: 'Wallet address copied to clipboard', + }, + }, + // NotificationsScreen + notificationsScreen: { + title: 'Notifications', + markAllRead: 'Mark all read', + mockData: [ + { + id: '1', + title: 'New Governance Proposal', + message: 'Proposal #42: Increase monthly PEZ rewards by 10%', + time: '2 hours ago', + type: 'governance', + read: false, + }, + { + id: '2', + title: 'Transaction Confirmed', + message: 'You received 100 HEZ from 5GrwvaEF5...', + time: '5 hours ago', + type: 'transaction', + read: false, + }, + { + id: '3', + title: 'Staking Reward', + message: 'You earned 5.2 PEZ staking rewards', + time: '1 day ago', + type: 'reward', + read: true, + }, + ], + }, + // QRScannerScreen + qrScannerScreen: { + title: 'Scan QR Code', + titleNoPermission: 'QR Scanner', + requesting: 'Requesting camera permission...', + permissionDenied: 'Camera Permission Denied', + permissionMessage: 'Please enable camera access in your device settings to scan QR codes.', + requestAgain: 'Request Permission Again', + instruction: 'Position the QR code within the frame', + scanAgain: 'Scan Again', + alertTitle: 'QR Code Scanned', + alertType: 'Type', + alertData: 'Data', + alertOK: 'OK', + }, + // TermsScreen (TAM İÇERİK) + termsScreen: { + title: 'Terms of Service', + lastUpdated: 'Last Updated: November 8, 2025', + sections: [ + { title: '1. Acceptance of Terms', content: 'By accessing or using PezkuwiChain mobile application ("Service"), you agree to be bound by these Terms of Service. If you disagree with any part of these terms, you may not access the Service.' }, + { title: '2. User Accounts', content: 'You are responsible for maintaining the confidentiality of your account credentials and for all activities that occur under your account. You must immediately notify us of any unauthorized use of your account.' }, + { title: '3. Digital Assets', content: 'PezkuwiChain provides wallet services for digital assets (HEZ, PEZ tokens). You acknowledge that:' }, + { title: '4. Prohibited Activities', content: 'You agree not to:' }, + { title: '5. Intellectual Property', content: 'The Service and its original content, features, and functionality are owned by PezkuwiChain and are protected by international copyright, trademark, and other intellectual property laws.' }, + { title: '6. Limitation of Liability', content: 'To the maximum extent permitted by law, PezkuwiChain shall not be liable for any indirect, incidental, special, consequential, or punitive damages, including loss of profits, data, or other intangible losses resulting from your use of the Service.' }, + { title: '7. Disclaimers', content: 'The Service is provided "as is" and "as available" without warranties of any kind. We do not guarantee that the Service will be uninterrupted, secure, or error-free.' }, + { title: '8. Governing Law', content: 'These Terms shall be governed by and construed in accordance with applicable international laws, without regard to conflict of law provisions.' }, + { title: '9. Changes to Terms', content: 'We reserve the right to modify these terms at any time. We will notify users of any material changes. Continued use of the Service after changes constitutes acceptance of the new terms.' }, + { title: '10. Contact', content: 'For questions about these Terms, contact us at support@pezkuwichain.io' }, + ], + bullets: { + '3': [ + 'You are solely responsible for your wallet security', + 'Loss of private keys may result in permanent loss of assets', + 'Transactions on blockchain are irreversible', + 'We do not custody your private keys or assets' + ], + '4': [ + 'Violate any applicable laws or regulations', + 'Use the Service for fraudulent purposes', + 'Attempt to gain unauthorized access to our systems', + 'Interfere with or disrupt the Service' + ] + } + }, + // PrivacyScreen (TAM İÇERİK) + privacyScreen: { + title: 'Privacy Policy', + lastUpdated: 'Last Updated: November 8, 2025', + sections: [ + { title: '1. Information We Collect', content: 'We collect information you provide directly to us:' }, + { title: '2. How We Use Your Information', content: 'We use collected information to:' }, + { title: '3. Information Sharing', content: 'We do not sell or rent your personal information. We may share information:' }, + { title: '4. Blockchain Transparency', content: 'Transactions on blockchain networks are publicly visible. Your wallet address and transaction history may be viewed by anyone on the blockchain network.' }, + { title: '5. Data Security', content: 'We implement industry-standard security measures to protect your information:' }, + { title: '6. Your Rights', content: 'You have the right to:' }, + { title: '7. Data Retention', content: 'We retain your information for as long as your account is active or as needed to provide services. You may request deletion of your data at any time.' }, + { title: '8. Children\'s Privacy', content: 'Our Service is not intended for users under 18 years of age. We do not knowingly collect information from children under 18.' }, + { title: '9. International Data Transfers', content: 'Your information may be transferred to and processed in countries other than your own. We ensure appropriate safeguards are in place.' }, + { title: '10. Changes to Privacy Policy', content: 'We may update this Privacy Policy periodically. We will notify you of any material changes via email or in-app notification.' }, + { title: '11. Contact Us', content: 'For privacy-related questions or requests, contact us at:' }, + ], + bullets: { + '1': [ + 'Account information (name, email, phone number)', + 'Profile information (profile picture, preferences)', + 'Wallet addresses (public blockchain addresses)', + 'Transaction data (on public blockchain)', + 'Device information (device type, OS version)' + ], + '2': [ + 'Provide and maintain the Service', + 'Process your transactions', + 'Send you notifications and updates', + 'Improve our services and user experience', + 'Detect and prevent fraud or security issues', + 'Comply with legal obligations' + ], + '3': [ + 'With your consent', + 'To comply with legal obligations', + 'With service providers who assist us', + 'In case of merger, sale, or business transfer' + ], + '5': [ + 'Encryption of sensitive data', + 'Secure authentication protocols', + 'Regular security audits', + 'Biometric authentication options' + ], + '6': [ + 'Access your personal information', + 'Correct inaccurate information', + 'Delete your account and data', + 'Export your data', + 'Opt-out of marketing communications' + ], + '11': [ + 'Email: privacy@pezkuwichain.io', + 'Support: support@pezkuwichain.io' + ] + } + }, + // HelpScreen (TAM İÇERİK) + helpScreen: { + title: 'Help & Support', + contactTitle: 'Contact Support', + supportCenter: 'Visit Support Center', + supportCenterLink: 'pezkuwichain.io/support', + emailSupport: 'Email Support', + emailSupportLink: 'support@pezkuwichain.io', + faqTitle: 'Frequently Asked Questions', + appInfo: 'App Version 1.0.0\n© 2025 PezkuwiChain. All rights reserved.', + faqs: [ + { id: '1', question: 'How do I create a wallet?', answer: 'When you sign up for PezkuwiChain, a wallet is automatically created for you. Your wallet address is displayed in the Settings > Profile section.' }, + { id: '2', question: 'How do I send tokens?', answer: 'Go to the Wallet tab, tap on the token you want to send (HEZ or PEZ), then tap the "Send" button. Enter the recipient\'s wallet address and the amount you want to send.' }, + { id: '3', question: 'What is the difference between HEZ and PEZ?', answer: 'HEZ (Hemwelatî) is the citizenship token used for identity verification and governance. PEZ (Pezkuwî) is the utility token used for transactions and services within the ecosystem.' }, + { id: '4', question: 'How do I participate in governance?', answer: 'Navigate to the Vote section from quick actions or wallet. You can view active proposals and vote using your HEZ tokens. Each HEZ token represents one vote.' }, + { id: '5', question: 'Is my wallet secure?', answer: 'Yes! We use industry-standard encryption and security measures. You can also enable biometric authentication and 2FA for additional security. Remember to never share your password or recovery phrase.' }, + { id: '6', question: 'How do I recover my account?', answer: 'If you forget your password, use the "Forgot Password" option on the login screen. For account recovery issues, contact our support team at support@pezkuwichain.io' }, + { id: '7', question: 'What are transaction fees?', answer: 'Network fees (gas fees) are required for blockchain transactions. These fees go to validators who process and secure transactions on the network.' }, + { id: '8', question: 'How long do transactions take?', answer: 'Most transactions are confirmed within seconds to a few minutes, depending on network congestion. You can view transaction status in your transaction history.' }, + ] + }, // Language Selection selectYourLanguage: 'Select Your Language', digitalCitizenshipPlatform: 'Digital Citizenship Platform', continue: 'Continue', // Auth - signIn: 'Sign In', - signUp: 'Sign Up', - email: 'Email', - password: 'Password', - firstName: 'First Name', - lastName: 'Last Name', - phone: 'Phone', - referralCode: 'Referral Code (Optional)', - alreadyHaveAccount: 'Already have an account?', - dontHaveAccount: "Don't have an account?", + auth: { + signIn: 'Sign In', + signUp: 'Sign Up', + email: 'Email', + password: 'Password', + firstName: 'First Name', + lastName: 'Last Name', + phone: 'Phone', + referralCode: 'Referral Code (Optional)', + alreadyHaveAccount: 'Already have an account?', + dontHaveAccount: "Don't have an account?", + welcomeBack: 'Welcome Back', + createAccount: 'Create Account', + errorTitle: 'Error', + fillFieldsError: 'Please fill in all required fields', + authFailedError: 'Authentication failed', + placeholders: { + firstName: 'John', + lastName: 'Doe', + phone: '+1234567890', + email: 'your@email.com', + password: '••••••••', + referralCode: 'Enter referral code', + } + }, // Common loading: 'Loading...', submit: 'Submit', cancel: 'Cancel', save: 'Save', back: 'Back', - // Home Screen - tikiScore: 'Tiki Score', - trustScore: 'Trust Score', - dynamicWidget: 'Dynamic Widget', - quickActions: 'Quick Actions', - send: 'Send', - receive: 'Receive', - exchange: 'Exchange', - stake: 'Stake', - vote: 'Vote', - nft: 'NFT', - certificates: 'Certificates', - refer: 'Refer', - pay: 'Pay', - rewards: 'Rewards', - history: 'History', - assets: 'Assets', + // HomeTab + homeTab: { + tikiScore: 'Tiki Score', + trustScore: 'Trust Score', + dynamicWidget: 'Dynamic Widget', + quickActions: 'Quick Actions', // Bu, bölüm başlığı için kullanılır + // Eski 12 butonun etiketleri + send: 'Send', + receive: 'Receive', + exchange: 'Exchange', + stake: 'Stake', + vote: 'Vote', + nft: 'NFT', + certificates: 'Certificates', + refer: 'Refer', + pay: 'Pay', + rewards: 'Rewards', + history: 'History', + assets: 'Assets', + welcomeTitle: '🎉 Welcome to PezkuwiChain!', + welcomeMessage: 'Start your citizenship journey today', + featureTitle: '📢 New Feature', + featureMessage: 'Vote on governance proposals', + }, + // YENİ ANAHTARLAR (Yeni 13 Quick Action Butonu için) + quickActions: { + home: 'Home', + governance: 'Governance', + exchange: 'Exchange', + b2b: 'B2B Platform', + bank: 'Bank', + games: 'Games', + university: 'University', + education: 'Education', + dashboard: 'Dashboard', + trading: 'Trading', + kurdmedia: 'Kurdmedia', + rewards: 'Rewards', + forum: 'Forum' + }, + // WalletTab + walletTab: { + title: 'My Wallet', + balanceLoading: 'Loading...', + hezName: 'Hemwelatî Token', + pezName: 'Pezkuwî Token', + swap: 'Swap', + p2p: 'P2P', + dapps: 'DApps', + staking: 'Staking', + connect: 'Connect', + tokens: 'Tokens', + pezNetwork: 'PEZ Network', + polkadotNetwork: 'Polkadot', + bitcoinNetwork: 'Bitcoin', + ethereumNetwork: 'Ethereum', + bscNetwork: 'Binance Smart Chain', + cardanoNetwork: 'Cardano', + solanaNetwork: 'Solana', + }, + // Placeholders + placeholders: { + citizens: 'Citizens Screen', + referral: 'Referral Screen', + profile: 'Profile Screen', + }, + // Image Picker + imagePicker: { + title: 'Change Profile Photo', + subtitle: 'Choose an option', + takePhoto: 'Take Photo', + chooseFromGallery: 'Choose from Gallery', + }, + // Alerts + alerts: { + permissionRequired: 'Permission Required', + cameraPermission: 'Camera permission is required!', + galleryPermission: 'Gallery access is required!', + }, + // Verification + verification: { + title: 'Human Verification', + subtitle: 'Please complete the security check to continue', + verifying: 'Verifying...', + loading: 'Loading verification...', + failedTitle: 'Verification Failed', + failedMessage: 'Please try again', + errorTitle: 'Error', + errorMessage: 'Verification failed. Please try again.', + webViewError: 'WebView Error:', + }, }, 'ku-sorani': { + appName: 'پێزکویچەین', + languageNames: { + 'en': { name: 'ئینگلیزی', nativeName: 'English', flag: '🇺🇸' }, + 'ku-kurmanji': { name: 'کوردی (کورمانجی)', nativeName: 'Kurdî (Kurmancî)', flag: '🟨' }, + 'ku-sorani': { name: 'کوردی (سۆرانی)', nativeName: 'کوردی (سۆرانی)', flag: '🟥' }, + 'tr': { name: 'تورکی', nativeName: 'Türkçe', flag: '🇹🇷' }, + 'ar': { name: 'عەرەبی', nativeName: 'العربية', flag: '🇸🇦' }, + 'fa': { name: 'فارسی', nativeName: 'فارسی', flag: '🇮🇷' }, + }, + languageSettings: { + info: '٦ زمان بە تەواوی پشتگیری دەکرێن. زمانەکانی تر وەرگێڕی گووگڵ بەکاردەهێنن.', + }, welcome: 'بەخێربێیت', home: 'سەرەکی', wallet: 'جزدان', @@ -95,42 +446,371 @@ const i18n = new I18n({ privacy: 'سیاسەتی تایبەتێتی', help: 'یارمەتی و پشتگیری', walletAddress: 'ناونیشانی جزدان', + settingsScreen: { + comingSoon: 'بەم زووانە', + comingSoonMessage: 'ئەم تایبەتمەندییە لە نوێکردنەوەی داهاتوودا بەردەست دەبێت', + subtitles: { + editProfile: 'زانیارییەکانت نوێ بکەرەوە', + walletAddress: 'ناونیشانی سەرەکی جزدانەکەت', + biometric: 'پەنجەمۆر یان ناسینەوەی دەموچاو بەکاربهێنە', + biometricNotAvailable: 'لەم ئامێرەدا بەردەست نییە', + changePassword: 'وشەی نهێنی خۆت نوێ بکەرەوە', + twoFactorAuth: 'پاراستنی زیاتر زیاد بکە', + notifications: 'ئاگاداری و نوێکردنەوەکان وەربگرە', + darkThemeEnabled: 'دۆخی تاریک کاراکراوە', + lightThemeEnabled: 'دۆخی ڕووناک کاراکراوە', + }, + biometricAlerts: { + prompt: 'بۆ کاراکردنی بایۆمێتریک پشتڕاست بکەرەوە', + successTitle: 'سەرکەوتوو بوو', + enabled: 'دڵنیاکردنەوەی بایۆمێتریک کاراکرا', + disabled: 'دڵنیاکردنەوەی بایۆمێتریک ناکاراکرا', + failedTitle: 'سەرکەوتوو نەبوو', + failedMessage: 'دڵنیاکردنەوەی بایۆمێتریک سەرکەوتوو نەبوو', + }, + }, + editProfileScreen: { + labels: { + phone: 'ژمارەی تەلەفۆن', + }, + placeholders: { + firstName: 'ناوی یەکەم بنووسە', + lastName: 'ناوی کۆتایی بنووسە', + email: 'ئیمەیڵ بنووسە', + phone: 'ژمارەی تەلەfۆن بنووسە', + }, + alerts: { + successTitle: 'سەرکەوتوو بوو', + successMessage: 'پڕۆفایل بە سەرکەوتوویی نوێکرایەوە!', + updateFailed: 'نوێکردنەوەی پڕۆفایل سەرکەوتوو نەبوو', + networkError: 'هەڵەی تۆڕ ڕوویدا', + }, + saveButton: 'گۆڕانکارییەکان پاشەکەوت بکە', + }, + changePasswordScreen: { + info: 'وشەی نهێنی دەبێت لانیکەم ٨ پیت بێت', + labels: { + current: 'وشەی نهێنی ئێستا', + new: 'وشەی نهێنی نوێ', + confirm: 'پشتڕاستکردنەوەی وشەی نهێنی نوێ', + }, + placeholders: { + current: 'وشەی نهێنی ئێستا بنووسە', + new: 'وشەی نهێنی نوێ بنووسە', + confirm: 'وشەی نهێنی نوێ پشتڕاست بکەرەوە', + }, + alerts: { + fillFields: 'تکایە هەموو خانەکان پڕ بکەرەوە', + noMatch: 'وشە نهێنییە نوێیەکان وەک یەک نین', + lengthError: 'وشەی نهێنی دەبێت لانیکەم ٨ پیت بێت', + successTitle: 'سەرکەوتوو بوو', + successMessage: 'وشەی نهێنی بە سەرکەوتوویی گۆڕدرا!', + updateFailed: 'گۆڕینی وشەی نهێنی سەرکەوتوو نەبوو', + networkError: 'هەڵەی تۆڕ ڕوویدا', + }, + saveButton: 'گۆڕینی وشەی نهێنی', + }, + walletAddressScreen: { + info: 'ناونیشانی جزدانەکەت بۆ وەرگرتنی تۆکنەکانی HEZ و PEZ بەکاردێت. دڵنیابە لە ڕاستی.', + label: 'ناونیشانی جزدان', + placeholder: 'ناونیشانی جزدان بنووسە', + noAddress: 'هیچ ناونیشانێکی جزدان دانەنراوە', + editButton: 'دەستکاری ناونیشانی جزدان', + alerts: { + emptyError: 'ناونیشانی جزدان نابێت بەتاڵ بێت', + successTitle: 'سەرکەوتوو بوو', + successMessage: 'ناونیشانی جزدان بە سەرکەوتوویی نوێکرایەوە!', + updateFailed: 'نوێکردنەوەی ناونیشانی جزدان سەرکەوتوو نەبوو', + networkError: 'هەڵەی تۆڕ ڕوویدا', + copiedTitle: 'کۆپی کرا', + copiedMessage: 'ناونیشانی جزدان بۆ کلیپبۆرد کۆپی کرا', + }, + }, + notificationsScreen: { + title: 'ئاگادارکردنەوەکان', + markAllRead: 'هەمووی وەک خوێندراوە نیشان بکە', + mockData: [ + { + id: '1', + title: 'پێشنیازی نوێی بەڕێوەبردن', + message: 'پێشنیازی #٤٢: زیادکردنی خەڵاتی مانگانەی PEZ بە ڕێژەی ١٠٪', + time: '٢ کاتژمێر لەمەوبەر', + type: 'governance', + read: false, + }, + { + id: '2', + title: 'مامەڵە پشتڕاستکرایەوە', + message: '١٠٠ HEZت وەرگرت لە ...5GrwvaEF5', + time: '٥ کاتژمێر لەمەوبەر', + type: 'transaction', + read: false, + }, + { + id: '3', + title: 'خەڵاتی ستەیکینگ', + message: '٥.٢ PEZ خەڵاتی ستەیکینگت بەدەستهێنا', + time: '١ ڕۆژ لەمەوبەر', + type: 'reward', + read: true, + }, + ], + }, + qrScannerScreen: { + title: ' سکانی کۆدی QR بکە', + titleNoPermission: 'سکانەری QR', + requesting: 'داواکردنی ڕێپێدانی کامێرا...', + permissionDenied: 'ڕێپێدانی کامێرا ڕەتکرایەوە', + permissionMessage: 'تکایە دەستگەیشتن بە کامێرا لە ڕێکخستنەکانی ئامێرەکەت چالاک بکە بۆ سکانکردنی کۆدی QR.', + requestAgain: 'دووبارە داواکردنەوەی ڕێپێدان', + instruction: 'کۆدی QR لەناو چوارچێوەکەدا دابنێ', + scanAgain: 'دووبارە سکان بکەرەوە', + alertTitle: 'کۆدی QR سکان کرا', + alertType: 'جۆر', + alertData: 'داتا', + alertOK: 'باشە', + }, + // TermsScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + termsScreen: { + title: 'مەرجەکانی خزمەتگوزاری', + lastUpdated: 'دوا نوێکردنەوە: ٨ی تشرینی دووەمی ٢٠٢٥', + sections: [ + { title: '١. قبوڵکردنی مەرجەکان', content: 'بە دەستگەیشتن یان بەکارهێنانی ئەپلیکەیشنی مۆبایلی پێزکویچەین ("خزمەتگوزاری")، تۆ ڕەزامەندیت بە پابەندبوون بەم مەرجانەی خزمەتگوزاری. ئەگەر لەگەڵ هەر بەشێک لەم مەرجانەدا هاوڕا نیت، ناتوانیت دەستت بە خزمەتگوزارییەکە بگات.' }, + { title: '٢. هەژماری بەکارهێنەران', content: 'تۆ بەرپرسیاریت لە پاراستنی نهێنی زانیارییەکانی هەژمارەکەت و هەموو چالاکییەکان کە لەژێر هەژمارەکەتدا ڕوودەدەن. دەبێت دەستبەجێ ئاگادارمان بکەیتەوە لە هەر بەکارهێنانێکی بێ مۆڵەتی هەژمارەکەت.' }, + { title: '3. Digital Assets', content: 'PezkuwiChain provides wallet services for digital assets (HEZ, PEZ tokens). You acknowledge that:' }, + { title: '4. Prohibited Activities', content: 'You agree not to:' }, + { title: '5. Intellectual Property', content: 'The Service and its original content, features, and functionality are owned by PezkuwiChain and are protected by international copyright, trademark, and other intellectual property laws.' }, + { title: '6. Limitation of Liability', content: 'To the maximum extent permitted by law, PezkuwiChain shall not be liable for any indirect, incidental, special, consequential, or punitive damages, including loss of profits, data, or other intangible losses resulting from your use of the Service.' }, + { title: '7. Disclaimers', content: 'The Service is provided "as is" and "as available" without warranties of any kind. We do not guarantee that the Service will be uninterrupted, secure, or error-free.' }, + { title: '8. Governing Law', content: 'These Terms shall be governed by and construed in accordance with applicable international laws, without regard to conflict of law provisions.' }, + { title: '9. Changes to Terms', content: 'We reserve the right to modify these terms at any time. We will notify users of any material changes. Continued use of the Service after changes constitutes acceptance of the new terms.' }, + { title: '10. Contact', content: 'For questions about these Terms, contact us at support@pezkuwichain.io' }, + ], + bullets: { + '3': [ + 'You are solely responsible for your wallet security', + 'Loss of private keys may result in permanent loss of assets', + 'Transactions on blockchain are irreversible', + 'We do not custody your private keys or assets' + ], + '4': [ + 'Violate any applicable laws or regulations', + 'Use the Service for fraudulent purposes', + 'Attempt to gain unauthorized access to our systems', + 'Interfere with or disrupt the Service' + ] + } + }, + // PrivacyScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + privacyScreen: { + title: 'سیاسەتی تایبەتێتی', + lastUpdated: 'دوا نوێکردنەوە: ٨ی تشرینی دووەمی ٢٠٢٥', + sections: [ + { title: '١. ئەو زانیاریانەی کۆیدەکەینەوە', content: 'ئێمە ئەو زانیاریانە کۆدەکەینەوە کە تۆ ڕاستەوخۆ پێمان دەدەیت:' }, + { title: '2. How We Use Your Information', content: 'We use collected information to:' }, + { title: '3. Information Sharing', content: 'We do not sell or rent your personal information. We may share information:' }, + { title: '4. Blockchain Transparency', content: 'Transactions on blockchain networks are publicly visible. Your wallet address and transaction history may be viewed by anyone on the blockchain network.' }, + { title: '5. Data Security', content: 'We implement industry-standard security measures to protect your information:' }, + { title: '6. Your Rights', content: 'You have the right to:' }, + { title: '7. Data Retention', content: 'We retain your information for as long as your account is active or as needed to provide services. You may request deletion of your data at any time.' }, + { title: '8. Children\'s Privacy', content: 'Our Service is not intended for users under 18 years of age. We do not knowingly collect information from children under 18.' }, + { title: '9. International Data Transfers', content: 'Your information may be transferred to and processed in countries other than your own. We ensure appropriate safeguards are in place.' }, + { title: '10. Changes to Privacy Policy', content: 'We may update this Privacy Policy periodically. We will notify you of any material changes via email or in-app notification.' }, + { title: '11. Contact Us', content: 'For privacy-related questions or requests, contact us at:' }, + ], + bullets: { + '1': [ + 'زانیاری هەژمار (ناو، ئیمەیڵ، ژمارەی تەلەفۆن)', + 'زانیاری پڕۆفایل (وێنەی پڕۆفایل، هەڵبژاردنەکان)', + 'Wallet addresses (public blockchain addresses)', + 'Transaction data (on public blockchain)', + 'Device information (device type, OS version)' + ], + '2': [ + 'Provide and maintain the Service', + 'Process your transactions', + 'Send you notifications and updates', + 'Improve our services and user experience', + 'Detect and prevent fraud or security issues', + 'Comply with legal obligations' + ], + '3': [ + 'With your consent', + 'To comply with legal obligations', + 'With service providers who assist us', + 'In case of merger, sale, or business transfer' + ], + '5': [ + 'Encryption of sensitive data', + 'Secure authentication protocols', + 'Regular security audits', + 'Biometric authentication options' + ], + '6': [ + 'Access your personal information', + 'Correct inaccurate information', + 'Delete your account and data', + 'Export your data', + 'Opt-out of marketing communications' + ], + '11': [ + 'Email: privacy@pezkuwichain.io', + 'Support: support@pezkuwichain.io' + ] + } + }, + // HelpScreen (TAM İÇERİK - KISMEN ÇEVRİLMİŞ) + helpScreen: { + title: 'یارمەتی و پشتگیری', + contactTitle: 'پەیوەندی بە پشتگیری', + supportCenter: 'سەردانی سەنتەری پشتگیری بکە', + supportCenterLink: 'pezkuwichain.io/support', + emailSupport: 'پشتگیری ئیمەیڵ', + emailSupportLink: 'support@pezkuwichain.io', + faqTitle: 'پرسیارە دووبارەبووەکان', + appInfo: 'وەشانی ئەپ ١.٠.٠\n© ٢٠٢٥ پێزکویچەین. هەموو مافەکان پارێزراون.', + faqs: [ + { id: '1', question: 'چۆن جزدانێک دروست بکەم؟', answer: 'کاتێک تۆمار دەبیت بۆ پێزکویچەین، جزدانێک بە شێوەیەکی ئۆتۆماتیکی بۆت دروست دەکرێت. ناونیشانی جزدانەکەت لە بەشی ڕێکخستنەکان > پڕۆفایل پیشان دەدرێت.' }, + { id: '2', question: 'چۆن تۆکن بنێرم؟', answer: 'بچۆ بۆ تابی جزدان، کلیک لەو تۆکنە بکە کە دەتەوێت بینێریت (HEZ یان PEZ)، پاشان کلیک لە دوگمەی "ناردن" بکە. ناونیشانی جزدانی وەرگر و بڕی ئەو پارەیە بنووسە کە دەتەوێت بینێریت.' }, + { id: '3', question: 'What is the difference between HEZ and PEZ?', answer: 'HEZ (Hemwelatî) is the citizenship token used for identity verification and governance. PEZ (Pezkuwî) is the utility token used for transactions and services within the ecosystem.' }, + { id: '4', question: 'How do I participate in governance?', answer: 'Navigate to the Vote section from quick actions or wallet. You can view active proposals and vote using your HEZ tokens. Each HEZ token represents one vote.' }, + { id: '5', question: 'Is my wallet secure?', answer: 'Yes! We use industry-standard encryption and security measures. You can also enable biometric authentication and 2FA for additional security. Remember to never share your password or recovery phrase.' }, + { id: '6', question: 'How do I recover my account?', answer: 'If you forget your password, use the "Forgot Password" option on the login screen. For account recovery issues, contact our support team at support@pezkuwichain.io' }, + { id: '7', question: 'What are transaction fees?', answer: 'Network fees (gas fees) are required for blockchain transactions. These fees go to validators who process and secure transactions on the network.' }, + { id: '8', question: 'How long do transactions take?', answer: 'Most transactions are confirmed within seconds to a few minutes, depending on network congestion. You can view transaction status in your transaction history.' }, + ] + }, selectYourLanguage: 'زمانەکەت هەڵبژێرە', digitalCitizenshipPlatform: 'پلاتفۆرمی هاوڵاتیبوونی دیجیتاڵی', continue: 'بەردەوامبوون', - signIn: 'چوونەژوورەوە', - signUp: 'تۆمارکردن', - email: 'ئیمەیڵ', - password: 'وشەی نهێنی', - firstName: 'ناوی یەکەم', - lastName: 'ناوی کۆتایی', - phone: 'ژمارەی تەلەفۆن', - referralCode: 'کۆدی ئاماژە (دڵخواز)', - alreadyHaveAccount: 'هەژمارت هەیە؟', - dontHaveAccount: 'هەژمارت نییە؟', + auth: { + signIn: 'چوونەژوورەوە', + signUp: 'تۆمارکردن', + email: 'ئیمەیڵ', + password: 'وشەی نهێنی', + firstName: 'ناوی یەکەم', + lastName: 'ناوی کۆتایی', + phone: 'ژمارەی تەلەfۆن', + referralCode: 'کۆدی ئاماژە (دڵخواز)', + alreadyHaveAccount: 'هەژمارت هەیە؟', + dontHaveAccount: 'هەژمارت نییە؟', + welcomeBack: 'بەخێربێیتەوە', + createAccount: 'هەژمار دروست بکە', + errorTitle: 'هەڵە', + fillFieldsError: 'تکایە هەموو خانە داواکراوەکان پڕ بکەرەوە', + authFailedError: 'چوونەژوورەوە سەرکەوتوو نەبوو', + placeholders: { + firstName: 'نازناو', + lastName: 'ناوی بنەماڵە', + phone: '+٩٦٤١٢٣٤٥٦٧٨٩', + email: 'your@email.com', + password: '••••••••', + referralCode: 'کۆدی ئاماژە بنووسە', + } + }, loading: 'بارکردن...', submit: 'ناردن', cancel: 'هەڵوەشاندنەوە', save: 'پاشەکەوتکردن', back: 'گەڕانەوە', - tikiScore: 'خاڵی تیکی', - trustScore: 'خاڵی متمانە', - dynamicWidget: 'ویجێتی دینامیکی', - quickActions: 'کردارە خێراکان', - send: 'ناردن', - receive: 'وەرگرتن', - exchange: 'ئاڵوگۆڕ', - stake: 'ستەیک', - vote: 'دەنگدان', - nft: 'NFT', - certificates: 'بڕوانامەکان', - refer: 'ئاماژە', - pay: 'پارەدان', - rewards: 'خەڵات', - history: 'مێژوو', - assets: 'سامان', + homeTab: { + tikiScore: 'خاڵی تiki', + trustScore: 'خاڵی متمانە', + dynamicWidget: 'ویجێتی دینامیکی', + quickActions: 'کردارە خێراکان', + send: 'ناردن', + receive: 'وەرگرتن', + exchange: 'ئاڵوگۆڕ', + stake: 'ستەیک', + vote: 'دەنگدان', + nft: 'NFT', + certificates: 'بڕوانامەکان', + refer: 'ئاماژە', + pay: 'پارەدان', + rewards: 'خەڵات', + history: 'مێژوو', + assets: 'سامان', + welcomeTitle: '🎉 بەخێربێن بۆ پێزکویچەین!', + welcomeMessage: 'ئەمڕۆ دەست بە گەشتی هاوڵاتیبوونت بکە', + featureTitle: '📢 تایبەتمەندی نوێ', + featureMessage: 'دەنگ بدە لەسەر پێشنیازەکانی بەڕێوەبردن', + }, + // YENİ ANAHTARLAR + quickActions: { + home: 'ماڵەوە', + governance: 'بەڕێوەبردن', + exchange: 'ئاڵوگۆڕ', + b2b: 'پلاتفۆرمی B2B', + bank: 'بانک', + games: 'یارییەکان', + university: 'زانکۆ', + education: 'پەروەردە', + dashboard: 'داشبۆرد', + trading: 'بازرگانی', + kurdmedia: 'کورد میدیا', + rewards: 'خەڵات', + forum: 'کۆڕ' + }, + walletTab: { + title: 'جزدانی من', + balanceLoading: 'بارکردن...', + hezName: 'تۆکنی هێز (هاوڵاتی)', + pezName: 'تۆکنی پێز (پێزکوی)', + swap: 'ئاڵوگۆڕ', + p2p: 'P2P', + dapps: 'DApps', + staking: 'ستەیکینگ', + connect: 'پەیوەستکردن', + tokens: 'تۆکنەکان', + pezNetwork: 'تۆڕی PEZ', + polkadotNetwork: 'پۆلکادۆت', + bitcoinNetwork: 'بیتکۆین', + ethereumNetwork: 'ئیسریۆم', + bscNetwork: 'زنجیرەی زیرەکی باینانس', + cardanoNetwork: 'کاردانۆ', + solanaNetwork: 'سۆلانا', + }, + placeholders: { + citizens: 'شاشەی هاوڵاتیان', + referral: 'شاشەی ئاماژەدان', + profile: 'شاشەی پڕۆفایل', + }, + imagePicker: { + title: 'گۆڕینی وێنەی پڕۆفایل', + subtitle: 'هەڵبژاردەیەک هەڵبژێرە', + takePhoto: 'وێنە بگرە', + chooseFromGallery: 'لە گەلەری هەڵبژێرە', + }, + alerts: { + permissionRequired: 'ڕێپێدان پێویستە', + cameraPermission: 'ڕێپێدانی کامێرا پێویستە!', + galleryPermission: 'دەستگەیشتن بە گەلەری پێویستە!', + }, + verification: { + title: 'پشتڕاستکردنەوەی مرۆڤ', + subtitle: 'تکایە پشکنینی ئاسایش تەواو بکە بۆ بەردەوامبوون', + verifying: 'پشتڕاستکردنەوە...', + loading: 'بارکردنی پشتڕاستکردنەوە...', + failedTitle: 'پشتڕاستکردنەوە سەرکەوتوو نەبوو', + failedMessage: 'تکایە دووبارە هەوڵبدەرەوە', + errorTitle: 'هەڵە', + errorMessage: 'پشتڕاستکردنەوە سەرکەوتوو نەبوو. تکایە دووبارە هەوڵبدەرەوە.', + webViewError: 'هەڵەی WebView:', + }, }, 'ku-kurmanji': { + appName: 'PezkuwiChain', + languageNames: { + 'en': { name: 'Îngilîzî', nativeName: 'English', flag: '🇺🇸' }, + 'ku-kurmanji': { name: 'Kurdî (Kurmancî)', nativeName: 'Kurdî (Kurmancî)', flag: '🟨' }, + 'ku-sorani': { name: 'Kurdî (Soranî)', nativeName: 'کوردی (سۆرانی)', flag: '🟥' }, + 'tr': { name: 'Tirkî', nativeName: 'Türkçe', flag: '🇹🇷' }, + 'ar': { name: 'Erebî', nativeName: 'العربية', flag: '🇸🇦' }, + 'fa': { name: 'Farisî', nativeName: 'فارسی', flag: '🇮🇷' }, + }, + languageSettings: { + info: '6 ziman bi tevahî têne piştgirî kirin. Zimanên din Wergera Google bikar tînin.', + }, welcome: 'Bi xêr hatî', home: 'Malper', wallet: 'Berîk', @@ -155,42 +835,295 @@ const i18n = new I18n({ privacy: 'Siyaseta Taybetiyê', help: 'Alîkarî û Piştgirî', walletAddress: 'Navnîşana Berîkê', + settingsScreen: { + comingSoon: 'Dê Zû Bê', + comingSoonMessage: 'Ev taybetmendî dê di nûvekirinek pêşerojê de peyda bibe', + subtitles: { + editProfile: 'Agahiyên xwe nûve bike', + walletAddress: 'Navnîşana berîka weya bingehîn', + biometric: 'Şopa tilî an Nasnameya Rûyê bikar bînin', + biometricNotAvailable: 'Li ser vê cîhazê peyda nabe', + changePassword: 'Şîfreya xwe nûve bike', + twoFactorAuth: 'Ewlehiya zêde lê zêde bike', + notifications: 'Hişyarî û nûvekirinan bistînin', + darkThemeEnabled: 'Mijara tarî çalak kirin', + lightThemeEnabled: 'Mijara ronahî çalak kirin', + }, + biometricAlerts: { + prompt: 'Ji bo çalakkirina biyometrîkê piştrast bikin', + successTitle: 'Serketî', + enabled: 'Ewlehiya biyometrîk çalak kirin', + disabled: 'Ewlehiya biyometrîk neçalak kirin', + failedTitle: 'Bi ser neket', + failedMessage: 'Ewlehiya biyometrîk bi ser neket', + }, + }, + editProfileScreen: { + labels: { + phone: 'Hejmara Telefonê', + }, + placeholders: { + firstName: 'Navê xwe binivîse', + lastName: 'Paşnavê xwe binivîse', + email: 'E-maila xwe binivîse', + phone: 'Hejmara telefonê binivîse', + }, + alerts: { + successTitle: 'Serketî', + successMessage: 'Profîl bi serketî hat nûvekirin!', + updateFailed: 'Nûvekirina profîlê bi ser neket', + networkError: 'Çewtiyek torê çêbû', + }, + saveButton: 'Guhertinan Tomar Bike', + }, + changePasswordScreen: { + info: 'Divê şîfre herî kêm 8 tîpan dirêj be', + labels: { + current: 'Şîfreya Niha', + new: 'Şîfreya Nû', + confirm: 'Şîfreya Nû Piştrast Bike', + }, + placeholders: { + current: 'Şîfreya niha binivîse', + new: 'Şîfreya nû binivîse', + confirm: 'Şîfreya nû piştrast bike', + }, + alerts: { + fillFields: 'Ji kerema xwe hemî qadan dagirin', + noMatch: 'Şîfreyên nû li hev nakin', + lengthError: 'Divê şîfre herî kêm 8 tîpan dirêj be', + successTitle: 'Serketî', + successMessage: 'Şîfre bi serketî hat guhertin!', + updateFailed: 'Guhertina şîfreyê bi ser neket', + networkError: 'Çewtiyek torê çêbû', + }, + saveButton: 'Şîfreyê Biguherîne', + }, + walletAddressScreen: { + info: 'Navnîşana berîka we ji bo wergirtina tokenên HEZ û PEZ tê bikar anîn. Piştrast bikin ku ew rast e.', + label: 'Navnîşana Berîkê', + placeholder: 'Navnîşana berîkê binivîse', + noAddress: 'Navnîşana berîkê nehatiye destnîşan kirin', + editButton: 'Navnîşana Berîkê Biguherîne', + alerts: { + emptyError: 'Navnîşana berîkê nikare vala be', + successTitle: 'Serketî', + successMessage: 'Navnîşana berîkê bi serketî hat nûvekirin!', + updateFailed: 'Nûvekirina navnîşana berîkê bi ser neket', + networkError: 'Çewtiyek torê çêbû', + copiedTitle: 'Hat Kopî Kirin', + copiedMessage: 'Navnîşana berîkê li clipboardê hat kopî kirin', + }, + }, + notificationsScreen: { + title: 'Agahdarî', + markAllRead: 'Hemî wekî xwendî nîşan bide', + mockData: [ + { + id: '1', + title: 'Pêşniyara Rêveberiyê ya Nû', + message: 'Pêşniyara #42: Xelatên PEZ yên mehane %10 zêde bikin', + time: '2 saet berê', + type: 'governance', + read: false, + }, + { + id: '2', + title: 'Danûstandin Hat Piştrastkirin', + message: 'We 100 HEZ ji 5GrwvaEF5... wergirt', + time: '5 saet berê', + type: 'transaction', + read: false, + }, + { + id: '3', + title: 'Xelata Stakingê', + message: 'We 5.2 PEZ xelatên stakingê qezenc kir', + time: '1 roj berê', + type: 'reward', + read: true, + }, + ], + }, + qrScannerScreen: { + title: 'Koda QR Bişopîne', + titleNoPermission: 'Şopînera QR', + requesting: 'Destûra kamerayê tê xwestin...', + permissionDenied: 'Destûra Kamerayê Hat Red Kirin', + permissionMessage: 'Ji kerema xwe ji bo şopandina kodên QR di mîhengên cîhaza xwe de gihîştina kamerayê çalak bikin.', + requestAgain: 'Destûrê Dîsa Bixwaze', + instruction: 'Koda QR di nav çarçoveyê de bi cih bikin', + scanAgain: 'Dîsa Bişopîne', + alertTitle: 'Koda QR Hat Şopandin', + alertType: 'Cure', + alertData: 'Dane', + alertOK: 'Temam', + }, + // TermsScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + termsScreen: { + title: 'Şertên Karûbarê', + lastUpdated: 'Rojanekirina Dawî: 8 Mijdar 2025', + sections: [ + { title: '1. Qebûlkirina Şertan', content: 'Bi gihîştin an bikaranîna sepana mobîl a PezkuwiChain ("Xizmet"), hûn qebûl dikin ku bi van Şertên Karûbarê ve girêdayî bin. Heke hûn bi beşek ji van şertan razî nebin, dibe ku hûn negihîjin Xizmetê.' }, + { title: '2. User Accounts', content: 'You are responsible for maintaining the confidentiality of your account credentials and for all activities that occur under your account. You must immediately notify us of any unauthorized use of your account.' }, + ], + bullets: {} + }, + // PrivacyScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + privacyScreen: { + title: 'Siyaseta Taybetiyê', + lastUpdated: 'Rojanekirina Dawî: 8 Mijdar 2025', + sections: [ + { title: '1. Agahiyên ku Em Berhev Dikin', content: 'Em agahiyên ku hûn rasterast ji me re peyda dikin berhev dikin:' }, + ], + bullets: {} + }, + // HelpScreen (TAM İÇERİK - KISMEN ÇEVRİLMİŞ) + helpScreen: { + title: 'Alîkarî û Piştgirî', + contactTitle: 'Bi Piştgiriyê re Têkilî Daynin', + supportCenter: 'Serdana Navenda Piştgiriyê Bikin', + supportCenterLink: 'pezkuwichain.io/support', + emailSupport: 'Piştgiriya E-nameyê', + emailSupportLink: 'support@pezkuwichain.io', + faqTitle: 'Pirsên Pir Tên Pirsîn', + appInfo: 'Guhertoya Sepanê 1.0.0\n© 2025 PezkuwiChain. Hemû maf parastî ne.', + faqs: [ + { id: '1', question: 'Ez çawa berîkekê çêbikim?', answer: 'Dema ku hûn ji bo PezkuwiChain qeyd dibin, berîkek bixweber ji we re tê çêkirin. Navnîşana berîka we di beşa Mîhengên > Profîl de tê xuyang kirin.' }, + { id: '2', question: 'Ez çawa tokenan bişînim?', answer: 'Herin tabela Berîkê, li ser tokena ku hûn dixwazin bişînin (HEZ an PEZ) bikirtînin, paşê bişkoka "Bişîne" bikirtînin. Navnîşana berîka wergir û mîqdara ku hûn dixwazin bişînin binivîsin.' }, + ] + }, selectYourLanguage: 'Zimanê Xwe Hilbijêre', digitalCitizenshipPlatform: 'Platforma Hemwelatiya Dijîtal', continue: 'Bidomîne', - signIn: 'Têketin', - signUp: 'Tomarbûn', - email: 'E-mail', - password: 'Şîfre', - firstName: 'Nav', - lastName: 'Paşnav', - phone: 'Telefon', - referralCode: 'Koda Referansê (Vebijarkî)', - alreadyHaveAccount: 'Hejmarê te heye?', - dontHaveAccount: 'Hejmarê te tune?', + auth: { + signIn: 'Têketin', + signUp: 'Tomarbûn', + email: 'E-mail', + password: 'Şîfre', + firstName: 'Nav', + lastName: 'Paşnav', + phone: 'Telefon', + referralCode: 'Koda Referansê (Vebijarkî)', + alreadyHaveAccount: 'Hejmarê te heye؟', + dontHaveAccount: 'Hejmarê te tune؟', + welcomeBack: 'Bi xêr hatî paş', + createAccount: 'Hesabê Çêke', + errorTitle: 'Çewtî', + fillFieldsError: 'Ji kerema xwe hemî qadên pêwîst dagirin', + authFailedError: 'Têketin bi ser neket', + placeholders: { + firstName: 'Navê te', + lastName: 'Paşnavê te', + phone: '+٩٦٤١٢٣٤٥٦٧٨٩', + email: 'your@email.com', + password: '••••••••', + referralCode: 'Koda referansê binivîse', + } + }, loading: 'Tê barkirin...', submit: 'Bişîne', cancel: 'Betal bike', save: 'Tomar bike', back: 'Vegere', - tikiScore: 'Xala Tiki', - trustScore: 'Xala Ewlehiyê', - dynamicWidget: 'Widgeta Dînamîk', - quickActions: 'Kiryarên Bilez', - send: 'Bişîne', - receive: 'Bistîne', - exchange: 'Guhertin', - stake: 'Stake', - vote: 'Deng', - nft: 'NFT', - certificates: 'Sertîfîka', - refer: 'Referans', - pay: 'Bidin', - rewards: 'Xelat', - history: 'Dîrok', - assets: 'Heyber', + homeTab: { + tikiScore: 'Xala Tiki', + trustScore: 'Xala Ewlehiyê', + dynamicWidget: 'Widgeta Dînamîk', + quickActions: 'Kiryarên Bilez', + send: 'Bişîne', + receive: 'Bistîne', + exchange: 'Guhertin', + stake: 'Stake', + vote: 'Deng', + nft: 'NFT', + certificates: 'Sertîfîka', + refer: 'Referans', + pay: 'Bidin', + rewards: 'Xelat', + history: 'Dîrok', + assets: 'Heyber', + welcomeTitle: '🎉 Bi xêr hatî PezkuwiChain!', + welcomeMessage: 'Îro dest bi rêwîtiya xwe ya hemwelatiyê bike', + featureTitle: '📢 Taybetmendiya Nû', + featureMessage: 'Dengê xwe bide pêşniyarên rêveberiyê', + }, + // YENİ ANAHTARLAR + quickActions: { + home: 'Mal', + governance: 'Rêveberî', + exchange: 'Guhertin', + b2b: 'Platforma B2B', + bank: 'Banka', + games: 'Lîstik', + university: 'Zanîngeh', + education: 'Perwerde', + dashboard: 'Dashboard', + trading: 'Bazirganî', + kurdmedia: 'Kurdmedia', + rewards: 'Xelat', + forum: 'Forum' + }, + walletTab: { + title: 'Berîka Min', + balanceLoading: 'Tê barkirin...', + hezName: 'Tokena HÊZ (Hemwelatî)', + pezName: 'Tokena PEZ (Pezkuwî)', + swap: 'Guhertin', + p2p: 'P2P', + dapps: 'DApps', + staking: 'Staking', + connect: 'Girêdan', + tokens: 'Token', + pezNetwork: 'Tora PEZ', + polkadotNetwork: 'Polkadot', + bitcoinNetwork: 'Bitcoin', + ethereumNetwork: 'Ethereum', + bscNetwork: 'Binance Smart Chain', + cardanoNetwork: 'Cardano', + solanaNetwork: 'Solana', + }, + placeholders: { + citizens: 'Ekrana Hemwelatiyan', + referral: 'Ekrana Referansê', + profile: 'Ekrana Profîlê', + }, + imagePicker: { + title: 'Wêneyê Profîlê Biguherîne', + subtitle: 'Vebijarkek hilbijêre', + takePhoto: 'Wêneyek Bikişîne', + chooseFromGallery: 'Ji Galeriyê Hilbijêre', + }, + alerts: { + permissionRequired: 'Destûr Pêwîst e', + cameraPermission: 'Destûra kamerayê pêwîst e!', + galleryPermission: 'Destûra gihîştina galeriyê pêwîst e!', + }, + verification: { + title: 'Verastkirina Mirovî', + subtitle: 'Ji kerema xwe ji bo domandinê kontrola ewlehiyê temam bikin', + verifying: 'Tê verastkirin...', + loading: 'Barkirina verastkirinê...', + failedTitle: 'Verastkirin bi ser neket', + failedMessage: 'Ji kerema xwe dîsa biceribîne', + errorTitle: 'Çewtî', + errorMessage: 'Verastkirin bi ser neket. Ji kerema xwe dîsa biceribîne.', + webViewError: 'Çewtiya WebView:', + }, }, ar: { + appName: 'بێزكويتشاين', + languageNames: { + 'en': { name: 'الإنجليزية', nativeName: 'English', flag: '🇺🇸' }, + 'ku-kurmanji': { name: 'الكردية (الكرمانجية)', nativeName: 'Kurdî (Kurmancî)', flag: '🟨' }, + 'ku-sorani': { name: 'الكردية (السورانية)', nativeName: 'کوردی (سۆرانی)', flag: '🟥' }, + 'tr': { name: 'التركية', nativeName: 'Türkçe', flag: '🇹🇷' }, + 'ar': { name: 'العربية', nativeName: 'العربية', flag: '🇸🇦' }, + 'fa': { name: 'الفارسية', nativeName: 'فارسی', flag: '🇮🇷' }, + }, + languageSettings: { + info: '٦ لغات مدعومة بالكامل. اللغات الأخرى تستخدم مترجم جوجل.', + }, welcome: 'مرحبا', home: 'الرئيسية', wallet: 'المحفظة', @@ -215,42 +1148,294 @@ const i18n = new I18n({ privacy: 'سياسة الخصوصية', help: 'المساعدة والدعم', walletAddress: 'عنوان المحفظة', + settingsScreen: { + comingSoon: 'قريبا', + comingSoonMessage: 'ستكون هذه الميزة متاحة في التحديث المستقبلي', + subtitles: { + editProfile: 'تحديث معلوماتك', + walletAddress: 'عنوان محفظتك الأساسي', + biometric: 'استخدام بصمة الإصبع أو معرف الوجه', + biometricNotAvailable: 'غير متوفر على هذا الجهاز', + changePassword: 'تحديث كلمة المرور الخاصة بك', + twoFactorAuth: 'إضافة أمان إضافي', + notifications: 'تلقي التنبيهات والتحديثات', + darkThemeEnabled: 'تمكين الوضع الداكن', + lightThemeEnabled: 'تمكين الوضع الفاتح', + }, + biometricAlerts: { + prompt: 'المصادقة لتمكين القياسات الحيوية', + successTitle: 'نجاح', + enabled: 'تم تمكين المصادقة البيومترية', + disabled: 'تم تعطيل المصادقة البيومترية', + failedTitle: 'فشل', + failedMessage: 'فشلت المصادقة البيومترية', + }, + }, + editProfileScreen: { + labels: { + phone: 'رقم الهاتف', + }, + placeholders: { + firstName: 'أدخل الاسم الأول', + lastName: 'أدخل اسم العائلة', + email: 'أدخل البريد الإلكتروني', + phone: 'أدخل رقم الهاتف', + }, + alerts: { + successTitle: 'نجاح', + successMessage: 'تم تحديث الملف الشخصي بنجاح!', + updateFailed: 'فشل تحديث الملف الشخصي', + networkError: 'حدث خطأ في الشبكة', + }, + saveButton: 'حفظ التغييرات', + }, + changePasswordScreen: { + info: 'يجب أن تتكون كلمة المرور من ٨ أحرف على الأقل', + labels: { + current: 'كلمة المرور الحالية', + new: 'كلمة المرور الجديدة', + confirm: 'تأكيد كلمة المرور الجديدة', + }, + placeholders: { + current: 'أدخل كلمة المرور الحالية', + new: 'أدخل كلمة المرور الجديدة', + confirm: 'أدخل كلمة المرور الجديدة مرة أخرى', + }, + alerts: { + fillFields: 'يرجى ملء جميع الحقول', + noMatch: 'كلمتا المرور الجديدتان غير متطابقتين', + lengthError: 'يجب أن تتكون كلمة المرور من ٨ أحرف على الأقل', + successTitle: 'نجاح', + successMessage: 'تم تغيير كلمة المرور بنجاح!', + updateFailed: 'فشل تغيير كلمة المرور', + networkError: 'حدث خطأ في الشبكة', + }, + saveButton: 'تغيير كلمة المرور', + }, + walletAddressScreen: { + info: 'يتم استخدام عنوان محفظتك لاستلام رموز HEZ و PEZ. تأكد من صحته.', + label: 'عنوان المحفظة', + placeholder: 'أدخل عنوان المحفظة', + noAddress: 'لم يتم تعيين عنوان محفظة', + editButton: 'تعديل عنوان المحفظة', + alerts: { + emptyError: 'لا يمكن أن يكون عنوان المحفظة فارغًا', + successTitle: 'نجاح', + successMessage: 'تم تحديث عنوان المحفظة بنجاح!', + updateFailed: 'فشل تحديث عنوان المحفظة', + networkError: 'حدث خطأ في الشبكة', + copiedTitle: 'تم النسخ', + copiedMessage: 'تم نسخ عنوان المحفظة إلى الحافظة', + }, + }, + notificationsScreen: { + title: 'الإشعارات', + markAllRead: 'وضع علامة مقروءة على الكل', + mockData: [ + { + id: '1', + title: 'مقترح حوكمة جديد', + message: 'مقترح #٤٢: زيادة مكافآت PEZ الشهرية بنسبة ١٠٪', + time: 'قبل ساعتين', + type: 'governance', + read: false, + }, + { + id: '2', + title: 'تم تأكيد المعاملة', + message: 'لقد تلقيت ١٠٠ HEZ من ...5GrwvaEF5', + time: 'قبل ٥ ساعات', + type: 'transaction', + read: false, + }, + { + id: '3', + title: 'مكافأة الرهن', + message: 'لقد ربحت ٥.٢ PEZ مكافآت رهن', + time: 'قبل يوم واحد', + type: 'reward', + read: true, + }, + ], + }, + qrScannerScreen: { + title: 'مسح رمز الاستجابة السريعة', + titleNoPermission: 'ماسح QR', + requesting: 'جاري طلب إذن الكاميرا...', + permissionDenied: 'تم رفض إذن الكاميرا', + permissionMessage: 'يرجى تمكين الوصول إلى الكاميرا في إعدادات جهازك لمسح رموز QR.', + requestAgain: 'طلب الإذن مرة أخرى', + instruction: 'ضع رمز الاستجابة السريعة داخل الإطار', + scanAgain: 'مسح مرة أخرى', + alertTitle: 'تم مسح رمز الاستجابة السريعة', + alertType: 'النوع', + alertData: 'البيانات', + alertOK: 'موافق', + }, + // TermsScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + termsScreen: { + title: 'شروط الخدمة', + lastUpdated: 'آخر تحديث: ٨ نوفمبر ٢٠٢٥', + sections: [ + { title: '١. قبول الشروط', content: 'من خلال الوصول إلى أو استخدام تطبيق PezkuwiChain للهاتف المحمول ("الخدمة")، فإنك توافق على الالتزام بشروط الخدمة هذه. إذا كنت لا توافق على أي جزء من هذه الشروط، فلا يجوز لك الوصول إلى الخدمة.' }, + ], + bullets: {} + }, + // PrivacyScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + privacyScreen: { + title: 'سياسة الخصوصية', + lastUpdated: 'آخر تحديث: ٨ نوفمبر ٢٠٢٥', + sections: [ + { title: '١. المعلومات التي نجمعها', content: 'نحن نجمع المعلومات التي تقدمها لنا مباشرة:' }, + ], + bullets: {} + }, + // HelpScreen (TAM İÇERİK - KISMEN ÇEVRİLMİŞ) + helpScreen: { + title: 'المساعدة والدعم', + contactTitle: 'اتصل بالدعم', + supportCenter: 'زيارة مركز الدعم', + supportCenterLink: 'pezkuwichain.io/support', + emailSupport: 'الدعم عبر البريد الإلكتروني', + emailSupportLink: 'support@pezkuwichain.io', + faqTitle: 'الأسئلة الشائعة', + appInfo: 'إصدار التطبيق ١.٠.٠\n© ٢٠٢٥ PezkuwiChain. جميع الحقوق محفوظة.', + faqs: [ + { id: '1', question: 'كيف أنشئ محفظة؟', answer: 'عندما تقوم بالتسجيل في PezkuwiChain، يتم إنشاء محفظة لك تلقائيًا. يتم عرض عنوان محفظتك في قسم الإعدادات > الملف الشخصي.' }, + { id: '2', question: 'كيف أرسل الرموز؟', answer: 'اذهب إلى علامة التبويب "المحفظة"، انقر على الرمز الذي تريد إرساله (HEZ أو PEZ)، ثم انقر على زر "إرسال". أدخل عنوان محفظة المستلم والمبلغ الذي تريد إرساله.' }, + ] + }, selectYourLanguage: 'اختر لغتك', digitalCitizenshipPlatform: 'منصة المواطنة الرقمية', continue: 'متابعة', - signIn: 'تسجيل الدخول', - signUp: 'إنشاء حساب', - email: 'البريد الإلكتروني', - password: 'كلمة المرور', - firstName: 'الاسم الأول', - lastName: 'اسم العائلة', - phone: 'رقم الهاتف', - referralCode: 'رمز الإحالة (اختياري)', - alreadyHaveAccount: 'هل لديك حساب؟', - dontHaveAccount: 'ليس لديك حساب؟', + auth: { + signIn: 'تسجيل الدخول', + signUp: 'إنشاء حساب', + email: 'البريد الإلكتروني', + password: 'كلمة المرور', + firstName: 'الاسم الأول', + lastName: 'اسم العائلة', + phone: 'رقم الهاتف', + referralCode: 'رمز الإحالة (اختياري)', + alreadyHaveAccount: 'هل لديك حساب؟', + dontHaveAccount: 'ليس لديك حساب؟', + welcomeBack: 'مرحبًا بعودتك', + createAccount: 'إنشاء حساب', + errorTitle: 'خطأ', + fillFieldsError: 'يرجى ملء جميع الحقول المطلوبة', + authFailedError: 'فشل المصادقة', + placeholders: { + firstName: 'الاسم', + lastName: 'اللقب', + phone: '+٩٦٤١٢٣٤٥٦٧٨٩', + email: 'your@email.com', + password: '••••••••', + referralCode: 'أدخل رمز الإحالة', + } + }, loading: 'جاري التحميل...', submit: 'إرسال', cancel: 'إلغاء', save: 'حفظ', back: 'رجوع', - tikiScore: 'نقاط تيكي', - trustScore: 'نقاط الثقة', - dynamicWidget: 'ويدجت ديناميكي', - quickActions: 'إجراءات سريعة', - send: 'إرسال', - receive: 'استقبال', - exchange: 'تبادل', - stake: 'رهان', - vote: 'تصويت', - nft: 'NFT', - certificates: 'الشهادات', - refer: 'إحالة', - pay: 'دفع', - rewards: 'المكافآت', - history: 'السجل', - assets: 'الأصول', + homeTab: { + tikiScore: 'نقاط تيكي', + trustScore: 'نقاط الثقة', + dynamicWidget: 'ويدجت ديناميكي', + quickActions: 'إجراءات سريعة', + send: 'إرسال', + receive: 'استقبال', + exchange: 'تبادل', + stake: 'رهان', + vote: 'تصويت', + nft: 'NFT', + certificates: 'الشهادات', + refer: 'إحالة', + pay: 'دفع', + rewards: 'المكافآت', + history: 'السجل', + assets: 'الأصول', + welcomeTitle: '🎉 مرحبا بك في PezkuwiChain!', + welcomeMessage: 'ابدأ رحلة مواطنتك الرقمية اليوم', + featureTitle: '📢 ميزة جديدة', + featureMessage: 'صوّت على مقترحات الحوكمة', + }, + // YENİ ANAHTARLAR + quickActions: { + home: 'الرئيسية', + governance: 'الحوكمة', + exchange: 'تبادل', + b2b: 'منصة B2B', + bank: 'بنك', + games: 'ألعاب', + university: 'جامعة', + education: 'تعليم', + dashboard: 'لوحة التحكم', + trading: 'تداول', + kurdmedia: 'كورد ميديا', + rewards: 'المكافآت', + forum: 'منتدى' + }, + walletTab: { + title: 'محفظتي', + balanceLoading: 'جاري التحميل...', + hezName: 'رمز HÊZ (المواطنة)', + pezName: 'رمز PEZ (المنفعة)', + swap: 'تبادل', + p2p: 'P2P', + dapps: 'DApps', + staking: 'الرهن', + connect: 'اتصال', + tokens: 'الرموز', + pezNetwork: 'شبكة PEZ', + polkadotNetwork: 'Polkadot', + bitcoinNetwork: 'Bitcoin', + ethereumNetwork: 'Ethereum', + bscNetwork: 'Binance Smart Chain', + cardanoNetwork: 'Cardano', + solanaNetwork: 'Solana', + }, + placeholders: { + citizens: 'شاشة المواطنين', + referral: 'شاشة الإحالة', + profile: 'شاشة الملف الشخصي', + }, + imagePicker: { + title: 'تغيير صورة الملف الشخصي', + subtitle: 'اختر خيارًا', + takePhoto: 'التقاط صورة', + chooseFromGallery: 'الاختيار من المعرض', + }, + alerts: { + permissionRequired: 'الإذن مطلوب', + cameraPermission: 'إذن الكاميرا مطلوب!', + galleryPermission: 'إذن الوصول إلى المعرض مطلوب!', + }, + verification: { + title: 'التحقق البشري', + subtitle: 'يرجى إكمال التحقق الأمني للمتابعة', + verifying: 'يتم التحقق...', + loading: 'جاري تحميل التحقق...', + failedTitle: 'فشل التحقق', + failedMessage: 'يرجى المحاولة مرة أخرى', + errorTitle: 'خطأ', + errorMessage: 'فشل التحقق. يرجى المحاولة مرة أخرى.', + webViewError: 'خطأ في WebView:', + }, }, tr: { + appName: 'PezkuwiChain', + languageNames: { + 'en': { name: 'İngilizce', nativeName: 'English', flag: '🇺🇸' }, + 'ku-kurmanji': { name: 'Kürtçe (Kurmanci)', nativeName: 'Kurdî (Kurmancî)', flag: '🟨' }, + 'ku-sorani': { name: 'Kürtçe (Sorani)', nativeName: 'کوردی (سۆرانی)', flag: '🟥' }, + 'tr': { name: 'Türkçe', nativeName: 'Türkçe', flag: '🇹🇷' }, + 'ar': { name: 'Arapça', nativeName: 'العربية', flag: '🇸🇦' }, + 'fa': { name: 'Farsça', nativeName: 'فارسی', flag: '🇮🇷' }, + }, + languageSettings: { + info: '6 dil tam olarak desteklenmektedir. Diğer diller Google Çevirmen kullanır.', + }, welcome: 'Hoş geldiniz', home: 'Ana Sayfa', wallet: 'Cüzdan', @@ -275,42 +1460,294 @@ const i18n = new I18n({ privacy: 'Gizlilik Politikası', help: 'Yardım ve Destek', walletAddress: 'Cüzdan Adresi', + settingsScreen: { + comingSoon: 'Çok Yakında', + comingSoonMessage: 'Bu özellik gelecekteki bir güncellemede mevcut olacak', + subtitles: { + editProfile: 'Bilgilerinizi güncelleyin', + walletAddress: 'Birincil cüzdan adresiniz', + biometric: 'Parmak izi veya Yüz Tanıma kullanın', + biometricNotAvailable: 'Bu cihazda mevcut değil', + changePassword: 'Şifrenizi güncelleyin', + twoFactorAuth: 'Ekstra güvenlik ekleyin', + notifications: 'Uyarılar ve güncellemeler alın', + darkThemeEnabled: 'Karanlık tema etkin', + lightThemeEnabled: 'Açık tema etkin', + }, + biometricAlerts: { + prompt: 'Biyometriyi etkinleştirmek için kimliğinizi doğrulayın', + successTitle: 'Başarılı', + enabled: 'Biyometrik kimlik doğrulama etkinleştirildi', + disabled: 'Biyometrik kimlik doğrulama devre dışı bırakıldı', + failedTitle: 'Başarısız', + failedMessage: 'Biyometrik kimlik doğrulama başarısız oldu', + }, + }, + editProfileScreen: { + labels: { + phone: 'Telefon Numarası', + }, + placeholders: { + firstName: 'Adınızı girin', + lastName: 'Soyadınızı girin', + email: 'E-postanızı girin', + phone: 'Telefon numaranızı girin', + }, + alerts: { + successTitle: 'Başarılı', + successMessage: 'Profil başarıyla güncellendi!', + updateFailed: 'Profil güncellenemedi', + networkError: 'Ağ hatası oluştu', + }, + saveButton: 'Değişiklikleri Kaydet', + }, + changePasswordScreen: { + info: 'Şifre en az 8 karakter olmalıdır', + labels: { + current: 'Mevcut Şifre', + new: 'Yeni Şifre', + confirm: 'Yeni Şifreyi Onayla', + }, + placeholders: { + current: 'Mevcut şifreyi girin', + new: 'Yeni şifreyi girin', + confirm: 'Yeni şifreyi tekrar girin', + }, + alerts: { + fillFields: 'Lütfen tüm alanları doldurun', + noMatch: 'Yeni şifreler eşleşmiyor', + lengthError: 'Şifre en az 8 karakter olmalıdır', + successTitle: 'Başarılı', + successMessage: 'Şifre başarıyla değiştirildi!', + updateFailed: 'Şifre değiştirilemedi', + networkError: 'Ağ hatası oluştu', + }, + saveButton: 'Şifreyi Değiştir', + }, + walletAddressScreen: { + info: 'Cüzdan adresiniz HEZ ve PEZ tokenlerini almak için kullanılır. Doğru olduğundan emin olun.', + label: 'Cüzdan Adresi', + placeholder: 'Cüzdan adresini girin', + noAddress: 'Cüzdan adresi ayarlanmamış', + editButton: 'Cüzdan Adresini Düzenle', + alerts: { + emptyError: 'Cüzdan adresi boş olamaz', + successTitle: 'Başarılı', + successMessage: 'Cüzdan adresi başarıyla güncellendi!', + updateFailed: 'Cüzdan adresi güncellenemedi', + networkError: 'Ağ hatası oluştu', + copiedTitle: 'Kopyalandı', + copiedMessage: 'Cüzdan adresi panoya kopyalandı', + }, + }, + notificationsScreen: { + title: 'Bildirimler', + markAllRead: 'Tümünü okundu işaretle', + mockData: [ + { + id: '1', + title: 'Yeni Yönetişim Teklifi', + message: 'Teklif #42: Aylık PEZ ödüllerini %10 artır', + time: '2 saat önce', + type: 'governance', + read: false, + }, + { + id: '2', + title: 'İşlem Onaylandı', + message: '5GrwvaEF5... adresinden 100 HEZ aldınız', + time: '5 saat önce', + type: 'transaction', + read: false, + }, + { + id: '3', + title: 'Staking Ödülü', + message: '5.2 PEZ staking ödülü kazandınız', + time: '1 gün önce', + type: 'reward', + read: true, + }, + ], + }, + qrScannerScreen: { + title: 'QR Kodu Tara', + titleNoPermission: 'QR Tarayıcı', + requesting: 'Kamera izni isteniyor...', + permissionDenied: 'Kamera İzni Reddedildi', + permissionMessage: 'QR kodlarını taramak için lütfen cihaz ayarlarınızdan kamera erişimini etkinleştirin.', + requestAgain: 'Tekrar İzin İste', + instruction: 'QR kodu çerçevenin içine yerleştirin', + scanAgain: 'Tekrar Tara', + alertTitle: 'QR Kodu Tarandı', + alertType: 'Tür', + alertData: 'Veri', + alertOK: 'Tamam', + }, + // TermsScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + termsScreen: { + title: 'Hizmet Şartları', + lastUpdated: 'Son Güncelleme: 8 Kasım 2025', + sections: [ + { title: '1. Şartların Kabulü', content: 'PezkuwiChain mobil uygulamasına ("Hizmet") erişerek veya kullanarak, bu Hizmet Şartları\'na bağlı kalmayı kabul edersiniz. Bu şartların herhangi bir bölümünü kabul etmiyorsanız, Hizmet\'e erişemezsiniz.' }, + ], + bullets: {} + }, + // PrivacyScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + privacyScreen: { + title: 'Gizlilik Politikası', + lastUpdated: 'Son Güncelleme: 8 Kasım 2025', + sections: [ + { title: '1. Topladığımız Bilgiler', content: 'Doğrudan bize sağladığınız bilgileri toplarız:' }, + ], + bullets: {} + }, + // HelpScreen (TAM İÇERİK - KISMEN ÇEVRİLMİŞ) + helpScreen: { + title: 'Yardım ve Destek', + contactTitle: 'Destekle İletişime Geçin', + supportCenter: 'Destek Merkezini Ziyaret Edin', + supportCenterLink: 'pezkuwichain.io/support', + emailSupport: 'E-posta Desteği', + emailSupportLink: 'support@pezkuwichain.io', + faqTitle: 'Sıkça Sorulan Sorular', + appInfo: 'Uygulama Sürümü 1.0.0\n© 2025 PezkuwiChain. Tüm hakları saklıdır.', + faqs: [ + { id: '1', question: 'Nasıl cüzdan oluştururum?', answer: 'PezkuwiChain\'e kaydolduğunuzda, sizin için otomatik olarak bir cüzdan oluşturulur. Cüzdan adresiniz Ayarlar > Profil bölümünde görüntülenir.' }, + { id: '2', question: 'Nasıl token gönderirim?', answer: 'Cüzdan sekmesine gidin, göndermek istediğiniz tokene (HEZ veya PEZ) dokunun, ardından "Gönder" düğmesine dokunun. Alıcının cüzdan adresini ve göndermek istediğiniz miktarı girin.' }, + ] + }, selectYourLanguage: 'Dilinizi Seçin', digitalCitizenshipPlatform: 'Dijital Vatandaşlık Platformu', continue: 'Devam Et', - signIn: 'Giriş Yap', - signUp: 'Kayıt Ol', - email: 'E-posta', - password: 'Şifre', - firstName: 'Ad', - lastName: 'Soyad', - phone: 'Telefon', - referralCode: 'Yönlendirme Kodu (Opsiyonel)', - alreadyHaveAccount: 'Hesabınız var mı?', - dontHaveAccount: 'Hesabınız yok mu?', + auth: { + signIn: 'Giriş Yap', + signUp: 'Kayıt Ol', + email: 'E-posta', + password: 'Şifre', + firstName: 'Ad', + lastName: 'Soyad', + phone: 'Telefon', + referralCode: 'Yönlendirme Kodu (Opsiyonel)', + alreadyHaveAccount: 'Hesabınız var mı؟', + dontHaveAccount: 'Hesabınız yok mu؟', + welcomeBack: 'Tekrar Hoş Geldiniz', + createAccount: 'Hesap Oluştur', + errorTitle: 'Hata', + fillFieldsError: 'Lütfen tüm gerekli alanları doldurun', + authFailedError: 'Kimlik doğrulama başarısız oldu', + placeholders: { + firstName: 'Ahmet', + lastName: 'Yılmaz', + phone: '+٩٠١٢٣٤٥٦٧٨٩', + email: 'your@email.com', + password: '••••••••', + referralCode: 'Yönlendirme kodunu girin', + } + }, loading: 'Yükleniyor...', submit: 'Gönder', cancel: 'İptal', save: 'Kaydet', back: 'Geri', - tikiScore: 'Tiki Puanı', - trustScore: 'Güven Puanı', - dynamicWidget: 'Dinamik Widget', - quickActions: 'Hızlı İşlemler', - send: 'Gönder', - receive: 'Al', - exchange: 'Takas', - stake: 'Stake', - vote: 'Oy', - nft: 'NFT', - certificates: 'Sertifikalar', - refer: 'Yönlendir', - pay: 'Öde', - rewards: 'Ödüller', - history: 'Geçmiş', - assets: 'Varlıklar', + homeTab: { + tikiScore: 'Tiki Puanı', + trustScore: 'Güven Puanı', + dynamicWidget: 'Dinamik Widget', + quickActions: 'Hızlı İşlemler', + send: 'Gönder', + receive: 'Al', + exchange: 'Takas', + stake: 'Stake', + vote: 'Oy', + nft: 'NFT', + certificates: 'Sertifikalar', + refer: 'Yönlendir', + pay: 'Öde', + rewards: 'Ödüller', + history: 'Geçmiş', + assets: 'Varlıklar', + welcomeTitle: '🎉 PezkuwiChain\'e Hoş Geldiniz!', + welcomeMessage: 'Vatandaşlık yolculuğunuza bugün başlayın', + featureTitle: '📢 Yeni Özellik', + featureMessage: 'Yönetişim teklifleri için oy kullanın', + }, + // YENİ ANAHTARLAR + quickActions: { + home: 'Ana Sayfa', + governance: 'Yönetişim', + exchange: 'Borsa', + b2b: 'B2B Platformu', + bank: 'Banka', + games: 'Oyunlar', + university: 'Üniversite', + education: 'Eğitim', + dashboard: 'Panel', + trading: 'Ticaret', + kurdmedia: 'Kurdmedya', + rewards: 'Ödüller', + forum: 'Forum' + }, + walletTab: { + title: 'Cüzdanım', + balanceLoading: 'Yükleniyor...', + hezName: 'HÊZ Token (Vatandaşlık)', + pezName: 'PEZ Token (Hizmet)', + swap: 'Takas', + p2p: 'P2P', + dapps: 'DApps', + staking: 'Staking', + connect: 'Bağlan', + tokens: 'Tokenlar', + pezNetwork: 'PEZ Ağı', + polkadotNetwork: 'Polkadot', + bitcoinNetwork: 'Bitcoin', + ethereumNetwork: 'Ethereum', + bscNetwork: 'Binance Smart Chain', + cardanoNetwork: 'Cardano', + solanaNetwork: 'Solana', + }, + placeholders: { + citizens: 'Vatandaşlar Ekranı', + referral: 'Yönlendirme Ekranı', + profile: 'Profil Ekranı', + }, + imagePicker: { + title: 'Profil Fotoğrafını Değiştir', + subtitle: 'Bir seçenek belirleyin', + takePhoto: 'Fotoğraf Çek', + chooseFromGallery: 'Galeriden Seç', + }, + alerts: { + permissionRequired: 'İzin Gerekli', + cameraPermission: 'Kamera izni gerekli!', + galleryPermission: 'Galeri erişim izni gerekli!', + }, + verification: { + title: 'İnsan Doğrulaması', + subtitle: 'Lütfen devam etmek için güvenlik kontrolünü tamamlayın', + verifying: 'Doğrulanıyor...', + loading: 'Doğrulama yükleniyor...', + failedTitle: 'Doğrulama Başarısız', + failedMessage: 'Lütfen tekrar deneyin', + errorTitle: 'Hata', + errorMessage: 'Doğrulama başarısız oldu. Lütfen tekrar deneyin.', + webViewError: 'WebView Hatası:', + }, }, fa: { + appName: 'پزکوی‌چین', + languageNames: { + 'en': { name: 'انگلیسی', nativeName: 'English', flag: '🇺🇸' }, + 'ku-kurmanji': { name: 'کردی (کرمانجی)', nativeName: 'Kurdî (Kurmancî)', flag: '🟨' }, + 'ku-sorani': { name: 'کردی (سورانی)', nativeName: 'کوردی (سۆرانی)', flag: '🟥' }, + 'tr': { name: 'ترکی', nativeName: 'Türkçe', flag: '🇹🇷' }, + 'ar': { name: 'عربی', nativeName: 'العربية', flag: '🇸🇦' }, + 'fa': { name: 'فارسی', nativeName: 'فارسی', flag: '🇮🇷' }, + }, + languageSettings: { + info: '۶ زبان به طور کامل پشتیبانی می شوند. زبان های دیگر از مترجم گوگل استفاده می کنند.', + }, welcome: 'خوش آمدید', home: 'خانه', wallet: 'کیف پول', @@ -335,66 +1772,279 @@ const i18n = new I18n({ privacy: 'سیاست حریم خصوصی', help: 'کمک و پشتیبانی', walletAddress: 'آدرس کیف پول', + settingsScreen: { + comingSoon: 'به زودی', + comingSoonMessage: 'این ویژگی در به‌روزرسانی آینده در دسترس خواهد بود', + subtitles: { + editProfile: 'اطلاعات خود را به‌روز کنید', + walletAddress: 'آدرس کیف پول اصلی شما', + biometric: 'از اثر انگشت یا شناسه چهره استفاده کنید', + biometricNotAvailable: 'در این دستگاه موجود نیست', + changePassword: 'رمز عبور خود را به‌روز کنید', + twoFactorAuth: 'امنیت اضافی اضافه کنید', + notifications: 'هشدارها و به‌روزرسانی‌ها را دریافت کنید', + darkThemeEnabled: 'تم تاریک فعال شد', + lightThemeEnabled: 'تم روشن فعال شد', + }, + biometricAlerts: { + prompt: 'برای فعال کردن بیومتریک احراز هویت کنید', + successTitle: 'موفق', + enabled: 'احراز هویت بیومترik فعال شد', + disabled: 'احراز هویت بیومترik غیرفعال شد', + failedTitle: 'ناموفق', + failedMessage: 'احراز هویت بیومتریک ناموفق بود', + }, + }, + editProfileScreen: { + labels: { + phone: 'شماره تلفن', + }, + placeholders: { + firstName: 'نام خود را وارد کنید', + lastName: 'نام خانوادگی خود را وارد کنید', + email: 'ایمیل خود را وارد کنید', + phone: 'شماره تلفن خود را وارد کنید', + }, + alerts: { + successTitle: 'موفق', + successMessage: 'پروفایل با موفقیت به‌روزرسانی شد!', + updateFailed: 'به‌روزرسانی پروفایل ناموفق بود', + networkError: 'خطای شبکه رخ داد', + }, + saveButton: 'ذخیره تغییرات', + }, + changePasswordScreen: { + info: 'رمز عبور باید حداقل ۸ کاراکتر باشد', + labels: { + current: 'رمز عبور فعلی', + new: 'رمز عبور جدید', + confirm: 'تأیید رمز عبور جدید', + }, + placeholders: { + current: 'رمز عبور فعلی را وارد کنید', + new: 'رمز عبور جدید را وارد کنید', + confirm: 'رمز عبور جدید را دوباره وارد کنید', + }, + alerts: { + fillFields: 'لطفا تمام فیلدها را پر کنید', + noMatch: 'رمزهای عبور جدید مطابقت ندارند', + lengthError: 'رمز عبور باید حداقل ۸ کاراکتر باشد', + successTitle: 'موفق', + successMessage: 'رمز عبور با موفقیت تغییر کرد!', + updateFailed: 'تغییر رمز عبور ناموفق بود', + networkError: 'خطای شبکه رخ داد', + }, + saveButton: 'تغییر رمز عبور', + }, + walletAddressScreen: { + info: 'آدرس کیف پول شما برای دریافت توکن‌های HEZ و PEZ استفاده می‌شود. مطمئن شوید که صحیح است.', + label: 'آدرس کیف پول', + placeholder: 'آدرس کیف پول را وارد کنید', + noAddress: 'هیچ آدرس کیف پولی تنظیم نشده است', + editButton: 'ویرایش آدرس کیف پول', + alerts: { + emptyError: 'آدرس کیف پول نمی‌تواند خالی باشد', + successTitle: 'موفق', + successMessage: 'آدرس کیف پول با موفقیت به‌روزرسانی شد!', + updateFailed: 'به‌روزرسانی آدرس کیف پول ناموفق بود', + networkError: 'خطای شبکه رخ داد', + copiedTitle: 'کپی شد', + copiedMessage: 'آدرس کیف پول در کلیپ‌بورد کپی شد', + }, + }, + notificationsScreen: { + title: 'اطلاعیه‌ها', + markAllRead: 'علامت زدن همه به عنوان خوانده شده', + mockData: [ + { + id: '1', + title: 'پیشنهاد جدید حاکمیتی', + message: 'پیشنهاد #٤٢: افزایش ١٠٪ پاداش ماهانه PEZ', + time: '٢ ساعت پیش', + type: 'governance', + read: false, + }, + { + id: '2', + title: 'تراکنش تأیید شد', + message: 'شما ١٠٠ HEZ از ...5GrwvaEF5 دریافت کردید', + time: '٥ ساعت پیش', + type: 'transaction', + read: false, + }, + { + id: '3', + title: 'پاداش سهام‌گذاری', + message: 'شما ٥.٢ PEZ پاداش سهام‌گذاری کسب کردید', + time: '١ روز پیش', + type: 'reward', + read: true, + }, + ], + }, + qrScannerScreen: { + title: 'اسکن کد QR', + titleNoPermission: 'اسکنر QR', + requesting: 'در حال درخواست مجوز دوربین...', + permissionDenied: 'مجوز دوربین رد شد', + permissionMessage: 'لطفاً برای اسکن کدهای QR، دسترسی به دوربین را در تنظیمات دستگاه خود فعال کنید.', + requestAgain: 'درخواست مجدد مجوز', + instruction: 'کد QR را درون کادر قرار دهید', + scanAgain: 'اسکن مجدد', + alertTitle: 'کد QR اسکن شد', + alertType: 'نوع', + alertData: 'داده', + alertOK: 'باشه', + }, + // TermsScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + termsScreen: { + title: 'شرایط خدمات', + lastUpdated: 'آخرین به‌روزرسانی: ٨ نوامبر ٢٠٢٥', + sections: [ + { title: '١. پذیرش شرایط', content: 'با دسترسی یا استفاده از اپلیکیشن موبایل PezkuwiChain ("سرویس")، شما موافقت می‌کنید که به این شرایط خدمات پایبند باشید. اگر با هر بخشی از این شرایط مخالف هستید، ممکن است نتوانید به سرویس دسترسی پیدا کنید.' }, + ], + bullets: {} + }, + // PrivacyScreen (TAM İÇERİK - ÇEVRİLMEMİŞ) + privacyScreen: { + title: 'سیاست حریم خصوصی', + lastUpdated: 'آخرین به‌روزرسانی: ٨ نوامبر ٢٠٢٥', + sections: [ + { title: '١. اطلاعاتی که جمع‌آوری می‌کنیم', content: 'ما اطلاعاتی را که شما مستقیماً در اختیار ما قرار می‌دهید جمع‌آوری می‌کنیم:' }, + ], + bullets: {} + }, + // HelpScreen (TAM İÇERİK - KISMEN ÇEVRİLMİŞ) + helpScreen: { + title: 'کمک و پشتیبانی', + contactTitle: 'تماس با پشتیبانی', + supportCenter: 'بازدید از مرکز پشتیبانی', + supportCenterLink: 'pezkuwichain.io/support', + emailSupport: 'پشتیبانی ایمیل', + emailSupportLink: 'support@pezkuwichain.io', + faqTitle: 'سوالات متداول', + appInfo: 'نسخه برنامه ١.٠.٠\n© ٢٠٢٥ PezkuwiChain. تمام حقوق محفوظ است.', + faqs: [ + { id: '1', question: 'چگونه کیف پول ایجاد کنم؟', answer: 'هنگامی که در PezkuwiChain ثبت نام می‌کنید، یک کیف پول به طور خودکار برای شما ایجاد می‌شود. آدرس کیف پول شما در بخش تنظیمات > پروفایل نمایش داده می‌شود.' }, + { id: '2', question: 'چگونه توکن ارسال کنم؟', answer: 'به تب کیف پول بروید، روی توکنی که می‌خواهید ارسال کنید (HEZ یا PEZ) ضربه بزنید، سپس روی دکمه "ارسال" ضربه بزنید. آدرس کیف پول گیرنده و مقداری را که می‌خواهید ارسال کنید وارد کنید.' }, + ] + }, selectYourLanguage: 'زبان خود را انتخاب کنید', digitalCitizenshipPlatform: 'پلتفرم شهروندی دیجیتال', continue: 'ادامه', - signIn: 'ورود', - signUp: 'ثبت نام', - email: 'ایمیل', - password: 'رمز عبور', - firstName: 'نام', - lastName: 'نام خانوادگی', - phone: 'تلفن', - referralCode: 'کد ارجاع (اختیاری)', - alreadyHaveAccount: 'حساب کاربری دارید؟', - dontHaveAccount: 'حساب کاربری ندارید؟', + auth: { + signIn: 'ورود', + signUp: 'ثبت نام', + email: 'ایمیل', + password: 'رمز عبور', + firstName: 'نام', + lastName: 'نام خانوادگی', + phone: 'تلفن', + referralCode: 'کد ارجاع (اختیاری)', + alreadyHaveAccount: 'حساب کاربری دارید؟', + dontHaveAccount: 'حساب کاربری ندارید؟', + welcomeBack: 'خوش آمدید', + createAccount: 'ایجاد حساب کاربری', + errorTitle: 'خطا', + fillFieldsError: 'لطفا تمام فیلدهای الزامی را پر کنید', + authFailedError: 'احراز هویت ناموفق بود', + placeholders: { + firstName: 'نام', + lastName: 'نام خانوادگی', + phone: '+٩٨١٢٣٤٥٦٧٨٩', + email: 'your@email.com', + password: '••••••••', + referralCode: 'کد ارجاع را وارد کنید', + } + }, loading: 'در حال بارگذاری...', submit: 'ارسال', cancel: 'لغو', save: 'ذخیره', back: 'بازگشت', - tikiScore: 'امتیاز تیکی', - trustScore: 'امتیاز اعتماد', - dynamicWidget: 'ابزارک پویا', - quickActions: 'اقدامات سریع', - send: 'ارسال', - receive: 'دریافت', - exchange: 'تبادل', - stake: 'سهام', - vote: 'رأی', - nft: 'NFT', - certificates: 'گواهینامه‌ها', - refer: 'ارجاع', - pay: 'پرداخت', - rewards: 'پاداش‌ها', - history: 'تاریخچه', - assets: 'دارایی‌ها', + homeTab: { + tikiScore: 'امتیاز تیکی', + trustScore: 'امتیاز اعتماد', + dynamicWidget: 'ابزارک پویا', + quickActions: 'اقدامات سریع', + send: 'ارسال', + receive: 'دریافت', + exchange: 'تبادل', + stake: 'سهام', + vote: 'رأی', + nft: 'NFT', + certificates: 'گواهینامه‌ها', + refer: 'ارجاع', + pay: 'پرداخت', + rewards: 'پاداش‌ها', + history: 'تاریخچه', + assets: 'دارایی‌ها', + welcomeTitle: '🎉 به PezkuwiChain خوش آمدید!', + welcomeMessage: 'سفر شهروندی خود را امروز آغاز کنید', + featureTitle: '📢 ویژگی جدید', + featureMessage: 'به پیشنهادات حاکمیتی رأی دهید', + }, + // YENİ ANAHTARLAR + quickActions: { + home: 'خانه', + governance: 'حاکمیت', + exchange: 'صرافی', + b2b: 'پلتفرم B2B', + bank: 'بانک', + games: 'بازی‌ها', + university: 'دانشگاه', + education: 'آموزش', + dashboard: 'داشبورد', + trading: 'تجارت', + kurdmedia: 'کردمدیا', + rewards: 'پاداش‌ها', + forum: 'انجمن' + }, + walletTab: { + title: 'کیف پول من', + balanceLoading: 'در حال بارگذاری...', + hezName: 'توکن HÊZ (شهروندی)', + pezName: 'توکن PEZ (خدماتی)', + swap: 'تبادل', + p2p: 'P2P', + dapps: 'DApps', + staking: 'سپرده‌گذاری', + connect: 'اتصال', + tokens: 'توکن‌ها', + pezNetwork: 'شبکه PEZ', + polkadotNetwork: 'پولکادات', + bitcoinNetwork: 'بیت‌کوین', + ethereumNetwork: 'اتریوم', + bscNetwork: 'زنجیره هوشمند بایننس', + cardanoNetwork: 'کاردانو', + solanaNetwork: 'سولانا', + }, + placeholders: { + citizens: 'صفحه شهروندان', + referral: 'صفحه ارجاع', + profile: 'صفحه پروفایل', + }, + imagePicker: { + title: 'تغییر عکس پروفایل', + subtitle: 'یک گزینه را انتخاب کنید', + takePhoto: 'گرفتن عکس', + chooseFromGallery: 'انتخاب از گالری', + }, + alerts: { + permissionRequired: 'مجوز مورد نیاز است', + cameraPermission: 'مجوز دوربین مورد نیاز است!', + galleryPermission: 'مجوز دسترسی به گالری مورد نیاز است!', + }, + verification: { + title: 'تأیید هویت انسانی', + subtitle: 'لطفا برای ادامه، بررسی امنیتی را کامل کنید', + verifying: 'در حال تأیید...', + loading: 'در حال بارگذاری تأیید...', + failedTitle: 'تأیید ناموفق بود', + failedMessage: 'لطفا دوباره تلاش کنید', + errorTitle: 'خطا', + errorMessage: 'تأیید ناموفق بود. لطفا دوباره تلاش کنید.', + webViewError: 'خطای WebView:', + }, }, -}); - -// Configure i18n with safe defaults -i18n.defaultLocale = 'en'; -i18n.locale = 'en'; // Start with safe default -i18n.enableFallback = true; - -export const loadSavedLanguage = async () => { - try { - const savedLang = await AsyncStorage.getItem('appLanguage'); - if (savedLang) { - i18n.locale = savedLang; - } - } catch (error) { - console.error('Error loading language:', error); - } -}; - -export const saveLanguage = async (languageCode: string) => { - try { - await AsyncStorage.setItem('appLanguage', languageCode); - i18n.locale = languageCode; - } catch (error) { - console.error('Error saving language:', error); - } -}; - -export default i18n; \ No newline at end of file +}; \ No newline at end of file diff --git a/frontend/src/screens/HomeScreen.tsx b/frontend/src/screens/HomeScreen.tsx index 37724d04..575469ae 100644 --- a/frontend/src/screens/HomeScreen.tsx +++ b/frontend/src/screens/HomeScreen.tsx @@ -14,30 +14,65 @@ import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import * as ImagePicker from 'expo-image-picker'; import { useAuth } from '../contexts/AuthContext'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import i18n from '../config/i18n'; +import { useLanguage } from '../contexts/LanguageContext'; +import { api } from '../config/api'; + +// YENİ: 13 Quick Action görselini import et +const qa_home = require('../assets/images/quick-actions/qa_home.jpg'); +const qa_governance = require('../assets/images/quick-actions/qa_governance.jpg'); +const qa_exchange = require('../assets/images/quick-actions/qa_exchange.png'); +const qa_b2b = require('../assets/images/quick-actions/qa_b2b.jpg'); +const qa_bank = require('../assets/images/quick-actions/qa_bank.png'); +const qa_games = require('../assets/images/quick-actions/qa_games.jpg'); +const qa_university = require('../assets/images/quick-actions/qa_university.png'); +const qa_education = require('../assets/images/quick-actions/qa_education.png'); +const qa_dashboard = require('../assets/images/quick-actions/qa_dashboard.jpg'); +const qa_trading = require('../assets/images/quick-actions/qa_trading.png'); +const qa_kurdmedia = require('../assets/images/quick-actions/qa_kurdmedia.jpg'); +const qa_rewards = require('../assets/images/quick-actions/qa_rewards.png'); +const qa_forum = require('../assets/images/quick-actions/qa_forum.jpg'); const { width } = Dimensions.get('window'); +// YENİ: 13 özel butonu ve etiket anahtarlarını (i18n) tanımla +const NEW_QUICK_ACTIONS = [ + { id: '1', labelKey: 'quickActions.home', icon: qa_home }, + { id: '2', labelKey: 'quickActions.governance', icon: qa_governance }, + { id: '3', labelKey: 'quickActions.exchange', icon: qa_exchange }, + { id: '4', labelKey: 'quickActions.b2b', icon: qa_b2b }, + { id: '5', labelKey: 'quickActions.bank', icon: qa_bank }, + { id: '6', labelKey: 'quickActions.games', icon: qa_games }, + { id: '7', labelKey: 'quickActions.university', icon: qa_university }, + { id: '8', labelKey: 'quickActions.education', icon: qa_education }, + { id: '9', labelKey: 'quickActions.dashboard', icon: qa_dashboard }, + { id: '10', labelKey: 'quickActions.trading', icon: qa_trading }, + { id: '11', labelKey: 'quickActions.kurdmedia', icon: qa_kurdmedia }, + { id: '12', labelKey: 'quickActions.rewards', icon: qa_rewards }, + { id: '13', labelKey: 'quickActions.forum', icon: qa_forum }, +]; + + function HomeTab({ navigation }: any) { const { user } = useAuth(); const insets = useSafeAreaInsets(); const [profileImage, setProfileImage] = useState(null); + const { t } = useLanguage(); const showImagePickerOptions = () => { Alert.alert( - 'Change Profile Photo', - 'Choose an option', + t('imagePicker.title'), + t('imagePicker.subtitle'), [ { - text: 'Take Photo', + text: t('imagePicker.takePhoto'), onPress: takePhoto, }, { - text: 'Choose from Gallery', + text: t('imagePicker.chooseFromGallery'), onPress: pickImageFromGallery, }, { - text: 'Cancel', + text: t('common.cancel'), style: 'cancel', }, ], @@ -49,7 +84,7 @@ function HomeTab({ navigation }: any) { const permissionResult = await ImagePicker.requestCameraPermissionsAsync(); if (permissionResult.granted === false) { - Alert.alert('Permission Required', 'Camera permission is required!'); + Alert.alert(t('alerts.permissionRequired'), t('alerts.cameraPermission')); return; } @@ -63,7 +98,7 @@ function HomeTab({ navigation }: any) { if (!result.canceled && result.assets[0].base64) { const base64Image = `data:image/jpeg;base64,${result.assets[0].base64}`; setProfileImage(base64Image); - // TODO: Save to backend + // TODO: Save to backend (Backend endpoint'i '/api/auth/profile' güncellenmeli) } }; @@ -71,7 +106,7 @@ function HomeTab({ navigation }: any) { const permissionResult = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (permissionResult.granted === false) { - Alert.alert('Permission Required', 'Gallery access is required!'); + Alert.alert(t('alerts.permissionRequired'), t('alerts.galleryPermission')); return; } @@ -86,13 +121,13 @@ function HomeTab({ navigation }: any) { if (!result.canceled && result.assets[0].base64) { const base64Image = `data:image/jpeg;base64,${result.assets[0].base64}`; setProfileImage(base64Image); - // TODO: Save to backend + // TODO: Save to backend (Backend endpoint'i '/api/auth/profile' güncellenmeli) } }; return ( - {/* Header */} + {/* Header (TASARIM KORUNDU) */} @@ -120,25 +155,26 @@ function HomeTab({ navigation }: any) { - {/* Announcements Widget */} + {/* Announcements Widget (TASARIM KORUNDU) */} - 🎉 Welcome to PezkuwiChain! - Start your citizenship journey today + {t('homeTab.welcomeTitle')} + {t('homeTab.welcomeMessage')} - 📢 New Feature - Vote on governance proposals + {t('homeTab.featureTitle')} + {t('homeTab.featureMessage')} - {/* Quick Actions Grid - 30 Actions */} + {/* Quick Actions Grid - YENİ GÖRSELLERLE GÜNCELLENDİ */} - {i18n.t('quickActions')} + {t('homeTab.quickActions')} - {QUICK_ACTIONS.map((action, index) => ( + {/* YENİ: Dizi 'NEW_QUICK_ACTIONS' olarak değişti */} + {NEW_QUICK_ACTIONS.map((action, index) => ( - - + {/* YENİ: 'Ionicons' yerine 'Image' component'i kullanıldı */} + + - {i18n.t(action.labelKey)} + {/* YENİ: Etiket 'quickActions' objesinden alınıyor */} + {t(action.labelKey)} ))} @@ -163,43 +201,24 @@ function HomeTab({ navigation }: any) { function WalletTab() { const { user } = useAuth(); const insets = useSafeAreaInsets(); - const [hezBalance, setHezBalance] = useState('Loading...'); - const [pezBalance, setPezBalance] = useState('Loading...'); + const { t } = useLanguage(); + const [hezBalance, setHezBalance] = useState(t('walletTab.balanceLoading')); + const [pezBalance, setPezBalance] = useState(t('walletTab.balanceLoading')); const [loading, setLoading] = useState(true); const TEST_WALLET = '5GgTgG9sRmPQAYU1RsTejZYnZRjwzKZKWD3awtuqjHioki45'; useEffect(() => { + setHezBalance(t('walletTab.balanceLoading')); + setPezBalance(t('walletTab.balanceLoading')); fetchBalance(); - }, []); + }, [t]); const fetchBalance = async () => { try { - const backendUrl = process.env.EXPO_PUBLIC_BACKEND_URL || 'http://localhost:8001'; - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), 5000); // 5 sec timeout - - const response = await fetch(`${backendUrl}/api/blockchain/balance`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - address: TEST_WALLET, - }), - signal: controller.signal, - }); - - clearTimeout(timeoutId); - - if (response.ok) { - const data = await response.json(); - setHezBalance(parseFloat(data.hez).toFixed(2)); - setPezBalance(parseFloat(data.pez).toFixed(2)); - } else { - setHezBalance('0.00'); - setPezBalance('0.00'); - } + const data = await api.getBalance(TEST_WALLET); + setHezBalance(parseFloat(data.hez).toFixed(2)); + setPezBalance(parseFloat(data.pez).toFixed(2)); } catch (error) { console.error('Balance fetch error:', error); setHezBalance('0.00'); @@ -212,15 +231,15 @@ function WalletTab() { return ( - {/* Header */} + {/* TASARIM KORUNDU */} - My Wallet + {t('walletTab.title')} - {/* Balance Cards - Side by Side */} + {/* TASARIM KORUNDU */} HEZ {hezBalance} - Hemwelatî Token + {t('walletTab.hezName')} @@ -239,57 +258,54 @@ function WalletTab() { /> PEZ {pezBalance} - Pezkuwî Token + {t('walletTab.pezName')} - {/* Action Buttons Container */} + {/* TASARIM KORUNDU */} - {/* First Row: Send, Receive, Swap, P2P */} - Send + {t('homeTab.send')} - Receive + {t('homeTab.receive')} - Swap + {t('walletTab.swap')} - P2P + {t('walletTab.p2p')} - - {/* Second Row: Vote, DApps, Staking, Connect */} - Vote + {t('homeTab.vote')} - DApps + {t('walletTab.dapps')} - Staking + {t('walletTab.staking')} - Connect + {t('walletTab.connect')} - {/* Tokens List */} + {/* TASARIM KORUNDU */} - Tokens + {t('walletTab.tokens')} @@ -303,8 +319,8 @@ function WalletTab() { - {/* USDT with PEZ badge */} + {/* ... (Tüm token item'ları ve tasarımları korundu) ... */} USDT - PEZ Network + {t('walletTab.pezNetwork')} @@ -326,8 +342,6 @@ function WalletTab() { $0.00 - - {/* DOT (Polkadot) */} DOT - Polkadot + {t('walletTab.polkadotNetwork')} @@ -344,8 +358,6 @@ function WalletTab() { $0.00 - - {/* BTC (Bitcoin) */} BTC - Bitcoin + {t('walletTab.bitcoinNetwork')} @@ -362,8 +374,6 @@ function WalletTab() { $0.00 - - {/* ETH (Ethereum) */} ETH - Ethereum + {t('walletTab.ethereumNetwork')} @@ -380,8 +390,6 @@ function WalletTab() { $0.00 - - {/* BNB (Binance Coin) */} BNB - Binance Smart Chain + {t('walletTab.bscNetwork')} @@ -398,8 +406,6 @@ function WalletTab() { $0.00 - - {/* ADA (Cardano) */} ADA - Cardano + {t('walletTab.cardanoNetwork')} @@ -416,8 +422,6 @@ function WalletTab() { $0.00 - - {/* SOL (Solana) */} SOL - Solana + {t('walletTab.solanaNetwork')} @@ -434,6 +438,7 @@ function WalletTab() { $0.00 + @@ -441,25 +446,28 @@ function WalletTab() { } function CitizensTab() { + const { t } = useLanguage(); return ( - Citizens Screen + {t('placeholders.citizens')} ); } function ReferralTab() { + const { t } = useLanguage(); return ( - Referral Screen + {t('placeholders.referral')} ); } function ProfileTab() { + const { t } = useLanguage(); return ( - Profile Screen + {t('placeholders.profile')} ); } @@ -467,6 +475,8 @@ function ProfileTab() { const Tab = createBottomTabNavigator(); export default function HomeScreen({ navigation }: any) { + const { t } = useLanguage(); + return ( ( ), @@ -491,7 +501,7 @@ export default function HomeScreen({ navigation }: any) { name="Wallet" component={WalletTab} options={{ - tabBarLabel: i18n.t('wallet'), + tabBarLabel: t('wallet'), tabBarIcon: ({ color, size }) => ( ), @@ -501,7 +511,7 @@ export default function HomeScreen({ navigation }: any) { name="Citizens" component={CitizensTab} options={{ - tabBarLabel: i18n.t('citizens'), + tabBarLabel: t('citizens'), tabBarIcon: ({ color, size }) => ( ), @@ -511,7 +521,7 @@ export default function HomeScreen({ navigation }: any) { name="Referral" component={ReferralTab} options={{ - tabBarLabel: i18n.t('referral'), + tabBarLabel: t('referral'), tabBarIcon: ({ color, size }) => ( ), @@ -521,7 +531,7 @@ export default function HomeScreen({ navigation }: any) { name="Profile" component={ProfileTab} options={{ - tabBarLabel: i18n.t('profile'), + tabBarLabel: t('profile'), tabBarIcon: ({ color, size }) => ( ), @@ -531,21 +541,9 @@ export default function HomeScreen({ navigation }: any) { ); } -const QUICK_ACTIONS = [ - { id: '1', labelKey: 'send', icon: 'arrow-forward', color: '#EE2A35' }, - { id: '2', labelKey: 'receive', icon: 'arrow-down', color: '#00A651' }, - { id: '3', labelKey: 'exchange', icon: 'swap-horizontal', color: '#FFD700' }, - { id: '4', labelKey: 'vote', icon: 'checkmark-circle', color: '#3B82F6' }, - { id: '5', labelKey: 'stake', icon: 'lock-closed', color: '#8B5CF6' }, - { id: '6', labelKey: 'nft', icon: 'card', color: '#10B981' }, - { id: '7', labelKey: 'certificates', icon: 'document-text', color: '#F59E0B' }, - { id: '8', labelKey: 'certificates', icon: 'school', color: '#EC4899' }, - { id: '9', labelKey: 'pay', icon: 'briefcase', color: '#6366F1' }, - { id: '10', labelKey: 'rewards', icon: 'cash', color: '#14B8A6' }, - { id: '11', labelKey: 'vote', icon: 'bulb', color: '#F97316' }, - { id: '12', labelKey: 'assets', icon: 'apps', color: '#9333EA' }, -]; +// ESKİ: 'QUICK_ACTIONS' dizisi kaldırıldı. +// Stillerin TAMAMI korundu ve 'actionIconImage' eklendi const styles = StyleSheet.create({ container: { flex: 1, @@ -668,6 +666,13 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', marginBottom: 8, + overflow: 'hidden', // YENİ: Resimlerin taşmasını engelle + }, + // YENİ: Özel görseller için stil + actionIconImage: { + width: '100%', + height: '100%', + resizeMode: 'cover', // VEYA 'contain', hangisi daha iyi durursa }, actionLabel: { fontSize: 11, @@ -792,12 +797,6 @@ const styles = StyleSheet.create({ color: '#1F2937', marginBottom: 4, }, - balanceAmountNew: { - fontSize: 24, - fontWeight: '700', - color: '#EE2A35', - marginBottom: 4, - }, tokenNameNew: { fontSize: 12, color: '#6B7280', @@ -919,4 +918,10 @@ const styles = StyleSheet.create({ fontSize: 12, color: '#6B7280', }, -}); + balanceAmountNew: { + fontSize: 24, + fontWeight: '700', + color: '#EE2A35', + marginBottom: 4, + }, +}); \ No newline at end of file