feat: add standalone explorer page at /explorer

This commit is contained in:
2026-02-16 01:27:40 +03:00
parent b3241005ba
commit 0f63c96b2c
12 changed files with 704 additions and 5 deletions
+1 -1
View File
@@ -143,7 +143,7 @@ export function LanguageProvider({ children }: LanguageProviderProps) {
const pathSegments = window.location.pathname.split('/').filter(Boolean);
const firstSegment = pathSegments[0];
// Don't rewrite URL for standalone pages like /citizens
const STANDALONE_PATHS = ['citizens'];
const STANDALONE_PATHS = ['citizens', 'explorer'];
if (firstSegment && STANDALONE_PATHS.includes(firstSegment)) {
// Keep standalone path as-is
} else if (!firstSegment || !VALID_LANGS.includes(firstSegment as LanguageCode)) {
+25
View File
@@ -575,6 +575,31 @@ const ar: Translations = {
walletSyncFailed: 'فشل مزامنة عنوان المحفظة مع قاعدة البيانات',
},
explorer: {
title: 'Pezkuwi Explorer',
subtitle: 'مستكشف البلوكتشين',
search: 'ابحث برقم الكتلة أو العنوان...',
chainStats: 'إحصائيات السلسلة',
latestBlocks: 'أحدث الكتل',
recentTransfers: 'أحدث المعاملات',
block: 'كتلة',
validators: 'المدققون',
era: 'الحقبة',
blockTime: 'وقت الكتلة',
extrinsics: 'معاملة',
noResults: 'لم يتم العثور على نتائج',
connecting: 'جاري الاتصال بالسلسلة...',
hash: 'هاش',
from: 'من',
to: 'إلى',
amount: 'المبلغ',
time: 'الوقت',
balance: 'الرصيد',
seconds: 'ث مضت',
finalized: 'الكتلة النهائية',
searchResult: 'نتيجة البحث',
},
citizen: {
pageTitle: 'كن مواطناً',
fullName: 'الاسم الكامل',
+25
View File
@@ -577,6 +577,31 @@ const ckb: Translations = {
walletSyncFailed: 'هاوکاتکردنی ناونیشانی جزدان لەگەڵ DB سەرنەکەوت',
},
explorer: {
title: 'Pezkuwi Explorer',
subtitle: 'گەڕانی بلۆکچەین',
search: 'ژمارەی بلۆک یان ناونیشان بگەڕێ...',
chainStats: 'ئامارەکانی زنجیرە',
latestBlocks: 'دوایین بلۆکەکان',
recentTransfers: 'دوایین مامەڵەکان',
block: 'بلۆک',
validators: 'ڤالیدەیتەر',
era: 'سەردەم',
blockTime: 'کاتی بلۆک',
extrinsics: 'مامەڵە',
noResults: 'ئەنجام نەدۆزرایەوە',
connecting: 'پەیوەندی بە زنجیرەوە دەکرێت...',
hash: 'هاش',
from: 'لە',
to: 'بۆ',
amount: 'بڕ',
time: 'کات',
balance: 'باڵانس',
seconds: 'چ پێش',
finalized: 'بلۆکی کۆتایی',
searchResult: 'ئەنجامی گەڕان',
},
citizen: {
pageTitle: 'ببە هاوڵاتی',
fullName: 'ناوی تەواو',
+25
View File
@@ -576,6 +576,31 @@ const en: Translations = {
walletSyncFailed: 'Wallet address sync to DB failed',
},
explorer: {
title: 'Pezkuwi Explorer',
subtitle: 'Blockchain Explorer',
search: 'Search block number or address...',
chainStats: 'Chain Stats',
latestBlocks: 'Latest Blocks',
recentTransfers: 'Recent Extrinsics',
block: 'Block',
validators: 'Validators',
era: 'Era',
blockTime: 'Block Time',
extrinsics: 'exts',
noResults: 'No results found',
connecting: 'Connecting to chain...',
hash: 'Hash',
from: 'From',
to: 'To',
amount: 'Amount',
time: 'Time',
balance: 'Balance',
seconds: 's ago',
finalized: 'Finalized Block',
searchResult: 'Search Result',
},
citizen: {
pageTitle: 'Be Citizen',
fullName: 'Full Name',
+25
View File
@@ -576,6 +576,31 @@ const fa: Translations = {
walletSyncFailed: 'همگام‌سازی آدرس کیف پول با DB ناموفق',
},
explorer: {
title: 'Pezkuwi Explorer',
subtitle: 'مرورگر بلاکچین',
search: 'شماره بلاک یا آدرس جستجو کنید...',
chainStats: 'آمار زنجیره',
latestBlocks: 'آخرین بلاک‌ها',
recentTransfers: 'آخرین تراکنش‌ها',
block: 'بلاک',
validators: 'اعتبارسنج',
era: 'دوره',
blockTime: 'زمان بلاک',
extrinsics: 'تراکنش',
noResults: 'نتیجه‌ای یافت نشد',
connecting: 'در حال اتصال به زنجیره...',
hash: 'هش',
from: 'از',
to: 'به',
amount: 'مقدار',
time: 'زمان',
balance: 'موجودی',
seconds: 'ث پیش',
finalized: 'بلاک نهایی',
searchResult: 'نتیجه جستجو',
},
citizen: {
pageTitle: 'شهروند شوید',
fullName: 'نام کامل',
+25
View File
@@ -601,6 +601,31 @@ const krd: Translations = {
walletSyncFailed: 'Wallet adresa DB-\u00ea re senkron\u00eeze neb\u00fb',
},
explorer: {
title: 'Pezkuwi Explorer',
subtitle: 'Gerîneya Blockchain',
search: 'Li hejmara blokê an navnîşanê bigere...',
chainStats: 'Statistîkên Zincîrê',
latestBlocks: 'Blokên Dawîn',
recentTransfers: 'Extrinsîkên Dawîn',
block: 'Blok',
validators: 'Validator',
era: 'Era',
blockTime: 'Dema Blokê',
extrinsics: 'ext',
noResults: 'Encam nehat dîtin',
connecting: 'Bi zincîrê ve tê girêdan...',
hash: 'Hash',
from: 'Ji',
to: 'Bo',
amount: 'Mîqdar',
time: 'Dem',
balance: 'Balance',
seconds: 's berê',
finalized: 'Bloka Dawî',
searchResult: 'Encama Lêgerînê',
},
citizen: {
pageTitle: 'Bibe Welatî',
fullName: 'Navê Te',
+25
View File
@@ -577,6 +577,31 @@ const tr: Translations = {
walletSyncFailed: 'Cüzdan adresi DB ile senkronize edilemedi',
},
explorer: {
title: 'Pezkuwi Explorer',
subtitle: 'Blockchain Gezgini',
search: 'Blok numarası veya adres ara...',
chainStats: 'Zincir İstatistikleri',
latestBlocks: 'Son Bloklar',
recentTransfers: 'Son İşlemler',
block: 'Blok',
validators: 'Validatör',
era: 'Era',
blockTime: 'Blok Süresi',
extrinsics: 'işlem',
noResults: 'Sonuç bulunamadı',
connecting: 'Zincire bağlanılıyor...',
hash: 'Hash',
from: 'Gönderen',
to: 'Alıcı',
amount: 'Miktar',
time: 'Zaman',
balance: 'Bakiye',
seconds: 'sn önce',
finalized: 'Kesinleşen Blok',
searchResult: 'Arama Sonucu',
},
citizen: {
pageTitle: 'Vatandaş Ol',
fullName: 'Tam İsim',
+26
View File
@@ -581,6 +581,32 @@ export interface Translations {
walletSyncFailed: string;
};
// Explorer page
explorer: {
title: string;
subtitle: string;
search: string;
chainStats: string;
latestBlocks: string;
recentTransfers: string;
block: string;
validators: string;
era: string;
blockTime: string;
extrinsics: string;
noResults: string;
connecting: string;
hash: string;
from: string;
to: string;
amount: string;
time: string;
balance: string;
seconds: string;
finalized: string;
searchResult: string;
};
// Citizen page
citizen: {
pageTitle: string;