diff --git a/.oxlintrc.json b/.oxlintrc.json
index 3c04d76c7..b924f0238 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -1,7 +1,16 @@
{
"$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxlint/configuration_schema.json",
- "plugins": ["react", "typescript", "jsx-a11y", "unicorn"],
- "jsPlugins": ["eslint-plugin-i18next", "eslint-plugin-file-component-constraints", "eslint-plugin-unused-imports"],
+ "plugins": [
+ "react",
+ "typescript",
+ "jsx-a11y",
+ "unicorn"
+ ],
+ "jsPlugins": [
+ "eslint-plugin-i18next",
+ "eslint-plugin-file-component-constraints",
+ "eslint-plugin-unused-imports"
+ ],
"categories": {
"correctness": "warn",
"suspicious": "warn",
@@ -19,7 +28,6 @@
"eqeqeq": "error",
"no-var": "error",
"prefer-const": "warn",
-
"react/react-in-jsx-scope": "off",
"react/jsx-key": "error",
"react/no-direct-mutation-state": "error",
@@ -28,40 +36,43 @@
"react/jsx-no-useless-fragment": "warn",
"react/jsx-curly-brace-presence": "warn",
"react/no-array-index-key": "warn",
-
"typescript/no-explicit-any": "error",
"typescript/prefer-ts-expect-error": "warn",
"typescript/no-non-null-assertion": "warn",
"typescript/consistent-type-imports": "error",
-
"jsx-a11y/alt-text": "warn",
"jsx-a11y/anchor-is-valid": "warn",
-
"unicorn/no-null": "off",
"unicorn/prefer-query-selector": "off",
"unicorn/require-module-specifiers": "off",
-
"file-component-constraints/enforce": [
"error",
{
"rules": [
{
"fileMatch": "**/sheets/Miniapp*.tsx",
- "mustUse": ["MiniappSheetHeader"],
+ "mustUse": [
+ "MiniappSheetHeader"
+ ],
"mustImportFrom": {
- "MiniappSheetHeader": ["@/components/ecosystem"]
+ "MiniappSheetHeader": [
+ "@/components/ecosystem"
+ ]
}
}
]
}
],
-
"i18next/no-literal-string": [
- "warn",
+ "error",
{
"mode": "jsx-only",
"jsx-components": {
- "exclude": ["Trans", "Icon", "TablerIcon"]
+ "exclude": [
+ "Trans",
+ "Icon",
+ "TablerIcon"
+ ]
},
"jsx-attributes": {
"exclude": [
@@ -275,7 +286,18 @@
"^:$",
"^:$",
"^daysAgo$",
- "^yesterday$"
+ "^yesterday$",
+ "^°$",
+ "^9\\+$",
+ "two-step-error",
+ "two-step-secret-error",
+ "Chain not supported",
+ "^Chain:",
+ "^Address:",
+ "^loading$",
+ "loading...",
+ "^--$",
+ "^≈ --$"
]
}
}
@@ -314,4 +336,4 @@
"version": "19"
}
}
-}
+}
\ No newline at end of file
diff --git a/packages/key-ui/src/qr-code/QRCode.tsx b/packages/key-ui/src/qr-code/QRCode.tsx
index ec469dd03..3241f670b 100644
--- a/packages/key-ui/src/qr-code/QRCode.tsx
+++ b/packages/key-ui/src/qr-code/QRCode.tsx
@@ -34,11 +34,11 @@ export function QRCode({
{renderFn ? (
renderFn({ value, size, level })
) : (
-
- QR: {value.slice(0, 20)}...
+ {value.slice(0, 20)}...
)}
{logoUrl && (
diff --git a/scripts/i18n-check.ts b/scripts/i18n-check.ts
index df9ed63a5..e44cc135e 100644
--- a/scripts/i18n-check.ts
+++ b/scripts/i18n-check.ts
@@ -68,6 +68,7 @@ interface CheckResult {
locale: string
missing: string[]
extra: string[]
+ untranslated: string[] // Keys with [MISSING:xx] placeholder
}
// ==================== Utilities ====================
@@ -92,6 +93,25 @@ function extractKeys(obj: TranslationFile, prefix = ''): string[] {
return keys
}
+/**
+ * Find keys with [MISSING:xx] placeholder values
+ */
+function findUntranslatedKeys(obj: TranslationFile, prefix = ''): string[] {
+ const untranslated: string[] = []
+
+ for (const [key, value] of Object.entries(obj)) {
+ const fullKey = prefix ? `${prefix}.${key}` : key
+
+ if (typeof value === 'object' && value !== null) {
+ untranslated.push(...findUntranslatedKeys(value as TranslationFile, fullKey))
+ } else if (typeof value === 'string' && value.startsWith('[MISSING:')) {
+ untranslated.push(fullKey)
+ }
+ }
+
+ return untranslated
+}
+
/**
* Get value at a nested path
*/
@@ -206,6 +226,7 @@ function checkNamespace(namespace: string, fix: boolean, verbose: boolean): Chec
locale,
missing: [...refKeys],
extra: [],
+ untranslated: [],
})
continue
}
@@ -214,21 +235,23 @@ function checkNamespace(namespace: string, fix: boolean, verbose: boolean): Chec
const localeKeys = new Set(extractKeys(localeData))
const diff = compareKeys(refKeys, localeKeys)
+ const untranslated = findUntranslatedKeys(localeData)
- if (diff.missing.length > 0 || diff.extra.length > 0) {
+ if (diff.missing.length > 0 || diff.extra.length > 0 || untranslated.length > 0) {
results.push({
namespace,
locale,
missing: diff.missing,
extra: diff.extra,
+ untranslated,
})
// Fix missing keys if requested
if (fix && diff.missing.length > 0) {
for (const key of diff.missing) {
const refValue = getNestedValue(refData, key)
- const placeholder = typeof refValue === 'string'
- ? `[MISSING:${locale}] ${refValue}`
+ const placeholder = typeof refValue === 'string'
+ ? `[MISSING:${locale}] ${refValue}`
: refValue
setNestedValue(localeData, key, placeholder as TranslationValue)
}
@@ -277,8 +300,9 @@ ${colors.cyan}╔═════════════════════
const hasMissingKeys = allResults.some((r) => r.missing.length > 0)
const hasExtraKeys = allResults.some((r) => r.extra.length > 0)
+ const hasUntranslated = allResults.some((r) => r.untranslated.length > 0)
- if (!hasMissingKeys && !hasExtraKeys) {
+ if (!hasMissingKeys && !hasExtraKeys && !hasUntranslated) {
log.success('All translations are complete!')
console.log(`
${colors.green}✓ All ${namespaces.length} namespaces checked across ${LOCALES.length} locales${colors.reset}
@@ -297,15 +321,18 @@ ${colors.green}✓ All ${namespaces.length} namespaces checked across ${LOCALES.
let totalMissing = 0
let totalExtra = 0
+ let totalUntranslated = 0
for (const [locale, results] of byLocale) {
const missingCount = results.reduce((sum, r) => sum + r.missing.length, 0)
const extraCount = results.reduce((sum, r) => sum + r.extra.length, 0)
+ const untranslatedCount = results.reduce((sum, r) => sum + r.untranslated.length, 0)
- if (missingCount === 0 && extraCount === 0) continue
+ if (missingCount === 0 && extraCount === 0 && untranslatedCount === 0) continue
totalMissing += missingCount
totalExtra += extraCount
+ totalUntranslated += untranslatedCount
console.log(`\n${colors.bold}${locale}${colors.reset}`)
@@ -329,26 +356,40 @@ ${colors.green}✓ All ${namespaces.length} namespaces checked across ${LOCALES.
log.dim(` ... and ${result.extra.length - 3} more`)
}
}
+
+ if (result.untranslated.length > 0) {
+ log.error(`${result.namespace}.json: ${result.untranslated.length} untranslated keys ([MISSING:] placeholders)`)
+ for (const key of result.untranslated.slice(0, 5)) {
+ log.dim(`! ${key}`)
+ }
+ if (result.untranslated.length > 5) {
+ log.dim(` ... and ${result.untranslated.length - 5} more`)
+ }
+ }
}
}
- if (totalMissing > 0) {
+ if (totalMissing > 0 || totalUntranslated > 0) {
console.log(`
${colors.red}✗ Found issues:${colors.reset}
- ${colors.red}Missing: ${totalMissing} keys${colors.reset}
+ ${totalMissing > 0 ? `${colors.red}Missing: ${totalMissing} keys${colors.reset}` : ''}
+ ${totalUntranslated > 0 ? `${colors.red}Untranslated: ${totalUntranslated} keys (have [MISSING:] placeholder)${colors.reset}` : ''}
${colors.yellow}Extra: ${totalExtra} keys${colors.reset}
`)
- if (!fix) {
+ if (!fix && totalMissing > 0) {
log.info(`Run with ${colors.cyan}--fix${colors.reset} to add missing keys with placeholder values`)
}
+ if (totalUntranslated > 0) {
+ log.info(`Fix [MISSING:xx] placeholders by providing actual translations`)
+ }
process.exit(1)
}
// Only extra keys - warn but don't fail
console.log(`
-${colors.green}✓ No missing translations${colors.reset}
+${colors.green}✓ No missing or untranslated keys${colors.reset}
${colors.yellow}Extra: ${totalExtra} keys (not in reference, can be cleaned up)${colors.reset}
`)
}
diff --git a/src/components/contact/contact-card.tsx b/src/components/contact/contact-card.tsx
index 10a5034f9..a4f78bfe4 100644
--- a/src/components/contact/contact-card.tsx
+++ b/src/components/contact/contact-card.tsx
@@ -4,12 +4,12 @@
*/
import { QRCodeSVG } from 'qrcode.react';
-import { useTranslation } from 'react-i18next';
import { ContactAvatar } from '@/components/common/contact-avatar';
import { generateAvatarFromAddress } from '@/lib/avatar-codec';
import { detectAddressFormat } from '@/lib/address-format';
import type { ContactAddressInfo } from '@/lib/qr-parser';
import { isBioforestChain } from '@/lib/crypto';
+import { useTranslation } from 'react-i18next';
/** Address format standard colors */
const ADDRESS_FORMAT_COLORS = {
diff --git a/src/components/ecosystem/app-stack-page.tsx b/src/components/ecosystem/app-stack-page.tsx
index 4d0f01c79..a936bd6f0 100644
--- a/src/components/ecosystem/app-stack-page.tsx
+++ b/src/components/ecosystem/app-stack-page.tsx
@@ -1,13 +1,7 @@
-/**
- * AppStackPage - 应用堆栈页面
- *
- * Swiper 的第三页,作为小程序窗口的背景板
- * 当没有激活应用时,此页禁用滑动
- */
-
import { useCallback } from 'react'
import { useStore } from '@tanstack/react-store'
import { cn } from '@/lib/utils'
+import { useTranslation } from 'react-i18next'
import {
miniappRuntimeStore,
miniappRuntimeSelectors,
@@ -20,6 +14,7 @@ export interface AppStackPageProps {
}
export function AppStackPage({ className }: AppStackPageProps) {
+ const { t } = useTranslation('ecosystem')
const hasRunningApps = useStore(
miniappRuntimeStore,
miniappRuntimeSelectors.hasRunningApps
@@ -48,7 +43,7 @@ export function AppStackPage({ className }: AppStackPageProps) {
{/* 空状态提示(调试用,生产环境可移除) */}
{!hasRunningApps && (
-
应用堆栈
+
{t('stack.title')}
)}
diff --git a/src/components/ecosystem/discover-page.tsx b/src/components/ecosystem/discover-page.tsx
index e6eeb80ac..23c2d4f2c 100644
--- a/src/components/ecosystem/discover-page.tsx
+++ b/src/components/ecosystem/discover-page.tsx
@@ -1,4 +1,5 @@
import { useRef, forwardRef, useImperativeHandle } from 'react';
+import { useTranslation } from 'react-i18next';
import { IconSearch, IconSparkles, IconChevronRight, IconApps } from '@tabler/icons-react';
import { cn } from '@/lib/utils';
import styles from './discover-page.module.css';
@@ -9,10 +10,19 @@ import type { MiniappManifest } from '@/services/ecosystem';
// ============================================
// 工具函数
// ============================================
-function getTodayDate() {
+// ============================================
+// 工具函数
+// ============================================
+// ============================================
+// 工具函数
+// ============================================
+function getTodayDate(t: (key: string, options?: Record) => string) {
const now = new Date();
- const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
- return `${now.getMonth() + 1}月${now.getDate()}日 ${weekdays[now.getDay()]}`;
+ return t('common:date.format', {
+ month: now.getMonth() + 1,
+ day: now.getDate(),
+ weekday: t(`common:weekdays.${now.getDay()}`),
+ });
}
// 默认渐变色
@@ -32,6 +42,7 @@ function getAppGradient(app: MiniappManifest, fallbackIndex: number = 0): string
// 大型精选卡片
// ============================================
function FeaturedStoryCard({ app, onTap }: { app: MiniappManifest; onTap: () => void }) {
+ const { t } = useTranslation('ecosystem');
const gradient = app.themeColor || 'from-violet-600 via-purple-600 to-indigo-700';
return (
@@ -51,7 +62,7 @@ function FeaturedStoryCard({ app, onTap }: { app: MiniappManifest; onTap: () =>
- 精选应用
+ {t('ecosystem:discover.featured')}
@@ -123,6 +134,7 @@ function AppListItem({
rank?: number;
showRank?: boolean;
}) {
+ const { t } = useTranslation('ecosystem');
return (
{showRank && rank !== undefined && (
@@ -138,7 +150,7 @@ function AppListItem({
{app.name}
{app.beta && (
- Beta
+ {t('common:beta')}
)}
@@ -154,7 +166,7 @@ function AppListItem({
onOpen();
}}
>
- 获取
+ {t('ecosystem:discover.get')}
);
@@ -195,6 +207,7 @@ export const DiscoverPage = forwardRef
(funct
{ apps, featuredApp, featuredApps, recommendedApps, hotApps, onAppDetail, onAppOpen },
ref,
) {
+ const { t } = useTranslation(['ecosystem', 'common']);
const searchInputRef = useRef(null);
useImperativeHandle(ref, () => ({
@@ -208,7 +221,7 @@ export const DiscoverPage = forwardRef(funct
{/* BigHeader - sticky,scroll-driven background */}
-
{getTodayDate()}
+
{getTodayDate(t)}
{/* 搜索框 */}
@@ -217,7 +230,7 @@ export const DiscoverPage = forwardRef(funct
(funct
{/* 内容区 */}
{apps.length === 0 ? (
-
+
) : (
<>
{featuredApp && (
@@ -243,9 +256,9 @@ export const DiscoverPage = forwardRef
(funct
{recommendedApps.length > 0 && (
-
推荐
+ {t('ecosystem:discover.recommended')}
@@ -264,7 +277,7 @@ export const DiscoverPage = forwardRef(funct
)}
- 热门应用
+ {t('ecosystem:discover.hotApps')}
{hotApps.map((app, i) => (
diff --git a/src/components/ecosystem/ios-search-capsule.tsx b/src/components/ecosystem/ios-search-capsule.tsx
index a5f01a240..b4ca5cf7d 100644
--- a/src/components/ecosystem/ios-search-capsule.tsx
+++ b/src/components/ecosystem/ios-search-capsule.tsx
@@ -1,4 +1,5 @@
import { IconSearch } from '@tabler/icons-react';
+import { useTranslation } from 'react-i18next';
import { cn } from '@/lib/utils';
export interface IOSSearchCapsuleProps {
@@ -7,6 +8,7 @@ export interface IOSSearchCapsuleProps {
}
export function IOSSearchCapsule({ onClick, className }: IOSSearchCapsuleProps) {
+ const { t } = useTranslation('common');
return (
);
}
diff --git a/src/components/ecosystem/miniapp-capsule.tsx b/src/components/ecosystem/miniapp-capsule.tsx
index 355e0fe10..e7a0cf0f0 100644
--- a/src/components/ecosystem/miniapp-capsule.tsx
+++ b/src/components/ecosystem/miniapp-capsule.tsx
@@ -8,6 +8,7 @@
import { forwardRef } from 'react';
import { IconDots, IconPointFilled } from '@tabler/icons-react';
import { cn } from '@/lib/utils';
+import { useTranslation } from 'react-i18next';
import type { CapsuleTheme } from '@/services/miniapp-runtime';
import styles from './miniapp-capsule.module.css';
@@ -30,6 +31,7 @@ export const MiniappCapsule = forwardRef
(fu
{ theme = 'auto', actionIcon, onAction, onClose, visible = true, className },
ref,
) {
+ const { t } = useTranslation('ecosystem');
if (!visible) return null;
const themeClassName = theme === 'dark' ? styles.themeDark : theme === 'light' ? styles.themeLight : styles.themeAuto;
@@ -39,7 +41,7 @@ export const MiniappCapsule = forwardRef(fu
{/**/}
{/* 多功能按钮 */}
-
)
diff --git a/src/components/ecosystem/my-apps-page.tsx b/src/components/ecosystem/my-apps-page.tsx
index f2d597aff..171cdabdc 100644
--- a/src/components/ecosystem/my-apps-page.tsx
+++ b/src/components/ecosystem/my-apps-page.tsx
@@ -1,6 +1,7 @@
import { useEffect, useRef, useState } from 'react';
import { useStore } from '@tanstack/react-store';
import { IconDownload, IconPlayerPlay, IconInfoCircle, IconTrash } from '@tabler/icons-react';
+import { useTranslation } from 'react-i18next';
import { cn } from '@/lib/utils';
import { motion, LayoutGroup } from 'motion/react';
import { MiniappIcon } from './miniapp-icon';
@@ -33,6 +34,7 @@ interface IOSDesktopIconProps {
}
function IOSDesktopIcon({ app, onTap, onOpen, onDetail, onRemove }: IOSDesktopIconProps) {
+ const { t } = useTranslation('common')
const popoverRef = useRef(null);
const iconRef = useRef(null);
const menuRef = useRef(null);
@@ -59,10 +61,10 @@ function IOSDesktopIcon({ app, onTap, onOpen, onDetail, onRemove }: IOSDesktopIc
presentationState === null || presentationState === 'presenting' || presentationState === 'dismissing';
const sharedLayoutIds = enableSharedLayout
? {
- container: `miniapp:${app.id}:container`,
- logo: `miniapp:${app.id}:logo`,
- inner: `miniapp:${app.id}:inner`,
- }
+ container: `miniapp:${app.id}:container`,
+ logo: `miniapp:${app.id}:logo`,
+ inner: `miniapp:${app.id}:inner`,
+ }
: null;
const ICON_STACKING_VARIANTS = {
@@ -268,9 +270,9 @@ function IOSDesktopIcon({ app, onTap, onOpen, onDetail, onRemove }: IOSDesktopIc
};
const menuItems = [
- { icon: IconPlayerPlay, label: '打开', action: onOpen },
- { icon: IconInfoCircle, label: '详情', action: onDetail },
- { icon: IconTrash, label: '移除', action: onRemove, destructive: true },
+ { icon: IconPlayerPlay, label: t('ecosystem.menu.open'), action: onOpen },
+ { icon: IconInfoCircle, label: t('ecosystem.menu.detail'), action: onDetail },
+ { icon: IconTrash, label: t('ecosystem.menu.remove'), action: onRemove, destructive: true },
];
return (
@@ -302,9 +304,9 @@ function IOSDesktopIcon({ app, onTap, onOpen, onDetail, onRemove }: IOSDesktopIc
+ />
- 还没有使用过的应用
- 去「发现」页面探索吧
+ {t('ecosystem.noAppsUsed')}
+ {t('ecosystem.goToDiscover')}
);
}
diff --git a/src/components/ecosystem/swiper-sync-demo.tsx b/src/components/ecosystem/swiper-sync-demo.tsx
index 57f5766cd..a6d753cff 100644
--- a/src/components/ecosystem/swiper-sync-demo.tsx
+++ b/src/components/ecosystem/swiper-sync-demo.tsx
@@ -6,6 +6,7 @@
*/
import { useState } from 'react';
+import { useTranslation } from 'react-i18next';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Controller } from 'swiper/modules';
import type { Swiper as SwiperType } from 'swiper';
@@ -19,26 +20,27 @@ const PAGES = ['Page 1', 'Page 2', 'Page 3'];
* 方案一:Swiper Controller 模块(官方推荐)
*/
export function SwiperSyncDemo() {
+ const { t } = useTranslation('ecosystem');
// Controller 需要 state 来触发重渲染建立连接
const [mainSwiper, setMainSwiper] = useState
(null);
const [indicatorSwiper, setIndicatorSwiper] = useState(null);
-
+
// 用于 UI 显示的进度(不参与同步逻辑)
const [displayProgress, setDisplayProgress] = useState(0);
return (
-
方案一:Controller 模块(官方推荐)
-
+
{t('demo.swiper.method1')}
+
{/* 调试信息 */}
-
Progress: {displayProgress.toFixed(3)}
-
Active Index: {Math.round(displayProgress * (PAGES.length - 1))}
+
{t('demo.swiper.debugProgress', { value: displayProgress.toFixed(3) })}
+
{t('demo.swiper.debugActiveIndex', { value: Math.round(displayProgress * (PAGES.length - 1)) })}
{/* 主 Swiper */}
-
主 Swiper
+
{t('demo.swiper.main')}
setDisplayProgress(p)}
>
{PAGES.map((page) => (
-
@@ -59,7 +61,7 @@ export function SwiperSyncDemo() {
{/* 指示器 Swiper */}
-
指示器 Swiper
+
{t('demo.swiper.indicator')}
mainSwiper?.slideTo(index)}
className="px-4 py-2 rounded-lg bg-muted hover:bg-muted/80"
>
- Go to {index + 1}
+ {t('demo.swiper.goTo', { index: index + 1 })}
))}
@@ -100,13 +102,14 @@ export function SwiperSyncDemo() {
/**
* 方案三:Context 封装模式(使用 Controller 模块)
*/
-import {
- SwiperSyncProvider,
+import {
+ SwiperSyncProvider,
useSwiperMember,
} from '@/components/common/swiper-sync-context';
/** 主 Swiper 组件 */
function MainSwiperWithContext() {
+ const { t } = useTranslation('ecosystem');
// 自己是 'main',要控制 'indicator'
const { onSwiper, controlledSwiper } = useSwiperMember('main', 'indicator');
const [progress, setProgress] = useState(0);
@@ -114,7 +117,7 @@ function MainSwiperWithContext() {
return (
- 主 Swiper(独立组件)
+ {t('demo.swiper.mainIndependent')}
setProgress(p)}
>
{PAGES.map((page) => (
-
@@ -132,10 +135,13 @@ function MainSwiperWithContext() {
))}
-
+
{/* 调试信息 */}
- Progress: {progress.toFixed(3)} | Index: {Math.round(progress * (PAGES.length - 1))}
+ {t('demo.swiper.debugCombined', {
+ progress: progress.toFixed(3),
+ index: Math.round(progress * (PAGES.length - 1))
+ })}
);
@@ -143,6 +149,7 @@ function MainSwiperWithContext() {
/** 指示器 Swiper 组件 */
function IndicatorSwiperWithContext() {
+ const { t } = useTranslation('ecosystem');
// 自己是 'indicator',要控制 'main'
const { onSwiper, controlledSwiper } = useSwiperMember('indicator', 'main');
const [progress, setProgress] = useState(0);
@@ -158,7 +165,7 @@ function IndicatorSwiperWithContext() {
return (
- 指示器 Swiper(独立组件)
+ {t('demo.swiper.indicatorIndependent')}
{PAGES.map((page, index) => (
-
@@ -205,14 +212,15 @@ function IndicatorSwiperWithContext() {
/** 方案三:Context 封装 Demo */
export function SwiperSyncDemoContext() {
+ const { t } = useTranslation('ecosystem');
return (
-
方案三:Context 封装模式
+
{t('demo.swiper.method3')}
- 使用 SwiperSyncProvider + useSwiperMember + Controller 模块实现跨组件同步
+ {t('demo.swiper.method3Desc')}
-
+
diff --git a/src/components/wallet/wallet-address-portfolio-view.tsx b/src/components/wallet/wallet-address-portfolio-view.tsx
index 036924f89..e5a9c75cc 100644
--- a/src/components/wallet/wallet-address-portfolio-view.tsx
+++ b/src/components/wallet/wallet-address-portfolio-view.tsx
@@ -78,7 +78,7 @@ export function WalletAddressPortfolioView({
{!tokensSupported && !tokensLoading && (
@@ -101,7 +101,7 @@ export function WalletAddressPortfolioView({
{!transactionsSupported && !transactionsLoading && (
@@ -109,13 +109,13 @@ export function WalletAddressPortfolioView({
(
-
交易历史加载失败
+
{t('transaction:history.loadFailed')}
{error.message}
- 重试
+ {t('common:retry')}
)}
diff --git a/src/components/wallet/wallet-card-carousel.tsx b/src/components/wallet/wallet-card-carousel.tsx
index 40b95161c..500cc6823 100644
--- a/src/components/wallet/wallet-card-carousel.tsx
+++ b/src/components/wallet/wallet-card-carousel.tsx
@@ -1,4 +1,5 @@
import { useCallback, useRef, useEffect, useState } from 'react';
+import { useTranslation } from 'react-i18next';
import type { Priority } from './refraction';
import { Swiper, SwiperSlide } from 'swiper/react';
import { EffectCards } from 'swiper/modules';
@@ -25,7 +26,6 @@ interface WalletCardCarouselProps {
selectedChain: ChainType;
/** 每个钱包的链偏好 (walletId -> chainId) */
chainPreferences?: Record;
- chainNames: Record;
onWalletChange?: (walletId: string) => void;
onCopyAddress?: (address: string) => void;
onOpenChainSelector?: (walletId: string) => void;
@@ -46,7 +46,6 @@ export function WalletCardCarousel({
currentWalletId,
selectedChain,
chainPreferences = {},
- chainNames,
onWalletChange,
onCopyAddress,
onOpenChainSelector,
@@ -57,9 +56,11 @@ export function WalletCardCarousel({
onOpenAddressTransactions,
className,
}: WalletCardCarouselProps) {
+ const { t } = useTranslation(['home', 'wallet', 'common']);
const swiperRef = useRef(null);
const { getWalletTheme } = useWalletTheme();
const chainIconUrls = useChainIconUrls();
+ // ... rest of the component
// 找到当前钱包的索引
const currentIndex = wallets.findIndex((w) => w.id === currentWalletId);
@@ -117,7 +118,7 @@ export function WalletCardCarousel({
className="bg-primary text-primary-foreground hover:bg-primary/90 absolute top-0 left-4 z-10 flex items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium backdrop-blur-sm transition-colors"
>
- {wallets.length} 个钱包
+ {t('wallet:carousel.walletCount', { count: wallets.length })}
)}
@@ -142,13 +143,13 @@ export function WalletCardCarousel({
{onOpenAddressBalance && (
- 地址余额查询
+ {t('wallet:menu.addressBalanceQuery')}
)}
{onOpenAddressTransactions && (
- 地址交易查询
+ {t('wallet:menu.addressTransactionsQuery')}
)}
@@ -182,7 +183,7 @@ export function WalletCardCarousel({
-
+
);
}
diff --git a/src/components/wallet/wallet-config.tsx b/src/components/wallet/wallet-config.tsx
index 301723245..b9e8135e7 100644
--- a/src/components/wallet/wallet-config.tsx
+++ b/src/components/wallet/wallet-config.tsx
@@ -6,7 +6,7 @@ import { useChainIconUrls } from '@/hooks/useChainIconUrls';
import { WalletCard } from '@/components/wallet/wallet-card';
import { Button } from '@/components/ui/button';
import { useWallets, useSelectedChain, walletActions, type ChainType, useLanguage } from '@/stores';
-import { generateWalletName } from '@/lib/wallet-utils';
+import { getRandomWalletWord } from '@/lib/wallet-utils';
import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from '@/components/ui/input-group';
import { useFlow } from '@/stackflow';
import {
@@ -258,7 +258,10 @@ export function WalletConfig({ mode, walletId, onEditOnlyComplete, className }:
setEditName(generateWalletName(currentLanguage, t('onboarding:create.walletSuffix')))}
+ onClick={() => setEditName(t('onboarding:create.generatedNamePattern', {
+ word: getRandomWalletWord(currentLanguage),
+ suffix: t('onboarding:create.walletSuffix'),
+ }))}
title={t('wallet:randomName')}
>
diff --git a/src/i18n/i18next.d.ts b/src/i18n/i18next.d.ts
index 9af7ffd9e..876c060fd 100644
--- a/src/i18n/i18next.d.ts
+++ b/src/i18n/i18next.d.ts
@@ -4,6 +4,7 @@ import type authorize from './locales/zh-CN/authorize.json'
import type common from './locales/zh-CN/common.json'
import type currency from './locales/zh-CN/currency.json'
import type dweb from './locales/zh-CN/dweb.json'
+import type ecosystem from './locales/zh-CN/ecosystem.json'
import type empty from './locales/zh-CN/empty.json'
import type error from './locales/zh-CN/error.json'
import type guide from './locales/zh-CN/guide.json'
@@ -28,6 +29,7 @@ declare module 'i18next' {
common: typeof common
currency: typeof currency
dweb: typeof dweb
+ ecosystem: typeof ecosystem
empty: typeof empty
error: typeof error
guide: typeof guide
diff --git a/src/i18n/locales/ar/common.json b/src/i18n/locales/ar/common.json
index 6e95e95fc..990817b44 100644
--- a/src/i18n/locales/ar/common.json
+++ b/src/i18n/locales/ar/common.json
@@ -28,6 +28,7 @@
"selectWallet": "اختر المحفظة",
"showPassword": "إظهار كلمة المرور",
"skipToMain": "انتقل إلى المحتوى الرئيسي",
+ "tabEcosystem": "النظام البيئي",
"tabHistory": "سجل المعاملات",
"tabHome": "الرئيسية",
"tabSettings": "الإعدادات",
@@ -38,9 +39,9 @@
"unknownApp": "تطبيق غير معروف"
},
"acceptExchange": "Accept exchange",
- "account": "[MISSING:ar] 用户",
- "accountFromMime": "[MISSING:ar] account from mime",
- "accountWorks": "[MISSING:ar] account works!",
+ "account": "المستخدم",
+ "accountFromMime": "account from mime",
+ "accountWorks": "account works!",
"acquisitionTime": "Acquisition time",
"add": "Add",
"addressBook": {
@@ -88,7 +89,7 @@
"all": "All",
"allNetwork": "All network",
"alreadySet": "Already set",
- "appIsAboutToReload": "[MISSING:ar] 应用程序即将重新加载",
+ "appIsAboutToReload": "سيتم إعادة تحميل التطبيق",
"appRestartPleaseWait": "App restart, please wait.",
"appShortName": "BFM Pay",
"appVersion": "V",
@@ -98,24 +99,38 @@
"bandwidth": "Bandwidth",
"beSureToKeepThePrivateKeyInASafePlaceIfThePrivateKeyIsLostItCannotBeRetrieved": "Be sure to keep the private key in a safe place. If the private key is lost,it cannot be retrieved",
"belongingAlbum": "Belonging album",
- "bgPrimary": "[MISSING:ar] bg-primary",
+ "bgPrimary": "bg-primary",
"bip39Index": "Index",
"byContinuingToUseItYouAgreeToTheUserAgreement": "By continuing to use it, you agree to the 《User Agreement》",
"cancel": "Cancel",
- "cardWorks": "[MISSING:ar] card works!",
+ "cardWorks": "card works!",
"certificate": "Certificate",
- "clickToCopy": "[MISSING:ar] 点击复制",
- "clickToShowTheQr": "[MISSING:ar] 点开显示二维码",
+ "chains": {
+ "bfchainv2": "BFChain V2",
+ "bfmeta": "BFMeta",
+ "binance": "BSC",
+ "bitcoin": "Bitcoin",
+ "biwmeta": "BIWMeta",
+ "btgmeta": "BTGMeta",
+ "ccchain": "CCChain",
+ "ethereum": "Ethereum",
+ "ethmeta": "ETHMeta",
+ "malibu": "Malibu",
+ "pmchain": "PMChain",
+ "tron": "Tron"
+ },
+ "clickToCopy": "انقر للنسخ",
+ "clickToShowTheQr": "انقر لعرض رمز QR",
"clickToShowTheQrCodeOfThePrivateKey": "Click to show the QR code of the private key",
"close": "Close",
- "codeOfThePrivateKey": "[MISSING:ar] 私钥的十六进制码",
- "comingSoonStayTuned": "[MISSING:ar] 即将上线,敬请期待",
+ "codeOfThePrivateKey": "الشفرة السداسية للمفتاح الخاص",
+ "comingSoonStayTuned": "قريبًا",
"comprehensiveEncryption": "Comprehensive <br /> encryption",
"confirm": "Confirm",
"confirmBackedUp": "Confirm Backed Up",
"confirmToDelete": "Confirm to delete ?",
"confirmToTurnOffTouchId": "Confirm to turn off Touch ID?",
- "confirmToTurnOffVerification": "[MISSING:ar] 确认要关闭验证吗?",
+ "confirmToTurnOffVerification": "هل تريد إيقاف التحقق؟",
"contact": {
"add": "إضافة",
"addAddress": "إضافة عنوان",
@@ -138,6 +153,10 @@
"selectContact": "اختر جهة اتصال",
"viewAll": "عرض جميع جهات الاتصال"
},
+ "contactCard": {
+ "scanToAdd": "امسح لإضافة جهة اتصال",
+ "transferToMe": "امسح للتحويل إليّ"
+ },
"continue": "Continue",
"contractMethods": "Contract methods",
"contractRiskWarning": "The contract carries a certain level of risk. Users are requested to confirm the security of the contract code themselves. If authorized, the risk will be confirmed",
@@ -150,14 +169,30 @@
"copyToClipboard": "Copied to clipboard",
"couldBeWithin_30Seconds": "Could be within 30 seconds",
"creator": "Creator",
+ "date": {
+ "format": "{{weekday}}، {{day}} {{month}}"
+ },
"delete": "Delete",
"destroy": "Destroy",
"done": "Done",
"download": "تحميل",
- "dpInTab": "[MISSING:ar] dp",
+ "dpInTab": "dp",
"dpName": "DP Name",
"dpType": "Type",
"dueToTheUpgradeOfTheNewVersionOf_{appName}Tips": "Due to the upgrade of the new version of , which optimizes the wallet structure and interaction logic, the old data will be modified as follows.",
+ "ecosystem": {
+ "appStack": "مجموعة التطبيقات",
+ "chainNotSupported": "السلسلة غير مدعومة",
+ "goToDiscover": "استكشف صفحة الاكتشاف",
+ "menu": {
+ "detail": "التفاصيل",
+ "open": "فتح",
+ "remove": "إزالة"
+ },
+ "noAppsUsed": "لم تستخدم أي تطبيقات بعد",
+ "runningApps": "التطبيقات قيد التشغيل",
+ "stackViewHints": "اسحب للتبديل · اضغط للفتح · اسحب للأعلى للإغلاق"
+ },
"edit": "Edit",
"energy": "Energy",
"english": "English",
@@ -167,7 +202,7 @@
"enterPlaintextPrivateKey": "Enter plaintext private Key",
"enterPrivateKey": "Enter private key",
"enterTheCorrectFormat": "Enter the correct format",
- "env": "[MISSING:ar] env",
+ "env": "env",
"estimated_1Minute": "Estimated 1 minute",
"event": "Event",
"eventContent": "Event Content",
@@ -177,14 +212,14 @@
"fastest": "Fastest",
"favorite": "إضافة للمفضلة",
"fillableMemo": "Fillable Memo",
- "finish": "[MISSING:ar] 完成",
+ "finish": "تم",
"firstTimeToUse": "First time to use",
"freeze": "Freeze",
"from": "From",
"frozen": "Frozen",
"get_(estimate)": "Get(estimate)",
- "goHome": "[MISSING:ar] 主页",
- "goToCosmicdp": "[MISSING:ar] 前往 CosmicDP 交易",
+ "goHome": "الرئيسية",
+ "goToCosmicdp": "اذهب إلى CosmicDP",
"goToCosmicdpForTrading": "Go to CosmicDP for trading",
"hint": "Hint",
"history": "History",
@@ -193,12 +228,12 @@
"howItWork": "How it work",
"iGotIt": "I got it !",
"iHaveReadAndAgreedToTheUserAgreement": "I have read and agreed to 《User Agreement》",
- "identityName": "[MISSING:ar] 钱包名称",
+ "identityName": "اسم المحفظة",
"identityNotBackedUp": "Identity Not Backed Up",
"in": "In",
"initateGifts": "Initate gifts",
"initiateExchange": "Initiate exchange",
- "inputIsAnIllegalMenemonic": "[MISSING:ar] 不是合法助记词,请重新输入",
+ "inputIsAnIllegalMenemonic": "عبارة الاسترداد غير صالحة",
"loading": "Loading",
"makeSureNoOneElseIsAroundWhenBackingUp": "Make sure no one else is around when backing up",
"manage": "Manage",
@@ -206,12 +241,26 @@
"memo": "Memo",
"message": "Message",
"methodsParams": "Methods params",
- "mimeInTab": "[MISSING:ar] 我的",
- "mine": "[MISSING:ar] 我的",
+ "mimeInTab": "لي",
+ "mine": "لي",
"modifyIdentityName": "Modify Identity Name",
"modifyName": "Modify name",
"modityIdentityName": "Modify identity Name",
"more": "More",
+ "myCard": {
+ "addWallet": "إضافة محفظة",
+ "changeAvatar": "انقر لتغيير الصورة",
+ "currentChain": "السلسلة الحالية",
+ "defaultName": "بطاقتي",
+ "editUsername": "انقر لتعديل اسم المستخدم",
+ "maxWallets": "حدد {{max}} محفظة كحد أقصى",
+ "noWalletsSelected": "الرجاء تحديد محفظة واحدة على الأقل",
+ "scanToAdd": "امسح لإضافتي كجهة اتصال",
+ "selectWallets": "اختر المحفظة",
+ "title": "بطاقتي",
+ "usernamePlaceholder": "أدخل اسم المستخدم",
+ "walletAddress": "{{wallet}} ({{chain}})"
+ },
"name": "Name",
"navOverview": "Overview",
"network": "Network",
@@ -225,7 +274,7 @@
"nonLimitedEditionDp": "Non Limited edition DP",
"notBackedUp": "Not Backed Up",
"numeric": "numeric",
- "offline": "[MISSING:ar] 离线",
+ "offline": "غير متصل",
"ok": "OK",
"openNewVersion": "Open new version",
"out": "Out",
@@ -238,8 +287,8 @@
"pleaseEnterDpNameOrId": "Please enter DP name or ID",
"pleaseEnterHere": "Please enter here",
"pleaseEnterIdentityName": "Please enter Identity name",
- "pleaseEnterPlaintext": "[MISSING:ar] 请输入明文私钥",
- "pleaseEnterPlaintextPrivatekey": "[MISSING:ar] 请输入明文私钥",
+ "pleaseEnterPlaintext": "أدخل المفتاح الخاص",
+ "pleaseEnterPlaintextPrivatekey": "أدخل المفتاح الخاص",
"pleaseGoToCosmicdpTrading": "Please go to CosmicDP trading",
"pleaseInputTheName": "Please input the name",
"pleaseTryAgainIn_{waiting}Seconds": "Please try again in seconds",
@@ -247,15 +296,16 @@
"privateKey": "Private Key",
"privateMustBeBytesLong": "Private must be bytes long",
"probablyWithin_15Seconds": "Probably within 15 seconds",
- "probablyWithin_30Seconds": "[MISSING:ar] 预计30秒",
+ "probablyWithin_30Seconds": "حوالي 30 ثانية",
"project": "Project",
+ "providerFallback": {
+ "desc": "فشلت جميع الأطراف الموفرة المكونة. يتم عرض القيمة الافتراضية.",
+ "queryFailed": "فشل استعلام {{feature}}",
+ "technicalDetails": "تفاصيل تقنية"
+ },
"publishDate": "Publish Date",
- "quantity": "[MISSING:ar] 数量",
+ "quantity": "الكمية",
"receive": "استلام",
- "contactCard": {
- "scanToAdd": "امسح لإضافة جهة اتصال",
- "transferToMe": "امسح للتحويل إليّ"
- },
"receivingGifts": "Receiving gifts",
"refuse": "Refuse",
"reject": "Reject",
@@ -273,6 +323,7 @@
"reset": "Reset",
"resubmit": "Resubmit",
"retry": "Retry",
+ "retrying": "جارٍ إعادة المحاولة...",
"save": "Save",
"saveQrCode": "Save QR code",
"saveSuccessful": "Saved Successfully",
@@ -285,7 +336,7 @@
"selectNetwork": "Select Network",
"selectionNetwork": "Selection network",
"share": "Share",
- "shareCancel": "[MISSING:ar] 分享取消",
+ "shareCancel": "تم إلغاء المشاركة",
"shareCanceled": "Share canceled",
"shareSuccessful": "Shared Successfully",
"showLess": "Show less",
@@ -300,7 +351,7 @@
"success": "success",
"successful": "Successful",
"tapAgainToExit": "Tap again to exit",
- "test": "[MISSING:ar] test",
+ "test": "test",
"theMaximumLengthOfTheHintIs": "The maximum length of the hint is",
"theMaximumLengthOfTheMemoIsMax_{length}": "The maximum length of the memo is",
"theMaximumLengthOfTheNameIs": "The maximum length of the name is",
@@ -339,12 +390,21 @@
"userAgreement": "User agreement",
"userAvatorAndNikename": "User avatar and nickname",
"validationSucceeded": "Validation succeeded",
- "verifying": "[MISSING:ar] 验证中...",
+ "verifying": "جارٍ التحقق...",
"version": "Version",
"versionUpgrade": "version upgrade",
"viewInBrowser": "View in browser",
"viewPrivateKey": "View private key",
"website": "Website",
+ "weekdays": {
+ "0": "الأحد",
+ "1": "الاثنين",
+ "2": "الثلاثاء",
+ "3": "الأربعاء",
+ "4": "الخميس",
+ "5": "الجمعة",
+ "6": "السبت"
+ },
"welcomeToCot": "Welcome To BFM Pay",
"wellDone": "Well done!",
"words": "words",
@@ -353,4 +413,4 @@
"{{length}}Words": "words",
"中文(简体)": "中文(简体)",
"中文(繁體)": "中文(繁體)"
-}
\ No newline at end of file
+}
diff --git a/src/i18n/locales/ar/ecosystem.json b/src/i18n/locales/ar/ecosystem.json
index d479ee776..8eec083dd 100644
--- a/src/i18n/locales/ar/ecosystem.json
+++ b/src/i18n/locales/ar/ecosystem.json
@@ -1,24 +1,59 @@
{
- "title": "[MISSING:ar] 生态",
- "empty": "[MISSING:ar] 暂无小程序",
- "loading": "[MISSING:ar] 加载中...",
- "notFound": "[MISSING:ar] 小程序不存在",
- "refresh": "[MISSING:ar] 刷新",
+ "title": "النظام البيئي",
+ "empty": "لم يتم العثور على تطبيقات مصغرة",
+ "loading": "جاري التحميل...",
+ "notFound": "التطبيق المصغر غير موجود",
+ "refresh": "تحديث",
"sources": {
- "title": "[MISSING:ar] 可信源管理",
- "add": "[MISSING:ar] 添加订阅",
- "remove": "[MISSING:ar] 移除",
- "empty": "[MISSING:ar] 暂无订阅源"
+ "title": "إدارة المصادر الموثوقة",
+ "add": "إضافة اشتراك",
+ "remove": "إزالة",
+ "empty": "لا توجد مصادر اشتراك"
},
"permissions": {
- "title": "[MISSING:ar] 权限请求",
- "grant": "[MISSING:ar] 授权",
- "deny": "[MISSING:ar] 拒绝",
- "bio_requestAccounts": "[MISSING:ar] 访问钱包地址",
- "bio_selectAccount": "[MISSING:ar] 选择账户",
- "bio_pickWallet": "[MISSING:ar] 选择其他钱包",
- "bio_signMessage": "[MISSING:ar] 签名消息",
- "bio_signTypedData": "[MISSING:ar] 签名数据",
- "bio_sendTransaction": "[MISSING:ar] 发起交易"
+ "title": "طلب إذن",
+ "grant": "منح",
+ "deny": "رفض",
+ "bio_requestAccounts": "الوصول إلى عناوين المحفظة",
+ "bio_selectAccount": "حدد الحساب",
+ "bio_pickWallet": "اختر محفظة أخرى",
+ "bio_signMessage": "توقيع الرسالة",
+ "bio_signTypedData": "توقيع البيانات المكتوبة",
+ "bio_sendTransaction": "بدء المعاملة"
+ },
+ "discover": {
+ "featured": "التطبيقات المميزة",
+ "get": "الحصول",
+ "searchPlaceholder": "البحث عن التطبيقات",
+ "empty": "لا توجد تطبيقات",
+ "recommended": "الموصى بها",
+ "viewAll": "عرض الكل",
+ "hotApps": "التطبيقات الشائعة"
+ },
+ "demo": {
+ "swiper": {
+ "method1": "الطريقة 1: وحدة التحكم (موصى بها)",
+ "method3": "الطريقة 3: وضع غلاف السياق",
+ "method3Desc": "المزامنة عبر المكونات باستخدام SwiperSyncProvider + useSwiperMember + Controller",
+ "main": "Swiper الرئيسي",
+ "indicator": "Swiper المؤشر",
+ "mainIndependent": "Swiper الرئيسي (مكون مستقل)",
+ "indicatorIndependent": "Swiper المؤشر (مكون مستقل)",
+ "goTo": "اذهب إلى {{index}}",
+ "progress": "التقدم",
+ "activeIndex": "الفهرس النشط",
+ "debugCombined": "التقدم: {{progress}} | الفهرس النشط: {{index}}",
+ "debugProgress": "التقدم: {{value}}",
+ "debugActiveIndex": "الفهرس النشط: {{value}}"
+ }
+ },
+ "stack": {
+ "title": "مكدس التطبيقات",
+ "runningApps": "تطبيقات التشغيل",
+ "hints": "اسحب لأعلى للإغلاق"
+ },
+ "capsule": {
+ "more": "المزيد من الخيارات",
+ "close": "إغلاق التطبيق"
}
-}
+}
\ No newline at end of file
diff --git a/src/i18n/locales/ar/home.json b/src/i18n/locales/ar/home.json
index f6cdc38b3..3dd108155 100644
--- a/src/i18n/locales/ar/home.json
+++ b/src/i18n/locales/ar/home.json
@@ -2,14 +2,16 @@
"wallet": {
"addressCopied": "تم نسخ العنوان",
"assets": "الأصول",
- "destroy": "[MISSING:ar] 销毁",
+ "destroy": "حرق",
"noAssets": "لا توجد أصول",
"noAssetsOnChain": "لا توجد رموز على {{chain}}",
"receive": "استلام",
"selectNetwork": "اختر الشبكة",
"send": "إرسال",
- "tokenActions": "[MISSING:ar] 资产操作",
- "transfer": "[MISSING:ar] 转账"
+ "tokenActions": "عمليات الأصول",
+ "tokenBalance": "رصيد التوكن",
+ "transactionHistory": "سجل المعاملات",
+ "transfer": "تحويل"
},
"welcome": {
"createWallet": "إنشاء محفظة جديدة",
diff --git a/src/i18n/locales/ar/notification.json b/src/i18n/locales/ar/notification.json
index 7276e270b..3e978321e 100644
--- a/src/i18n/locales/ar/notification.json
+++ b/src/i18n/locales/ar/notification.json
@@ -1,41 +1,58 @@
{
+ "clear": "مسح",
+ "delete": "حذف",
+ "empty": {
+ "desc": "ستظهر جميع إشعاراتك هنا",
+ "title": "لا توجد إشعارات"
+ },
+ "markAllRead": "تحديد الكل كمقروء",
+ "noUnread": "لا توجد إشعارات غير مقروءة",
+ "pendingTx": {
+ "broadcasted": {
+ "message": "{{type}} {{amount}} {{symbol}} تم البث، في انتظار التأكيد",
+ "messageSimple": "تم بث المعاملة، في انتظار تأكيد الكتلة",
+ "title": "تم بث المعاملة"
+ },
+ "confirmed": {
+ "message": "{{type}} {{amount}} {{symbol}} تم التأكيد بنجاح",
+ "messageSimple": "تم تأكيد المعاملة بنجاح",
+ "title": "تم تأكيد المعاملة"
+ },
+ "failed": {
+ "message": "فشل البث,请重试",
+ "title": "فشلت المعاملة"
+ }
+ },
"permission": {
- "title": "تفعيل الإشعارات",
- "description": "استلام تحديثات حالة المعاملات وتنبيهات الأمان المهمة",
- "enable": "تفعيل الإشعارات",
- "skip": "ليس الآن",
"benefits": {
- "transaction": {
- "title": "حالة المعاملات",
- "description": "احصل على إشعارات فورية للتحويلات وتأكيدات المعاملات"
- },
"instant": {
- "title": "تنبيهات فورية",
- "description": "كن أول من يعرف عند وصول المدفوعات واكتمال المعاملات"
+ "description": "كن أول من يعرف عند وصول المدفوعات واكتمال المعاملات",
+ "title": "تنبيهات فورية"
},
"security": {
- "title": "تنبيهات الأمان",
- "description": "لا تفوت إشعارات أمان الحساب المهمة"
+ "description": "لا تفوت إشعارات أمان الحساب المهمة",
+ "title": "تنبيهات الأمان"
+ },
+ "transaction": {
+ "description": "احصل على إشعارات فورية للتحويلات وتأكيدات المعاملات",
+ "title": "حالة المعاملات"
}
- }
- },
- "title": "مركز الإشعارات",
- "markAllRead": "تحديد الكل كمقروء",
- "unreadCount": "{{count}} غير مقروء",
- "noUnread": "لا توجد إشعارات غير مقروءة",
- "clear": "مسح",
- "delete": "حذف",
- "unread": "غير مقروء",
- "empty": {
- "title": "لا توجد إشعارات",
- "desc": "ستظهر جميع إشعاراتك هنا"
+ },
+ "description": "استلام تحديثات حالة المعاملات وتنبيهات الأمان المهمة",
+ "enable": "تفعيل الإشعارات",
+ "skip": "ليس الآن",
+ "title": "تفعيل الإشعارات"
},
"time": {
+ "daysAgo": "منذ {{count}} يوم",
+ "hoursAgo": "منذ {{count}} ساعة",
"justNow": "الآن",
"minutesAgo": "منذ {{count}} دقيقة",
- "hoursAgo": "منذ {{count}} ساعة",
- "daysAgo": "منذ {{count}} يوم",
"today": "اليوم",
"yesterday": "أمس"
- }
+ },
+ "title": "مركز الإشعارات",
+ "unread": "غير مقروء",
+ "unreadCount": "{{count}} غير مقروء",
+ "viewDetails": "عرض التفاصيل"
}
diff --git a/src/i18n/locales/ar/onboarding.json b/src/i18n/locales/ar/onboarding.json
index c6cf688ac..a7489d3fe 100644
--- a/src/i18n/locales/ar/onboarding.json
+++ b/src/i18n/locales/ar/onboarding.json
@@ -40,6 +40,7 @@
"createFailed": "فشل في إنشاء المحفظة",
"defaultWalletName": "المحفظة الرئيسية",
"walletSuffix": "محفظة",
+ "generatedNamePattern": "{{word}} {{suffix}}",
"enterWallet": "دخول المحفظة",
"form": {
"agreementPrefix": "لقد قرأت ووافقت على",
@@ -122,9 +123,9 @@
"invalidMnemonic": "العبارة السرية غير صالحة، يرجى التحقق من الإملاء",
"nextStep": "التالي",
"success": {
- "description": "[MISSING:ar] 钱包 {{name}} 已成功导入",
- "enterWallet": "[MISSING:ar] 进入钱包",
- "title": "[MISSING:ar] 导入成功"
+ "description": "تم استيراد المحفظة {{name}} بنجاح",
+ "enterWallet": "الدخول للمحفظة",
+ "title": "تم الاستيراد بنجاح"
},
"title": "استيراد المحفظة",
"words12": "12 كلمة",
diff --git a/src/i18n/locales/ar/security.json b/src/i18n/locales/ar/security.json
index 448ae2d44..b3af930bc 100644
--- a/src/i18n/locales/ar/security.json
+++ b/src/i18n/locales/ar/security.json
@@ -64,9 +64,9 @@
"entered": "تم إدخال {{filled}}/{{total}} كلمات"
},
"noBackup": "لا نسخة احتياطية",
- "password": "[MISSING:ar] 密码",
+ "password": "كلمة المرور",
"passwordConfirm": {
- "verifying": "[MISSING:ar] 验证中..."
+ "verifying": "جارٍ التحقق..."
},
"patternLock": {
"clear": "مسح النمط",
@@ -114,7 +114,7 @@
"broadcastSuccess": "تم البث بنجاح",
"confirmDesc": "أدخل كلمة مرور الأمان مرة أخرى للتأكيد",
"confirmPlaceholder": "تأكيد كلمة مرور الأمان",
- "confirmTitle": "[MISSING:ar] 确认安全密码",
+ "confirmTitle": "تأكيد كلمة مرور الأمان",
"feeInfo": "تعيين كلمة مرور الأمان يتطلب رسوم الشبكة",
"inputDesc": "قم بتعيين كلمة مرور أمان لحماية تحويلاتك",
"inputPlaceholder": "أدخل كلمة مرور الأمان",
@@ -139,7 +139,7 @@
"error": "النمط غير صحيح، حاول مرة أخرى",
"unlockDesc": "ارسم نمط قفل المحفظة",
"unlockTitle": "فتح المحفظة",
- "verifyTitle": "[MISSING:ar] 验证钱包",
+ "verifyTitle": "التحقق من المحفظة",
"verifying": "جاري التحقق..."
},
"whenTurnesOnYouCanUseYourFingerprintInsteadOfPassword": "عند التشغيل، سيتم تفعيل قفل البصمة",
diff --git a/src/i18n/locales/ar/settings.json b/src/i18n/locales/ar/settings.json
index 22f683d74..44e676282 100644
--- a/src/i18n/locales/ar/settings.json
+++ b/src/i18n/locales/ar/settings.json
@@ -94,6 +94,7 @@
"clearData": "مسح بيانات التطبيق",
"currency": "العملة",
"language": "اللغة",
+ "myCard": "بطاقتي",
"storage": "التخزين",
"viewMnemonic": "عرض العبارة السرية",
"walletChains": "شبكات المحفظة",
@@ -117,9 +118,9 @@
"basedOn": "بناءً على حصة تخزين المتصفح",
"clearDesc": "مسح جميع البيانات المخزنة محليًا، بما في ذلك المحافظ والإعدادات والذاكرة المؤقتة.",
"clearTitle": "مسح البيانات",
- "goToClear": "[MISSING:ar] 前往清理数据",
- "migrationDesc": "[MISSING:ar] 检测到旧版本数据格式,需要清空本地数据库后才能继续使用。您的助记词和私钥不会受到影响,但需要重新导入钱包。",
- "migrationRequired": "[MISSING:ar] 数据需要迁移",
+ "goToClear": "الذهاب لمسح البيانات",
+ "migrationDesc": "تم اكتشاف تنسيق بيانات قديم، يجب مسح قاعدة البيانات المحلية للمتابعة",
+ "migrationRequired": "يلزم ترحيل البيانات",
"title": "التخزين",
"total": "المساحة الإجمالية",
"unavailable": "تعذر الحصول على معلومات التخزين",
diff --git a/src/i18n/locales/ar/staking.json b/src/i18n/locales/ar/staking.json
index 9295365ee..6cde5f26e 100644
--- a/src/i18n/locales/ar/staking.json
+++ b/src/i18n/locales/ar/staking.json
@@ -19,7 +19,7 @@
"noStakedAssets": "لا توجد أصول مخزنة",
"noTransactions": "لا يوجد سجل معاملات",
"overview": "نظرة عامة",
- "refresh": "[MISSING:ar] 刷新",
+ "refresh": "تحديث",
"searchPlaceholder": "اسم الرمز أو العقد",
"selectChain": "اختر السلسلة",
"selectNetwork": "اختر الشبكة",
diff --git a/src/i18n/locales/ar/transaction.json b/src/i18n/locales/ar/transaction.json
index 6c7cf4ee7..f82b447cf 100644
--- a/src/i18n/locales/ar/transaction.json
+++ b/src/i18n/locales/ar/transaction.json
@@ -49,6 +49,19 @@
"bioforestChainTransactionTypeSetUsername": "Set Username",
"bioforestChainTransactionTypeSignForAssetEntrustment": "Sign For Asset Entrustment",
"bioforestChainTransactionTypeToExchangeAnyMultiAll": "To Exchange Any Multi All",
+ "broadcast": {
+ "accountFrozen": "الحساب مجمد",
+ "alreadyExists": "المعاملة موجودة مسبقًا",
+ "assetNotEnough": "Insufficient asset balance",
+ "assetNotExist": "الأصل غير موجود",
+ "failed": "فشل البث",
+ "feeNotEnough": "Insufficient fee",
+ "forbidden": "العملية محظورة",
+ "invalidParams": "معلمات غير صالحة",
+ "rejected": "Transaction rejected",
+ "timeout": "انتهت مهلة البث، يرجى المحاولة مرة أخرى",
+ "unknown": "Broadcast failed, please try again"
+ },
"certificateTransfer": "Certificate Transfer",
"chainTransfer": "Transfer",
"confirmSheet": {
@@ -66,19 +79,21 @@
"destoryAmount": "Destory amount",
"destoryQuantityCannotBeGreaterThanBalance": "Destory quantity cannot be greater than balance",
"destroyPage": {
- "amountLabel": "[MISSING:ar] 销毁数量",
- "assetLabel": "[MISSING:ar] 销毁资产",
- "confirm": "[MISSING:ar] 确认销毁",
- "noDestroyableAssets": "[MISSING:ar] 暂无可销毁的资产",
- "notSupported": "[MISSING:ar] 当前链不支持资产销毁",
- "resultTitle": "[MISSING:ar] 销毁结果",
- "title": "[MISSING:ar] 销毁",
- "warning": "[MISSING:ar] 销毁操作不可撤销,请仔细核对销毁数量。"
+ "amountLabel": "كمية الحرق",
+ "assetLabel": "أصل الحرق",
+ "confirm": "تأكيد الحرق",
+ "noDestroyableAssets": "لا توجد أصول قابلة للحرق",
+ "notSupported": "السلسلة الحالية不支持资产销毁",
+ "resultTitle": "نتيجة الحرق",
+ "title": "حرق",
+ "warning": "عملية الحرق لا رجعة فيها"
},
"detail": {
"allowance": "Allowance",
"blockHeight": "ارتفاع الكتلة",
"confirmations": "التأكيدات",
+ "confirmedAt": "وقت التأكيد",
+ "confirmedBlockHeight": "كتلة التأكيد",
"contractAddress": "Contract Address",
"copied": "تم النسخ",
"copyHash": "نسخ الهاش",
@@ -90,7 +105,7 @@
"method": "Method",
"network": "الشبكة",
"notFound": "المعاملة غير موجودة أو منتهية الصلاحية",
- "openInExplorer": "[MISSING:ar] 在浏览器中打开",
+ "openInExplorer": "فتح في المتصفح",
"share": "Share",
"spender": "Spender",
"swapFrom": "From",
@@ -136,6 +151,7 @@
"days90": "90 يومًا",
"periodLabel": "الفترة"
},
+ "loadFailed": "فشل تحميل سجل المعاملات",
"noWallet": "يرجى إنشاء أو استيراد محفظة أولاً",
"title": "سجل المعاملات",
"totalRecords": "{{count}} سجل",
@@ -170,6 +186,18 @@
"paymentDetails": "Payment Details",
"paymentInfo": "Payment Info",
"pending": "Pending",
+ "pendingTx": {
+ "broadcasted": "Awaiting confirmation",
+ "broadcasting": "Broadcasting",
+ "clearAllFailed": "فشل المسح",
+ "delete": "Delete",
+ "failed": "Broadcast failed",
+ "retry": "Retry",
+ "retryCount": "Retry count",
+ "title": "Pending Transactions",
+ "viewAll": "عرض جميع المعاملات المعلقة {{count}}",
+ "waitingFor": "انتظرت {{seconds}} ثانية"
+ },
"promptForDuplicateTransfer": "There is an identical transfer that has not arrived, can you wait for the confirmation of the transfer, or continue with a new transfer?",
"receive": "Receive",
"receiveAddress": "Receive address",
@@ -178,27 +206,29 @@
"addressCopied": "تم نسخ العنوان",
"copied": "تم النسخ",
"copyAddress": "نسخ العنوان",
+ "imageSaved": "تم حفظ الصورة",
"networkWarning": "يمكن تحويل أصول شبكة {{chain}} فقط، لا يمكن استرداد الأصول من الشبكات الأخرى",
"receiveAddress": "عنوان الاستلام",
+ "saveImage": "حفظ الصورة",
"scanQrCode": "امسح رمز QR للتحويل إلى هذا العنوان",
"share": "مشاركة",
"shareTitle": "عنوان استلام BFM Pay",
"title": "استلام"
},
"receiver": "Receiver",
- "scanAndTransferTheAsset": "[MISSING:ar] 扫一扫,转账 /",
- "scanAndTransferToMe": "[MISSING:ar] 扫一扫转入 /",
+ "scanAndTransferTheAsset": "امسح للتحويل /",
+ "scanAndTransferToMe": "امسح للاستلام /",
"scanToAssetTypeTransfer": "Scan to transfer ()",
"scanToTransfer": "Scan to transfer",
"selectTransferChain": "Select transfer chain",
"send": "Send",
"sendPage": {
"amountLabel": "المبلغ",
- "assetLabel": "[MISSING:ar] 转账资产",
+ "assetLabel": "تحويل资产",
"cameraPermissionRequired": "مطلوب إذن الكاميرا للمسح",
"continue": "متابعة",
"explorerNotImplemented": "ميزة مستكشف البلوك قادمة قريبًا",
- "fee": "[MISSING:ar] 手续费",
+ "fee": "رسوم المعاملة",
"from": "من",
"networkWarning": "يرجى التأكد من أن عنوان المستلم هو عنوان شبكة {{chain}}. لا يمكن استرداد المرسل إلى الشبكة الخاطئة",
"resultTitle": "نتيجة الإرسال",
@@ -207,10 +237,10 @@
"title": "إرسال",
"toAddressLabel": "عنوان المستلم",
"toAddressPlaceholder": "أدخل عنوان {{chain}}",
- "twoStepSecretDescription": "[MISSING:ar] 该地址已设置支付密码,请输入支付密码确认转账。",
- "twoStepSecretError": "[MISSING:ar] 支付密码错误",
- "twoStepSecretPlaceholder": "[MISSING:ar] 输入支付密码",
- "twoStepSecretTitle": "[MISSING:ar] 需要支付密码"
+ "twoStepSecretDescription": "تم تعيين كلمة مرور الدفع لهذا العنوان",
+ "twoStepSecretError": "كلمة مرور الدفع غير صحيحة",
+ "twoStepSecretPlaceholder": "أدخل كلمة مرور الدفع",
+ "twoStepSecretTitle": "مطلوب كلمة مرور الدفع"
},
"sendResult": {
"back": "رجوع",
@@ -233,10 +263,10 @@
"swap": "Swap",
"theCurrentAddressDoesNotHave_{assettype}AssetsAndCannotBeTransferred": "The current address does not have assets and cannot be transferred.",
"theFrozenAddressCannotBeTransferred": "The frozen address cannot be transferred",
- "theMinimumMinerFeeIs_{fee}": "[MISSING:ar] 本次交易最低矿工费为:",
+ "theMinimumMinerFeeIs_{fee}": "الحد الأدنى لرسوم التعدين لهذه المعاملة:",
"theRecommendedMinerFee_{fee}": "The recommended miner fee is:",
"thisAddressOnlySupportsAssetsPleaseDoNotTransferToOtherPublicChainAssets": "This address only supports assets, please do not transfer to other public chain assets.",
- "thisAddressOnlySupportsEthereumAssetsPleaseDoNotTransferToOtherPublicChainAssets": "[MISSING:ar] 该地址只支持 Ethereum 资产, 请不要转账给其它非兼容的区块链资产。",
+ "thisAddressOnlySupportsEthereumAssetsPleaseDoNotTransferToOtherPublicChainAssets": "هذا العنوان يدعم أصول Ethereum فقط",
"to": "To",
"toAddress": "إلى",
"to_(receive_{asset})": "To(Receive )",
@@ -263,16 +293,18 @@
"tronNetworkFeeLongTips_1": "The network fee will vary according to networksituation, once the transaction is confirmed, the fee cannot be refunded regardless of whether the transaction is successful or not.",
"tronNetworkFeeLongTips_2": "The network fee is charged by the TRON network, and BFM Pay does not charge any fees !",
"txStatus": {
- "created": "Pending Broadcast",
- "createdDesc": "Transaction created, waiting to broadcast...",
+ "autoCloseIn": "الإغلاق التلقائي بعد {{seconds}} ثانية",
"broadcasted": "Broadcast Successful",
"broadcastedDesc": "Transaction broadcasted, awaiting block confirmation...",
"broadcasting": "Broadcasting",
"broadcastingDesc": "Broadcasting transaction to the network...",
+ "closeIn": "إغلاق ({{seconds}}s)",
"confirmed": "Transaction Confirmed",
"confirmedDesc": "Transaction has been confirmed on chain",
"confirming": "Awaiting Confirmation",
"confirmingDesc": "Waiting for block confirmation...",
+ "created": "Pending Broadcast",
+ "createdDesc": "Transaction created, waiting to broadcast...",
"failed": "Transaction Failed",
"failedDesc": "Transaction failed, please try again later",
"viewDetails": "View Details"
@@ -305,23 +337,8 @@
"trust": "Trust",
"unstake": "إلغاء التخزين"
},
- "pendingTx": {
- "title": "Pending Transactions",
- "broadcasting": "Broadcasting",
- "broadcasted": "Awaiting confirmation",
- "failed": "Broadcast failed",
- "retry": "Retry",
- "delete": "Delete",
- "retryCount": "Retry count"
- },
- "broadcast": {
- "assetNotEnough": "Insufficient asset balance",
- "feeNotEnough": "Insufficient fee",
- "rejected": "Transaction rejected",
- "unknown": "Broadcast failed, please try again"
- },
"unstake": "Unstake",
- "viewTransactionDetails": "[MISSING:ar] 查看交易详情",
+ "viewTransactionDetails": "عرض تفاصيل المعاملة",
"youFinallyReceive": "You finally receive",
"youMustReceive_{asset}QuantityGreaterThan_0": "You must receive quantity greater than 0",
"{chainsymbol}IsNotEnoughToCoverFees": "is not enough to cover fees"
diff --git a/src/i18n/locales/ar/wallet.json b/src/i18n/locales/ar/wallet.json
index 0cf5b595b..144e6033e 100644
--- a/src/i18n/locales/ar/wallet.json
+++ b/src/i18n/locales/ar/wallet.json
@@ -4,6 +4,13 @@
"add": "إضافة محفظة",
"defaultName": "محفظتي",
"randomName": "اسم عشوائي",
+ "carousel": {
+ "walletCount": "{{count}} محافظ"
+ },
+ "menu": {
+ "addressBalanceQuery": "استعلام عن رصيد العنوان",
+ "addressTransactionsQuery": "استعلام عن معاملات العنوان"
+ },
"chains": {
"title": "إدارة شبكات المحفظة",
"verifyTitle": "التحقق من قفل المحفظة",
@@ -28,7 +35,7 @@
"allowsGettingTheAddressesOfAllWalletsInTheApplication": "Allows getting the addresses of all wallets in the application",
"allowsToGetTheAddressOfEachNetworkOfTheCurrentWallet": "Allows to get the address of each network of the current wallet",
"alreadyHaveAWallet": "Already have a wallet",
- "alreadyHaveAWalletGoToRestore": "[MISSING:ar] 恢复钱包",
+ "alreadyHaveAWalletGoToRestore": "استعادة المحفظة",
"anytimeAnywhereManageYourDigitalAssets": "Anytime, anywhere <br /> Manage your digital assets",
"applyAddress": "Apply Address",
"areYouSureYouWantToDeleteThisAddress": "Are you sure you want to delete this address?",
@@ -56,7 +63,7 @@
"createDesc": "Generate a new mnemonic to create wallet",
"createEntity": "Create entity",
"createEntityFactory": "Create entity factory",
- "createImport": "[MISSING:ar] 创建 / 导入",
+ "createImport": "إنشاء / استيراد",
"createWallet": "Create Wallet",
"createWallet_{symbol}": "Create Wallet ()",
"created": "Created",
@@ -86,7 +93,7 @@
"edit address": "Edit Address",
"editSheet": {
"cancel": "إلغاء",
- "confirmDelete": "[MISSING:ar] 确认删除",
+ "confirmDelete": "تأكيد الحذف",
"delete": "حذف المحفظة",
"deleteDesc": "لا يمكن التراجع عن هذا الإجراء",
"deleteTitle": "حذف المحفظة",
@@ -98,23 +105,23 @@
"save": "حفظ",
"title": "إعدادات المحفظة",
"verifyFailed": "فشل التحقق",
- "verifying": "[MISSING:ar] 验证中...",
+ "verifying": "جارٍ التحقق...",
"walletName": "اسم المحفظة",
"walletNamePlaceholder": "أدخل اسم المحفظة"
},
"empty": "لا توجد محافظ بعد",
"emptyHint": "انقر على الزر أعلاه لإنشاء أو استيراد محفظة",
- "enterOrPasteTheWalletAddress": "[MISSING:ar] 输入或者粘贴钱包地址",
+ "enterOrPasteTheWalletAddress": "أدخل أو الصق عنوان المحفظة",
"enterTheAddressOf_{chain}": "Enter the address of",
"enterWallet": "Enter wallet",
"exitAllWalletIn_{appName}": "Exit all wallet In",
"exit_{mainwallet}": "Exit """,
"exportPrivateKey": "Export Private Key",
- "exportPrivateKeyTips": "[MISSING:ar] export-private-key-tips",
+ "exportPrivateKeyTips": "export-private-key-tips",
"frozeMainAssetPrealnum": "Frozen Main Asset Prealnum",
"frozenAddressesCannotBeSet": "Frozen addresses cannot be set",
"genesisaddress": "Genesis Address",
- "ifItIsNotBackedUpTheWalletCannotBeRestoredAndAssetLossMayResult": "[MISSING:ar] 若未完成助记词备份,将无法恢复钱包,同时可能造成资产损失。",
+ "ifItIsNotBackedUpTheWalletCannotBeRestoredAndAssetLossMayResult": "إذا لم يتم النسخ الاحتياطي، فقد تفقد أصولك",
"importDesc": "Import existing wallet with mnemonic or key",
"importTheAccountWithThePrivateKey": "Import the account with the private key",
"importTheWalletOfTheAddressAndThePerformTheSigningOperation": "Import the wallet of the address and then perform the signing operation",
@@ -134,8 +141,8 @@
"manageIdentityWallet": "Manage Identity Wallet",
"manageIdentityWallets": "Manage Identity Wallets",
"manageWallet": "Manage Wallet",
- "manageWallets": "[MISSING:ar] 管理钱包",
- "mnageIdentityWallet": "[MISSING:ar] manage-identity-wallet",
+ "manageWallets": "إدارة المحافظ",
+ "mnageIdentityWallet": "manage-identity-wallet",
"modifyAddress": "Modify Address",
"modifyWalletName": "Modify Wallet Name",
"multiChainSupport": "Multi chain <br /> support",
@@ -143,7 +150,7 @@
"newCreateWallet": "Create Wallet",
"nonIdentityAssociateAllChainTips": "The original non-identity wallet will associate all corresponding chains according to the mnemonic phrase;",
"notBackedUp": "Not backed up",
- "notFindCurrentlyActiveWallet": "[MISSING:ar] 未找到当前激活的钱包",
+ "notFindCurrentlyActiveWallet": "لم يتم العثور على المحفظة النشطة",
"notImported": "(Not imported)",
"obtainingThePrivateKeyIsEquivalentToOwningTheWalletAsset": "Obtaining the private key is equivalent to owning the wallet asset",
"pleaseEnterAddress": "Please enter address",
@@ -154,16 +161,16 @@
"receive": "Receive",
"remainAssetPrealnum": "Remain Asset Prealnum",
"restoreIdentity": "Restore Identity",
- "restoreWallet": "[MISSING:ar] 恢复钱包",
+ "restoreWallet": "استعادة المحفظة",
"scanResulitsDoNotMatchAddressRules": "Scan results do not match address rules",
"scan_{chain}AddressQrCode": "Scan address QR code",
"searchForTokenName": "Token Name",
"searchForTokenNameOrContractAddress": "Token Name/Contract Address",
"selectAddressType": "Select Address Type",
"selectAsset": "Select Asset",
- "selectThisAddress": "[MISSING:ar] 选择此地址",
+ "selectThisAddress": "اختر هذا العنوان",
"selectWallet": "Select Wallet",
- "selectWalletTransation": "[MISSING:ar] 选择转账钱包",
+ "selectWalletTransation": "اختر محفظة التحويل",
"selectionChain": "Selection Chain",
"selectionWallet": "Selection Wallet",
"switchingWallets": "Switching wallets",
@@ -175,7 +182,7 @@
"theWalletIsNotBackUpTips": "The wallet is not backed up. If you continue to exit, you may lose the wallet permanently. Are you sure you want to continue?",
"thereIsAnUnbackedUpWalletIn_{appName}Tips": "There is an unbacked up wallet in . If you continue to exit, you may lose the wallet permanently. Are you sure you want to continue?",
"thisRequestDoesNotHaveAMatchingWalletInCotPleaseAddTheCorrespondingWalletFirstAndTryAgain": "This request does not have a matching wallet in BFM Pay. Please add the corresponding wallet first and try again.",
- "toRestoreTheWalletInOrderToEnsureTheSecurityOfThe": "[MISSING:ar] to restore the wallet. In order to ensure the security of the",
+ "toRestoreTheWalletInOrderToEnsureTheSecurityOfThe": "لاستعادة المحفظة، من أجل الأمان",
"to_({chain})": "To()",
"tokenDetail": "Token Detail",
"transfer": "Transfer",
@@ -187,9 +194,9 @@
"walletName": "Wallet Name",
"walletNameMustBe_1_12CharactersLong": "wallet name must be 1~12 characters long",
"walletSettings": "Wallet settings",
- "wallets": "[MISSING:ar] 钱包",
+ "wallets": "المحافظ",
"walletsOriginallyImportedWillBeMergedTips": "Wallets originally imported from different chains with the same mnemonic phrase will be merged;",
- "walletsUnderIdentity": "[MISSING:ar] 身份钱包",
+ "walletsUnderIdentity": "محافظ الهوية",
"willSynchronizeImportIntoThe_{chainname}ChainWithTheSamePrivateKey": "Will synchronize import into the chain with the same private key",
"{assetType}Details": "Details",
"{asset}TotalCirculation": "total circulation"
diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json
index a88ef5ae0..fa7ebe7f0 100644
--- a/src/i18n/locales/en/common.json
+++ b/src/i18n/locales/en/common.json
@@ -33,27 +33,36 @@
"tabSettings": "Settings",
"tabTransfer": "Transfer",
"tabWallet": "Wallet",
+ "tabEcosystem": "Ecosystem",
"tokenDetails": "View {{token}} details",
"transactionDetails": "Transaction details",
"unknownApp": "Unknown app"
},
"acceptExchange": "Accept exchange",
- "account": "[MISSING:en] 用户",
- "accountFromMime": "[MISSING:en] account from mime",
- "accountWorks": "[MISSING:en] account works!",
+ "account": "User",
+ "accountFromMime": "account from mime",
+ "accountWorks": "account works!",
"acquisitionTime": "Acquisition time",
"add": "Add",
"addressBook": {
- "delete": "Delete",
- "deleteConfirm": "Are you sure you want to delete contact \"{{name}}\"?",
- "deleteTitle": "Delete Contact",
- "edit": "Edit",
+ "title": "Address Book",
+ "searchPlaceholder": "Search contacts",
"noContacts": "No contacts yet",
"noResults": "No contacts found",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteTitle": "Delete Contact",
+ "deleteConfirm": "Are you sure you want to delete contact \"{{name}}\"?",
"passwordError": "Incorrect password",
- "searchPlaceholder": "Search contacts",
- "title": "Address Book",
- "verifyFailed": "Verification failed"
+ "verifyFailed": "Verification failed",
+ "addContact": "Add Contact",
+ "namePlaceholder": "Enter contact name",
+ "addresses": "Addresses",
+ "memo": "Memo",
+ "memoPlaceholder": "Add memo (optional)",
+ "shareContact": "Share Contact",
+ "scanToAdd": "Scan to add contact",
+ "changeAvatar": "Click to change avatar"
},
"addressPlaceholder": "Enter or paste address",
"advancedEncryptionTechnologyDigitalWealthIsMoreSecure": "Advanced encryption technology <br /> Digital wealth is more secure",
@@ -62,7 +71,7 @@
"all": "All",
"allNetwork": "All network",
"alreadySet": "Already set",
- "appIsAboutToReload": "[MISSING:en] 应用程序即将重新加载",
+ "appIsAboutToReload": "App is about to reload",
"appRestartPleaseWait": "App restart, please wait.",
"appShortName": "BFM Pay",
"appVersion": "V",
@@ -72,23 +81,23 @@
"bandwidth": "Bandwidth",
"beSureToKeepThePrivateKeyInASafePlaceIfThePrivateKeyIsLostItCannotBeRetrieved": "Be sure to keep the private key in a safe place. If the private key is lost,it cannot be retrieved",
"belongingAlbum": "Belonging album",
- "bgPrimary": "[MISSING:en] bg-primary",
+ "bgPrimary": "bg-primary",
"bip39Index": "Index",
"byContinuingToUseItYouAgreeToTheUserAgreement": "By continuing to use it, you agree to the 《User Agreement》",
"cancel": "Cancel",
- "cardWorks": "[MISSING:en] card works!",
+ "cardWorks": "card works!",
"certificate": "Certificate",
- "clickToShowTheQr": "[MISSING:en] 点开显示二维码",
+ "clickToShowTheQr": "Tap to show QR code",
"clickToShowTheQrCodeOfThePrivateKey": "Click to show the QR code of the private key",
"close": "Close",
- "codeOfThePrivateKey": "[MISSING:en] 私钥的十六进制码",
- "comingSoonStayTuned": "[MISSING:en] 即将上线,敬请期待",
+ "codeOfThePrivateKey": "Hex code of private key",
+ "comingSoonStayTuned": "Coming soon",
"comprehensiveEncryption": "Comprehensive <br /> encryption",
"confirm": "Confirm",
"confirmBackedUp": "Confirm Backed Up",
"confirmToDelete": "Confirm to delete ?",
"confirmToTurnOffTouchId": "Confirm to turn off Touch ID?",
- "confirmToTurnOffVerification": "[MISSING:en] 确认要关闭验证吗?",
+ "confirmToTurnOffVerification": "Confirm to turn off verification?",
"contact": {
"add": "Add",
"addTitle": "Add Contact",
@@ -127,7 +136,7 @@
"delete": "Delete",
"destroy": "Destroy",
"done": "Done",
- "dpInTab": "[MISSING:en] dp",
+ "dpInTab": "dp",
"dpName": "DP Name",
"dpType": "Type",
"dueToTheUpgradeOfTheNewVersionOf_{appName}Tips": "Due to the upgrade of the new version of , which optimizes the wallet structure and interaction logic, the old data will be modified as follows.",
@@ -140,7 +149,7 @@
"enterPlaintextPrivateKey": "Enter plaintext private Key",
"enterPrivateKey": "Enter private key",
"enterTheCorrectFormat": "Enter the correct format",
- "env": "[MISSING:en] env",
+ "env": "env",
"estimated_1Minute": "Estimated 1 minute",
"event": "Event",
"eventContent": "Event Content",
@@ -150,14 +159,14 @@
"fastest": "Fastest",
"favorite": "Favorite",
"fillableMemo": "Fillable Memo",
- "finish": "[MISSING:en] 完成",
+ "finish": "Done",
"firstTimeToUse": "First time to use",
"freeze": "Freeze",
"from": "From",
"frozen": "Frozen",
"get_(estimate)": "Get(estimate)",
- "goHome": "[MISSING:en] 主页",
- "goToCosmicdp": "[MISSING:en] 前往 CosmicDP 交易",
+ "goHome": "Home",
+ "goToCosmicdp": "Go to CosmicDP",
"goToCosmicdpForTrading": "Go to CosmicDP for trading",
"hint": "Hint",
"history": "History",
@@ -166,12 +175,12 @@
"howItWork": "How it work",
"iGotIt": "I got it !",
"iHaveReadAndAgreedToTheUserAgreement": "I have read and agreed to 《User Agreement》",
- "identityName": "[MISSING:en] 钱包名称",
+ "identityName": "Wallet name",
"identityNotBackedUp": "Identity Not Backed Up",
"in": "In",
"initateGifts": "Initate gifts",
"initiateExchange": "Initiate exchange",
- "inputIsAnIllegalMenemonic": "[MISSING:en] 不是合法助记词,请重新输入",
+ "inputIsAnIllegalMenemonic": "Invalid mnemonic, please re-enter",
"loading": "Loading",
"makeSureNoOneElseIsAroundWhenBackingUp": "Make sure no one else is around when backing up",
"manage": "Manage",
@@ -179,8 +188,8 @@
"memo": "Memo",
"message": "Message",
"methodsParams": "Methods params",
- "mimeInTab": "[MISSING:en] 我的",
- "mine": "[MISSING:en] 我的",
+ "mimeInTab": "Mine",
+ "mine": "Mine",
"modifyIdentityName": "Modify Identity Name",
"modifyName": "Modify name",
"modityIdentityName": "Modify identity Name",
@@ -198,7 +207,7 @@
"nonLimitedEditionDp": "Non Limited edition DP",
"notBackedUp": "Not Backed Up",
"numeric": "numeric",
- "offline": "[MISSING:en] 离线",
+ "offline": "Offline",
"ok": "OK",
"openNewVersion": "Open new version",
"out": "Out",
@@ -211,8 +220,8 @@
"pleaseEnterDpNameOrId": "Please enter DP name or ID",
"pleaseEnterHere": "Please enter here",
"pleaseEnterIdentityName": "Please enter Identity name",
- "pleaseEnterPlaintext": "[MISSING:en] 请输入明文私钥",
- "pleaseEnterPlaintextPrivatekey": "[MISSING:en] 请输入明文私钥",
+ "pleaseEnterPlaintext": "Please enter plain text private key",
+ "pleaseEnterPlaintextPrivatekey": "Please enter plain text private key",
"pleaseGoToCosmicdpTrading": "Please go to CosmicDP trading",
"pleaseInputTheName": "Please input the name",
"pleaseTryAgainIn_{waiting}Seconds": "Please try again in seconds",
@@ -220,15 +229,60 @@
"privateKey": "Private Key",
"privateMustBeBytesLong": "Private must be bytes long",
"probablyWithin_15Seconds": "Probably within 15 seconds",
- "probablyWithin_30Seconds": "[MISSING:en] 预计30秒",
+ "probablyWithin_30Seconds": "Estimated 30 seconds",
"project": "Project",
"publishDate": "Publish Date",
- "quantity": "[MISSING:en] 数量",
+ "quantity": "Quantity",
"receive": "Receive",
"contactCard": {
"scanToAdd": "Scan to add contact",
"transferToMe": "Scan to transfer to me"
},
+ "ecosystem": {
+ "runningApps": "Running Apps",
+ "stackViewHints": "Swipe to switch · Tap to open · Swipe up to close",
+ "noAppsUsed": "No apps used yet",
+ "goToDiscover": "Explore the Discover page",
+ "appStack": "App Stack",
+ "chainNotSupported": "Chain not supported",
+ "menu": {
+ "open": "Open",
+ "detail": "Details",
+ "remove": "Remove"
+ }
+ },
+ "chains": {
+ "ethereum": "Ethereum",
+ "bitcoin": "Bitcoin",
+ "tron": "Tron",
+ "binance": "BSC",
+ "bfmeta": "BFMeta",
+ "ccchain": "CCChain",
+ "pmchain": "PMChain",
+ "bfchainv2": "BFChain V2",
+ "btgmeta": "BTGMeta",
+ "biwmeta": "BIWMeta",
+ "ethmeta": "ETHMeta",
+ "malibu": "Malibu"
+ },
+ "weekdays": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "date": {
+ "format": "{{weekday}}, {{month}} {{day}}"
+ },
+ "providerFallback": {
+ "queryFailed": "{{feature}} query failed",
+ "desc": "All configured providers failed. Showing default value.",
+ "technicalDetails": "Technical details"
+ },
+ "retry": "Retry",
"receivingGifts": "Receiving gifts",
"refuse": "Refuse",
"reject": "Reject",
@@ -245,7 +299,6 @@
"requsetTwo": "Request two",
"reset": "Reset",
"resubmit": "Resubmit",
- "retry": "Retry",
"save": "Save",
"saving": "Saving...",
"saved": "Saved",
@@ -259,7 +312,7 @@
"selectionNetwork": "Selection network",
"share": "Share",
"download": "Download",
- "shareCancel": "[MISSING:en] 分享取消",
+ "shareCancel": "Share cancelled",
"shareCanceled": "Share canceled",
"shareSuccessful": "Shared Successfully",
"showLess": "Show less",
@@ -274,7 +327,7 @@
"success": "success",
"successful": "Successful",
"tapAgainToExit": "Tap again to exit",
- "test": "[MISSING:en] test",
+ "test": "test",
"theMaximumLengthOfTheHintIs": "The maximum length of the hint is",
"theMaximumLengthOfTheMemoIsMax_{length}": "The maximum length of the memo is",
"theMaximumLengthOfTheNameIs": "The maximum length of the name is",
@@ -285,13 +338,13 @@
"thereAreCurrentlyNoSearchResultsAvailable": "There are currently no search results available",
"thisIsTheLatestVersion": "This is the latest version",
"time": {
- "daysAgo": "{{count}} days ago",
- "daysLater": "In {{count}} days",
- "hoursAgo": "{{count}} hr ago",
- "hoursLater": "In {{count}} hr",
"justNow": "Just now",
"minutesAgo": "{{count}} min ago",
+ "hoursAgo": "{{count}} hr ago",
+ "daysAgo": "{{count}} days ago",
"minutesLater": "In {{count}} min",
+ "hoursLater": "In {{count}} hr",
+ "daysLater": "In {{count}} days",
"today": "Today",
"yesterday": "Yesterday"
},
@@ -328,26 +381,6 @@
"{{length}}Words": "words",
"中文(简体)": "中文(简体)",
"中文(繁體)": "中文(繁體)",
- "addressBook": {
- "title": "Address Book",
- "searchPlaceholder": "Search contacts",
- "noContacts": "No contacts yet",
- "noResults": "No contacts found",
- "edit": "Edit",
- "delete": "Delete",
- "deleteTitle": "Delete Contact",
- "deleteConfirm": "Are you sure you want to delete contact \"{{name}}\"?",
- "passwordError": "Incorrect password",
- "verifyFailed": "Verification failed",
- "addContact": "Add Contact",
- "namePlaceholder": "Enter contact name",
- "addresses": "Addresses",
- "memo": "Memo",
- "memoPlaceholder": "Add memo (optional)",
- "shareContact": "Share Contact",
- "scanToAdd": "Scan to add contact",
- "changeAvatar": "Click to change avatar"
- },
"myCard": {
"title": "My Business Card",
"defaultName": "My Card",
@@ -362,17 +395,6 @@
"walletAddress": "{{wallet}} ({{chain}})",
"currentChain": "Current chain"
},
- "time": {
- "justNow": "Just now",
- "minutesAgo": "{{count}} min ago",
- "hoursAgo": "{{count}} hr ago",
- "daysAgo": "{{count}} days ago",
- "minutesLater": "In {{count}} min",
- "hoursLater": "In {{count}} hr",
- "daysLater": "In {{count}} days",
- "today": "Today",
- "yesterday": "Yesterday"
- },
"addressLookup": {
"balanceTitle": "Address Balance",
"transactionsTitle": "Address Transactions",
diff --git a/src/i18n/locales/en/ecosystem.json b/src/i18n/locales/en/ecosystem.json
index 8d8d20237..58447403f 100644
--- a/src/i18n/locales/en/ecosystem.json
+++ b/src/i18n/locales/en/ecosystem.json
@@ -1,24 +1,59 @@
{
- "title": "[MISSING:en] 生态",
- "empty": "[MISSING:en] 暂无小程序",
- "loading": "[MISSING:en] 加载中...",
- "notFound": "[MISSING:en] 小程序不存在",
- "refresh": "[MISSING:en] 刷新",
+ "title": "Ecosystem",
+ "empty": "No miniapps found",
+ "loading": "Loading...",
+ "notFound": "Miniapp not found",
+ "refresh": "Refresh",
"sources": {
- "title": "[MISSING:en] 可信源管理",
- "add": "[MISSING:en] 添加订阅",
- "remove": "[MISSING:en] 移除",
- "empty": "[MISSING:en] 暂无订阅源"
+ "title": "Trusted Sources",
+ "add": "Add Subscription",
+ "remove": "Remove",
+ "empty": "No subscription sources"
},
"permissions": {
- "title": "[MISSING:en] 权限请求",
- "grant": "[MISSING:en] 授权",
- "deny": "[MISSING:en] 拒绝",
- "bio_requestAccounts": "[MISSING:en] 访问钱包地址",
- "bio_selectAccount": "[MISSING:en] 选择账户",
- "bio_pickWallet": "[MISSING:en] 选择其他钱包",
- "bio_signMessage": "[MISSING:en] 签名消息",
- "bio_signTypedData": "[MISSING:en] 签名数据",
- "bio_sendTransaction": "[MISSING:en] 发起交易"
+ "title": "Permission Request",
+ "grant": "Grant",
+ "deny": "Deny",
+ "bio_requestAccounts": "Access wallet addresses",
+ "bio_selectAccount": "Select account",
+ "bio_pickWallet": "Select another wallet",
+ "bio_signMessage": "Sign message",
+ "bio_signTypedData": "Sign typed data",
+ "bio_sendTransaction": "Send Transaction"
+ },
+ "discover": {
+ "featured": "Featured",
+ "get": "Get",
+ "searchPlaceholder": "Search apps",
+ "empty": "No apps found",
+ "recommended": "Recommended",
+ "viewAll": "View All",
+ "hotApps": "Hot Apps"
+ },
+ "demo": {
+ "swiper": {
+ "method1": "Method 1: Controller Module (Recommended)",
+ "method3": "Method 3: Context Wrapper Mode",
+ "method3Desc": "Synchronize across components using SwiperSyncProvider + useSwiperMember + Controller",
+ "main": "Main Swiper",
+ "indicator": "Indicator Swiper",
+ "mainIndependent": "Main Swiper (Independent Component)",
+ "indicatorIndependent": "Indicator Swiper (Independent Component)",
+ "goTo": "Go to {{index}}",
+ "progress": "Progress",
+ "activeIndex": "Active Index",
+ "debugCombined": "Progress: {{progress}} | Active Index: {{index}}",
+ "debugProgress": "Progress: {{value}}",
+ "debugActiveIndex": "Active Index: {{value}}"
+ }
+ },
+ "stack": {
+ "title": "App Stack",
+ "runningApps": "Running Apps",
+ "hints": "Swipe up to close"
+ },
+ "capsule": {
+ "more": "More Options",
+ "close": "Close App"
}
-}
+}
\ No newline at end of file
diff --git a/src/i18n/locales/en/home.json b/src/i18n/locales/en/home.json
index 760d06a12..dea6470b5 100644
--- a/src/i18n/locales/en/home.json
+++ b/src/i18n/locales/en/home.json
@@ -1,20 +1,22 @@
{
- "welcome": {
- "title": "Welcome to BFM Pay",
- "subtitle": "Create or import a wallet to get started",
- "createWallet": "Create New Wallet",
- "importWallet": "Import Existing Wallet"
- },
"wallet": {
- "send": "Send",
- "receive": "Receive",
+ "addressCopied": "Address copied",
"assets": "Assets",
+ "destroy": "Destroy",
"noAssets": "No Assets",
"noAssetsOnChain": "No tokens on {{chain}}",
+ "receive": "Receive",
"selectNetwork": "Select Network",
- "addressCopied": "Address copied",
+ "send": "Send",
"tokenActions": "Token Actions",
- "transfer": "Transfer",
- "destroy": "Destroy"
+ "tokenBalance": "Token Balance",
+ "transactionHistory": "Transaction History",
+ "transfer": "Transfer"
+ },
+ "welcome": {
+ "createWallet": "Create New Wallet",
+ "importWallet": "Import Existing Wallet",
+ "subtitle": "Create or import a wallet to get started",
+ "title": "Welcome to BFM Pay"
}
}
diff --git a/src/i18n/locales/en/onboarding.json b/src/i18n/locales/en/onboarding.json
index baac4b4d3..b712be7ed 100644
--- a/src/i18n/locales/en/onboarding.json
+++ b/src/i18n/locales/en/onboarding.json
@@ -42,6 +42,7 @@
"createFailed": "Failed to create wallet",
"defaultWalletName": "Main Wallet",
"walletSuffix": "Wallet",
+ "generatedNamePattern": "{{word}} {{suffix}}",
"enterWallet": "Enter Wallet",
"themeTitle": "Choose Card Theme",
"themeSubtitle": "Select a theme color for your wallet card",
diff --git a/src/i18n/locales/en/security.json b/src/i18n/locales/en/security.json
index 466db8c45..cddf822a8 100644
--- a/src/i18n/locales/en/security.json
+++ b/src/i18n/locales/en/security.json
@@ -64,9 +64,9 @@
"entered": "Entered {{filled}}/{{total}} words"
},
"noBackup": "No Backup",
- "password": "[MISSING:en] 密码",
+ "password": "Password",
"passwordConfirm": {
- "verifying": "[MISSING:en] 验证中..."
+ "verifying": "Verifying..."
},
"patternLock": {
"clear": "Clear pattern",
@@ -114,7 +114,7 @@
"broadcastSuccess": "Broadcast Successful",
"confirmDesc": "Enter security password again to confirm",
"confirmPlaceholder": "Confirm security password",
- "confirmTitle": "[MISSING:en] 确认安全密码",
+ "confirmTitle": "Confirm Security Password",
"feeInfo": "Setting security password requires a network fee",
"inputDesc": "Set a security password to protect your transfers",
"inputPlaceholder": "Enter security password",
@@ -139,7 +139,7 @@
"error": "Incorrect pattern, please try again",
"unlockDesc": "Draw your wallet lock pattern",
"unlockTitle": "Unlock Wallet",
- "verifyTitle": "[MISSING:en] 验证钱包",
+ "verifyTitle": "Verify Wallet",
"verifying": "Verifying..."
},
"whenTurnesOnYouCanUseYourFingerprintInsteadOfPassword": "When turned on, the fingerprint lock will be enabled",
diff --git a/src/i18n/locales/en/transaction.json b/src/i18n/locales/en/transaction.json
index 06366f256..f3baaaed2 100644
--- a/src/i18n/locales/en/transaction.json
+++ b/src/i18n/locales/en/transaction.json
@@ -1,79 +1,4 @@
{
- "transfer": {
- "quickTransfer": "Quick Transfer",
- "quickTransferDesc": "Select recent contact or enter new address",
- "recentContacts": "Recent Contacts",
- "newTransfer": "New Transfer",
- "transferHistory": "Transfer History",
- "transferTo": "Transfer to {{name}}",
- "today": "Today",
- "yesterday": "Yesterday",
- "daysAgo": "{{days}} days ago"
- },
- "receivePage": {
- "title": "Receive",
- "scanQrCode": "Scan QR code to transfer to this address",
- "receiveAddress": "Receive Address",
- "copied": "Copied",
- "copyAddress": "Copy Address",
- "share": "Share",
- "shareTitle": "BFM Pay Receive Address",
- "addressCopied": "Address copied",
- "networkWarning": "Only {{chain}} network assets can be transferred in, assets from other networks cannot be recovered",
- "saveImage": "Save Image",
- "imageSaved": "Image saved"
- },
- "sendResult": {
- "success": "Transfer Successful",
- "failed": "Transfer Failed",
- "pending": "Processing...",
- "sentTo": "Sent to {{address}}",
- "txHash": "Transaction Hash:",
- "viewInBrowser": "View in Browser",
- "retry": "Retry",
- "done": "Done",
- "back": "Back"
- },
- "confirmSheet": {
- "title": "Confirm Transfer",
- "toAddress": "Recipient Address",
- "copied": "Copied",
- "copyAddress": "Copy Address",
- "networkFee": "Network Fee",
- "cancel": "Cancel",
- "confirming": "Confirming...",
- "confirm": "Confirm Transfer"
- },
- "sendPage": {
- "title": "Send",
- "resultTitle": "Send Result",
- "from": "From",
- "toAddressLabel": "Recipient Address",
- "toAddressPlaceholder": "Enter {{chain}} address",
- "amountLabel": "Amount",
- "assetLabel": "Transfer Asset",
- "networkWarning": "Please ensure the recipient address is a {{chain}} network address. Sending to the wrong network cannot be recovered",
- "continue": "Continue",
- "cameraPermissionRequired": "Camera permission required for scanning",
- "scanSuccess": "Scan successful",
- "scanFailed": "Scan failed, please enter manually",
- "explorerNotImplemented": "Block explorer feature coming soon",
- "twoStepSecretTitle": "Security Password Required",
- "twoStepSecretDescription": "This address has a security password set. Please enter your security password to confirm the transfer.",
- "twoStepSecretPlaceholder": "Enter security password",
- "twoStepSecretError": "Incorrect security password",
- "fee": "Fee"
- },
- "destroyPage": {
- "title": "Destroy",
- "resultTitle": "Destroy Result",
- "assetLabel": "Asset to Destroy",
- "amountLabel": "Destroy Amount",
- "warning": "This action cannot be undone. Please verify the amount before confirming.",
- "confirm": "Confirm Destroy",
- "notSupported": "Asset destruction not supported on this chain",
- "noDestroyableAssets": "No assets available for destruction"
- },
"aboutFee": "About Fee",
"amount": "Amount",
"amountShouldBe_{min}-{max}-{assettype}": "Amount should be -",
@@ -124,55 +49,71 @@
"bioforestChainTransactionTypeSetUsername": "Set Username",
"bioforestChainTransactionTypeSignForAssetEntrustment": "Sign For Asset Entrustment",
"bioforestChainTransactionTypeToExchangeAnyMultiAll": "To Exchange Any Multi All",
+ "broadcast": {
+ "accountFrozen": "Account is frozen",
+ "alreadyExists": "Transaction already exists",
+ "assetNotEnough": "Insufficient asset balance",
+ "assetNotExist": "Asset does not exist",
+ "failed": "Broadcast failed",
+ "feeNotEnough": "Insufficient fee",
+ "forbidden": "Operation forbidden",
+ "invalidParams": "Invalid parameters",
+ "rejected": "Transaction rejected",
+ "timeout": "Broadcast timeout, please retry",
+ "unknown": "Broadcast failed, please try again"
+ },
"certificateTransfer": "Certificate Transfer",
"chainTransfer": "Transfer",
+ "confirmSheet": {
+ "cancel": "Cancel",
+ "confirm": "Confirm Transfer",
+ "confirming": "Confirming...",
+ "copied": "Copied",
+ "copyAddress": "Copy Address",
+ "networkFee": "Network Fee",
+ "title": "Confirm Transfer",
+ "toAddress": "Recipient Address"
+ },
"confirmed": "Confirmed",
"contractTransactionData": "Contract transaction data",
"destoryAmount": "Destory amount",
"destoryQuantityCannotBeGreaterThanBalance": "Destory quantity cannot be greater than balance",
+ "destroyPage": {
+ "amountLabel": "Destroy Amount",
+ "assetLabel": "Asset to Destroy",
+ "confirm": "Confirm Destroy",
+ "noDestroyableAssets": "No assets available for destruction",
+ "notSupported": "Asset destruction not supported on this chain",
+ "resultTitle": "Destroy Result",
+ "title": "Destroy",
+ "warning": "This action cannot be undone. Please verify the amount before confirming."
+ },
"detail": {
+ "allowance": "Allowance",
"blockHeight": "Block Height",
"confirmations": "Confirmations",
+ "confirmedAt": "Confirmed At",
+ "confirmedBlockHeight": "Confirmed Block",
+ "contractAddress": "Contract Address",
"copied": "Copied",
"copyHash": "Copy Hash",
- "contractAddress": "Contract Address",
- "spender": "Spender",
- "allowance": "Allowance",
"fee": "Fee",
"fromAddress": "From Address",
"hash": "Transaction Hash",
"info": "Transaction Info",
+ "invalidData": "Failed to parse transaction data",
"method": "Method",
"network": "Network",
- "invalidData": "Failed to parse transaction data",
"notFound": "Transaction not found or expired",
+ "openInExplorer": "Open in Explorer",
+ "share": "Share",
+ "spender": "Spender",
"swapFrom": "From",
"swapTo": "To",
"time": "Time",
"title": "Transaction Details",
"toAddress": "To Address",
- "viewExplorer": "View in Explorer",
- "openInExplorer": "Open in Explorer",
- "share": "Share",
- "confirmedBlockHeight": "Confirmed Block",
- "confirmedAt": "Confirmed At"
- },
- "method": {
- "approve": "Approve",
- "transfer": "Transfer",
- "swap": "Swap",
- "swapExactTokensForETH": "Swap Tokens for ETH",
- "swapExactTokensForTokens": "Swap Tokens",
- "swapExactETHForTokens": "Swap ETH for Tokens",
- "multicall": "Multi-call",
- "execute": "Execute",
- "deposit": "Deposit",
- "withdraw": "Withdraw",
- "stake": "Stake",
- "unstake": "Unstake",
- "claim": "Claim",
- "mint": "Mint",
- "burn": "Burn"
+ "viewExplorer": "View in Explorer"
},
"dpTransactionDetails": "DP Details",
"easyTransfer": "Easy Transfer",
@@ -182,22 +123,35 @@
"estimatedFee": "Estimated Fee",
"failed": "Failed",
"fee": "Fee",
+ "feeEdit": {
+ "belowMinFee": "Fee cannot be lower than minimum fee {{minFee}} {{symbol}}",
+ "currentFee": "Current Fee",
+ "customFee": "Custom Fee",
+ "invalidFee": "Please enter a valid fee",
+ "minFee": "Minimum Fee",
+ "presetFast": "Fast",
+ "presetMin": "Minimum",
+ "presetRecommend": "Recommended",
+ "title": "Edit Network Fee"
+ },
"finallyReceive": "Finally receive:",
"forOvertimeTransactionTips": "For overtime transactions, you can check whether the transaction is successful through the blockchain explorer.",
"from": "From",
+ "fromAddress": "From",
"getAssetTypeBalance": "Get asset type balance",
"history": {
"emptyDesc": "No transactions found with current filters",
"emptyTitle": "No transactions",
"filter": {
- "chainLabel": "Chain",
- "periodLabel": "Period",
"allChains": "All Chains",
"allTime": "All",
+ "chainLabel": "Chain",
"days30": "30 Days",
"days7": "7 Days",
- "days90": "90 Days"
+ "days90": "90 Days",
+ "periodLabel": "Period"
},
+ "loadFailed": "Transaction History加载失败",
"noWallet": "Please create or import a wallet first",
"title": "Transaction History",
"totalRecords": "{{count}} records",
@@ -208,6 +162,23 @@
"initiateTransfer": "Initiate Transfer",
"insufficientBalanceIn_{symbol}": "Insufficient balance in",
"insufficientBalanceUnableToConductTransactions": "Insufficient balance, unable to conduct transactions",
+ "method": {
+ "approve": "Approve",
+ "burn": "Burn",
+ "claim": "Claim",
+ "deposit": "Deposit",
+ "execute": "Execute",
+ "mint": "Mint",
+ "multicall": "Multi-call",
+ "stake": "Stake",
+ "swap": "Swap",
+ "swapExactETHForTokens": "Swap ETH for Tokens",
+ "swapExactTokensForETH": "Swap Tokens for ETH",
+ "swapExactTokensForTokens": "Swap Tokens",
+ "transfer": "Transfer",
+ "unstake": "Unstake",
+ "withdraw": "Withdraw"
+ },
"minerFee": "Miner fee",
"minnerFee": "Miner fee",
"newTransfer": "New Transfer",
@@ -215,17 +186,73 @@
"paymentDetails": "Payment Details",
"paymentInfo": "Payment Info",
"pending": "Pending",
+ "pendingTx": {
+ "broadcasted": "Awaiting confirmation",
+ "broadcasting": "Broadcasting",
+ "clearAllFailed": "Clear failed",
+ "delete": "Delete",
+ "failed": "Broadcast failed",
+ "retry": "Retry",
+ "retryCount": "Retry count",
+ "title": "Pending Transactions",
+ "viewAll": "View all {{count}} pending transactions",
+ "waitingFor": "Waiting for {{seconds}}s"
+ },
"promptForDuplicateTransfer": "There is an identical transfer that has not arrived, can you wait for the confirmation of the transfer, or continue with a new transfer?",
"receive": "Receive",
"receiveAddress": "Receive address",
"receiveCannotBeTheSame": "Receive cannot be the same",
+ "receivePage": {
+ "addressCopied": "Address copied",
+ "copied": "Copied",
+ "copyAddress": "Copy Address",
+ "imageSaved": "Image saved",
+ "networkWarning": "Only {{chain}} network assets can be transferred in, assets from other networks cannot be recovered",
+ "receiveAddress": "Receive Address",
+ "saveImage": "Save Image",
+ "scanQrCode": "Scan QR code to transfer to this address",
+ "share": "Share",
+ "shareTitle": "BFM Pay Receive Address",
+ "title": "Receive"
+ },
"receiver": "Receiver",
- "scanAndTransferTheAsset": "[MISSING:en] 扫一扫,转账 /",
- "scanAndTransferToMe": "[MISSING:en] 扫一扫转入 /",
+ "scanAndTransferTheAsset": "Scan to transfer /",
+ "scanAndTransferToMe": "Scan to receive /",
"scanToAssetTypeTransfer": "Scan to transfer ()",
"scanToTransfer": "Scan to transfer",
"selectTransferChain": "Select transfer chain",
"send": "Send",
+ "sendPage": {
+ "amountLabel": "Amount",
+ "assetLabel": "Transfer Asset",
+ "cameraPermissionRequired": "Camera permission required for scanning",
+ "continue": "Continue",
+ "explorerNotImplemented": "Block explorer feature coming soon",
+ "fee": "Fee",
+ "from": "From",
+ "networkWarning": "Please ensure the recipient address is a {{chain}} network address. Sending to the wrong network cannot be recovered",
+ "resultTitle": "Send Result",
+ "scanFailed": "Scan failed, please enter manually",
+ "scanSuccess": "Scan successful",
+ "title": "Send",
+ "toAddressLabel": "Recipient Address",
+ "toAddressPlaceholder": "Enter {{chain}} address",
+ "twoStepSecretDescription": "This address has a security password set. Please enter your security password to confirm the transfer.",
+ "twoStepSecretError": "Incorrect security password",
+ "twoStepSecretPlaceholder": "Enter security password",
+ "twoStepSecretTitle": "Security Password Required"
+ },
+ "sendResult": {
+ "back": "Back",
+ "done": "Done",
+ "failed": "Transfer Failed",
+ "pending": "Processing...",
+ "retry": "Retry",
+ "sentTo": "Sent to {{address}}",
+ "success": "Transfer Successful",
+ "txHash": "Transaction Hash:",
+ "viewInBrowser": "View in Browser"
+ },
"sendingAddress": "Sending address",
"stake": "Stake",
"status": {
@@ -233,21 +260,31 @@
"failed": "Failed",
"pending": "Pending"
},
- "toAddress": "To",
- "fromAddress": "From",
"swap": "Swap",
"theCurrentAddressDoesNotHave_{assettype}AssetsAndCannotBeTransferred": "The current address does not have assets and cannot be transferred.",
"theFrozenAddressCannotBeTransferred": "The frozen address cannot be transferred",
- "theMinimumMinerFeeIs_{fee}": "[MISSING:en] 本次交易最低矿工费为:",
+ "theMinimumMinerFeeIs_{fee}": "Minimum miner fee for this transaction:",
"theRecommendedMinerFee_{fee}": "The recommended miner fee is:",
"thisAddressOnlySupportsAssetsPleaseDoNotTransferToOtherPublicChainAssets": "This address only supports assets, please do not transfer to other public chain assets.",
- "thisAddressOnlySupportsEthereumAssetsPleaseDoNotTransferToOtherPublicChainAssets": "[MISSING:en] 该地址只支持 Ethereum 资产, 请不要转账给其它非兼容的区块链资产。",
+ "thisAddressOnlySupportsEthereumAssetsPleaseDoNotTransferToOtherPublicChainAssets": "This address only supports Ethereum assets",
"to": "To",
+ "toAddress": "To",
"to_(receive_{asset})": "To(Receive )",
"transactionDetails": "Transaction Details",
"transactionHash": "Transaction Hash",
"transactionHistory": "Transaction history",
"transactionSentSuccessfully": "Transaction sent successfully",
+ "transfer": {
+ "daysAgo": "{{days}} days ago",
+ "newTransfer": "New Transfer",
+ "quickTransfer": "Quick Transfer",
+ "quickTransferDesc": "Select recent contact or enter new address",
+ "recentContacts": "Recent Contacts",
+ "today": "Today",
+ "transferHistory": "Transfer History",
+ "transferTo": "Transfer to {{name}}",
+ "yesterday": "Yesterday"
+ },
"transferAction": "Transfer",
"transferAmount": "Transfer amount",
"transferQuantityCannotBeGreaterThanBalance": "Transfer quantity cannot be greater than balance",
@@ -255,90 +292,54 @@
"tronLessFeeTips": "At present, there is less TRX, and continued transfers may fail due to insufficient handling fees.",
"tronNetworkFeeLongTips_1": "The network fee will vary according to networksituation, once the transaction is confirmed, the fee cannot be refunded regardless of whether the transaction is successful or not.",
"tronNetworkFeeLongTips_2": "The network fee is charged by the TRON network, and BFM Pay does not charge any fees !",
+ "txStatus": {
+ "autoCloseIn": "Auto-closing in {{seconds}}s",
+ "broadcasted": "Broadcast Successful",
+ "broadcastedDesc": "Transaction broadcasted, awaiting block confirmation...",
+ "broadcasting": "Broadcasting",
+ "broadcastingDesc": "Broadcasting transaction to the network...",
+ "closeIn": "Close ({{seconds}}s)",
+ "confirmed": "Transaction Confirmed",
+ "confirmedDesc": "Transaction has been confirmed on chain",
+ "confirming": "Awaiting Confirmation",
+ "confirmingDesc": "Waiting for block confirmation...",
+ "created": "Pending Broadcast",
+ "createdDesc": "Transaction created, waiting to broadcast...",
+ "failed": "Transaction Failed",
+ "failedDesc": "Transaction failed, please try again later",
+ "viewDetails": "View Details"
+ },
"type": {
- "send": "Send",
- "receive": "Receive",
- "signature": "Set Security Password",
- "stake": "Stake",
- "unstake": "Unstake",
+ "approve": "Approve",
+ "certificate": "Certificate",
+ "dapp": "DApp",
"destroy": "Destroy",
+ "destroyEntity": "Destroy Entity",
+ "emigrate": "Emigrate",
+ "exchange": "Exchange",
"gift": "Gift",
"grab": "Accept Gift",
- "trust": "Trust",
- "signFor": "Sign For",
- "emigrate": "Emigrate",
"immigrate": "Immigrate",
- "exchange": "Exchange",
- "swap": "Swap",
- "issueAsset": "Issue Asset",
"increaseAsset": "Increase Asset",
- "mint": "Mint",
+ "interaction": "Contract Interaction",
+ "issueAsset": "Issue Asset",
"issueEntity": "Issue Entity",
- "destroyEntity": "Destroy Entity",
"locationName": "Location Name",
- "dapp": "DApp",
- "certificate": "Certificate",
"mark": "Mark",
- "approve": "Approve",
- "interaction": "Contract Interaction",
- "other": "Other"
+ "mint": "Mint",
+ "other": "Other",
+ "receive": "Receive",
+ "send": "Send",
+ "signFor": "Sign For",
+ "signature": "Set Security Password",
+ "stake": "Stake",
+ "swap": "Swap",
+ "trust": "Trust",
+ "unstake": "Unstake"
},
"unstake": "Unstake",
- "viewTransactionDetails": "[MISSING:en] 查看交易详情",
+ "viewTransactionDetails": "View transaction details",
"youFinallyReceive": "You finally receive",
"youMustReceive_{asset}QuantityGreaterThan_0": "You must receive quantity greater than 0",
- "{chainsymbol}IsNotEnoughToCoverFees": "is not enough to cover fees",
- "feeEdit": {
- "title": "Edit Network Fee",
- "currentFee": "Current Fee",
- "minFee": "Minimum Fee",
- "customFee": "Custom Fee",
- "presetMin": "Minimum",
- "presetRecommend": "Recommended",
- "presetFast": "Fast",
- "invalidFee": "Please enter a valid fee",
- "belowMinFee": "Fee cannot be lower than minimum fee {{minFee}} {{symbol}}"
- },
- "txStatus": {
- "created": "Pending Broadcast",
- "broadcasting": "Broadcasting",
- "broadcasted": "Broadcast Successful",
- "confirming": "Awaiting Confirmation",
- "confirmed": "Transaction Confirmed",
- "failed": "Transaction Failed",
- "createdDesc": "Transaction created, waiting to broadcast...",
- "broadcastingDesc": "Broadcasting transaction to the network...",
- "broadcastedDesc": "Transaction broadcasted, awaiting block confirmation...",
- "confirmingDesc": "Waiting for block confirmation...",
- "confirmedDesc": "Transaction has been confirmed on chain",
- "failedDesc": "Transaction failed, please try again later",
- "viewDetails": "View Details",
- "autoCloseIn": "Auto-closing in {{seconds}}s",
- "closeIn": "Close ({{seconds}}s)"
- },
- "broadcast": {
- "assetNotEnough": "Insufficient asset balance",
- "feeNotEnough": "Insufficient fee",
- "rejected": "Transaction rejected",
- "unknown": "Broadcast failed, please try again",
- "alreadyExists": "Transaction already exists",
- "forbidden": "Operation forbidden",
- "assetNotExist": "Asset does not exist",
- "invalidParams": "Invalid parameters",
- "accountFrozen": "Account is frozen",
- "timeout": "Broadcast timeout, please retry",
- "failed": "Broadcast failed"
- },
- "pendingTx": {
- "title": "Pending Transactions",
- "broadcasting": "Broadcasting",
- "broadcasted": "Awaiting confirmation",
- "failed": "Broadcast failed",
- "retry": "Retry",
- "delete": "Delete",
- "retryCount": "Retry count",
- "waitingFor": "Waiting for {{seconds}}s",
- "viewAll": "View all {{count}} pending transactions",
- "clearAllFailed": "Clear failed"
- }
-}
\ No newline at end of file
+ "{chainsymbol}IsNotEnoughToCoverFees": "is not enough to cover fees"
+}
diff --git a/src/i18n/locales/en/wallet.json b/src/i18n/locales/en/wallet.json
index d5f8d8f1b..1b6378f3b 100644
--- a/src/i18n/locales/en/wallet.json
+++ b/src/i18n/locales/en/wallet.json
@@ -2,6 +2,14 @@
"add": "Add Wallet",
"defaultName": "My Wallet",
"randomName": "Random Name",
+ "carousel": {
+ "walletCount": "{{count}} Wallets",
+ "walletCount_one": "1 Wallet"
+ },
+ "menu": {
+ "addressBalanceQuery": "Address Balance Query",
+ "addressTransactionsQuery": "Address Transactions Query"
+ },
"chains": {
"title": "Manage Wallet Networks",
"verifyTitle": "Verify Wallet Lock",
@@ -33,7 +41,7 @@
"allowsGettingTheAddressesOfAllWalletsInTheApplication": "Allows getting the addresses of all wallets in the application",
"allowsToGetTheAddressOfEachNetworkOfTheCurrentWallet": "Allows to get the address of each network of the current wallet",
"alreadyHaveAWallet": "Already have a wallet",
- "alreadyHaveAWalletGoToRestore": "[MISSING:en] 恢复钱包",
+ "alreadyHaveAWalletGoToRestore": "Restore Wallet",
"anytimeAnywhereManageYourDigitalAssets": "Anytime, anywhere <br /> Manage your digital assets",
"applyAddress": "Apply Address",
"areYouSureYouWantToDeleteThisAddress": "Are you sure you want to delete this address?",
@@ -53,7 +61,7 @@
"create/importWallet": "Create/Import Wallet",
"createEntity": "Create entity",
"createEntityFactory": "Create entity factory",
- "createImport": "[MISSING:en] 创建 / 导入",
+ "createImport": "Create / Import",
"createWallet": "Create Wallet",
"createWallet_{symbol}": "Create Wallet ()",
"created": "Created",
@@ -64,17 +72,17 @@
"destoryAsset": "Destory asset",
"doesNotMatchAddressRule": "Does not match address rule",
"edit address": "Edit Address",
- "enterOrPasteTheWalletAddress": "[MISSING:en] 输入或者粘贴钱包地址",
+ "enterOrPasteTheWalletAddress": "Enter or paste wallet address",
"enterTheAddressOf_{chain}": "Enter the address of",
"enterWallet": "Enter wallet",
"exitAllWalletIn_{appName}": "Exit all wallet In",
"exit_{mainwallet}": "Exit """,
"exportPrivateKey": "Export Private Key",
- "exportPrivateKeyTips": "[MISSING:en] export-private-key-tips",
+ "exportPrivateKeyTips": "export-private-key-tips",
"frozeMainAssetPrealnum": "Frozen Main Asset Prealnum",
"frozenAddressesCannotBeSet": "Frozen addresses cannot be set",
"genesisaddress": "Genesis Address",
- "ifItIsNotBackedUpTheWalletCannotBeRestoredAndAssetLossMayResult": "[MISSING:en] 若未完成助记词备份,将无法恢复钱包,同时可能造成资产损失。",
+ "ifItIsNotBackedUpTheWalletCannotBeRestoredAndAssetLossMayResult": "If backup is not completed, wallet cannot be restored and assets may be lost",
"importTheAccountWithThePrivateKey": "Import the account with the private key",
"importTheWalletOfTheAddressAndThePerformTheSigningOperation": "Import the wallet of the address and then perform the signing operation",
"importWallet": "Import Wallet",
@@ -135,8 +143,8 @@
"manageIdentityWallet": "Manage Identity Wallet",
"manageIdentityWallets": "Manage Identity Wallets",
"manageWallet": "Manage Wallet",
- "manageWallets": "[MISSING:en] 管理钱包",
- "mnageIdentityWallet": "[MISSING:en] manage-identity-wallet",
+ "manageWallets": "Manage Wallets",
+ "mnageIdentityWallet": "manage-identity-wallet",
"modifyAddress": "Modify Address",
"modifyWalletName": "Modify Wallet Name",
"multiChainSupport": "Multi chain <br /> support",
@@ -144,7 +152,7 @@
"newCreateWallet": "Create Wallet",
"nonIdentityAssociateAllChainTips": "The original non-identity wallet will associate all corresponding chains according to the mnemonic phrase;",
"notBackedUp": "Not backed up",
- "notFindCurrentlyActiveWallet": "[MISSING:en] 未找到当前激活的钱包",
+ "notFindCurrentlyActiveWallet": "Active wallet not found",
"notImported": "(Not imported)",
"obtainingThePrivateKeyIsEquivalentToOwningTheWalletAsset": "Obtaining the private key is equivalent to owning the wallet asset",
"pleaseEnterAddress": "Please enter address",
@@ -155,16 +163,16 @@
"receive": "Receive",
"remainAssetPrealnum": "Remain Asset Prealnum",
"restoreIdentity": "Restore Identity",
- "restoreWallet": "[MISSING:en] 恢复钱包",
+ "restoreWallet": "Restore Wallet",
"scanResulitsDoNotMatchAddressRules": "Scan results do not match address rules",
"scan_{chain}AddressQrCode": "Scan address QR code",
"searchForTokenName": "Token Name",
"searchForTokenNameOrContractAddress": "Token Name/Contract Address",
"selectAddressType": "Select Address Type",
"selectAsset": "Select Asset",
- "selectThisAddress": "[MISSING:en] 选择此地址",
+ "selectThisAddress": "Select this address",
"selectWallet": "Select Wallet",
- "selectWalletTransation": "[MISSING:en] 选择转账钱包",
+ "selectWalletTransation": "Select transfer wallet",
"selectionChain": "Selection Chain",
"selectionWallet": "Selection Wallet",
"switchingWallets": "Switching wallets",
@@ -176,7 +184,7 @@
"theWalletIsNotBackUpTips": "The wallet is not backed up. If you continue to exit, you may lose the wallet permanently. Are you sure you want to continue?",
"thereIsAnUnbackedUpWalletIn_{appName}Tips": "There is an unbacked up wallet in . If you continue to exit, you may lose the wallet permanently. Are you sure you want to continue?",
"thisRequestDoesNotHaveAMatchingWalletInCotPleaseAddTheCorrespondingWalletFirstAndTryAgain": "This request does not have a matching wallet in BFM Pay. Please add the corresponding wallet first and try again.",
- "toRestoreTheWalletInOrderToEnsureTheSecurityOfThe": "[MISSING:en] to restore the wallet. In order to ensure the security of the",
+ "toRestoreTheWalletInOrderToEnsureTheSecurityOfThe": "To restore the wallet securely",
"to_({chain})": "To()",
"tokenDetail": "Token Detail",
"transfer": "Transfer",
@@ -188,9 +196,9 @@
"walletName": "Wallet Name",
"walletNameMustBe_1_12CharactersLong": "wallet name must be 1~12 characters long",
"walletSettings": "Wallet settings",
- "wallets": "[MISSING:en] 钱包",
+ "wallets": "Wallets",
"walletsOriginallyImportedWillBeMergedTips": "Wallets originally imported from different chains with the same mnemonic phrase will be merged;",
- "walletsUnderIdentity": "[MISSING:en] 身份钱包",
+ "walletsUnderIdentity": "Identity Wallets",
"willSynchronizeImportIntoThe_{chainname}ChainWithTheSamePrivateKey": "Will synchronize import into the chain with the same private key",
"{assetType}Details": "Details",
"{asset}TotalCirculation": "total circulation"
diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json
index bc854287e..6424b41c4 100644
--- a/src/i18n/locales/zh-CN/common.json
+++ b/src/i18n/locales/zh-CN/common.json
@@ -8,6 +8,45 @@
"scanToAdd": "扫码添加联系人",
"transferToMe": "扫码向我转账"
},
+ "ecosystem": {
+ "runningApps": "正在运行的应用",
+ "stackViewHints": "左右滑动切换 · 点击打开 · 上滑关闭",
+ "noAppsUsed": "还没有使用过的应用",
+ "goToDiscover": "去「发现」页面探索吧",
+ "appStack": "应用堆栈",
+ "chainNotSupported": "暂不支持此链",
+ "menu": {
+ "open": "打开",
+ "detail": "详情",
+ "remove": "移除"
+ }
+ },
+ "chains": {
+ "ethereum": "Ethereum",
+ "bitcoin": "Bitcoin",
+ "tron": "Tron",
+ "binance": "BSC",
+ "bfmeta": "BFMeta",
+ "ccchain": "CCChain",
+ "pmchain": "PMChain",
+ "bfchainv2": "BFChain V2",
+ "btgmeta": "BTGMeta",
+ "biwmeta": "BIWMeta",
+ "ethmeta": "ETHMeta",
+ "malibu": "Malibu"
+ },
+ "weekdays": {
+ "0": "周日",
+ "1": "周一",
+ "2": "周二",
+ "3": "周三",
+ "4": "周四",
+ "5": "周五",
+ "6": "周六"
+ },
+ "date": {
+ "format": "{{month}}月{{day}}日 {{weekday}}"
+ },
"paste": "粘贴",
"addressPlaceholder": "输入或粘贴地址",
"noAssets": "暂无资产",
@@ -21,6 +60,7 @@
"tabHome": "首页",
"tabTransfer": "转账",
"tabWallet": "钱包",
+ "tabEcosystem": "生态",
"tabSettings": "设置",
"tabHistory": "交易记录",
"scan": "扫描二维码",
@@ -109,7 +149,6 @@
"codeOfThePrivateKey": "私钥的十六进制码",
"comingSoonStayTuned": "即将上线,敬请期待",
"comprehensiveEncryption": "全面加密",
- "confirm": "确认",
"confirmBackedUp": "确认已备份",
"confirmToDelete": "确定删除?",
"confirmToTurnOffTouchId": "确定要关闭指纹锁吗?",
@@ -239,6 +278,11 @@
"reset": "重置",
"resubmit": "重新提交",
"retry": "重试",
+ "providerFallback": {
+ "queryFailed": "{{feature}} 查询失败",
+ "desc": "所有配置的提供商都失败了,显示默认值。",
+ "technicalDetails": "技术详情"
+ },
"save": "保存",
"saving": "保存中...",
"saved": "已保存",
diff --git a/src/i18n/locales/zh-CN/ecosystem.json b/src/i18n/locales/zh-CN/ecosystem.json
index 00c6d9c1a..579cfc368 100644
--- a/src/i18n/locales/zh-CN/ecosystem.json
+++ b/src/i18n/locales/zh-CN/ecosystem.json
@@ -20,5 +20,40 @@
"bio_signMessage": "签名消息",
"bio_signTypedData": "签名数据",
"bio_sendTransaction": "发起交易"
+ },
+ "discover": {
+ "featured": "精选应用",
+ "get": "获取",
+ "searchPlaceholder": "搜索应用",
+ "empty": "暂无应用",
+ "recommended": "推荐",
+ "viewAll": "查看全部",
+ "hotApps": "热门应用"
+ },
+ "demo": {
+ "swiper": {
+ "method1": "方案一:Controller 模块(官方推荐)",
+ "method3": "方案三:Context 封装模式",
+ "method3Desc": "使用 SwiperSyncProvider + useSwiperMember + Controller 模块实现跨组件同步",
+ "main": "主 Swiper",
+ "indicator": "指示器 Swiper",
+ "mainIndependent": "主 Swiper(独立组件)",
+ "indicatorIndependent": "指示器 Swiper(独立组件)",
+ "goTo": "跳转到第 {{index}} 页",
+ "progress": "进度",
+ "activeIndex": "当前索引",
+ "debugCombined": "进度: {{progress}} | 当前索引: {{index}}",
+ "debugProgress": "进度: {{value}}",
+ "debugActiveIndex": "当前索引: {{value}}"
+ }
+ },
+ "stack": {
+ "title": "应用堆栈",
+ "runningApps": "运行中的应用",
+ "hints": "向上滑动关闭"
+ },
+ "capsule": {
+ "more": "更多操作",
+ "close": "关闭应用"
}
-}
+}
\ No newline at end of file
diff --git a/src/i18n/locales/zh-CN/home.json b/src/i18n/locales/zh-CN/home.json
index 014a9504d..49117e693 100644
--- a/src/i18n/locales/zh-CN/home.json
+++ b/src/i18n/locales/zh-CN/home.json
@@ -7,14 +7,16 @@
},
"wallet": {
"send": "转账",
- "receive": "收款",
+ "receive": "接收",
"assets": "资产",
"noAssets": "暂无资产",
"noAssetsOnChain": "{{chain}} 链上暂无代币",
+ "tokenBalance": "代币余额",
+ "transactionHistory": "交易历史",
"selectNetwork": "选择网络",
- "addressCopied": "地址已复制",
+ "addressCopied": "地址已复制到剪切板",
"tokenActions": "资产操作",
"transfer": "转账",
"destroy": "销毁"
}
-}
+}
\ No newline at end of file
diff --git a/src/i18n/locales/zh-CN/onboarding.json b/src/i18n/locales/zh-CN/onboarding.json
index 3654aa090..037e64acc 100644
--- a/src/i18n/locales/zh-CN/onboarding.json
+++ b/src/i18n/locales/zh-CN/onboarding.json
@@ -31,6 +31,7 @@
"complete": "完成创建",
"defaultWalletName": "主钱包",
"walletSuffix": "钱包",
+ "generatedNamePattern": "{{word}}{{suffix}}",
"createFailed": "创建钱包失败",
"themeTitle": "选择卡片主题",
"themeSubtitle": "为您的钱包卡片选择一个主题色",
diff --git a/src/i18n/locales/zh-CN/transaction.json b/src/i18n/locales/zh-CN/transaction.json
index 9c1f9d1bd..640216379 100644
--- a/src/i18n/locales/zh-CN/transaction.json
+++ b/src/i18n/locales/zh-CN/transaction.json
@@ -75,6 +75,7 @@
"noDestroyableAssets": "暂无可销毁的资产"
},
"history": {
+ "loadFailed": "交易历史加载失败",
"title": "交易记录",
"noWallet": "请先创建或导入钱包",
"totalRecords": "共 {{count}} 条记录",
diff --git a/src/i18n/locales/zh-CN/wallet.json b/src/i18n/locales/zh-CN/wallet.json
index b58125164..770139a3a 100644
--- a/src/i18n/locales/zh-CN/wallet.json
+++ b/src/i18n/locales/zh-CN/wallet.json
@@ -2,6 +2,13 @@
"add": "添加钱包",
"defaultName": "我的钱包",
"randomName": "随机名称",
+ "carousel": {
+ "walletCount": "{{count}} 个钱包"
+ },
+ "menu": {
+ "addressBalanceQuery": "地址余额查询",
+ "addressTransactionsQuery": "地址交易查询"
+ },
"chains": {
"title": "管理钱包网络",
"verifyTitle": "验证钱包锁",
diff --git a/src/i18n/locales/zh-TW/authorize.json b/src/i18n/locales/zh-TW/authorize.json
index add7eda65..a2fec4938 100644
--- a/src/i18n/locales/zh-TW/authorize.json
+++ b/src/i18n/locales/zh-TW/authorize.json
@@ -13,7 +13,7 @@
"main": "僅目前錢包",
"network": "所有 {{chainName}} 地址"
},
- "selectNetwork": "[MISSING:zh-TW] 选择网络",
+ "selectNetwork": "選擇網路",
"shareWith": "是否與該應用分享地址?"
},
"app": {
diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json
index 251c93d1f..7ca5bdfcd 100644
--- a/src/i18n/locales/zh-TW/common.json
+++ b/src/i18n/locales/zh-TW/common.json
@@ -28,6 +28,7 @@
"selectWallet": "選擇錢包",
"showPassword": "顯示密碼",
"skipToMain": "跳轉到主要內容",
+ "tabEcosystem": "生態",
"tabHistory": "交易記錄",
"tabHome": "首頁",
"tabSettings": "設定",
@@ -40,7 +41,7 @@
"acceptExchange": "接受交換",
"account": "賬戶",
"accountFromMime": "account from mime",
- "accountWorks": "[MISSING:zh-TW] account works!",
+ "accountWorks": "account works!",
"acquisitionTime": "入手時間",
"add": "新增",
"addressBook": {
@@ -64,22 +65,22 @@
"verifyFailed": "驗證失敗"
},
"addressLookup": {
- "address": "[MISSING:zh-TW] 地址",
- "addressOrHash": "[MISSING:zh-TW] 地址或交易哈希",
- "addressOrHashPlaceholder": "[MISSING:zh-TW] 输入地址或交易哈希",
- "addressPlaceholder": "[MISSING:zh-TW] 输入钱包地址",
- "balanceTitle": "[MISSING:zh-TW] 地址余额查询",
- "chain": "[MISSING:zh-TW] 链",
- "error": "[MISSING:zh-TW] 查询失败",
- "explorerHint": "[MISSING:zh-TW] 交易记录需要通过区块浏览器查询",
- "noTransactions": "[MISSING:zh-TW] 暂无交易记录",
- "onChain": "[MISSING:zh-TW] 在 {{chain}} 上",
- "openExplorer": "[MISSING:zh-TW] 打开 {{name}} 浏览器",
- "otherChains": "[MISSING:zh-TW] 其他链",
- "queryError": "[MISSING:zh-TW] 查询交易失败,请稍后重试",
- "transactionsTitle": "[MISSING:zh-TW] 地址交易查询",
- "useExplorerHint": "[MISSING:zh-TW] 该链不支持直接查询交易历史,请使用浏览器查看",
- "viewOnExplorer": "[MISSING:zh-TW] 在 {{name}} 浏览器中查看"
+ "address": "地址",
+ "addressOrHash": "地址或交易哈希",
+ "addressOrHashPlaceholder": "輸入地址或交易雜湊",
+ "addressPlaceholder": "輸入錢包地址",
+ "balanceTitle": "地址余额查询",
+ "chain": "鏈",
+ "error": "查詢失敗",
+ "explorerHint": "交易記錄需要透過區塊瀏覽器查詢",
+ "noTransactions": "暫無交易記錄",
+ "onChain": "在 {{chain}} 上",
+ "openExplorer": "開啟 {{name}} 瀏覽器",
+ "otherChains": "其他鏈",
+ "queryError": "查詢交易失敗,請稍後重試",
+ "transactionsTitle": "地址交易查询",
+ "useExplorerHint": "此鏈不支援直接查詢交易歷史,請使用瀏覽器查看",
+ "viewOnExplorer": "在 {{name}} 瀏覽器中查看"
},
"addressPlaceholder": "輸入或貼上地址",
"advancedEncryptionTechnologyDigitalWealthIsMoreSecure": "先進的加密技術 <br /> 數字財富更安全",
@@ -98,13 +99,27 @@
"bandwidth": "帶寬",
"beSureToKeepThePrivateKeyInASafePlaceIfThePrivateKeyIsLostItCannotBeRetrieved": "請務必將私鑰保存至安全的地方 私鑰丟失將無法找回",
"belongingAlbum": "所屬專輯",
- "bgPrimary": "[MISSING:zh-TW] bg-primary",
+ "bgPrimary": "bg-primary",
"bip39Index": "序號",
"byContinuingToUseItYouAgreeToTheUserAgreement": "繼續使用,即代表您已同意 《用戶協議》",
"cancel": "取消",
- "cardWorks": "[MISSING:zh-TW] card works!",
+ "cardWorks": "card works!",
"certificate": "認證",
- "clickToCopy": "[MISSING:zh-TW] 点击复制",
+ "chains": {
+ "bfchainv2": "BFChain V2",
+ "bfmeta": "BFMeta",
+ "binance": "BSC",
+ "bitcoin": "Bitcoin",
+ "biwmeta": "BIWMeta",
+ "btgmeta": "BTGMeta",
+ "ccchain": "CCChain",
+ "ethereum": "Ethereum",
+ "ethmeta": "ETHMeta",
+ "malibu": "Malibu",
+ "pmchain": "PMChain",
+ "tron": "Tron"
+ },
+ "clickToCopy": "點擊複製",
"clickToShowTheQr": "Click to show the QR",
"clickToShowTheQrCodeOfThePrivateKey": "點擊展示私鑰二維碼",
"close": "退出",
@@ -138,26 +153,46 @@
"selectContact": "選擇聯絡人",
"viewAll": "查看全部聯絡人"
},
+ "contactCard": {
+ "scanToAdd": "掃碼添加聯絡人",
+ "transferToMe": "掃碼向我轉帳"
+ },
"continue": "繼續",
"contractMethods": "合約方法",
"contractRiskWarning": "合約具有一定的風險性。用戶須確認合約代碼的安全性。授權即接受該合約",
- "copied": "[MISSING:zh-TW] 已复制",
+ "copied": "已複製",
"copiedToClipboard": "已複製到剪貼簿",
- "copy": "[MISSING:zh-TW] 复制",
+ "copy": "複製",
"copyPrivateKey": "複製私鑰",
"copySuccess": "複製成功",
"copyThePrivateKey": "複製私鑰",
- "copyToClipboard": "[MISSING:zh-TW] 已复制到剪贴板",
+ "copyToClipboard": "已複製到剪贴板",
"couldBeWithin_30Seconds": "預計30秒",
"creator": "創作者",
+ "date": {
+ "format": "{{month}}月{{day}}日 {{weekday}}"
+ },
"delete": "刪除",
"destroy": "銷毀",
- "done": "[MISSING:zh-TW] 完成",
+ "done": "完成",
"download": "下載",
"dpInTab": "dp-in-tab",
"dpName": "DP名稱",
"dpType": "類型",
"dueToTheUpgradeOfTheNewVersionOf_{appName}Tips": "由於 新版本的升級,優化了錢包數據結構與互動邏輯,舊資料將做以下修改。",
+ "ecosystem": {
+ "appStack": "應用堆疊",
+ "chainNotSupported": "暫不支援此鏈",
+ "goToDiscover": "去「發現」頁面探索吧",
+ "menu": {
+ "detail": "詳情",
+ "open": "開啟",
+ "remove": "移除"
+ },
+ "noAppsUsed": "還沒有使用過的應用",
+ "runningApps": "正在執行的應用",
+ "stackViewHints": "左右滑動切換 · 點擊開啟 · 上滑關閉"
+ },
"edit": "編輯",
"energy": "能量",
"english": "English",
@@ -183,7 +218,7 @@
"from": "來自",
"frozen": "凍結",
"get_(estimate)": "獲得(估計)",
- "goHome": "[MISSING:zh-TW] 主页",
+ "goHome": "主頁",
"goToCosmicdp": "前往 CosmicDP 交易",
"goToCosmicdpForTrading": "前往 CosmicDP 交易",
"hint": "提示",
@@ -212,6 +247,20 @@
"modifyName": "修改名稱",
"modityIdentityName": "修改錢包名稱",
"more": "更多",
+ "myCard": {
+ "addWallet": "新增錢包",
+ "changeAvatar": "點擊換頭像",
+ "currentChain": "目前鏈",
+ "defaultName": "我的名片",
+ "editUsername": "點擊編輯使用者名稱",
+ "maxWallets": "最多選擇 {{max}} 個錢包",
+ "noWalletsSelected": "請選擇至少一個錢包",
+ "scanToAdd": "掃碼新增我為聯絡人",
+ "selectWallets": "選擇錢包",
+ "title": "我的名片",
+ "usernamePlaceholder": "輸入使用者名稱",
+ "walletAddress": "{{wallet}} ({{chain}})"
+ },
"name": "名稱",
"navOverview": "概覽",
"network": "網絡",
@@ -249,13 +298,14 @@
"probablyWithin_15Seconds": "預計15秒",
"probablyWithin_30Seconds": "Probably within 30 seconds",
"project": "項目",
+ "providerFallback": {
+ "desc": "所有配置的節點均失敗,正在顯示默認值。",
+ "queryFailed": "{{feature}} 查詢失敗",
+ "technicalDetails": "技術詳情"
+ },
"publishDate": "發行時間",
"quantity": "數量",
"receive": "收款",
- "contactCard": {
- "scanToAdd": "掃碼添加聯絡人",
- "transferToMe": "掃碼向我轉帳"
- },
"receivingGifts": "資產接收",
"refuse": "拒絕",
"reject": "拒絕",
@@ -272,7 +322,8 @@
"requsetTwo": "請求二",
"reset": "重置",
"resubmit": "重新提交",
- "retry": "[MISSING:zh-TW] 重试",
+ "retry": "重試",
+ "retrying": "重試中...",
"save": "保存",
"saveQrCode": "保存二維碼",
"saveSuccessful": "保存成功",
@@ -288,8 +339,8 @@
"shareCancel": "分享取消",
"shareCanceled": "分享取消",
"shareSuccessful": "分享成功",
- "showLess": "[MISSING:zh-TW] 收起",
- "showMore": "[MISSING:zh-TW] 显示更多",
+ "showLess": "收起",
+ "showMore": "顯示更多",
"signIn": "登錄",
"similarConract": "智能合约",
"skip": "跳過",
@@ -339,12 +390,21 @@
"userAgreement": "用戶協議",
"userAvatorAndNikename": "用戶頭像和昵稱",
"validationSucceeded": "驗證成功",
- "verifying": "[MISSING:zh-TW] 验证中...",
+ "verifying": "驗證中...",
"version": "版本",
"versionUpgrade": "版本更新",
"viewInBrowser": "在瀏覽器中查看",
"viewPrivateKey": "查看助記詞",
"website": "官網",
+ "weekdays": {
+ "0": "週日",
+ "1": "週一",
+ "2": "週二",
+ "3": "週三",
+ "4": "週四",
+ "5": "週五",
+ "6": "週六"
+ },
"welcomeToCot": "Welcome To BFM Pay",
"wellDone": "幹得漂亮!",
"words": "個字",
@@ -353,4 +413,4 @@
"{{length}}Words": "個字",
"中文(简体)": "中文(简体)",
"中文(繁體)": "中文(繁體)"
-}
\ No newline at end of file
+}
diff --git a/src/i18n/locales/zh-TW/ecosystem.json b/src/i18n/locales/zh-TW/ecosystem.json
index ca961c705..ddda46cdb 100644
--- a/src/i18n/locales/zh-TW/ecosystem.json
+++ b/src/i18n/locales/zh-TW/ecosystem.json
@@ -1,24 +1,59 @@
{
- "title": "[MISSING:zh-TW] 生态",
- "empty": "[MISSING:zh-TW] 暂无小程序",
- "loading": "[MISSING:zh-TW] 加载中...",
- "notFound": "[MISSING:zh-TW] 小程序不存在",
- "refresh": "[MISSING:zh-TW] 刷新",
+ "title": "生態",
+ "empty": "暫無小程式",
+ "loading": "載入中...",
+ "notFound": "小程式不存在",
+ "refresh": "重新整理",
"sources": {
- "title": "[MISSING:zh-TW] 可信源管理",
- "add": "[MISSING:zh-TW] 添加订阅",
- "remove": "[MISSING:zh-TW] 移除",
- "empty": "[MISSING:zh-TW] 暂无订阅源"
+ "title": "可信源管理",
+ "add": "添加訂閱",
+ "remove": "移除",
+ "empty": "暫無訂閱源"
},
"permissions": {
- "title": "[MISSING:zh-TW] 权限请求",
- "grant": "[MISSING:zh-TW] 授权",
- "deny": "[MISSING:zh-TW] 拒绝",
- "bio_requestAccounts": "[MISSING:zh-TW] 访问钱包地址",
- "bio_selectAccount": "[MISSING:zh-TW] 选择账户",
- "bio_pickWallet": "[MISSING:zh-TW] 选择其他钱包",
- "bio_signMessage": "[MISSING:zh-TW] 签名消息",
- "bio_signTypedData": "[MISSING:zh-TW] 签名数据",
- "bio_sendTransaction": "[MISSING:zh-TW] 发起交易"
+ "title": "權限請求",
+ "grant": "授權",
+ "deny": "拒絕",
+ "bio_requestAccounts": "存取錢包地址",
+ "bio_selectAccount": "選擇帳戶",
+ "bio_pickWallet": "選擇其他錢包",
+ "bio_signMessage": "簽名消息",
+ "bio_signTypedData": "簽名數據",
+ "bio_sendTransaction": "發起交易"
+ },
+ "discover": {
+ "featured": "精選應用",
+ "get": "獲取",
+ "searchPlaceholder": "搜尋應用",
+ "empty": "暫無應用",
+ "recommended": "推薦",
+ "viewAll": "查看全部",
+ "hotApps": "熱門應用"
+ },
+ "demo": {
+ "swiper": {
+ "method1": "方案一:Controller 模塊(官方推薦)",
+ "method3": "方案三:Context 封裝模式",
+ "method3Desc": "使用 SwiperSyncProvider + useSwiperMember + Controller 模塊實現跨組件同步",
+ "main": "主 Swiper",
+ "indicator": "指示器 Swiper",
+ "mainIndependent": "主 Swiper(獨立組件)",
+ "indicatorIndependent": "指示器 Swiper(獨立組件)",
+ "goTo": "跳轉到第 {{index}} 頁",
+ "progress": "進度",
+ "activeIndex": "當前索引",
+ "debugCombined": "進度: {{progress}} | 當前索引: {{index}}",
+ "debugProgress": "進度: {{value}}",
+ "debugActiveIndex": "當前索引: {{value}}"
+ }
+ },
+ "stack": {
+ "title": "應用堆棧",
+ "runningApps": "運行中的應用",
+ "hints": "向上滑動關閉"
+ },
+ "capsule": {
+ "more": "更多操作",
+ "close": "關閉應用"
}
-}
+}
\ No newline at end of file
diff --git a/src/i18n/locales/zh-TW/empty.json b/src/i18n/locales/zh-TW/empty.json
index 3d8d442fb..5389a17d1 100644
--- a/src/i18n/locales/zh-TW/empty.json
+++ b/src/i18n/locales/zh-TW/empty.json
@@ -1,4 +1,4 @@
{
- "description": "[MISSING:zh-TW] 这里空空如也",
- "title": "[MISSING:zh-TW] 暂无内容"
+ "description": "這裡空空如也",
+ "title": "暫無內容"
}
diff --git a/src/i18n/locales/zh-TW/home.json b/src/i18n/locales/zh-TW/home.json
index 7391661ee..8ed034ec3 100644
--- a/src/i18n/locales/zh-TW/home.json
+++ b/src/i18n/locales/zh-TW/home.json
@@ -2,14 +2,16 @@
"wallet": {
"addressCopied": "地址已複製",
"assets": "資產",
- "destroy": "[MISSING:zh-TW] 销毁",
+ "destroy": "銷毀",
"noAssets": "暫無資產",
"noAssetsOnChain": "{{chain}} 鏈上暫無代幣",
"receive": "收款",
"selectNetwork": "選擇網絡",
"send": "轉賬",
- "tokenActions": "[MISSING:zh-TW] 资产操作",
- "transfer": "[MISSING:zh-TW] 转账"
+ "tokenActions": "資產操作",
+ "tokenBalance": "代幣餘額",
+ "transactionHistory": "交易歷史",
+ "transfer": "轉帳"
},
"welcome": {
"createWallet": "創建新錢包",
diff --git a/src/i18n/locales/zh-TW/notification.json b/src/i18n/locales/zh-TW/notification.json
index 9834b5dff..1142d22a1 100644
--- a/src/i18n/locales/zh-TW/notification.json
+++ b/src/i18n/locales/zh-TW/notification.json
@@ -1,41 +1,58 @@
{
+ "clear": "清空",
+ "delete": "刪除",
+ "empty": {
+ "desc": "您的所有通知都會顯示在這裡",
+ "title": "暫無通知"
+ },
+ "markAllRead": "全部已讀",
+ "noUnread": "沒有未讀通知",
+ "pendingTx": {
+ "broadcasted": {
+ "message": "{{type}} {{amount}} {{symbol}} 已廣播,等待確認",
+ "messageSimple": "交易已廣播到網路,等待區塊確認",
+ "title": "交易已廣播"
+ },
+ "confirmed": {
+ "message": "{{type}} {{amount}} {{symbol}} 已成功上鏈",
+ "messageSimple": "交易已成功確認上鏈",
+ "title": "交易已確認"
+ },
+ "failed": {
+ "message": "廣播失敗,請重試",
+ "title": "交易失敗"
+ }
+ },
"permission": {
- "title": "開啟通知",
- "description": "接收交易狀態更新和重要安全提醒",
- "enable": "開啟通知",
- "skip": "暫不開啟",
"benefits": {
- "transaction": {
- "title": "交易狀態",
- "description": "即時收到轉帳和交易確認的通知"
- },
"instant": {
- "title": "即時提醒",
- "description": "收款到帳、交易完成時第一時間知曉"
+ "description": "收款到帳、交易完成時第一時間知曉",
+ "title": "即時提醒"
},
"security": {
- "title": "安全提醒",
- "description": "帳戶安全相關的重要通知不會錯過"
+ "description": "帳戶安全相關的重要通知不會錯過",
+ "title": "安全提醒"
+ },
+ "transaction": {
+ "description": "即時收到轉帳和交易確認的通知",
+ "title": "交易狀態"
}
- }
- },
- "title": "通知中心",
- "markAllRead": "全部已讀",
- "unreadCount": "{{count}} 條未讀",
- "noUnread": "沒有未讀通知",
- "clear": "清空",
- "delete": "刪除",
- "unread": "未讀",
- "empty": {
- "title": "暫無通知",
- "desc": "您的所有通知都會顯示在這裡"
+ },
+ "description": "接收交易狀態更新和重要安全提醒",
+ "enable": "開啟通知",
+ "skip": "暫不開啟",
+ "title": "開啟通知"
},
"time": {
+ "daysAgo": "{{count}}天前",
+ "hoursAgo": "{{count}}小時前",
"justNow": "剛剛",
"minutesAgo": "{{count}}分鐘前",
- "hoursAgo": "{{count}}小時前",
- "daysAgo": "{{count}}天前",
"today": "今天",
"yesterday": "昨天"
- }
+ },
+ "title": "通知中心",
+ "unread": "未讀",
+ "unreadCount": "{{count}} 條未讀",
+ "viewDetails": "查看詳情"
}
diff --git a/src/i18n/locales/zh-TW/onboarding.json b/src/i18n/locales/zh-TW/onboarding.json
index 5397ae565..11a031816 100644
--- a/src/i18n/locales/zh-TW/onboarding.json
+++ b/src/i18n/locales/zh-TW/onboarding.json
@@ -40,6 +40,7 @@
"createFailed": "建立錢包失敗",
"defaultWalletName": "主錢包",
"walletSuffix": "錢包",
+ "generatedNamePattern": "{{word}}{{suffix}}",
"enterWallet": "進入錢包",
"form": {
"agreementPrefix": "我已閱讀並同意",
@@ -122,9 +123,9 @@
"invalidMnemonic": "助記詞無效,請檢查拼寫",
"nextStep": "下一步",
"success": {
- "description": "[MISSING:zh-TW] 钱包 {{name}} 已成功导入",
- "enterWallet": "[MISSING:zh-TW] 进入钱包",
- "title": "[MISSING:zh-TW] 导入成功"
+ "description": "錢包 {{name}} 已成功導入",
+ "enterWallet": "進入錢包",
+ "title": "導入成功"
},
"title": "匯入錢包",
"words12": "12 個單詞",
diff --git a/src/i18n/locales/zh-TW/security.json b/src/i18n/locales/zh-TW/security.json
index 4ce109771..2634e2095 100644
--- a/src/i18n/locales/zh-TW/security.json
+++ b/src/i18n/locales/zh-TW/security.json
@@ -64,9 +64,9 @@
"entered": "已輸入 {{filled}}/{{total}} 個單詞"
},
"noBackup": "未備份",
- "password": "[MISSING:zh-TW] 密码",
+ "password": "密碼",
"passwordConfirm": {
- "verifying": "[MISSING:zh-TW] 验证中..."
+ "verifying": "驗證中..."
},
"patternLock": {
"clear": "清除圖案",
@@ -114,7 +114,7 @@
"broadcastSuccess": "廣播成功",
"confirmDesc": "請再次輸入安全密碼以確認",
"confirmPlaceholder": "請再次輸入安全密碼",
- "confirmTitle": "[MISSING:zh-TW] 确认安全密码",
+ "confirmTitle": "確認安全密碼",
"feeInfo": "設置安全密碼需要支付網路手續費",
"inputDesc": "請設置一個安全密碼,用於保護您的轉賬安全",
"inputPlaceholder": "請輸入安全密碼",
@@ -139,7 +139,7 @@
"error": "圖案錯誤,請重試",
"unlockDesc": "請繪製錢包鎖圖案",
"unlockTitle": "解鎖錢包",
- "verifyTitle": "[MISSING:zh-TW] 验证钱包",
+ "verifyTitle": "驗證錢包",
"verifying": "驗證中..."
},
"whenTurnesOnYouCanUseYourFingerprintInsteadOfPassword": "開啟後,將启用指紋鎖",
diff --git a/src/i18n/locales/zh-TW/settings.json b/src/i18n/locales/zh-TW/settings.json
index 56fbae8f6..fbb010382 100644
--- a/src/i18n/locales/zh-TW/settings.json
+++ b/src/i18n/locales/zh-TW/settings.json
@@ -94,6 +94,7 @@
"clearData": "清空應用程式資料",
"currency": "貨幣單位",
"language": "語言",
+ "myCard": "我的名片",
"storage": "儲存空間",
"viewMnemonic": "查看助記詞",
"walletChains": "錢包網路",
@@ -117,9 +118,9 @@
"basedOn": "基於瀏覽器儲存配額",
"clearDesc": "清空所有本機儲存的資料,包括錢包、設定和快取。",
"clearTitle": "清理資料",
- "goToClear": "[MISSING:zh-TW] 前往清理数据",
- "migrationDesc": "[MISSING:zh-TW] 检测到旧版本数据格式,需要清空本地数据库后才能继续使用。您的助记词和私钥不会受到影响,但需要重新导入钱包。",
- "migrationRequired": "[MISSING:zh-TW] 数据需要迁移",
+ "goToClear": "前往清除資料",
+ "migrationDesc": "偵測到舊版本資料格式,需要清空本地資料庫後才能繼續使用。您的助記詞和私鑰不會受到影響,但需要重新導入錢包。您的助记词和私钥不会受到影响,但需要重新导入钱包。",
+ "migrationRequired": "資料需要遷移",
"title": "儲存空間",
"total": "總空間",
"unavailable": "無法取得儲存資訊",
diff --git a/src/i18n/locales/zh-TW/transaction.json b/src/i18n/locales/zh-TW/transaction.json
index 88e0f767d..4edcdd4cd 100644
--- a/src/i18n/locales/zh-TW/transaction.json
+++ b/src/i18n/locales/zh-TW/transaction.json
@@ -2,7 +2,7 @@
"aboutFee": "關於網絡費用",
"amount": "數量",
"amountShouldBe_{min}-{max}-{assettype}": "數量應在 - 之間",
- "approve": "[MISSING:zh-TW] 授权",
+ "approve": "授權",
"balance_:": "餘額:",
"bioforestChainFeeToLow": "如果礦工費過低,將影響交易上鏈。",
"bioforestChainTransactionTypeAcceptAnyAssetExchange": "接受任意資產交換",
@@ -49,6 +49,19 @@
"bioforestChainTransactionTypeSetUsername": "設置用戶名",
"bioforestChainTransactionTypeSignForAssetEntrustment": "簽收權益委託",
"bioforestChainTransactionTypeToExchangeAnyMultiAll": "發起批量任意資產全量交換",
+ "broadcast": {
+ "accountFrozen": "帳戶已凍結",
+ "alreadyExists": "交易已存在",
+ "assetNotEnough": "資產餘額不足",
+ "assetNotExist": "資產不存在",
+ "failed": "廣播失敗",
+ "feeNotEnough": "手續費不足",
+ "forbidden": "操作被禁止",
+ "invalidParams": "參數無效",
+ "rejected": "交易被拒絕",
+ "timeout": "廣播超時,請重試",
+ "unknown": "廣播失敗,請稍後重試"
+ },
"certificateTransfer": "證書轉移",
"chainTransfer": "轉賬",
"confirmSheet": {
@@ -61,24 +74,26 @@
"title": "確認轉賬",
"toAddress": "收款地址"
},
- "confirmed": "[MISSING:zh-TW] 已确认",
+ "confirmed": "已確認",
"contractTransactionData": "合约交易数据",
"destoryAmount": "銷毀數量",
"destoryQuantityCannotBeGreaterThanBalance": "銷毀數量不能大於餘額",
"destroyPage": {
- "amountLabel": "[MISSING:zh-TW] 销毁数量",
- "assetLabel": "[MISSING:zh-TW] 销毁资产",
- "confirm": "[MISSING:zh-TW] 确认销毁",
- "noDestroyableAssets": "[MISSING:zh-TW] 暂无可销毁的资产",
- "notSupported": "[MISSING:zh-TW] 当前链不支持资产销毁",
- "resultTitle": "[MISSING:zh-TW] 销毁结果",
- "title": "[MISSING:zh-TW] 销毁",
- "warning": "[MISSING:zh-TW] 销毁操作不可撤销,请仔细核对销毁数量。"
+ "amountLabel": "銷毀數量",
+ "assetLabel": "銷毀資產",
+ "confirm": "確認銷毀",
+ "noDestroyableAssets": "暫無可銷毀的資產",
+ "notSupported": "目前鏈不支援資產銷毀",
+ "resultTitle": "銷毀結果",
+ "title": "銷毀",
+ "warning": "銷毀操作不可撤銷,請仔細核對銷毀數量。"
},
"detail": {
"allowance": "授權額度",
"blockHeight": "區塊高度",
"confirmations": "確認數",
+ "confirmedAt": "確認時間",
+ "confirmedBlockHeight": "確認區塊",
"contractAddress": "合約地址",
"copied": "已複製",
"copyHash": "複製哈希",
@@ -90,7 +105,7 @@
"method": "方法",
"network": "網路",
"notFound": "交易不存在或已過期",
- "openInExplorer": "[MISSING:zh-TW] 在浏览器中打开",
+ "openInExplorer": "在瀏覽器中開啟",
"share": "分享",
"spender": "授權對象",
"swapFrom": "換出",
@@ -106,7 +121,7 @@
"entityLimit_({amount})": "限量集 ()",
"entityTransfer": "同質化轉移",
"estimatedFee": "預計網絡費",
- "failed": "[MISSING:zh-TW] 失败",
+ "failed": "失敗",
"fee": "礦工費",
"feeEdit": {
"belowMinFee": "手續費不能低於最低手續費 {{minFee}} {{symbol}}",
@@ -121,7 +136,7 @@
},
"finallyReceive": "實際收到:",
"forOvertimeTransactionTips": "對於超時交易,您可以通過區塊鏈瀏覽器查看交易是否成功。",
- "from": "[MISSING:zh-TW] 从",
+ "from": "從",
"fromAddress": "從",
"getAssetTypeBalance": "獲取資產餘額",
"history": {
@@ -136,6 +151,7 @@
"days90": "90天",
"periodLabel": "時間"
},
+ "loadFailed": "交易歷史載入失敗",
"noWallet": "請先建立或匯入錢包",
"title": "交易記錄",
"totalRecords": "共 {{count}} 筆記錄",
@@ -166,10 +182,22 @@
"minerFee": "礦工費",
"minnerFee": "礦工費",
"newTransfer": "繼續轉賬",
- "noTransactions": "[MISSING:zh-TW] 暂无交易记录",
+ "noTransactions": "暫無交易記錄",
"paymentDetails": "支付詳情",
"paymentInfo": "支付信息",
- "pending": "[MISSING:zh-TW] 处理中",
+ "pending": "處理中",
+ "pendingTx": {
+ "broadcasted": "等待上鏈",
+ "broadcasting": "廣播中",
+ "clearAllFailed": "清除失敗",
+ "delete": "刪除",
+ "failed": "廣播失敗",
+ "retry": "重試",
+ "retryCount": "重試次數",
+ "title": "待處理交易",
+ "viewAll": "查看全部 {{count}} 條待處理交易",
+ "waitingFor": "已等待 {{seconds}} 秒"
+ },
"promptForDuplicateTransfer": "與此地址有一筆相同金額的轉賬未上鏈,您可等鏈上確認,或繼續新的轉賬?",
"receive": "收款",
"receiveAddress": "接收地址",
@@ -178,27 +206,29 @@
"addressCopied": "地址已複製",
"copied": "已複製",
"copyAddress": "複製地址",
+ "imageSaved": "圖片已儲存",
"networkWarning": "僅支援 {{chain}} 網絡資產轉入,其他網絡資產轉入將無法找回",
"receiveAddress": "收款地址",
+ "saveImage": "儲存圖片",
"scanQrCode": "掃描二維碼向此地址轉賬",
"share": "分享",
"shareTitle": "BFM Pay 收款地址",
"title": "收款"
},
"receiver": "收款地址",
- "scanAndTransferTheAsset": "[MISSING:zh-TW] 扫一扫,转账 /",
- "scanAndTransferToMe": "[MISSING:zh-TW] 扫一扫转入 /",
+ "scanAndTransferTheAsset": "掃一掃,轉帳 /",
+ "scanAndTransferToMe": "掃一掃轉入 /",
"scanToAssetTypeTransfer": "掃描二維碼,轉載 ()",
"scanToTransfer": "掃描二維碼",
"selectTransferChain": "選擇轉賬鏈",
- "send": "[MISSING:zh-TW] 发送",
+ "send": "發送",
"sendPage": {
"amountLabel": "金額",
- "assetLabel": "[MISSING:zh-TW] 转账资产",
+ "assetLabel": "轉帳資產",
"cameraPermissionRequired": "需要相機權限才能掃描",
"continue": "繼續",
"explorerNotImplemented": "區塊瀏覽器功能待實現",
- "fee": "[MISSING:zh-TW] 手续费",
+ "fee": "手續費",
"from": "發送地址",
"networkWarning": "請確保收款地址為 {{chain}} 網絡地址,發送到錯誤網絡將無法找回",
"resultTitle": "發送結果",
@@ -207,10 +237,10 @@
"title": "發送",
"toAddressLabel": "收款地址",
"toAddressPlaceholder": "輸入 {{chain}} 地址",
- "twoStepSecretDescription": "[MISSING:zh-TW] 该地址已设置支付密码,请输入支付密码确认转账。",
- "twoStepSecretError": "[MISSING:zh-TW] 支付密码错误",
- "twoStepSecretPlaceholder": "[MISSING:zh-TW] 输入支付密码",
- "twoStepSecretTitle": "[MISSING:zh-TW] 需要支付密码"
+ "twoStepSecretDescription": "此地址已設定支付密碼,請輸入支付密碼確認轉帳。",
+ "twoStepSecretError": "支付密碼錯誤",
+ "twoStepSecretPlaceholder": "輸入支付密碼",
+ "twoStepSecretTitle": "需要支付密碼"
},
"sendResult": {
"back": "返回",
@@ -224,7 +254,7 @@
"viewInBrowser": "在瀏覽器中查看"
},
"sendingAddress": "發送地址",
- "stake": "[MISSING:zh-TW] 质押",
+ "stake": "質押",
"status": {
"confirmed": "已確認",
"failed": "失敗",
@@ -237,7 +267,7 @@
"theRecommendedMinerFee_{fee}": "本次交易建議礦工費為:",
"thisAddressOnlySupportsAssetsPleaseDoNotTransferToOtherPublicChainAssets": "該地址僅支持 資產,請勿轉入其他公鏈資產",
"thisAddressOnlySupportsEthereumAssetsPleaseDoNotTransferToOtherPublicChainAssets": "This address only supports Ethereum assets, please do not transfer to other public chain assets.",
- "to": "[MISSING:zh-TW] 至",
+ "to": "至",
"toAddress": "至",
"to_(receive_{asset})": "接收地址(接收 )",
"transactionDetails": "交易詳情",
@@ -263,16 +293,18 @@
"tronNetworkFeeLongTips_1": "網絡費用會根據網絡情況有所不同,一旦交易確認,無論交易成功與否,費用均不退還。",
"tronNetworkFeeLongTips_2": "網絡費用是由TRON網絡收取, BFM Pay不會收取任何費用!",
"txStatus": {
- "created": "待廣播",
- "createdDesc": "交易已創建,等待廣播...",
+ "autoCloseIn": "{{seconds}}秒後自動關閉",
"broadcasted": "广播成功",
"broadcastedDesc": "交易已广播,等待区块确认...",
"broadcasting": "广播中",
"broadcastingDesc": "正在将交易广播到网络...",
+ "closeIn": "關閉 ({{seconds}}s)",
"confirmed": "交易已上链",
"confirmedDesc": "交易已成功上链",
"confirming": "等待上链",
"confirmingDesc": "正在等待区块确认...",
+ "created": "待廣播",
+ "createdDesc": "交易已創建,等待廣播...",
"failed": "交易失败",
"failedDesc": "交易处理失败,请稍后重试",
"viewDetails": "查看详情"
@@ -305,22 +337,7 @@
"trust": "发起委托",
"unstake": "解押"
},
- "pendingTx": {
- "title": "待處理交易",
- "broadcasting": "廣播中",
- "broadcasted": "等待上鏈",
- "failed": "廣播失敗",
- "retry": "重試",
- "delete": "刪除",
- "retryCount": "重試次數"
- },
- "broadcast": {
- "assetNotEnough": "資產餘額不足",
- "feeNotEnough": "手續費不足",
- "rejected": "交易被拒絕",
- "unknown": "廣播失敗,請稍後重試"
- },
- "unstake": "[MISSING:zh-TW] 解押",
+ "unstake": "解押",
"viewTransactionDetails": "查看交易詳情",
"youFinallyReceive": "本次贖回你实际得到",
"youMustReceive_{asset}QuantityGreaterThan_0": "您得到 的数量必须大于0",
diff --git a/src/i18n/locales/zh-TW/wallet.json b/src/i18n/locales/zh-TW/wallet.json
index e488f45e1..5a3ddd57f 100644
--- a/src/i18n/locales/zh-TW/wallet.json
+++ b/src/i18n/locales/zh-TW/wallet.json
@@ -4,6 +4,13 @@
"add": "添加錢包",
"defaultName": "我的錢包",
"randomName": "隨機名稱",
+ "carousel": {
+ "walletCount": "{{count}} 個錢包"
+ },
+ "menu": {
+ "addressBalanceQuery": "地址餘額查詢",
+ "addressTransactionsQuery": "地址交易查詢"
+ },
"chains": {
"title": "管理錢包網路",
"verifyTitle": "驗證錢包鎖",
@@ -15,7 +22,7 @@
"addBitcoinAddress": "添加 Bitcoin 地址",
"addToken": "添加幣種",
"addWallet": "添加錢包",
- "address": "[MISSING:zh-TW] 地址",
+ "address": "地址",
"address book": "地址簿",
"addressBook": "地址簿",
"addressInformation": "地址信息",
@@ -36,7 +43,7 @@
"assetId": "資產ID",
"assetType": "資產類型",
"assets": "資產",
- "balance": "[MISSING:zh-TW] 余额",
+ "balance": "餘額",
"belongingChain": "所屬鏈",
"bitcoinAddressSettings": "Bitcoin 地址設置",
"chainSelector": {
@@ -86,7 +93,7 @@
"edit address": "編輯地址",
"editSheet": {
"cancel": "取消",
- "confirmDelete": "[MISSING:zh-TW] 确认删除",
+ "confirmDelete": "確認刪除",
"delete": "刪除錢包",
"deleteDesc": "此操作無法撤銷",
"deleteTitle": "刪除錢包",
@@ -98,7 +105,7 @@
"save": "儲存",
"title": "錢包設定",
"verifyFailed": "驗證失敗",
- "verifying": "[MISSING:zh-TW] 验证中...",
+ "verifying": "驗證中...",
"walletName": "錢包名稱",
"walletNamePlaceholder": "請輸入錢包名稱"
},
@@ -139,10 +146,10 @@
"modifyAddress": "編輯地址",
"modifyWalletName": "修改錢包名稱",
"multiChainSupport": "多鏈支持",
- "myWallet": "[MISSING:zh-TW] 我的钱包",
+ "myWallet": "我的錢包",
"newCreateWallet": "創建錢包",
"nonIdentityAssociateAllChainTips": "原非身份錢包將根據助記詞關聯對應的所有鏈;",
- "notBackedUp": "[MISSING:zh-TW] 未备份",
+ "notBackedUp": "未備份",
"notFindCurrentlyActiveWallet": "無法找到當前激活的錢包",
"notImported": "(未導入)",
"obtainingThePrivateKeyIsEquivalentToOwningTheWalletAsset": "獲得私鑰等同於擁有錢包資產所有權",
@@ -151,7 +158,7 @@
"pleaseSwitchTheCurrentlyLoggedInWalletToAPackageContainingBitcoinEthereumBinanceAndTronNetworkAddressesBeforeUsingThosFeatureTheCurrentlyLoggedInWalletDoesNotSupportAnyOfTheAboveNetworks": "請將當前登錄錢包切換到包含 Bitcoin、Ethereum、Binance和Tron 網絡地址的錢包后再使用該功能。當前登錄的錢包不支持上述網絡。",
"privateKeyImport": "私鑰導入",
"privateKey_({chainname})": "私鑰()",
- "receive": "[MISSING:zh-TW] 收款",
+ "receive": "收款",
"remainAssetPrealnum": "當前總量",
"restoreIdentity": "恢復身份",
"restoreWallet": "恢復錢包",
@@ -175,10 +182,10 @@
"theWalletIsNotBackUpTips": "此錢包未備份,繼續退出您可能永遠失去該錢包,確定繼續?",
"thereIsAnUnbackedUpWalletIn_{appName}Tips": "中存在未備份的錢包,繼續退出您可能永遠失去該錢包,確定繼續?",
"thisRequestDoesNotHaveAMatchingWalletInCotPleaseAddTheCorrespondingWalletFirstAndTryAgain": "此請求在BFM Pay中無匹配的錢包,請先添加對應錢包后重試。",
- "toRestoreTheWalletInOrderToEnsureTheSecurityOfThe": "[MISSING:zh-TW] to restore the wallet. In order to ensure the security of the",
+ "toRestoreTheWalletInOrderToEnsureTheSecurityOfThe": "為恢復錢包,請確保安全性",
"to_({chain})": "至()",
"tokenDetail": "幣種詳情",
- "transfer": "[MISSING:zh-TW] 转账",
+ "transfer": "轉帳",
"tronAddressNotActiveNeed_1.1trxActive": "該地址未激活,需要消耗1.1TRX激活該地址",
"unsupportedWallets": "不支持的錢包",
"wallet": "錢包",
diff --git a/src/lib/wallet-utils.ts b/src/lib/wallet-utils.ts
index 557e8c91a..b715e6deb 100644
--- a/src/lib/wallet-utils.ts
+++ b/src/lib/wallet-utils.ts
@@ -21,12 +21,11 @@ const LOCALE_WORDLIST_MAP: Record = {
const NO_SPACE_LOCALES = ['zh-CN', 'zh-TW', 'ja', 'ko'];
/**
- * Generate a random wallet name using BIP39 wordlist
+ * Get a random word for wallet naming from BIP39 wordlist
* @param locale Current locale (e.g. 'zh-CN', 'en')
- * @param suffix Localized suffix (e.g. '钱包', 'Wallet')
- * @returns Generated wallet name (e.g. '爱钱包', 'Garden Wallet')
+ * @returns Formatted random word (e.g. 'Garden', '爱')
*/
-export function generateWalletName(locale: string, suffix: string): string {
+export function getRandomWalletWord(locale: string): string {
// Get wordlist for locale, fallback to English
const wordlist = LOCALE_WORDLIST_MAP[locale] ?? wordlists.english!;
@@ -34,12 +33,8 @@ export function generateWalletName(locale: string, suffix: string): string {
const randomWord = wordlist[Math.floor(Math.random() * wordlist.length)];
// Capitalize first letter for non-CJK languages
- const formattedWord = NO_SPACE_LOCALES.includes(locale)
+ return NO_SPACE_LOCALES.includes(locale)
? randomWord
: randomWord.charAt(0).toUpperCase() + randomWord.slice(1);
-
- // CJK languages don't use spaces
- const useSpace = !NO_SPACE_LOCALES.includes(locale);
-
- return useSpace ? `${formattedWord} ${suffix}` : `${formattedWord}${suffix}`;
}
+
diff --git a/src/pages/onboarding/recover.tsx b/src/pages/onboarding/recover.tsx
index 02d8f0959..ce3ab1901 100644
--- a/src/pages/onboarding/recover.tsx
+++ b/src/pages/onboarding/recover.tsx
@@ -18,7 +18,7 @@ import { useDuplicateDetection } from '@/hooks/use-duplicate-detection';
import { deriveWalletChainAddresses } from '@/services/chain-adapter';
import { deriveThemeHue } from '@/hooks/useWalletTheme';
import { useChainConfigs, useChainConfigState, useEnabledBioforestChainConfigs, walletActions, useLanguage } from '@/stores';
-import { generateWalletName } from '@/lib/wallet-utils';
+import { getRandomWalletWord } from '@/lib/wallet-utils';
import type { IWalletQuery } from '@/services/wallet/types';
import { IconAlertCircle as AlertCircle, IconLoader2 as Loader2, IconCircleCheck as CheckCircle } from '@tabler/icons-react';
import { ProgressSteps } from '@/components/common';
@@ -209,7 +209,10 @@ export function OnboardingRecoverPage() {
const wallet = await walletActions.createWallet(
{
- name: generateWalletName(currentLanguage, t('onboarding:create.walletSuffix')),
+ name: t('onboarding:create.generatedNamePattern', {
+ word: getRandomWalletWord(currentLanguage),
+ suffix: t('onboarding:create.walletSuffix'),
+ }),
keyType: 'mnemonic',
address: primaryChain.address,
chain: primaryChain.chain,
@@ -253,7 +256,10 @@ export function OnboardingRecoverPage() {
const wallet = await walletActions.createWallet(
{
- name: generateWalletName(currentLanguage, t('onboarding:create.walletSuffix')),
+ name: t('onboarding:create.generatedNamePattern', {
+ word: getRandomWalletWord(currentLanguage),
+ suffix: t('onboarding:create.walletSuffix'),
+ }),
keyType: 'arbitrary',
address: primary.address,
chain: primary.chainId,
diff --git a/src/pages/wallet/create.tsx b/src/pages/wallet/create.tsx
index 7779b0108..365cca7ff 100644
--- a/src/pages/wallet/create.tsx
+++ b/src/pages/wallet/create.tsx
@@ -19,7 +19,7 @@ import {
} from '@tabler/icons-react';
import { useChainConfigs, walletActions, useLanguage } from '@/stores';
import { generateMnemonic } from '@/lib/crypto';
-import { generateWalletName } from '@/lib/wallet-utils';
+import { getRandomWalletWord } from '@/lib/wallet-utils';
import { deriveWalletChainAddresses } from '@/services/chain-adapter';
import { deriveThemeHue } from '@/hooks/useWalletTheme';
import type { ChainConfig } from '@/services/chain-config';
@@ -124,7 +124,10 @@ export function WalletCreatePage() {
const wallet = await walletActions.createWallet(
{
- name: generateWalletName(currentLanguage, t('create.walletSuffix')),
+ name: t('create.generatedNamePattern', {
+ word: getRandomWalletWord(currentLanguage),
+ suffix: t('create.walletSuffix'),
+ }),
keyType: 'mnemonic',
address: primaryChain.address,
chain: primaryChain.chain,
diff --git a/src/stackflow/activities/tabs/WalletTab.tsx b/src/stackflow/activities/tabs/WalletTab.tsx
index cc9d8f904..bb1e7f22f 100644
--- a/src/stackflow/activities/tabs/WalletTab.tsx
+++ b/src/stackflow/activities/tabs/WalletTab.tsx
@@ -37,20 +37,8 @@ import {
import type { TransactionInfo } from "@/components/transaction/transaction-item";
import { toTransactionInfoList } from "@/components/transaction/adapters";
-const CHAIN_NAMES: Record = {
- ethereum: "Ethereum",
- bitcoin: "Bitcoin",
- tron: "Tron",
- binance: "BSC",
- bfmeta: "BFMeta",
- ccchain: "CCChain",
- pmchain: "PMChain",
- bfchainv2: "BFChain V2",
- btgmeta: "BTGMeta",
- biwmeta: "BIWMeta",
- ethmeta: "ETHMeta",
- malibu: "Malibu",
-};
+// Chain names are localized via t('common:chains.' + chainId)
+
// ==================== 内部内容组件:使用 useChainProvider 获取确保非空的 provider ====================
@@ -171,7 +159,6 @@ function WalletTabContent({
currentWalletId={currentWalletId}
selectedChain={selectedChain}
chainPreferences={chainPreferences}
- chainNames={CHAIN_NAMES}
onWalletChange={onWalletChange}
onCopyAddress={onCopyAddress}
onOpenChainSelector={onOpenChainSelector}
@@ -311,7 +298,7 @@ export function WalletTab() {
const currentWalletId = currentWallet?.id ?? null;
const selectedChain = useSelectedChain();
const chainPreferences = useChainPreferences();
- const selectedChainName = CHAIN_NAMES[selectedChain] ?? selectedChain;
+ const selectedChainName = t(`common:chains.${selectedChain}`, { defaultValue: selectedChain });
const chainConfigState = useChainConfigState();
const chainConfig = chainConfigState.snapshot
? chainConfigSelectors.getChainById(chainConfigState, selectedChain)
@@ -404,7 +391,7 @@ export function WalletTab() {
chainId={selectedChain}
fallback={
-
Chain not supported
+
{t("common:ecosystem.chainNotSupported")}
}
>
diff --git a/src/stackflow/components/TabBar.tsx b/src/stackflow/components/TabBar.tsx
index 7a2a20b4d..8c65a6379 100644
--- a/src/stackflow/components/TabBar.tsx
+++ b/src/stackflow/components/TabBar.tsx
@@ -132,15 +132,15 @@ export function TabBar({ activeTab, onTabChange, className }: TabBarProps) {
const storeAvailablePages = useStore(ecosystemStore, (s) => s.availableSubPages);
const hasRunningApps = useStore(miniappRuntimeStore, (s) => miniappRuntimeSelectors.getApps(s).length > 0);
const hasRunningStackApps = useStore(miniappRuntimeStore, miniappRuntimeSelectors.hasRunningStackApps);
-
+
// Pending transactions count for wallet tab badge
const currentWallet = useCurrentWallet();
const { transactions: pendingTxs } = usePendingTransactions(currentWallet?.id);
const pendingTxCount = pendingTxs.filter((tx) => tx.status !== 'confirmed').length;
-
+
// 生态 Tab 是否激活
const isEcosystemActive = activeTab === 'ecosystem';
-
+
// 生态指示器(图标slider + 分页点)
const availablePages = useMemo(() => {
if (storeAvailablePages?.length) return storeAvailablePages;
@@ -165,7 +165,7 @@ export function TabBar({ activeTab, onTabChange, className }: TabBarProps) {
const tabConfigs: Tab[] = useMemo(() => [
{ id: "wallet", label: t('a11y.tabWallet'), icon: IconWallet },
- { id: "ecosystem", label: t('a11y.tabEcosystem', '生态'), icon: ecosystemIcon },
+ { id: "ecosystem", label: t('a11y.tabEcosystem'), icon: ecosystemIcon },
{ id: "settings", label: t('a11y.tabSettings'), icon: IconSettings },
], [t, ecosystemIcon]);