diff --git a/web/src/i18n/locales/ar.ts b/web/src/i18n/locales/ar.ts index b2a13559..994e5092 100644 --- a/web/src/i18n/locales/ar.ts +++ b/web/src/i18n/locales/ar.ts @@ -3807,4 +3807,101 @@ export default { 'mobile.app.perwerde': 'التعليم', 'mobile.app.certificates': 'الشهادات', 'mobile.app.research': 'البحث', + + // Assembly page + 'assembly.title': 'الجمعية الرقمية لكردستان', + 'assembly.subtitle': 'الجمعية الرقمية لكردستان', + 'assembly.breadcrumb': 'الحوكمة', + 'assembly.stats.members': 'الأعضاء', + 'assembly.stats.committees': 'اللجان', + 'assembly.stats.sessions': 'الجلسات', + 'assembly.tab.members': 'الأعضاء', + 'assembly.tab.sessions': 'الجلسات', + 'assembly.member.since': 'منذ', + 'assembly.session.upcoming': 'قادمة', + 'assembly.session.inSession': 'في جلسة', + 'assembly.session.completed': 'مكتملة', + + // Justice page + 'justice.title': 'العدالة وحل النزاعات', + 'justice.subtitle': 'العدالة وحل النزاعات', + 'justice.breadcrumb': 'الحوكمة', + 'justice.stats.open': 'مفتوحة', + 'justice.stats.inReview': 'قيد المراجعة', + 'justice.stats.resolved': 'محلولة', + 'justice.info.title': 'حل النزاعات', + 'justice.info.body': 'يحل نظام العدالة الرقمية في كردستان النزاعات بين المواطنين الرقميين بشكل عادل وشفاف. يتم تسجيل جميع القرارات على البلوكشين.', + 'justice.cases.title': 'القضايا الأخيرة', + 'justice.status.open': 'مفتوحة', + 'justice.status.inReview': 'قيد المراجعة', + 'justice.status.resolved': 'محلولة', + 'justice.case.resolution': 'القرار', + 'justice.case.resolvedDate': 'تاريخ الحل', + 'justice.case.more': '▼ المزيد', + 'justice.case.less': '▲ أقل', + + // Polls page + 'polls.title': 'استطلاعات المجتمع', + 'polls.subtitle': 'استطلاعات المجتمع', + 'polls.breadcrumb': 'الحوكمة', + 'polls.active.count': '{{count}} نشط', + 'polls.section.active': 'الاستطلاعات النشطة', + 'polls.section.ended': 'الاستطلاعات المنتهية', + 'polls.status.active': 'نشط', + 'polls.status.ended': 'منتهٍ', + 'polls.votes': 'صوت', + 'polls.ends': 'ينتهي', + 'polls.ended': 'انتهى', + + // Bank page + 'bank.title': 'البنك الرقمي', + 'bank.subtitle': 'البنك الرقمي لكردستان', + 'bank.breadcrumb': 'المالية', + 'bank.totalValue': 'إجمالي القيمة', + 'bank.tab.savings': 'المدخرات', + 'bank.tab.lending': 'الإقراض', + 'bank.tab.treasury': 'الخزينة', + 'bank.savings.title': 'حسابات التوفير', + 'bank.savings.desc': 'ضع رموزك المميزة واكسب مكافآت سنوية.', + 'bank.savings.min': 'الحد الأدنى', + 'bank.savings.lock': 'قفل', + 'bank.savings.total': 'الإجمالي', + 'bank.savings.deposit': 'إيداع', + 'bank.lending.title': 'مجمعات الإقراض', + 'bank.lending.desc': 'اقترض من خلال العقود الذكية بضمان.', + 'bank.lending.rate': 'معدل', + 'bank.lending.collateral': 'ضمان', + 'bank.lending.available': 'متاح', + 'bank.lending.borrow': 'اقتراض', + 'bank.treasury.title': 'خزينة المجتمع', + 'bank.treasury.desc': 'الخزينة العامة لجمهورية كردستان الرقمية.', + 'bank.treasury.balance': 'رصيد الخزينة', + 'bank.treasury.allocation': 'التخصيص', + + // TaxZekat page + 'taxZekat.title': 'الضريبة والزكاة', + 'taxZekat.subtitle': 'جمهورية كردستان الرقمية', + 'taxZekat.breadcrumb': 'المالية', + 'taxZekat.desc': 'أرسل مساهمتك الطوعية إلى جمهورية كردستان الرقمية.', + 'taxZekat.type.label': 'نوع المساهمة', + 'taxZekat.type.zekatSub': 'الزكاة الإسلامية', + 'taxZekat.type.taxSub': 'ضريبة', + 'taxZekat.amount.label': 'المبلغ', + 'taxZekat.walletNotConnected': '⚠️ المحفظة غير متصلة', + 'taxZekat.allocation.title': 'توزيع الأموال', + 'taxZekat.allocation.desc': 'يجب أن يساوي 100% بالضبط', + 'taxZekat.commitment.title': 'التعهد', + 'taxZekat.commitment.zekat': 'تتعهد جمهورية كردستان الرقمية بإنفاق زكاتك بالضبط وفق النسب التي حددتها، وفقاً للمبادئ الإسلامية.', + 'taxZekat.commitment.tax': 'تتعهد جمهورية كردستان الرقمية باستخدام مساهماتك الضريبية بأقرب ما يمكن من النسب التي حددتها. سيتم تسجيل جميع النفقات بشفافية على البلوكشين.', + 'taxZekat.accept': 'لقد قرأت وأوافق', + 'taxZekat.submit.zekat': '🤲 أرسل الزكاة', + 'taxZekat.submit.tax': '📤 أرسل الضريبة', + 'taxZekat.submitting': '⏳ جارٍ الإرسال...', + 'taxZekat.confirm.title': 'تأكيد', + 'taxZekat.confirm.type': 'النوع', + 'taxZekat.confirm.amount': 'المبلغ', + 'taxZekat.confirm.allocation': 'التوزيع', + 'taxZekat.confirm.cancel': 'إلغاء', + 'taxZekat.confirm.confirm': 'تأكيد', + 'taxZekat.success': 'تم إرسال {{amount}} HEZ بنجاح. شكراً!', }; diff --git a/web/src/i18n/locales/ckb.ts b/web/src/i18n/locales/ckb.ts index abde2b24..2e88684f 100644 --- a/web/src/i18n/locales/ckb.ts +++ b/web/src/i18n/locales/ckb.ts @@ -3797,4 +3797,101 @@ export default { 'mobile.app.perwerde': 'پەروەردە', 'mobile.app.certificates': 'بڕوانامە', 'mobile.app.research': 'توێژینەوە', + + // Assembly page + 'assembly.title': 'پەرلەمانی کوردستان', + 'assembly.subtitle': 'پەرلەمانی دیجیتاڵی کوردستان', + 'assembly.breadcrumb': 'فەرمانڕەوایی', + 'assembly.stats.members': 'ئەندام', + 'assembly.stats.committees': 'کۆمیتە', + 'assembly.stats.sessions': 'دانیشتن', + 'assembly.tab.members': 'ئەندام', + 'assembly.tab.sessions': 'دانیشتن', + 'assembly.member.since': 'لە', + 'assembly.session.upcoming': 'داهاتوو', + 'assembly.session.inSession': 'لە دانیشتندا', + 'assembly.session.completed': 'تەواوبوو', + + // Justice page + 'justice.title': 'دادگایی', + 'justice.subtitle': 'دادگایی و چارەسەرکردنی ناکۆکی', + 'justice.breadcrumb': 'فەرمانڕەوایی', + 'justice.stats.open': 'کراوە', + 'justice.stats.inReview': 'لە پێداچوونەوەدا', + 'justice.stats.resolved': 'چارەسەرکراو', + 'justice.info.title': 'چارەسەرکردنی ناکۆکی', + 'justice.info.body': 'سیستەمی دادگایی دیجیتاڵی کوردستان ناکۆکییەکان لە نێوان هاوڵاتیانی دیجیتاڵدا بە شێوەیەکی دادپەروەرانە و ئاشکرا چارەسەر دەکات. هەموو بڕیارەکان لەسەر بلۆکچێین تۆمار دەکرێن.', + 'justice.cases.title': 'دۆزەکانی دواتر', + 'justice.status.open': 'کراوە', + 'justice.status.inReview': 'لە پێداچوونەوەدا', + 'justice.status.resolved': 'چارەسەرکراو', + 'justice.case.resolution': 'بڕیار', + 'justice.case.resolvedDate': 'بەرواری چارەسەرکردن', + 'justice.case.more': '▼ زیاتر', + 'justice.case.less': '▲ کەمتر', + + // Polls page + 'polls.title': 'ڕاپرسی', + 'polls.subtitle': 'ڕاپرسییەکانی کۆمەڵگا', + 'polls.breadcrumb': 'فەرمانڕەوایی', + 'polls.active.count': '{{count}} چالاک', + 'polls.section.active': 'ڕاپرسییە چالاکەکان', + 'polls.section.ended': 'ڕاپرسییە کۆتایی هاتووەکان', + 'polls.status.active': 'چالاک', + 'polls.status.ended': 'کۆتایی هات', + 'polls.votes': 'دەنگ', + 'polls.ends': 'کۆتایی', + 'polls.ended': 'کۆتایی هات', + + // Bank page + 'bank.title': 'بانکی دیجیتاڵ', + 'bank.subtitle': 'بانکی دیجیتاڵی کوردستان', + 'bank.breadcrumb': 'دارایی', + 'bank.totalValue': 'کۆی گشتی', + 'bank.tab.savings': 'تەسەرووف', + 'bank.tab.lending': 'قەرز', + 'bank.tab.treasury': 'خەزینە', + 'bank.savings.title': 'ئەژمارەکانی تەسەرووف', + 'bank.savings.desc': 'تۆکەنەکانت ستاک بکە و خەڵاتی ساڵانە وەربگرە.', + 'bank.savings.min': 'کەمترین', + 'bank.savings.lock': 'قفڵکردن', + 'bank.savings.total': 'کۆی گشتی', + 'bank.savings.deposit': 'واریز', + 'bank.lending.title': 'پوولەکانی قەرز', + 'bank.lending.desc': 'بە ڕێگای گرێبەستی زیرەک قەرز وەربگرە.', + 'bank.lending.rate': 'ڕێژە', + 'bank.lending.collateral': 'گەروانە', + 'bank.lending.available': 'بەردەستە', + 'bank.lending.borrow': 'قەرز وەربگرە', + 'bank.treasury.title': 'خەزینەی کۆمەڵگا', + 'bank.treasury.desc': 'خەزینەی گشتی کۆماری دیجیتاڵی کوردستان.', + 'bank.treasury.balance': 'باڵانسی خەزینە', + 'bank.treasury.allocation': 'دابەشکردن', + + // TaxZekat page + 'taxZekat.title': 'باج و زەکات', + 'taxZekat.subtitle': 'کۆماری دیجیتاڵی کوردستان', + 'taxZekat.breadcrumb': 'دارایی', + 'taxZekat.desc': 'بەشداریت بە خۆشەویستی بۆ کۆماری دیجیتاڵی کوردستان بنێرە.', + 'taxZekat.type.label': 'جۆری بەشداری', + 'taxZekat.type.zekatSub': 'زەکاتی ئیسلامی', + 'taxZekat.type.taxSub': 'باج', + 'taxZekat.amount.label': 'بڕ', + 'taxZekat.walletNotConnected': '⚠️ جزدان بەستنەدراوە', + 'taxZekat.allocation.title': 'دابەشکردنی فەند', + 'taxZekat.allocation.desc': 'دەبێت تەواو %100 بێت', + 'taxZekat.commitment.title': 'پەیمان', + 'taxZekat.commitment.zekat': 'کۆماری دیجیتاڵی کوردستان پەیمان دەبەستێت کە زەکاتەکەت بە تەواوی بەپێی ڕێژەی دیاریکراوت و بەپێی ئەرکە ئیسلامییەکان خەرج بکات.', + 'taxZekat.commitment.tax': 'کۆماری دیجیتاڵی کوردستان پەیمان دەبەستێت کە بەشداریی باجەکەت بەپێی ڕێژەی دیاریکراوت خەرج بکات. هەموو خەرجییەکان بە ئاشکرایی لەسەر بلۆکچێین تۆمار دەکرێن.', + 'taxZekat.accept': 'من خوێندمەوەی و قبوڵم کرد', + 'taxZekat.submit.zekat': '🤲 زەکات بنێرە', + 'taxZekat.submit.tax': '📤 باج بنێرە', + 'taxZekat.submitting': '⏳ دەنێردرێت...', + 'taxZekat.confirm.title': 'پشتڕاستکردنەوە', + 'taxZekat.confirm.type': 'جۆر', + 'taxZekat.confirm.amount': 'بڕ', + 'taxZekat.confirm.allocation': 'دابەشکردن', + 'taxZekat.confirm.cancel': 'هەڵوەشاندنەوە', + 'taxZekat.confirm.confirm': 'پشتڕاست', + 'taxZekat.success': '{{amount}} HEZ بە سەرکەوتوویی نێردرا. سوپاس!', }; diff --git a/web/src/i18n/locales/en.ts b/web/src/i18n/locales/en.ts index 2e0acfba..204b7558 100644 --- a/web/src/i18n/locales/en.ts +++ b/web/src/i18n/locales/en.ts @@ -3845,4 +3845,101 @@ export default { 'mobile.app.perwerde': 'Perwerde', 'mobile.app.certificates': 'Certificates', 'mobile.app.research': 'Research', + + // Assembly page + 'assembly.title': 'Kurdistan Digital Assembly', + 'assembly.subtitle': 'Kurdistan Digital Assembly', + 'assembly.breadcrumb': 'Governance', + 'assembly.stats.members': 'Members', + 'assembly.stats.committees': 'Committees', + 'assembly.stats.sessions': 'Sessions', + 'assembly.tab.members': 'Members', + 'assembly.tab.sessions': 'Sessions', + 'assembly.member.since': 'Since', + 'assembly.session.upcoming': 'Upcoming', + 'assembly.session.inSession': 'In Session', + 'assembly.session.completed': 'Completed', + + // Justice page + 'justice.title': 'Justice & Dispute Resolution', + 'justice.subtitle': 'Justice & Dispute Resolution', + 'justice.breadcrumb': 'Governance', + 'justice.stats.open': 'Open', + 'justice.stats.inReview': 'In Review', + 'justice.stats.resolved': 'Resolved', + 'justice.info.title': 'Dispute Resolution', + 'justice.info.body': "Kurdistan's digital justice system resolves disputes between digital citizens fairly and transparently. All decisions are recorded on the blockchain.", + 'justice.cases.title': 'Recent Cases', + 'justice.status.open': 'Open', + 'justice.status.inReview': 'In Review', + 'justice.status.resolved': 'Resolved', + 'justice.case.resolution': 'Resolution', + 'justice.case.resolvedDate': 'Resolution date', + 'justice.case.more': '▼ More', + 'justice.case.less': '▲ Less', + + // Polls page + 'polls.title': 'Community Polls', + 'polls.subtitle': 'Community Polls', + 'polls.breadcrumb': 'Governance', + 'polls.active.count': '{{count}} active', + 'polls.section.active': 'Active Polls', + 'polls.section.ended': 'Ended Polls', + 'polls.status.active': 'Active', + 'polls.status.ended': 'Ended', + 'polls.votes': 'votes', + 'polls.ends': 'Ends', + 'polls.ended': 'Ended', + + // Bank page + 'bank.title': 'Digital Bank', + 'bank.subtitle': 'Digital Bank of Kurdistan', + 'bank.breadcrumb': 'Finance', + 'bank.totalValue': 'Total Value', + 'bank.tab.savings': 'Savings', + 'bank.tab.lending': 'Lending', + 'bank.tab.treasury': 'Treasury', + 'bank.savings.title': 'Savings Accounts', + 'bank.savings.desc': 'Stake your tokens and earn annual rewards.', + 'bank.savings.min': 'Min', + 'bank.savings.lock': 'Lock', + 'bank.savings.total': 'Total', + 'bank.savings.deposit': 'Deposit', + 'bank.lending.title': 'Lending Pools', + 'bank.lending.desc': 'Borrow through smart contracts with collateral.', + 'bank.lending.rate': 'Rate', + 'bank.lending.collateral': 'Collateral', + 'bank.lending.available': 'Available', + 'bank.lending.borrow': 'Borrow', + 'bank.treasury.title': 'Community Treasury', + 'bank.treasury.desc': 'The public treasury of the Digital Kurdistan Republic.', + 'bank.treasury.balance': 'Treasury Balance', + 'bank.treasury.allocation': 'Allocation', + + // TaxZekat page + 'taxZekat.title': 'Tax & Zekat', + 'taxZekat.subtitle': 'Digital Kurdistan Republic', + 'taxZekat.breadcrumb': 'Finance', + 'taxZekat.desc': 'Send your voluntary contribution to the Digital Kurdistan Republic.', + 'taxZekat.type.label': 'Contribution Type', + 'taxZekat.type.zekatSub': 'Islamic Zekat', + 'taxZekat.type.taxSub': 'Tax', + 'taxZekat.amount.label': 'Amount', + 'taxZekat.walletNotConnected': '⚠️ Wallet not connected', + 'taxZekat.allocation.title': 'Fund Allocation', + 'taxZekat.allocation.desc': 'Must equal exactly 100%', + 'taxZekat.commitment.title': 'COMMITMENT', + 'taxZekat.commitment.zekat': 'The Digital Republic of Kurdistan COMMITS to spending your zekat EXACTLY according to the ratios you specify, in accordance with Islamic principles.', + 'taxZekat.commitment.tax': 'The Digital Republic of Kurdistan COMMITS to using your tax contributions AS CLOSELY AS POSSIBLE according to the ratios you specify. All expenses will be transparently recorded on the blockchain.', + 'taxZekat.accept': 'I have read and accept', + 'taxZekat.submit.zekat': '🤲 SEND ZEKAT', + 'taxZekat.submit.tax': '📤 SEND TAX', + 'taxZekat.submitting': '⏳ Sending...', + 'taxZekat.confirm.title': 'Confirm', + 'taxZekat.confirm.type': 'Type', + 'taxZekat.confirm.amount': 'Amount', + 'taxZekat.confirm.allocation': 'Allocation', + 'taxZekat.confirm.cancel': 'Cancel', + 'taxZekat.confirm.confirm': 'Confirm', + 'taxZekat.success': '{{amount}} HEZ sent successfully. Thank you!', } diff --git a/web/src/i18n/locales/fa.ts b/web/src/i18n/locales/fa.ts index f7bfd026..43f883bc 100644 --- a/web/src/i18n/locales/fa.ts +++ b/web/src/i18n/locales/fa.ts @@ -3841,4 +3841,101 @@ export default { 'mobile.app.perwerde': 'آموزش', 'mobile.app.certificates': 'گواهینامه‌ها', 'mobile.app.research': 'تحقیقات', + + // Assembly page + 'assembly.title': 'مجلس دیجیتال کردستان', + 'assembly.subtitle': 'مجلس دیجیتال کردستان', + 'assembly.breadcrumb': 'حکومت‌داری', + 'assembly.stats.members': 'اعضا', + 'assembly.stats.committees': 'کمیته‌ها', + 'assembly.stats.sessions': 'جلسات', + 'assembly.tab.members': 'اعضا', + 'assembly.tab.sessions': 'جلسات', + 'assembly.member.since': 'از', + 'assembly.session.upcoming': 'آینده', + 'assembly.session.inSession': 'در جلسه', + 'assembly.session.completed': 'تکمیل شد', + + // Justice page + 'justice.title': 'عدالت و حل اختلاف', + 'justice.subtitle': 'عدالت و حل اختلاف', + 'justice.breadcrumb': 'حکومت‌داری', + 'justice.stats.open': 'باز', + 'justice.stats.inReview': 'در بررسی', + 'justice.stats.resolved': 'حل شده', + 'justice.info.title': 'حل اختلاف', + 'justice.info.body': 'سیستم عدالت دیجیتال کردستان اختلافات بین شهروندان دیجیتال را به شکلی عادلانه و شفاف حل می‌کند. همه تصمیمات در بلاکچین ثبت می‌شوند.', + 'justice.cases.title': 'پرونده‌های اخیر', + 'justice.status.open': 'باز', + 'justice.status.inReview': 'در بررسی', + 'justice.status.resolved': 'حل شده', + 'justice.case.resolution': 'تصمیم', + 'justice.case.resolvedDate': 'تاریخ حل', + 'justice.case.more': '▼ بیشتر', + 'justice.case.less': '▲ کمتر', + + // Polls page + 'polls.title': 'نظرسنجی‌های جامعه', + 'polls.subtitle': 'نظرسنجی‌های جامعه', + 'polls.breadcrumb': 'حکومت‌داری', + 'polls.active.count': '{{count}} فعال', + 'polls.section.active': 'نظرسنجی‌های فعال', + 'polls.section.ended': 'نظرسنجی‌های پایان یافته', + 'polls.status.active': 'فعال', + 'polls.status.ended': 'پایان یافت', + 'polls.votes': 'رأی', + 'polls.ends': 'پایان', + 'polls.ended': 'پایان یافت', + + // Bank page + 'bank.title': 'بانک دیجیتال', + 'bank.subtitle': 'بانک دیجیتال کردستان', + 'bank.breadcrumb': 'مالی', + 'bank.totalValue': 'ارزش کل', + 'bank.tab.savings': 'پس‌انداز', + 'bank.tab.lending': 'وام', + 'bank.tab.treasury': 'خزانه', + 'bank.savings.title': 'حساب‌های پس‌انداز', + 'bank.savings.desc': 'توکن‌های خود را استیک کنید و پاداش سالانه دریافت کنید.', + 'bank.savings.min': 'حداقل', + 'bank.savings.lock': 'قفل', + 'bank.savings.total': 'کل', + 'bank.savings.deposit': 'واریز', + 'bank.lending.title': 'استخرهای وام', + 'bank.lending.desc': 'از طریق قراردادهای هوشمند با وثیقه وام بگیرید.', + 'bank.lending.rate': 'نرخ', + 'bank.lending.collateral': 'وثیقه', + 'bank.lending.available': 'موجود', + 'bank.lending.borrow': 'وام بگیر', + 'bank.treasury.title': 'خزانه جامعه', + 'bank.treasury.desc': 'خزانه عمومی جمهوری دیجیتال کردستان.', + 'bank.treasury.balance': 'موجودی خزانه', + 'bank.treasury.allocation': 'تخصیص', + + // TaxZekat page + 'taxZekat.title': 'مالیات و زکات', + 'taxZekat.subtitle': 'جمهوری دیجیتال کردستان', + 'taxZekat.breadcrumb': 'مالی', + 'taxZekat.desc': 'مشارکت داوطلبانه خود را به جمهوری دیجیتال کردستان ارسال کنید.', + 'taxZekat.type.label': 'نوع مشارکت', + 'taxZekat.type.zekatSub': 'زکات اسلامی', + 'taxZekat.type.taxSub': 'مالیات', + 'taxZekat.amount.label': 'مبلغ', + 'taxZekat.walletNotConnected': '⚠️ کیف پول متصل نیست', + 'taxZekat.allocation.title': 'تخصیص صندوق', + 'taxZekat.allocation.desc': 'باید دقیقاً ۱۰۰٪ باشد', + 'taxZekat.commitment.title': 'تعهد', + 'taxZekat.commitment.zekat': 'جمهوری دیجیتال کردستان متعهد می‌شود زکات شما را دقیقاً بر اساس نسبت‌های تعیین‌شده، مطابق اصول اسلامی خرج کند.', + 'taxZekat.commitment.tax': 'جمهوری دیجیتال کردستان متعهد می‌شود مشارکت‌های مالیاتی شما را تا حد امکان بر اساس نسبت‌های تعیین‌شده استفاده کند. همه هزینه‌ها به صورت شفاف در بلاکچین ثبت می‌شوند.', + 'taxZekat.accept': 'خواندم و قبول دارم', + 'taxZekat.submit.zekat': '🤲 ارسال زکات', + 'taxZekat.submit.tax': '📤 ارسال مالیات', + 'taxZekat.submitting': '⏳ در حال ارسال...', + 'taxZekat.confirm.title': 'تأیید', + 'taxZekat.confirm.type': 'نوع', + 'taxZekat.confirm.amount': 'مبلغ', + 'taxZekat.confirm.allocation': 'تخصیص', + 'taxZekat.confirm.cancel': 'لغو', + 'taxZekat.confirm.confirm': 'تأیید', + 'taxZekat.success': '{{amount}} HEZ با موفقیت ارسال شد. ممنون!', }; diff --git a/web/src/i18n/locales/kmr.ts b/web/src/i18n/locales/kmr.ts index c0b59f2c..a23d4781 100644 --- a/web/src/i18n/locales/kmr.ts +++ b/web/src/i18n/locales/kmr.ts @@ -3824,4 +3824,101 @@ export default { 'mobile.app.perwerde': 'Perwerde', 'mobile.app.certificates': 'Belge', 'mobile.app.research': 'Lêkolîn', + + // Assembly page + 'assembly.title': 'Meclîsa Kurdistanê', + 'assembly.subtitle': 'Meclîsa Dijîtal a Kurdistanê', + 'assembly.breadcrumb': 'Rêveberî', + 'assembly.stats.members': 'Endam', + 'assembly.stats.committees': 'Komîte', + 'assembly.stats.sessions': 'Civîn', + 'assembly.tab.members': 'Endam', + 'assembly.tab.sessions': 'Civîn', + 'assembly.member.since': 'Ji', + 'assembly.session.upcoming': 'Tê', + 'assembly.session.inSession': 'Niha', + 'assembly.session.completed': 'Qediya', + + // Justice page + 'justice.title': 'Dadwerî', + 'justice.subtitle': 'Dadwerî û Çareserkirina Nakokiyan', + 'justice.breadcrumb': 'Rêveberî', + 'justice.stats.open': 'Vekirî', + 'justice.stats.inReview': 'Lêkolîn', + 'justice.stats.resolved': 'Çareser', + 'justice.info.title': 'Çareserkirina Nakokiyan', + 'justice.info.body': 'Sîstema dadweriya dijîtal a Kurdistanê nakokiyên di navbera welatiyên dijîtal de bi awayekî adil û zelal çareser dike. Hemû biryar li ser blockchain tên tomarkirin.', + 'justice.cases.title': 'Dozên Dawî', + 'justice.status.open': 'Vekirî', + 'justice.status.inReview': 'Di lêkolînê de', + 'justice.status.resolved': 'Çareserkirî', + 'justice.case.resolution': 'Biryar', + 'justice.case.resolvedDate': 'Dîroka çareseriyê', + 'justice.case.more': '▼ Bêtir', + 'justice.case.less': '▲ Kêmtir', + + // Polls page + 'polls.title': 'Rapirsî', + 'polls.subtitle': 'Rapirsiyên Civakê', + 'polls.breadcrumb': 'Rêveberî', + 'polls.active.count': '{{count}} çalak', + 'polls.section.active': 'Rapirsiyên Çalak', + 'polls.section.ended': 'Rapirsiyên Qediyayî', + 'polls.status.active': 'Çalak', + 'polls.status.ended': 'Qediya', + 'polls.votes': 'deng', + 'polls.ends': 'Dawî', + 'polls.ended': 'Qediya', + + // Bank page + 'bank.title': 'Banka Dijîtal', + 'bank.subtitle': 'Banka Dijîtal ya Kurdistanê', + 'bank.breadcrumb': 'Darayî', + 'bank.totalValue': 'Bihaya Giştî', + 'bank.tab.savings': 'Teserûf', + 'bank.tab.lending': 'Deyn', + 'bank.tab.treasury': 'Xezîne', + 'bank.savings.title': 'Hesabên Teserûfê', + 'bank.savings.desc': 'Tokenên xwe stake bikin û xelatên salane bistînin.', + 'bank.savings.min': 'Kêmtirîn', + 'bank.savings.lock': 'Kilîtkirin', + 'bank.savings.total': 'Giştî', + 'bank.savings.deposit': 'Depo bike', + 'bank.lending.title': 'Hovzên Deyndanê', + 'bank.lending.desc': 'Bi rêya peymana zîrek deyn bistînin.', + 'bank.lending.rate': 'Rêje', + 'bank.lending.collateral': 'Garantî', + 'bank.lending.available': 'Peyda', + 'bank.lending.borrow': 'Deyn bistîne', + 'bank.treasury.title': 'Xezîneya Civakê', + 'bank.treasury.desc': 'Xezîneya giştî ya Komara Dijîtal a Kurdistanê.', + 'bank.treasury.balance': 'Bihaya Xezîneyê', + 'bank.treasury.allocation': 'Dabeşkirin', + + // TaxZekat page + 'taxZekat.title': 'Bac û Zekat', + 'taxZekat.subtitle': 'Komara Dijîtal a Kurdistanê', + 'taxZekat.breadcrumb': 'Darayî', + 'taxZekat.desc': 'Beşdariya xwe ya bi dilxwazî ji Komara Dijîtaliya Kurdistanê re bişînin.', + 'taxZekat.type.label': 'Cureyê Beşdariyê', + 'taxZekat.type.zekatSub': 'Zekata Îslamî', + 'taxZekat.type.taxSub': 'Bac', + 'taxZekat.amount.label': 'Miqdar', + 'taxZekat.walletNotConnected': '⚠️ Berîk ne girêdayî ye', + 'taxZekat.allocation.title': 'Dabeşkirina Fonê', + 'taxZekat.allocation.desc': 'Divê bêkêmasî %100 be', + 'taxZekat.commitment.title': 'SOZNAME', + 'taxZekat.commitment.zekat': 'Komara Dîjîtal a Kurdistanê SOZ DIDE ku zekata we BI TEMAMÎ li gorî rêjeyên ku we destnîşan kirine dê bê xerckirin, li gorî rêgez û qaîdeyên Îslamî.', + 'taxZekat.commitment.tax': 'Komara Dîjîtal a Kurdistanê SOZ DIDE ku beşdariyên baca we BI QASÎ KU MIMKUN BE li gorî rêjeyên ku we destnîşan kirine dê bê xerckirin. Hemû lêçûn dê bi şefafî li ser blockchain werin tomar kirin.', + 'taxZekat.accept': 'Min xwend û qebûl dikim', + 'taxZekat.submit.zekat': '🤲 ZEKAT BIŞÎNE', + 'taxZekat.submit.tax': '📤 BAC BIŞÎNE', + 'taxZekat.submitting': '⏳ Tê şandin...', + 'taxZekat.confirm.title': 'Piştrast bike', + 'taxZekat.confirm.type': 'Cure', + 'taxZekat.confirm.amount': 'Miqdar', + 'taxZekat.confirm.allocation': 'Dabeşkirin', + 'taxZekat.confirm.cancel': 'Betal', + 'taxZekat.confirm.confirm': 'Piştrast', + 'taxZekat.success': '{{amount}} HEZ bi serfirazî hate şandin. Spas!', }; diff --git a/web/src/i18n/locales/tr.ts b/web/src/i18n/locales/tr.ts index e142744f..43e446c2 100644 --- a/web/src/i18n/locales/tr.ts +++ b/web/src/i18n/locales/tr.ts @@ -3827,4 +3827,101 @@ export default { 'mobile.app.perwerde': 'Eğitim', 'mobile.app.certificates': 'Sertifikalar', 'mobile.app.research': 'Araştırma', + + // Assembly page + 'assembly.title': 'Kürdistan Dijital Meclisi', + 'assembly.subtitle': 'Kürdistan Dijital Meclisi', + 'assembly.breadcrumb': 'Yönetim', + 'assembly.stats.members': 'Üye', + 'assembly.stats.committees': 'Komite', + 'assembly.stats.sessions': 'Oturum', + 'assembly.tab.members': 'Üyeler', + 'assembly.tab.sessions': 'Oturumlar', + 'assembly.member.since': 'Üyelik', + 'assembly.session.upcoming': 'Yaklaşan', + 'assembly.session.inSession': 'Devam Ediyor', + 'assembly.session.completed': 'Tamamlandı', + + // Justice page + 'justice.title': 'Adalet ve Uyuşmazlık Çözümü', + 'justice.subtitle': 'Adalet ve Uyuşmazlık Çözümü', + 'justice.breadcrumb': 'Yönetim', + 'justice.stats.open': 'Açık', + 'justice.stats.inReview': 'İncelemede', + 'justice.stats.resolved': 'Çözüldü', + 'justice.info.title': 'Uyuşmazlık Çözümü', + 'justice.info.body': "Kürdistan'ın dijital adalet sistemi, dijital vatandaşlar arasındaki uyuşmazlıkları adil ve şeffaf biçimde çözer. Tüm kararlar blok zincirinde kayıt altına alınır.", + 'justice.cases.title': 'Son Davalar', + 'justice.status.open': 'Açık', + 'justice.status.inReview': 'İncelemede', + 'justice.status.resolved': 'Çözüldü', + 'justice.case.resolution': 'Karar', + 'justice.case.resolvedDate': 'Çözüm tarihi', + 'justice.case.more': '▼ Daha fazla', + 'justice.case.less': '▲ Daha az', + + // Polls page + 'polls.title': 'Topluluk Anketleri', + 'polls.subtitle': 'Topluluk Anketleri', + 'polls.breadcrumb': 'Yönetim', + 'polls.active.count': '{{count}} aktif', + 'polls.section.active': 'Aktif Anketler', + 'polls.section.ended': 'Biten Anketler', + 'polls.status.active': 'Aktif', + 'polls.status.ended': 'Bitti', + 'polls.votes': 'oy', + 'polls.ends': 'Bitiş', + 'polls.ended': 'Bitti', + + // Bank page + 'bank.title': 'Dijital Banka', + 'bank.subtitle': 'Kürdistan Dijital Bankası', + 'bank.breadcrumb': 'Finans', + 'bank.totalValue': 'Toplam Değer', + 'bank.tab.savings': 'Tasarruf', + 'bank.tab.lending': 'Kredi', + 'bank.tab.treasury': 'Hazine', + 'bank.savings.title': 'Tasarruf Hesapları', + 'bank.savings.desc': 'Tokenlarınızı stake edin ve yıllık ödül kazanın.', + 'bank.savings.min': 'Min', + 'bank.savings.lock': 'Kilitleme', + 'bank.savings.total': 'Toplam', + 'bank.savings.deposit': 'Yatır', + 'bank.lending.title': 'Kredi Havuzları', + 'bank.lending.desc': 'Teminatla akıllı sözleşmeler aracılığıyla borç alın.', + 'bank.lending.rate': 'Oran', + 'bank.lending.collateral': 'Teminat', + 'bank.lending.available': 'Mevcut', + 'bank.lending.borrow': 'Borç al', + 'bank.treasury.title': 'Topluluk Hazinesi', + 'bank.treasury.desc': "Dijital Kürdistan Cumhuriyeti'nin kamu hazinesi.", + 'bank.treasury.balance': 'Hazine Bakiyesi', + 'bank.treasury.allocation': 'Tahsis', + + // TaxZekat page + 'taxZekat.title': 'Vergi ve Zekat', + 'taxZekat.subtitle': 'Dijital Kürdistan Cumhuriyeti', + 'taxZekat.breadcrumb': 'Finans', + 'taxZekat.desc': "Dijital Kürdistan Cumhuriyeti'ne gönüllü katkınızı gönderin.", + 'taxZekat.type.label': 'Katkı Türü', + 'taxZekat.type.zekatSub': 'İslami Zekat', + 'taxZekat.type.taxSub': 'Vergi', + 'taxZekat.amount.label': 'Miktar', + 'taxZekat.walletNotConnected': '⚠️ Cüzdan bağlı değil', + 'taxZekat.allocation.title': 'Fon Tahsisi', + 'taxZekat.allocation.desc': 'Tam olarak %100 olmalı', + 'taxZekat.commitment.title': 'TAAHHÜT', + 'taxZekat.commitment.zekat': 'Dijital Kürdistan Cumhuriyeti, zekatınızı belirlediğiniz oranlara göre, İslami ilkelere uygun olarak TAM OLARAK harcamayı TAAHHÜT eder.', + 'taxZekat.commitment.tax': 'Dijital Kürdistan Cumhuriyeti, vergi katkılarınızı belirlediğiniz oranlara mümkün olduğunca yakın şekilde kullanmayı TAAHHÜT eder. Tüm harcamalar blok zincirinde şeffaf şekilde kaydedilecektir.', + 'taxZekat.accept': 'Okudum ve kabul ediyorum', + 'taxZekat.submit.zekat': '🤲 ZEKAT GÖNDER', + 'taxZekat.submit.tax': '📤 VERGİ GÖNDER', + 'taxZekat.submitting': '⏳ Gönderiliyor...', + 'taxZekat.confirm.title': 'Onayla', + 'taxZekat.confirm.type': 'Tür', + 'taxZekat.confirm.amount': 'Miktar', + 'taxZekat.confirm.allocation': 'Tahsis', + 'taxZekat.confirm.cancel': 'İptal', + 'taxZekat.confirm.confirm': 'Onayla', + 'taxZekat.success': '{{amount}} HEZ başarıyla gönderildi. Teşekkürler!', }; diff --git a/web/src/pages/finance/BankPage.tsx b/web/src/pages/finance/BankPage.tsx index 58f4ff95..4d95bc45 100644 --- a/web/src/pages/finance/BankPage.tsx +++ b/web/src/pages/finance/BankPage.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; interface SavingsAccount { id: string; @@ -23,35 +24,36 @@ interface LendingPool { } const SAVINGS: SavingsAccount[] = [ - { id: 's1', emoji: '🌱', nameKu: 'Teserûfa Destpêk', name: 'Starter Savings', apy: '4.5%', minDeposit: '100 HEZ', lockPeriod: 'Tune / None', totalDeposited: '125,430 HEZ' }, - { id: 's2', emoji: '🌿', nameKu: 'Teserûfa Navîn', name: 'Growth Savings', apy: '8.2%', minDeposit: '1,000 HEZ', lockPeriod: '90 roj / days', totalDeposited: '892,100 HEZ' }, - { id: 's3', emoji: '🌳', nameKu: 'Teserûfa Zêrîn', name: 'Gold Savings', apy: '12.0%', minDeposit: '10,000 HEZ', lockPeriod: '365 roj / days', totalDeposited: '2,340,000 HEZ' }, + { id: 's1', emoji: '🌱', nameKu: 'Teserûfa Destpêk', name: 'Starter Savings', apy: '4.5%', minDeposit: '100 HEZ', lockPeriod: 'None', totalDeposited: '125,430 HEZ' }, + { id: 's2', emoji: '🌿', nameKu: 'Teserûfa Navîn', name: 'Growth Savings', apy: '8.2%', minDeposit: '1,000 HEZ', lockPeriod: '90 days', totalDeposited: '892,100 HEZ' }, + { id: 's3', emoji: '🌳', nameKu: 'Teserûfa Zêrîn', name: 'Gold Savings', apy: '12.0%', minDeposit: '10,000 HEZ', lockPeriod: '365 days', totalDeposited: '2,340,000 HEZ' }, ]; const LENDING: LendingPool[] = [ - { id: 'l1', emoji: '💳', nameKu: 'Deyna Bilez', name: 'Flash Loan', borrowRate: '0.1%', collateralRatio: 'Tune / None', available: '50,000 HEZ' }, - { id: 'l2', emoji: '🏠', nameKu: 'Deyna Kesane', name: 'Personal Loan', borrowRate: '5.5%', collateralRatio: '150%', available: '200,000 HEZ' }, - { id: 'l3', emoji: '🏢', nameKu: 'Deyna Karsaziyê', name: 'Business Loan', borrowRate: '3.8%', collateralRatio: '200%', available: '500,000 HEZ' }, + { id: 'l1', emoji: '💳', nameKu: 'Deyna Bilez', name: 'Flash Loan', borrowRate: '0.1%', collateralRatio: 'None', available: '50,000 HEZ' }, + { id: 'l2', emoji: '🏠', nameKu: 'Deyna Kesane', name: 'Personal Loan', borrowRate: '5.5%', collateralRatio: '150%', available: '200,000 HEZ' }, + { id: 'l3', emoji: '🏢', nameKu: 'Deyna Karsaziyê', name: 'Business Loan', borrowRate: '3.8%', collateralRatio: '200%', available: '500,000 HEZ' }, ]; const TREASURY_ALLOCATIONS = [ - { label: 'Perwerde / Education', pct: '25%', color: '#00A94F' }, - { label: 'Teknolojî / Technology', pct: '30%', color: '#2196F3' }, - { label: 'Ewlehî / Security', pct: '15%', color: '#EE2A35' }, - { label: 'Civak / Community', pct: '20%', color: '#9C27B0' }, - { label: 'Pareztî / Reserve', pct: '10%', color: '#FFD700' }, + { labelKu: 'Perwerde', labelEn: 'Education', pct: '25%', color: '#00A94F' }, + { labelKu: 'Teknolojî', labelEn: 'Technology', pct: '30%', color: '#2196F3' }, + { labelKu: 'Ewlehî', labelEn: 'Security', pct: '15%', color: '#EE2A35' }, + { labelKu: 'Civak', labelEn: 'Community', pct: '20%', color: '#9C27B0' }, + { labelKu: 'Pareztî', labelEn: 'Reserve', pct: '10%', color: '#FFD700' }, ]; type Tab = 'savings' | 'lending' | 'treasury'; export default function BankPage() { const navigate = useNavigate(); + const { t } = useTranslation(); const [activeTab, setActiveTab] = useState('savings'); const tabs: { key: Tab; label: string }[] = [ - { key: 'savings', label: 'Teserûf' }, - { key: 'lending', label: 'Deyn' }, - { key: 'treasury', label: 'Xezîne' }, + { key: 'savings', label: t('bank.tab.savings', 'Savings') }, + { key: 'lending', label: t('bank.tab.lending', 'Lending') }, + { key: 'treasury', label: t('bank.tab.treasury', 'Treasury') }, ]; return ( @@ -60,15 +62,15 @@ export default function BankPage() {
- Finance + {t('bank.breadcrumb', 'Finance')}
🏦 -

Banka Dijîtal

-

Digital Bank of Kurdistan

+

{t('bank.title', 'Digital Bank')}

+

{t('bank.subtitle', 'Digital Bank of Kurdistan')}

-

Bihaya Giştî / Total Value

+

{t('bank.totalValue', 'Total Value')}

24,580.00 HEZ

~ $1,229.00

@@ -82,9 +84,7 @@ export default function BankPage() { key={tab.key} onClick={() => setActiveTab(tab.key)} className={`flex-1 py-2.5 rounded-lg text-sm font-semibold transition-all ${ - activeTab === tab.key - ? 'bg-green-600 text-white' - : 'text-gray-400 hover:text-gray-300' + activeTab === tab.key ? 'bg-green-600 text-white' : 'text-gray-400 hover:text-gray-300' }`} > {tab.label} @@ -100,10 +100,8 @@ export default function BankPage() { {activeTab === 'savings' && ( <>
-

Hesabên Teserûfê / Savings Accounts

-

- Tokenên xwe stake bikin û xelatên salane bistînin. · Stake your tokens and earn annual rewards. -

+

{t('bank.savings.title', 'Savings Accounts')}

+

{t('bank.savings.desc', 'Stake your tokens and earn annual rewards.')}

{SAVINGS.map(account => (
@@ -119,20 +117,20 @@ export default function BankPage() {
-

Kêmtirîn / Min

+

{t('bank.savings.min', 'Min')}

{account.minDeposit}

-

Kilîtkirin / Lock

+

{t('bank.savings.lock', 'Lock')}

{account.lockPeriod}

-

Giştî / Total

+

{t('bank.savings.total', 'Total')}

{account.totalDeposited}

))} @@ -143,10 +141,8 @@ export default function BankPage() { {activeTab === 'lending' && ( <>
-

Hovzên Deyndanê / Lending Pools

-

- Bi rêya peymana zîrek deyn bistînin. · Borrow through smart contracts with collateral. -

+

{t('bank.lending.title', 'Lending Pools')}

+

{t('bank.lending.desc', 'Borrow through smart contracts with collateral.')}

{LENDING.map(pool => (
@@ -162,20 +158,20 @@ export default function BankPage() {
-

Rêje / Rate

+

{t('bank.lending.rate', 'Rate')}

{pool.borrowRate}

-

Garantî / Collateral

+

{t('bank.lending.collateral', 'Collateral')}

{pool.collateralRatio}

-

Peyda / Available

+

{t('bank.lending.available', 'Available')}

{pool.available}

))} @@ -186,23 +182,21 @@ export default function BankPage() { {activeTab === 'treasury' && ( <>
-

Xezîneya Civakê / Community Treasury

-

- Xezîneya giştî ya Komara Dijîtal a Kurdistanê. · The public treasury of the Digital Kurdistan Republic. -

+

{t('bank.treasury.title', 'Community Treasury')}

+

{t('bank.treasury.desc', 'The public treasury of the Digital Kurdistan Republic.')}

-

Bihaya Xezîneyê / Treasury Balance

+

{t('bank.treasury.balance', 'Treasury Balance')}

12,450,000 HEZ

~ $622,500

-

Dabeşkirin / Allocation

+

{t('bank.treasury.allocation', 'Allocation')}

{TREASURY_ALLOCATIONS.map((item, i) => (
- {item.label} + {item.labelKu} / {item.labelEn} {item.pct}
))} diff --git a/web/src/pages/finance/TaxZekatPage.tsx b/web/src/pages/finance/TaxZekatPage.tsx index c4e58fcf..ed337447 100644 --- a/web/src/pages/finance/TaxZekatPage.tsx +++ b/web/src/pages/finance/TaxZekatPage.tsx @@ -1,5 +1,6 @@ import { useState, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; import { usePezkuwi } from '@/contexts/PezkuwiContext'; type ContributionType = 'zekat' | 'tax'; @@ -25,6 +26,7 @@ const DEFAULT_ALLOCATIONS: AllocationItem[] = [ export default function TaxZekatPage() { const navigate = useNavigate(); + const { t } = useTranslation(); const { api, selectedAccount, getKeyPair } = usePezkuwi(); const [contributionType, setContributionType] = useState('zekat'); @@ -96,7 +98,7 @@ export default function TaxZekatPage() { .catch(reject); }); - setResult({ ok: true, msg: `${amount} HEZ başarıyla gönderildi. Spas!` }); + setResult({ ok: true, msg: t('taxZekat.success', '{{amount}} HEZ sent successfully. Thank you!', { amount }) }); setAmount(''); setAllocations(DEFAULT_ALLOCATIONS); setTermsAccepted(false); @@ -117,9 +119,9 @@ export default function TaxZekatPage() {

- {isZekat ? '🤲 Zekat' : '📜 Bac / Tax'} + {isZekat ? '🤲 Zekat' : `📜 ${t('taxZekat.title', 'Tax & Zekat')}`}

-

Komara Dijîtal a Kurdistanê

+

{t('taxZekat.subtitle', 'Digital Kurdistan Republic')}

@@ -135,31 +137,28 @@ export default function TaxZekatPage() { {/* Description */}

- Beşdariya xwe ya bi dilxwazî ji Komara Dijîtaliya Kurdistanê re bişînin. -

-

- Send your voluntary contribution to the Digital Kurdistan Republic. + {t('taxZekat.desc', 'Send your voluntary contribution to the Digital Kurdistan Republic.')}

{/* Type selector */}
-

Cureyê Beşdariyê / Contribution Type

+

{t('taxZekat.type.label', 'Contribution Type')}

{(['zekat', 'tax'] as ContributionType[]).map(type => ( ))}
@@ -167,7 +166,7 @@ export default function TaxZekatPage() { {/* Amount */}
-

Miqdar / Amount

+

{t('taxZekat.amount.label', 'Amount')}

HEZ
{!selectedAccount && ( -

⚠️ Cüzdan bağlı değil / Wallet not connected

+

{t('taxZekat.walletNotConnected', '⚠️ Wallet not connected')}

)}
{/* Allocation */}
-

Dabeşkirina Fonê / Fund Allocation

+

{t('taxZekat.allocation.title', 'Fund Allocation')}

100 ? 'bg-red-900 text-red-400' : 'bg-gray-800 text-gray-400' @@ -194,7 +193,7 @@ export default function TaxZekatPage() { {totalPercentage}%
-

Divê bêkêmasî %100 be / Must equal exactly 100%

+

{t('taxZekat.allocation.desc', 'Must equal exactly 100%')}

{allocations.map(item => ( @@ -231,31 +230,23 @@ export default function TaxZekatPage() { style={{ borderColor: isZekat ? '#00A94F30' : '#D4A01730' }}>
{isZekat ? '🤲' : '📜'} -

SOZNAME / COMMITMENT

+

{t('taxZekat.commitment.title', 'COMMITMENT')}

- {isZekat ? ( -

- Komara Dîjîtal a Kurdistanê SOZ DIDE ku zekata we BI TEMAMÎ li gorî rêjeyên ku we destnîşan kirine dê bê xerckirin, li gorî rêgez û qaîdeyên Îslamî. -

- The Digital Republic of Kurdistan COMMITS to spending your zekat EXACTLY according to the ratios you specify, in accordance with Islamic principles. -

- ) : ( -

- Komara Dîjîtal a Kurdistanê SOZ DIDE ku beşdariyên baca we BI QASÎ KU MIMKUN BE li gorî rêjeyên ku we destnîşan kirine dê bê xerckirin. Hemû lêçûn dê bi şefafî li ser blockchain werin tomar kirin. -

- The Digital Republic of Kurdistan COMMITS to using your tax contributions AS CLOSELY AS POSSIBLE according to the ratios you specify. All expenses will be transparently recorded on the blockchain. -

- )} +

+ {isZekat + ? t('taxZekat.commitment.zekat', 'The Digital Republic of Kurdistan COMMITS to spending your zekat EXACTLY according to the ratios you specify, in accordance with Islamic principles.') + : t('taxZekat.commitment.tax', 'The Digital Republic of Kurdistan COMMITS to using your tax contributions AS CLOSELY AS POSSIBLE according to the ratios you specify. All expenses will be transparently recorded on the blockchain.')} +

@@ -267,8 +258,10 @@ export default function TaxZekatPage() { style={{ backgroundColor: accentColor }} > {isSubmitting - ? '⏳ Tê şandin...' - : isZekat ? '🤲 ZEKAT BIŞÎNE' : '📤 BAC BIŞÎNE'} + ? t('taxZekat.submitting', '⏳ Sending...') + : isZekat + ? t('taxZekat.submit.zekat', '🤲 SEND ZEKAT') + : t('taxZekat.submit.tax', '📤 SEND TAX')}
@@ -278,19 +271,19 @@ export default function TaxZekatPage() { {showConfirm && (
-

Piştrast bike / Confirm

+

{t('taxZekat.confirm.title', 'Confirm')}

- Cure / Type: + {t('taxZekat.confirm.type', 'Type')}: {isZekat ? 'Zekat' : 'Bac / Tax'}
- Miqdar / Amount: + {t('taxZekat.confirm.amount', 'Amount')}: {amount} HEZ
-

Dabeşkirin / Allocation:

+

{t('taxZekat.confirm.allocation', 'Allocation')}:

{allocations.filter(a => a.percentage > 0).map(a => (
{a.icon} {a.nameKu} @@ -305,14 +298,14 @@ export default function TaxZekatPage() { onClick={() => setShowConfirm(false)} className="py-3 rounded-xl bg-gray-800 text-gray-300 font-semibold" > - Betal / Cancel + {t('taxZekat.confirm.cancel', 'Cancel')}
diff --git a/web/src/pages/governance/AssemblyPage.tsx b/web/src/pages/governance/AssemblyPage.tsx index 7f599c6c..22c89c01 100644 --- a/web/src/pages/governance/AssemblyPage.tsx +++ b/web/src/pages/governance/AssemblyPage.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; interface Member { id: string; @@ -37,36 +38,43 @@ const SESSIONS: Session[] = [ { id: 's4', titleKu: 'Civîna Yasadanînê #11', title: 'Legislative Session #11', date: '2026-03-15', status: 'completed', agenda: 'Citizenship criteria, NFT standards, community grants.' }, ]; -const STATUS_CONFIG = { - upcoming: { label: 'Tê / Upcoming', cls: 'bg-blue-900/50 text-blue-400' }, - 'in-session': { label: 'Niha / In Session', cls: 'bg-green-900/50 text-green-400' }, - completed: { label: 'Qediya / Completed', cls: 'bg-gray-800 text-gray-400' }, -}; - type Tab = 'members' | 'sessions'; export default function AssemblyPage() { const navigate = useNavigate(); + const { t } = useTranslation(); const [activeTab, setActiveTab] = useState('members'); + const sessionStatusLabel = (status: Session['status']) => { + if (status === 'upcoming') return t('assembly.session.upcoming', 'Upcoming'); + if (status === 'in-session') return t('assembly.session.inSession', 'In Session'); + return t('assembly.session.completed', 'Completed'); + }; + + const sessionStatusCls = (status: Session['status']) => { + if (status === 'upcoming') return 'bg-blue-900/50 text-blue-400'; + if (status === 'in-session') return 'bg-green-900/50 text-green-400'; + return 'bg-gray-800 text-gray-400'; + }; + return (
{/* Header */}
- Governance + {t('assembly.breadcrumb', 'Governance')}
🏛️ -

Meclîsa Kurdistanê

-

Kurdistan Digital Assembly

+

{t('assembly.title', 'Kurdistan Digital Assembly')}

+

{t('assembly.subtitle', 'Kurdistan Digital Assembly')}

{[ - { val: MEMBERS.length, label: 'Endam / Members' }, - { val: 4, label: 'Komîte / Committees' }, - { val: 12, label: 'Civîn / Sessions' }, + { val: MEMBERS.length, label: t('assembly.stats.members', 'Members') }, + { val: 4, label: t('assembly.stats.committees', 'Committees') }, + { val: 12, label: t('assembly.stats.sessions', 'Sessions') }, ].map((stat, i) => (
0 ? 'border-l border-white/20' : ''}`}>

{stat.val}

@@ -87,7 +95,7 @@ export default function AssemblyPage() { activeTab === tab ? 'bg-green-600 text-white' : 'text-gray-400' }`} > - {tab === 'members' ? 'Endam / Members' : 'Civîn / Sessions'} + {tab === 'members' ? t('assembly.tab.members', 'Members') : t('assembly.tab.sessions', 'Sessions')} ))}
@@ -103,28 +111,25 @@ export default function AssemblyPage() {

{m.role}

📍 {m.region} - Ji {m.since} + {t('assembly.member.since', 'Since')} {m.since}
))} - {activeTab === 'sessions' && SESSIONS.map(s => { - const cfg = STATUS_CONFIG[s.status]; - return ( -
-
- - {cfg.label} - - {s.date} -
-

{s.titleKu}

-

{s.title}

-

{s.agenda}

+ {activeTab === 'sessions' && SESSIONS.map(s => ( +
+
+ + {sessionStatusLabel(s.status)} + + {s.date}
- ); - })} +

{s.titleKu}

+

{s.title}

+

{s.agenda}

+
+ ))}
diff --git a/web/src/pages/governance/JusticePage.tsx b/web/src/pages/governance/JusticePage.tsx index 1f6c7d11..f0f966e4 100644 --- a/web/src/pages/governance/JusticePage.tsx +++ b/web/src/pages/governance/JusticePage.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; interface DisputeCase { id: string; @@ -45,14 +46,9 @@ const CASES: DisputeCase[] = [ }, ]; -const STATUS_CONFIG = { - 'open': { label: 'Vekirî / Open', cls: 'bg-red-900/50 text-red-400', dot: 'bg-red-400' }, - 'in-review': { label: 'Di lêkolînê de / In Review', cls: 'bg-yellow-900/50 text-yellow-400', dot: 'bg-yellow-400' }, - 'resolved': { label: 'Çareserkirî / Resolved', cls: 'bg-green-900/50 text-green-400', dot: 'bg-green-400' }, -}; - export default function JusticePage() { const navigate = useNavigate(); + const { t } = useTranslation(); const [expanded, setExpanded] = useState(null); const counts = { @@ -61,18 +57,30 @@ export default function JusticePage() { resolved: CASES.filter(c => c.status === 'resolved').length, }; + const statusLabel = (status: DisputeCase['status']) => { + if (status === 'open') return t('justice.status.open', 'Open'); + if (status === 'in-review') return t('justice.status.inReview', 'In Review'); + return t('justice.status.resolved', 'Resolved'); + }; + + const statusCls = (status: DisputeCase['status']) => { + if (status === 'open') return 'bg-red-900/50 text-red-400'; + if (status === 'in-review') return 'bg-yellow-900/50 text-yellow-400'; + return 'bg-green-900/50 text-green-400'; + }; + return (
{/* Header */}
- Governance + {t('justice.breadcrumb', 'Governance')}
⚖️ -

Dadwerî

-

Justice & Dispute Resolution

+

{t('justice.title', 'Justice & Dispute Resolution')}

+

{t('justice.subtitle', 'Justice & Dispute Resolution')}

@@ -80,39 +88,35 @@ export default function JusticePage() { {/* Stats */}
{[ - { label: 'Vekirî\nOpen', val: counts['open'], color: 'border-l-red-500' }, - { label: 'Lêkolîn\nIn Review', val: counts['in-review'], color: 'border-l-yellow-500' }, - { label: 'Çareser\nResolved', val: counts['resolved'], color: 'border-l-green-500' }, + { label: t('justice.stats.open', 'Open'), val: counts['open'], color: 'border-l-red-500' }, + { label: t('justice.stats.inReview', 'In Review'), val: counts['in-review'], color: 'border-l-yellow-500' }, + { label: t('justice.stats.resolved', 'Resolved'), val: counts['resolved'], color: 'border-l-green-500' }, ].map((s, i) => (

{s.val}

-

{s.label}

+

{s.label}

))}
{/* Info */}
-

Çareserkirina Nakokiyan / Dispute Resolution

+

{t('justice.info.title', 'Dispute Resolution')}

- Sîstema dadweriya dijîtal a Kurdistanê nakokiyên di navbera welatiyên dijîtal de bi awayekî adil û zelal çareser dike. Hemû biryar li ser blockchain tên tomarkirin. -

-

- Kurdistan's digital justice system resolves disputes between digital citizens fairly and transparently. All decisions are recorded on the blockchain. + {t('justice.info.body', "Kurdistan's digital justice system resolves disputes between digital citizens fairly and transparently. All decisions are recorded on the blockchain.")}

{/* Cases */} -

Dozên Dawî / Recent Cases

+

{t('justice.cases.title', 'Recent Cases')}

{CASES.map(c => { - const cfg = STATUS_CONFIG[c.status]; const isOpen = expanded === c.id; return (
{c.caseNumber} - - {cfg.label} + + {statusLabel(c.status)}

{c.titleKu}

@@ -127,9 +131,9 @@ export default function JusticePage() {

{c.description}

{c.resolution && (
-

Biryar / Resolution:

+

{t('justice.case.resolution', 'Resolution')}:

{c.resolution}

-

Dîroka çareseriyê: {c.resolvedDate}

+

{t('justice.case.resolvedDate', 'Resolution date')}: {c.resolvedDate}

)}
@@ -139,7 +143,7 @@ export default function JusticePage() { onClick={() => setExpanded(isOpen ? null : c.id)} className="mt-2 text-green-400 text-xs font-medium w-full text-center" > - {isOpen ? '▲ Kêmtir' : '▼ Bêtir'} + {isOpen ? t('justice.case.less', '▲ Less') : t('justice.case.more', '▼ More')}
); diff --git a/web/src/pages/governance/PollsPage.tsx b/web/src/pages/governance/PollsPage.tsx index 6b79159d..4287d580 100644 --- a/web/src/pages/governance/PollsPage.tsx +++ b/web/src/pages/governance/PollsPage.tsx @@ -1,5 +1,6 @@ import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; interface PollOption { id: string; @@ -41,9 +42,9 @@ const INITIAL_POLLS: Poll[] = [ description: 'Proposal to reduce transaction fees by 50% for the next quarter.', status: 'active', totalVotes: 521, endsAt: '2026-04-15', options: [ - { id: '2a', text: 'Ere / Yes', votes: 389 }, - { id: '2b', text: 'Na / No', votes: 87 }, - { id: '2c', text: 'Bêalî / Abstain', votes: 45 }, + { id: '2a', text: 'Yes', votes: 389 }, + { id: '2b', text: 'No', votes: 87 }, + { id: '2c', text: 'Abstain', votes: 45 }, ], userVoted: null, }, @@ -54,10 +55,10 @@ const INITIAL_POLLS: Poll[] = [ description: 'Allocate 5% of treasury funds for a community education scholarship.', status: 'active', totalVotes: 198, endsAt: '2026-04-25', options: [ - { id: '3a', text: 'Ere, 5% / Yes, 5%', votes: 112 }, - { id: '3b', text: 'Ere, 3% / Yes, 3%', votes: 48 }, - { id: '3c', text: 'Na / No', votes: 23 }, - { id: '3d', text: 'Bêalî / Abstain', votes: 15 }, + { id: '3a', text: 'Yes, 5%', votes: 112 }, + { id: '3b', text: 'Yes, 3%', votes: 48 }, + { id: '3c', text: 'No', votes: 23 }, + { id: '3d', text: 'Abstain', votes: 15 }, ], userVoted: null, }, @@ -78,6 +79,7 @@ const INITIAL_POLLS: Poll[] = [ export default function PollsPage() { const navigate = useNavigate(); + const { t } = useTranslation(); const [polls, setPolls] = useState(INITIAL_POLLS); const handleVote = (pollId: string, optionId: string) => { @@ -112,9 +114,9 @@ export default function PollsPage() { - {poll.status === 'active' ? 'Çalak / Active' : 'Qediya / Ended'} + {poll.status === 'active' ? t('polls.status.active', 'Active') : t('polls.status.ended', 'Ended')} - {poll.totalVotes} deng + {poll.totalVotes} {t('polls.votes', 'votes')}

{poll.titleKu}

@@ -164,7 +166,9 @@ export default function PollsPage() {

- {poll.status === 'active' ? `Dawî: ${poll.endsAt}` : `Qediya: ${poll.endsAt}`} + {poll.status === 'active' + ? `${t('polls.ends', 'Ends')}: ${poll.endsAt}` + : `${t('polls.ended', 'Ended')}: ${poll.endsAt}`}

); @@ -176,26 +180,28 @@ export default function PollsPage() {
- Governance + {t('polls.breadcrumb', 'Governance')}
📊 -

Rapirsî

-

Community Polls

-

{activePolls.length} çalak / active

+

{t('polls.title', 'Community Polls')}

+

{t('polls.subtitle', 'Community Polls')}

+

+ {t('polls.active.count', '{{count}} active', { count: activePolls.length })} +

{activePolls.length > 0 && (
-

Rapirsiyên Çalak / Active Polls

+

{t('polls.section.active', 'Active Polls')}

{activePolls.map(renderPoll)}
)} {endedPolls.length > 0 && (
-

Rapirsiyên Qediyayî / Ended Polls

+

{t('polls.section.ended', 'Ended Polls')}

{endedPolls.map(renderPoll)}
)}