feat(i18n): 添加多语言支持及翻译文本更新
Some checks failed
lotteryadmin CI / build (push) Has been cancelled

- 在错误页面和未找到页面组件中集成 i18next,实现多语言动态显示
- 新增英文和尼泊尔语的错误信息、按钮文本及页面提示的翻译键值
- 扩充英文语言包,完善代理、玩家、结算中心和通用配置相关的翻译内容
- 修正和补充尼泊尔语翻译文本,统一界面用词,提升本地化体验
- 在多个配置文件中新增和调整用于界面交互和状态提示的翻译项
- 在代码中替换硬编码文本为相应的翻译函数调用,支持国际化展示
This commit is contained in:
2026-07-07 09:44:12 +08:00
parent ef8e763551
commit 99e644caa1
16 changed files with 276 additions and 164 deletions

View File

@@ -2,6 +2,7 @@
import { useEffect } from "react";
import Link from "next/link";
import { useTranslation } from "react-i18next";
export default function AdminError({
error,
@@ -10,15 +11,16 @@ export default function AdminError({
error: Error & { digest?: string };
reset: () => void;
}): React.ReactElement {
const { t } = useTranslation();
useEffect(() => {
console.error("[AdminError]", error);
}, [error]);
return (
<div className="flex min-h-[60vh] flex-col items-center justify-center gap-4 p-6 text-center">
<h1 className="text-xl font-semibold"></h1>
<h1 className="text-xl font-semibold">{t("error.pageLoadFailed")}</h1>
<p className="max-w-md text-sm text-muted-foreground">
{t("error.unexpectedError")}
</p>
{process.env.NODE_ENV === "development" ? (
<pre className="max-w-xl overflow-auto rounded-md bg-muted p-3 text-left text-xs">
@@ -31,10 +33,10 @@ export default function AdminError({
onClick={reset}
className="rounded-md border px-4 py-2 text-sm"
>
{t("actions.retry")}
</button>
<Link href="/admin" className="rounded-md bg-primary px-4 py-2 text-sm text-primary-foreground">
{t("error.backToHome")}
</Link>
</div>
</div>

View File

@@ -1,12 +1,16 @@
"use client";
import Link from "next/link";
import { useTranslation } from "react-i18next";
export default function AdminNotFound(): React.ReactElement {
const { t } = useTranslation();
return (
<div className="flex min-h-[60vh] flex-col items-center justify-center gap-4 p-6 text-center">
<h1 className="text-xl font-semibold"></h1>
<p className="text-sm text-muted-foreground"></p>
<h1 className="text-xl font-semibold">{t("notFound.title")}</h1>
<p className="text-sm text-muted-foreground">{t("notFound.description")}</p>
<Link href="/admin" className="rounded-md bg-primary px-4 py-2 text-sm text-primary-foreground">
{t("error.backToHome")}
</Link>
</div>
);

View File

@@ -289,19 +289,27 @@
"end": "End",
"endDate": "End date",
"hideAdvanced": "Hide custom dates",
"hintsFailed": "Failed to load opening suggestions",
"invalidRange": "End date cannot be before start date",
"manageHint": "Open and close periods here; bills above update automatically. Quick presets are usually enough.",
"manageTitle": "Period management",
"markerOccupied": "Occupied period",
"markerPending": "Pending turnover",
"markerUnpaid": "Unsettled period",
"open": "Open period",
"openDesc": "Select the start and end dates; gray strikethrough dates are occupied, amber dots indicate pending turnover, red dots at top-right indicate unsettled periods.",
"openFailed": "Failed to open period",
"openHint": "Local dates ({{tz}})",
"openWithPreset": "Apply quick preset",
"opened": "Period opened",
"overlapsOccupied": "The selected range overlaps with existing periods. Please avoid dates with gray strikethrough lines.",
"presetHint": "Quick period presets (recommended)",
"presetLastWeek": "Last week",
"presetThisMonth": "This month",
"presetThisWeek": "This week",
"range": "Period",
"rangeHint": "Select a start date, then an end date. For a single-day period, click the same day twice.",
"rangeLabel": "Period range",
"showAdvanced": "Custom start/end dates",
"start": "Start",
"startDate": "Start date",

View File

@@ -29,10 +29,16 @@
"exportExcel": "Export Excel",
"save": "Save changes",
"saving": "Saving…",
"retry": "Retry",
"cancel": "Cancel",
"updateSuccess": "Updated successfully",
"updateFailed": "Update failed",
"updatePassword": "Update password"
},
"loading": "Loading…",
"submitting": "Submitting…",
"loadFailed": "Load failed",
"cancel": "Cancel",
"accountSettings": "Account settings",
"accountSettingsDesc": "Manage your profile and security settings.",
"profileSettings": "Profile",
@@ -115,7 +121,8 @@
"comingSoon": "Feature under development",
"yes": "Yes",
"no": "No",
"none": "None"
"none": "None",
"empty": "No data"
},
"status": {
"enabled": "Enabled",
@@ -129,6 +136,16 @@
"errors": {
"loadFailed": "Failed to load"
},
"error": {
"generic": "Operation failed, please try again later",
"pageLoadFailed": "Page load failed",
"unexpectedError": "The admin console encountered an unexpected error. Please retry or return to the homepage.",
"backToHome": "Back to home"
},
"notFound": {
"title": "Page not found",
"description": "Please check the URL or return to the admin dashboard."
},
"permission": {
"deniedTitle": "Access denied",
"deniedDescription": "Your account does not have permission to open this page. Ask an administrator to assign the required role permissions."

View File

@@ -429,6 +429,7 @@
"riskCap": {
"actions": {
"addSpecialCap": "+ Add special cap",
"addNumberCap": "+ Add number cap",
"close": "Close",
"exportCsv": "Export CSV",
"filterPresets": "Filter presets…",
@@ -509,6 +510,7 @@
},
"table": {
"actions": "Actions",
"draw": "Draw",
"capAmount": "Cap amount",
"number": "Number",
"ratio": "Ratio",

View File

@@ -48,10 +48,12 @@
"defaultCurrency": "Default currency",
"delete": "Delete",
"deleteFailed": "Delete failed",
"deletePlayer": "Delete player",
"deleteSuccess": "Deleted player {{name}}",
"detailSubtitle": "{{site}} · {{sitePlayerId}} · ID {{playerId}}",
"detailTitle": "Player details",
"edit": "Edit",
"editPlayer": "Edit player",
"editDialogDesc": "Edit player information.",
"editDialogTitle": "Edit player",
"filterAllSites": "All sites",
@@ -76,6 +78,7 @@
"refresh": "Refresh",
"riskTags": "Risk tags",
"save": "Save",
"saveChanges": "Save changes",
"saving": "Saving…",
"scopeAgentLine": "Scope: {{site}} · agent line “{{name}}” and downstream players",
"scopeAllSites": "Scope: all players on all sites (super admin)",

View File

@@ -206,7 +206,9 @@
"billType": {
"adjustment": "Adjustment",
"reversal": "Reversal",
"badDebt": "Bad debt write-off"
"badDebt": "Bad debt write-off",
"player": "Player bill",
"agent": "Agent bill"
},
"adjustmentType": {
"adjustment": "Adjustment",
@@ -215,7 +217,8 @@
},
"paymentStatus": {
"pending": "Pending",
"confirmed": "Confirmed"
"confirmed": "Confirmed",
"partial": "Partial"
},
"actions": {
"detail": "Detail",
@@ -277,6 +280,11 @@
"rebateAllocTicket": "Ticket",
"showRawRebateAllocations": "Show per-ticket detail ({{count}})",
"hideRawRebateAllocations": "Hide per-ticket detail",
"billItems": "Bill items",
"billType": "Bill type",
"hideDetails": "Hide details",
"showDetails": "Show details",
"subBillCount": "Sub-bills",
"payment": "Payment",
"flowHint": {
"playerPayAgent": "Player should settle with the direct agent",

View File

@@ -61,12 +61,12 @@
"title": "प्रथम-स्तर एजेन्ट सिर्जना",
"username": "एडमिन लगइन",
"walletUrl": "वालेट API URL (वैकल्पिक)",
"siteCode": "接入站点",
"siteCodePlaceholder": "选择站点",
"siteRequired": "请选择接入站点",
"noUnboundSite": "暂无未绑定一级代理的站点",
"openIntegrationSites": "前往接入站点",
"passwordHint": "至少 6 位"
"siteCode": "एकीकरण साइट",
"siteCodePlaceholder": "साइट चयन गर्नुहोस्",
"siteRequired": "एकीकरण साइट चयन गर्नुहोस्",
"noUnboundSite": "प्रथम-स्तर एजेन्ट नभएका साइटहरू छैनन्",
"openIntegrationSites": "एकीकरण साइटहरूमा जानुहोस्",
"passwordHint": "कम्तीमा ६ क्यारेक्टर"
},
"lineUi": {
"agentCount": "यो समूहमा {{count}} एजेन्ट",
@@ -103,25 +103,25 @@
"tabProfile": "शेयर र क्रेडिट",
"tabProfileReadOnly": "शेयर र क्रेडिट (पढ्न मात्र)",
"viewAll": "सबै हेर्नुहोस्",
"tabProfileShort": "占成授信",
"profileReadOnlyHint": "占成、授信与回水由上级配置,如需调整请联系上级代理或平台。",
"selfAgentOverviewHint": "以下为上级为您分配的授信额度,占成与回水由上级在后台维护,本账号不可查看或修改。",
"overviewDownlineHint": "直属下级 {{count}} 可在「直属下级」Tab 管理。",
"playersUnavailableHint": "当前代理未开启“允许创建玩家”,如需新增请先调整该代理配置。",
"playersNoPermissionHint": "当前账号没有该节点的玩家管理权限。",
"parentMeta": "上级 {{name}}",
"profileTabHint": "占成、授信、回水与风控标签在此维护;登录名与密码请用「账号与状态」。",
"nextSteps": "建议操作",
"stepProfile": "配置占成、授信与回水",
"stepDownline": "管理直属下级(当前 {{count}} 个)",
"stepPlayers": "创建或维护直属玩家",
"downlineEmpty": "暂无直属下级。创建下级代理后将在此展示。",
"downlineEmptyShort": "暂无直属下级。",
"sidebarShareRate": "占成 {{rate}}%",
"sidebarAvailableCredit": "可下发 {{amount}}",
"expand": "展开",
"collapse": "收起",
"openInTree": "在树中打开",
"tabProfileShort": "शेयर र क्रेडिट",
"profileReadOnlyHint": "शेयर, क्रेडिट र रिबेट तपाईंको माथिल्लो एजेन्टले कन्फिगर गर्छ। परिवर्तनको लागि आफ्नो माथिल्लो एजेन्ट वा प्लेटफर्मलाई सम्पर्क गर्नुहोस्।",
"selfAgentOverviewHint": "तलको क्रेडिट तपाईंको माथिल्लो एजेन्टले बाँडेको हो। शेयर र रिबेट माथिल्लो तहले व्यवस्थापन गर्छ; यो खाताले हेर्न वा सम्पादन गर्न सक्दैन।",
"overviewDownlineHint": "{{count}} प्रत्यक्ष अधीनस्थ एजेन्ट(हरू)। तिनलाई «अधीनस्थ» ट्याबमा व्यवस्थापन गर्नुहोस्।",
"playersUnavailableHint": "यो एजेन्टले खेलाडी सिर्जना गर्न सक्दैन। पहिले एजेन्ट प्रोफाइलमा «खेलाडी सिर्जना अनुमति» सक्षम गर्नुहोस्।",
"playersNoPermissionHint": "यो खातासँग यो नोडमा खेलाडी व्यवस्थापन अनुमति छैन।",
"parentMeta": "माथिल्लो {{name}}",
"profileTabHint": "शेयर, क्रेडिट, रिबेट र जोखिम ट्याग यहाँ व्यवस्थापन गर्नुहोस्। लगइन नाम र पासवर्डको लागि «खाता र स्थिति» प्रयोग गर्नुहोस्।",
"nextSteps": "सुझावित अर्को कदम",
"stepProfile": "शेयर, क्रेडिट र रिबेट कन्फिगर गर्नुहोस्",
"stepDownline": "प्रत्यक्ष अधीनस्थ व्यवस्थापन गर्नुहोस् (अहिले {{count}})",
"stepPlayers": "प्रत्यक्ष खेलाडी सिर्जना वा व्यवस्थापन गर्नुहोस्",
"downlineEmpty": "अहिले प्रत्यक्ष अधीनस्थ छैन। चाइल्ड एजेन्ट सिर्जना पछि यहाँ देखिनेछ।",
"downlineEmptyShort": "अहिले प्रत्यक्ष अधीनस्थ छैन।",
"sidebarShareRate": "शेयर {{rate}}%",
"sidebarAvailableCredit": "दिन सकिने {{amount}}",
"expand": "विस्तार गर्नुहोस्",
"collapse": "संकुचित गर्नुहोस्",
"openInTree": "रूखमा खोल्नुहोस्",
"downlineColumns": {
"downlineCount": "अधीनस्थ संख्या",
"email": "इमेल"
@@ -165,23 +165,23 @@
"riskTags": "जोखिम ट्याग",
"riskTagsPlaceholder": "अल्पविरामले छुट्याउनुहोस्",
"scopedTo": "प्रत्यक्ष प्लेयर: {{agent}}",
"siteCode": "所属线路",
"passwordHint": "至少 6 位",
"passwordMinLength": "初始密码至少 6 位",
"creditLimitInvalid": "授信额度必须为不小于 0 的整数",
"creditLimitExceeded": "授信额度不能超过当前代理可下发额度",
"rebateRateInvalid": "回水比例须在 0100% 之间",
"fundingMode": "资金模式",
"authSource": "登录来源",
"rebateInherited": "继承代理默认回水",
"creditListHint": "信用占成盘:下列为玩家授信额度与可用信用,非主站钱包余额。",
"playerRef": "玩家标识",
"usernameNickname": "用户名 / 昵称",
"creditLimitAvailable": "授信 / 可用",
"searchPh": "搜索玩家账号 / 标识",
"manageSettlement": "处理账单",
"noPendingBillsGoCenter": "该玩家暂无待处理账单,已打开结算中心。",
"billingLoadFailed": "加载账单失败"
"siteCode": "लाइन साइट",
"passwordHint": "कम्तीमा ६ क्यारेक्टर",
"passwordMinLength": "प्रारम्भिक पासवर्ड कम्तीमा ६ क्यारेक्टर हुनुपर्छ",
"creditLimitInvalid": "क्रेडिट सीमा ≥ को पूर्णांक हुनुपर्छ",
"creditLimitExceeded": "क्रेडिट सीमा यो एजेन्टको उपलब्ध रकमभन्दा बढी हुन सक्दैन",
"rebateRateInvalid": "रिबेट दर ०–१००% को बीचमा हुनुपर्छ",
"fundingMode": "कोष मोड",
"authSource": "प्रमाणीकरण स्रोत",
"rebateInherited": "एजेन्ट पूर्वनिर्धारित रिबेट प्रयोग गर्नुहोस्",
"creditListHint": "क्रेडिट लाइन: तल खेलाडीको क्रेडिट सीमा र उपलब्ध क्रेडिट देखाइएको छ, मुख्य साइट वालेट ब्यालेन्स होइन।",
"playerRef": "खेलाडी सन्दर्भ",
"usernameNickname": "प्रयोगकर्ता नाम / उपनाम",
"creditLimitAvailable": "क्रेडिट सीमा / उपलब्ध",
"searchPh": "खेलाडी खाता / ID खोज्नुहोस्",
"manageSettlement": "बिल प्रक्रिया गर्नुहोस्",
"noPendingBillsGoCenter": "यो खेलाडीको कुनै प्रक्रिया हुन बाँकी बिल छैन। सेटलमेन्ट केन्द्र खोलियो।",
"billingLoadFailed": "बिल लोड गर्न असफल"
},
"profile": {
"canCreateChildAgent": "अधीनस्थ एजेन्ट सिर्जना अनुमति",
@@ -211,16 +211,16 @@
"rebateLimitRange": "रिबेट सीमा 0 र 1 को बीचमा हुनुपर्छ",
"shareRange": "शेयर दर 0 र 100 को बीचमा हुनुपर्छ"
},
"relativeShareRate": "占成比例(占上级 %",
"relativeShareRateValue": "占上级 {{rate}}%",
"actualShareRate": "实际占成 {{rate}}%",
"relativeShareCapHint": "占上级比例最高 100%(上级总占成 {{parent}}%",
"capabilityHint": "保存后对该代理主账号生效;若平台「代理」角色含玩家/节点管理权限,此前仍可能可操作——现已按本开关自动收紧登录权限。",
"parentCaps": "上级占成 {{share}}%,可下发 {{credit}}",
"availableCredit": "可下发额度 {{amount}}",
"riskTags": "风控标签",
"riskTagsPlaceholder": "逗号分隔,如 overdue, high_turnover",
"saveSuccess": "占成与授信已保存"
"relativeShareRate": "शेयर दर (माथिल्लोको %)",
"relativeShareRateValue": "माथिल्लोको {{rate}}%",
"actualShareRate": "वास्तविक शेयर {{rate}}%",
"relativeShareCapHint": "माथिल्लोको अधिकतम १००% (माथिल्लो कुल शेयर {{parent}}%)",
"capabilityHint": "बचत पछि यो एजेन्टको प्राथमिक खातामा लागू हुन्छ। यदि प्लेटफर्म «एजेन्ट» भूमिकामा खेलाडी/नोड व्यवस्थापन अनुमति थियो भने, अब लगइन अनुमतिहरू यी स्विचहरूद्वारा कडा पारिन्छन्।",
"parentCaps": "माथिल्लो शेयर {{share}}%, दिन सकिने {{credit}}",
"availableCredit": "दिन सकिने {{amount}}",
"riskTags": "जोखिम ट्याग",
"riskTagsPlaceholder": "अल्पविरामले छुट्याउनुहोस्, जस्तै overdue, high_turnover",
"saveSuccess": "शेयर र क्रेडिट बचत भयो"
},
"roles": {
"create": "भूमिका सिर्जना गर्नुहोस्",
@@ -235,10 +235,10 @@
"title": "एजेन्ट भूमिकाहरू",
"updateSuccess": "भूमिका {{name}} अद्यावधिक भयो",
"userCount": "प्रयोगकर्ताहरू",
"selectedCount": "已选 {{selected}} / {{total}} ",
"groupSelectedCount": "已选 {{selected}} / {{total}}",
"selectGroup": "本组全选",
"noAssignablePermissions": "当前没有可分配权限"
"selectedCount": "{{selected}} / {{total}} चयन गरियो",
"groupSelectedCount": "{{selected}} / {{total}} चयन गरियो",
"selectGroup": "यो समूह सबै चयन गर्नुहोस्",
"noAssignablePermissions": "अहिले कुनै अनुमति उपलब्ध छैन"
},
"saveFailed": "बचत गर्न असफल भयो",
"selectNode": "रूखबाट एजेन्ट नोड चयन गर्नुहोस्",
@@ -251,9 +251,9 @@
"status": "स्थिति",
"type": "प्रकार",
"unpaid": "बाँकी",
"party": "本方",
"counterparty": "对方",
"grossWinLoss": "输赢"
"party": "पक्ष",
"counterparty": "प्रतिपक्ष",
"grossWinLoss": "कुल नाफा/नोक्सान"
},
"description": "अवधि बन्द पछि बनेका प्लेयर/एजेन्ट बिल",
"emptyNoClosed": "बन्द अवधि छैन। बिल बन्द पछि सिर्जना हुन्छ।",
@@ -265,20 +265,20 @@
"title": "एजेन्ट बिल",
"typeAgent": "एजेन्ट बिल",
"typePlayer": "खेलाडी बिल",
"platform": "平台",
"filteredByPeriod": "当前仅显示账期 #{{id}} 的账单",
"clearPeriodFilter": "显示全部账期",
"detail": "详情",
"confirm": "确认账单",
"confirmed": "已确认",
"paymentAmount": "收付金额",
"recordPayment": "登记收付",
"paid": "已登记收付",
"subtreeSummary": "子树汇总",
"grossWinLoss": "输赢 (gross_win_loss)",
"rebateAmount": "回水",
"shareProfit": "占成利润",
"platformRounding": "平台尾差"
"platform": "प्लेटफर्म",
"filteredByPeriod": "अहिले अवधि #{{id}} का बिलहरू मात्र देखाइँदै",
"clearPeriodFilter": "सबै अवधि देखाउनुहोस्",
"detail": "विवरण",
"confirm": "बिल पुष्टि गर्नुहोस्",
"confirmed": "पुष्टि भयो",
"paymentAmount": "भुक्तानी रकम",
"recordPayment": "भुक्तानी दर्ता गर्नुहोस्",
"paid": "भुक्तानी दर्ता भयो",
"subtreeSummary": "उप-रूख सारांश",
"grossWinLoss": "कुल नाफा/नोक्सान (gross_win_loss)",
"rebateAmount": "रिबेट",
"shareProfit": "शेयर नाफा",
"platformRounding": "प्लेटफर्म पूर्णांकन"
},
"settlementPeriods": {
"datesRequired": "सुरु र अन्त्य मिति प्रविष्ट गर्नुहोस्",
@@ -295,21 +295,29 @@
"startDate": "सुरु मिति",
"statusClosed": "बन्द",
"statusOpen": "खुला",
"title": "代理账期",
"presetHint": "快捷账期(推荐)",
"openWithPreset": "填入快捷账期",
"showAdvanced": "自定义起止日期",
"hideAdvanced": "收起自定义日期",
"range": "账期",
"empty": "尚无账期,请选择快捷账期并开账。",
"start": "开始",
"end": "结束",
"status": "状态",
"close": "关账并生成账单",
"viewBills": "账单",
"opened": "账期已开启",
"closed": "账期已关账,账单已生成",
"closeFailed": "关账失败"
"title": "एजेन्ट अवधि",
"presetHint": "द्रुत अवधि (सिफारिस गरिन्छ)",
"openWithPreset": "द्रुत अवधि भर्नुहोस्",
"showAdvanced": "अनुकूल मिति दायरा",
"hideAdvanced": "अनुकूल मिति लुकाउनुहोस्",
"range": "अवधि",
"empty": "अहिले कुनै अवधि छैन। कृपया द्रुत अवधि चयन गरी अवधि खोल्नुहोस्।",
"start": "सुरु",
"end": "अन्त्य",
"status": "स्थिति",
"close": "अवधि बन्द गरी बिल सिर्जना गर्नुहोस्",
"viewBills": "बिलहरू",
"opened": "अवधि खोलियो",
"closed": "अवधि बन्द भयो, बिल सिर्जना भयो",
"closeFailed": "अवधि बन्द गर्न असफल",
"hintsFailed": "खोल्ने सुझाव लोड गर्न असफल",
"openDesc": "सुरु र अन्त्य मिति चयन गर्नुहोस्; खैरो स्ट्राइकथ्रु भएका मितिहरू अधिकृत अवधि हुन्, एम्बर बिन्दुहरू पेन्डिङ कारोबार हुन्, माथि-दायाँ रातो बिन्दुहरू नबुझिएको अवधि हुन्।",
"rangeLabel": "अवधि दायरा",
"rangeHint": "पहिले सुरु मिति चयन गर्नुहोस्, त्यसपछि अन्त्य मिति; एकल-दिन अवधिको लागि एउटै मिति दुई पटक क्लिक गर्नुहोस्।",
"markerOccupied": "अधिकृत अवधि",
"markerPending": "पेन्डिङ कारोबार",
"markerUnpaid": "नबुझिएको अवधि",
"overlapsOccupied": "चयन गरिएको दायरा अवस्थित अवधिसँग ओभरल्याप हुन्छ। कृपया खैरो स्ट्राइकथ्रु भएका मितिहरू नछान्नुहोस्।"
},
"siteSearch": "साइट नाम खोज्नुहोस्",
"sitesListHint": "कुञ्जी र कलब्याकको लागि",
@@ -362,67 +370,67 @@
},
"viewDownline": "चाइल्ड एजेन्ट र खेलाडी हेर्नुहोस्",
"settlementReports": {
"title": "账期报表(信用占成盘)",
"description": "§21.12 报表集:玩家输赢、代理占成、回水、授信、未结/逾期与平台盈亏。",
"type": "报表类型",
"footnote": "本组报表为信用占成盘账期口径,与「佣金/回水」旧钱包报表不同。",
"noPeriodHint": "未选具体账期时使用近 7 日区间;平台盈亏需选择账期。",
"title": "अवधि रिपोर्ट (क्रेडिट शेयर)",
"description": "§21.12 रिपोर्ट सेट: खेलाडी नाफा/नोक्सान, एजेन्ट शेयर, रिबेट, क्रेडिट, बाँकी/म्याद गुज्रिएको र प्लेटफर्म नाफा/नोक्सान।",
"type": "रिपोर्ट प्रकार",
"footnote": "यो रिपोर्ट समूह क्रेडिट शेयर अवधि दायरामा आधारित छ, पुरानो «कमिशन/रिबेट» वालेट रिपोर्टभन्दा फरक।",
"noPeriodHint": "कुनै विशेष अवधि चयन नगर्दा पछिल्लो ७ दिनको दायरा प्रयोग गरिन्छ; प्लेटफर्म नाफा/नोक्सानको लागि अवधि चयन आवश्यक छ।",
"types": {
"summary": "摘要",
"player_win_loss": "玩家输赢",
"agent_share": "代理占成",
"rebate": "回水",
"credit": "授信",
"unpaid_bills": "未结账单",
"overdue": "逾期",
"platform_pnl": "平台盈亏",
"draw_period": "期号维度"
"summary": "सारांश",
"player_win_loss": "खेलाडी नाफा/नोक्सान",
"agent_share": "एजेन्ट शेयर",
"rebate": "रिबेट",
"credit": "क्रेडिट",
"unpaid_bills": "बाँकी बिलहरू",
"overdue": "म्याद गुज्रिएको",
"platform_pnl": "प्लेटफर्म नाफा/नोक्सान",
"draw_period": "ड्र अवधि"
},
"summary": {
"billCount": "账单数",
"totalNet": "净额合计",
"totalUnpaid": "未结合计",
"overdueCount": "逾期账单",
"platformRounding": "平台尾差合计"
"billCount": "बिल संख्या",
"totalNet": "कुल नेट",
"totalUnpaid": "कुल बाँकी",
"overdueCount": "म्याद गुज्रिएको बिल",
"platformRounding": "कुल प्लेटफर्म पूर्णांकन"
},
"rebate": {
"accrued": "应计",
"inBill": "已入账单",
"settled": "已结算",
"allocated": "已分摊"
"accrued": "उपार्जित",
"inBill": "बिलमा समावेश",
"settled": "सेटल भयो",
"allocated": "बाँडफाँड भयो"
},
"credit": {
"agents": "代理授信",
"players": "玩家授信"
"agents": "एजेन्ट क्रेडिट",
"players": "खेलाडी क्रेडिट"
},
"platformPnl": {
"periodRequired": "请选择具体账期后查看平台盈亏。",
"billNet": "平台账单净额",
"rounding": "尾差调整",
"shareProfit": "占成利润(元数据)"
"periodRequired": "कृपया प्लेटफर्म नाफा/नोक्सान हेर्नको लागि विशेष अवधि चयन गर्नुहोस्।",
"billNet": "प्लेटफर्म बिल नेट",
"rounding": "पूर्णांकन समायोजन",
"shareProfit": "शेयर नाफा (मेटाडेटा)"
},
"columns": {
"player": "玩家",
"gameType": "玩法",
"grossWinLoss": "输赢",
"rebate": "回水",
"agentId": "代理 ID",
"count": "笔数",
"billId": "账单",
"billType": "类型",
"unpaid": "未结",
"status": "状态",
"overdueDays": "逾期天数",
"drawNo": "期号",
"code": "编码",
"name": "名称",
"creditLimit": "授信",
"allocated": "已下发",
"available": "可用",
"used": "已用",
"frozen": "冻结",
"rebateType": "回水类型",
"amount": "金额"
"player": "खेलाडी",
"gameType": "खेल प्रकार",
"grossWinLoss": "कुल नाफा/नोक्सान",
"rebate": "रिबेट",
"agentId": "एजेन्ट ID",
"count": "संख्या",
"billId": "बिल",
"billType": "प्रकार",
"unpaid": "बाँकी",
"status": "स्थिति",
"overdueDays": "म्याद गुज्रिएको दिन",
"drawNo": "ड्र नं.",
"code": "कोड",
"name": "नाम",
"creditLimit": "क्रेडिट",
"allocated": "बाँडिएको",
"available": "उपलब्ध",
"used": "प्रयोग भएको",
"frozen": "फ्रिज",
"rebateType": "रिबेट प्रकार",
"amount": "रकम"
}
}
}

View File

@@ -3,6 +3,7 @@
"accountSettingsDesc": "आफ्नो प्रोफाइल र सुरक्षा सेटिङ व्यवस्थापन गर्नुहोस्।",
"actions": {
"apply": "लागू गर्नुहोस्",
"cancel": "रद्द गर्नुहोस्",
"clear": "खाली गर्नुहोस्",
"close": "बन्द गर्नुहोस्",
"create": "सिर्जना गर्नुहोस्",
@@ -14,6 +15,7 @@
"logout": "लगआउट",
"refresh": "रिफ्रेस",
"reset": "रिसेट",
"retry": "पुनः प्रयास",
"reviewNow": "अहिले समीक्षा गर्नुहोस्",
"save": "परिवर्तन सुरक्षित गर्नुहोस्",
"saving": "सुरक्षित हुँदैछ…",
@@ -43,6 +45,7 @@
"checkingShort": "कार्यस्थान खोल्दै…",
"sessionExpired": "लगइन समाप्त भयो। कृपया पुनः लगइन गर्नुहोस्।"
},
"cancel": "रद्द गर्नुहोस्",
"confirm": {
"cancel": "रद्द",
"confirm": "पुष्टि गर्नुहोस्",
@@ -68,6 +71,16 @@
"errors": {
"loadFailed": "लोड असफल भयो"
},
"error": {
"generic": "कार्य असफल भयो, कृपया पछि पुनः प्रयास गर्नुहोस्",
"pageLoadFailed": "पृष्ठ लोड असफल",
"unexpectedError": "प्रशासन प्यानलमा अप्रत्याशित त्रुटि भयो। कृपया पुनः प्रयास गर्नुहोस् वा गृहपृष्ठमा फर्कनुहोस्।",
"backToHome": "गृहपृष्ठमा फर्कनुहोस्"
},
"notFound": {
"title": "पृष्ठ फेला परेन",
"description": "कृपया ठेगाना जाँच गर्नुहोस् वा प्रशासन प्यानलमा फर्कनुहोस्।"
},
"export": {
"adminRoles": {
"filename": "bhumika-suchi",
@@ -162,6 +175,8 @@
"title": "इन्टरफेस भाषा",
"zh": "中文"
},
"loadFailed": "लोड असफल",
"loading": "लोड हुँदै…",
"nav": {
"account": "खाता सेटिङ",
"admin_roles": "भूमिका व्यवस्थापन",
@@ -232,13 +247,15 @@
"noResource": "स्रोत छैन",
"yes": "हो",
"no": "होइन",
"none": "छैन"
"none": "छैन",
"empty": "डाटा छैन"
},
"status": {
"enabled": "सक्रिय",
"disabled": "निष्क्रिय",
"label": "स्थिति"
},
"submitting": "पेश हुँदै…",
"table": {
"actions": "कार्य",
"id": "ID"

View File

@@ -80,11 +80,11 @@
"name": "नाम",
"status": "स्थिति",
"walletUrl": "वालेट API",
"currency": "币种",
"lineRoot": "一级代理",
"h5Url": "彩票 H5",
"ssoSecret": "SSO 密钥",
"walletApiKey": "钱包密钥"
"currency": "मुद्रा",
"lineRoot": "स्तर-१ एजेन्ट",
"h5Url": "लटरी H5",
"ssoSecret": "SSO गोप्य",
"walletApiKey": "वालेट API कुञ्जी"
},
"connectivityDescription": "परीक्षण खेलाडीबाट साइट {{code}} को balance API कल गर्नुहोस्।",
"connectivityFailed": "जडान असफल",
@@ -172,10 +172,10 @@
"statusEnabled": "सक्रिय",
"title": "मुख्य साइट एकीकरण साइटहरू",
"updateSuccess": "साइट {{code}} अद्यावधिक भयो",
"lineRootBound": "已绑定",
"lineRootUnbound": "未绑定",
"secretNotConfigured": "尚未配置密钥",
"secretCopyRequiresManage": "需要接入站点管理权限才能复制密钥"
"lineRootBound": "बाँधिएको",
"lineRootUnbound": "बाँधिएको छैन",
"secretNotConfigured": "गोप्य कुञ्जी कन्फिगर गरिएको छैन",
"secretCopyRequiresManage": "गोप्य कुञ्जी प्रतिलिपि गर्न एकीकरण साइट व्यवस्थापन अनुमति आवश्यक छ"
},
"nav": {
"aria": "सञ्चालन कन्फिगरेसन उप-नेभिगेसन",
@@ -429,6 +429,7 @@
"riskCap": {
"actions": {
"addSpecialCap": "+ विशेष क्याप थप्नुहोस्",
"addNumberCap": "+ नम्बर क्याप थप्नुहोस्",
"close": "बन्द",
"exportCsv": "CSV निर्यात",
"filterPresets": "प्रिसेट फिल्टर…",
@@ -509,6 +510,7 @@
},
"table": {
"actions": "कार्य",
"draw": "ड्र",
"capAmount": "क्याप रकम",
"number": "नम्बर",
"ratio": "अनुपात",

View File

@@ -48,10 +48,12 @@
"defaultCurrency": "पूर्वनिर्धारित मुद्रा",
"delete": "मेटाउनुहोस्",
"deleteFailed": "मेटाउन असफल",
"deletePlayer": "खेलाडी मेटाउनुहोस्",
"deleteSuccess": "खेलाडी {{name}} मेटाइयो",
"detailSubtitle": "{{site}} · {{sitePlayerId}} · ID {{playerId}}",
"detailTitle": "खेलाडी विवरण",
"edit": "सम्पादन",
"editPlayer": "खेलाडी सम्पादन गर्नुहोस्",
"editDialogDesc": "खेलाडी जानकारी सम्पादन गर्नुहोस्।",
"editDialogTitle": "खेलाडी सम्पादन",
"filterAllSites": "सबै साइट",
@@ -74,6 +76,7 @@
"profileSection": "प्रोफाइल",
"refresh": "रिफ्रेस",
"save": "सुरक्षित गर्नुहोस्",
"saveChanges": "परिवर्तन सुरक्षित गर्नुहोस्",
"saving": "सुरक्षित हुँदैछ…",
"scopeAgentLine": "स्कोप: {{site}} · एजेन्ट लाइन “{{name}}” र अधीनस्थ खेलाडी",
"scopeAllSites": "स्कोप: सबै साइटका सबै खेलाडी (सुपर एडमिन)",

View File

@@ -325,7 +325,15 @@
"openFailed": "开账失败",
"closeFailed": "关账失败",
"datesRequired": "请填写账期起止日期",
"invalidRange": "结束日期不能早于开始日期"
"invalidRange": "结束日期不能早于开始日期",
"openDesc": "选择账期起止日期;灰色删除线为已有账期不可再开,琥珀点为待入账,右上角红点为未结清。",
"rangeLabel": "账期范围",
"rangeHint": "先选开始日期,再选结束日期;单日账期可点同一天两次。",
"markerOccupied": "已有账期",
"markerPending": "待入账流水",
"markerUnpaid": "未结清账期",
"overlapsOccupied": "所选范围与已有账期重叠,请避开灰色删除线的日期。",
"hintsFailed": "无法加载开账建议"
},
"lineProvision": {
"title": "创建一级代理",

View File

@@ -31,8 +31,14 @@
"saving": "保存中…",
"updateSuccess": "更新成功",
"updateFailed": "更新失败",
"retry": "重试",
"cancel": "取消",
"updatePassword": "更新密码"
},
"loading": "加载中…",
"submitting": "提交中…",
"loadFailed": "加载失败",
"cancel": "取消",
"accountSettings": "账号设置",
"accountSettingsDesc": "管理您的基本账号资料及安全设置。",
"profileSettings": "基本资料",
@@ -115,7 +121,8 @@
"comingSoon": "功能开发中",
"yes": "是",
"no": "否",
"none": "无"
"none": "无",
"empty": "暂无数据"
},
"status": {
"enabled": "启用",
@@ -129,6 +136,16 @@
"errors": {
"loadFailed": "加载失败"
},
"error": {
"generic": "操作失败,请稍后重试",
"pageLoadFailed": "页面加载失败",
"unexpectedError": "管理后台遇到意外错误,请重试或返回首页。",
"backToHome": "返回首页"
},
"notFound": {
"title": "页面不存在",
"description": "请检查地址或返回管理后台首页。"
},
"permission": {
"deniedTitle": "无访问权限",
"deniedDescription": "当前账号没有访问此页面的权限。如需开通,请联系管理员在角色管理中分配相应功能权限。"

View File

@@ -631,10 +631,12 @@
"readOnly": "只读",
"defaultCap": {
"title": "默认限额",
"fieldLabel": "限额金额"
"fieldLabel": "限额金额",
"description": "未命中特殊配置的号码,统一回落到这里。"
},
"specialCaps": {
"title": "号码限额"
"title": "号码限额",
"description": "选择期号则为按期号单独限额,不选期为全局号码限额。"
},
"scope": {

View File

@@ -105,6 +105,9 @@
"usernamePlaceholderOptional": "选填",
"nicknamePlaceholderOptional": "选填",
"defaultCurrency": "默认币种",
"editPlayer": "编辑玩家",
"deletePlayer": "删除玩家",
"saveChanges": "保存修改",
"cancel": "取消",
"save": "保存",
"saving": "保存中…",

View File

@@ -191,7 +191,9 @@
"billType": {
"adjustment": "补差单",
"reversal": "冲正单",
"badDebt": "坏账核销"
"badDebt": "坏账核销",
"player": "玩家账单",
"agent": "代理账单"
},
"adjustmentType": {
"adjustment": "补差",
@@ -200,7 +202,8 @@
},
"paymentStatus": {
"pending": "待确认",
"confirmed": "已确认"
"confirmed": "已确认",
"partial": "部分"
},
"actions": {
"detail": "详情",
@@ -262,6 +265,11 @@
"rebateAllocTicket": "注单",
"showRawRebateAllocations": "展开按注单明细 ({{count}})",
"hideRawRebateAllocations": "收起按注单明细",
"billItems": "账单项目",
"billType": "账单类型",
"hideDetails": "隐藏详情",
"showDetails": "显示详情",
"subBillCount": "子账单",
"payment": "收付",
"flowHint": {
"playerPayAgent": "玩家应向直属代理结算",