diff --git a/src/app/error.tsx b/src/app/error.tsx
index 134ac25..ab637fd 100644
--- a/src/app/error.tsx
+++ b/src/app/error.tsx
@@ -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 (
-
页面加载失败
+
{t("error.pageLoadFailed")}
- 管理后台遇到意外错误,请重试或返回首页。
+ {t("error.unexpectedError")}
{process.env.NODE_ENV === "development" ? (
@@ -31,10 +33,10 @@ export default function AdminError({
onClick={reset}
className="rounded-md border px-4 py-2 text-sm"
>
- 重试
+ {t("actions.retry")}
- 返回首页
+ {t("error.backToHome")}
diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx
index ec6e4c4..6970cd2 100644
--- a/src/app/not-found.tsx
+++ b/src/app/not-found.tsx
@@ -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 (
-
页面不存在
-
请检查地址或返回管理后台首页。
+
{t("notFound.title")}
+
{t("notFound.description")}
- 返回首页
+ {t("error.backToHome")}
);
diff --git a/src/i18n/locales/en/agents.json b/src/i18n/locales/en/agents.json
index f4a2e75..116cda1 100644
--- a/src/i18n/locales/en/agents.json
+++ b/src/i18n/locales/en/agents.json
@@ -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",
diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json
index 55ebb33..e63a0de 100644
--- a/src/i18n/locales/en/common.json
+++ b/src/i18n/locales/en/common.json
@@ -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."
diff --git a/src/i18n/locales/en/config.json b/src/i18n/locales/en/config.json
index f7e409c..ddbfa2a 100644
--- a/src/i18n/locales/en/config.json
+++ b/src/i18n/locales/en/config.json
@@ -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",
diff --git a/src/i18n/locales/en/players.json b/src/i18n/locales/en/players.json
index ca7655a..bf61be3 100644
--- a/src/i18n/locales/en/players.json
+++ b/src/i18n/locales/en/players.json
@@ -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)",
diff --git a/src/i18n/locales/en/settlementCenter.json b/src/i18n/locales/en/settlementCenter.json
index ad4b53f..5fb0a9e 100644
--- a/src/i18n/locales/en/settlementCenter.json
+++ b/src/i18n/locales/en/settlementCenter.json
@@ -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",
diff --git a/src/i18n/locales/ne/agents.json b/src/i18n/locales/ne/agents.json
index 0e6a22b..65018ec 100644
--- a/src/i18n/locales/ne/agents.json
+++ b/src/i18n/locales/ne/agents.json
@@ -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": "回水比例须在 0–100% 之间",
- "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": "रकम"
}
}
}
diff --git a/src/i18n/locales/ne/common.json b/src/i18n/locales/ne/common.json
index 7978387..68a973b 100644
--- a/src/i18n/locales/ne/common.json
+++ b/src/i18n/locales/ne/common.json
@@ -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"
diff --git a/src/i18n/locales/ne/config.json b/src/i18n/locales/ne/config.json
index 63d45ba..7df3fe0 100644
--- a/src/i18n/locales/ne/config.json
+++ b/src/i18n/locales/ne/config.json
@@ -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": "अनुपात",
diff --git a/src/i18n/locales/ne/players.json b/src/i18n/locales/ne/players.json
index 71e2a1f..0d38a91 100644
--- a/src/i18n/locales/ne/players.json
+++ b/src/i18n/locales/ne/players.json
@@ -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": "स्कोप: सबै साइटका सबै खेलाडी (सुपर एडमिन)",
diff --git a/src/i18n/locales/zh/agents.json b/src/i18n/locales/zh/agents.json
index ee256f0..d8fff97 100644
--- a/src/i18n/locales/zh/agents.json
+++ b/src/i18n/locales/zh/agents.json
@@ -325,7 +325,15 @@
"openFailed": "开账失败",
"closeFailed": "关账失败",
"datesRequired": "请填写账期起止日期",
- "invalidRange": "结束日期不能早于开始日期"
+ "invalidRange": "结束日期不能早于开始日期",
+ "openDesc": "选择账期起止日期;灰色删除线为已有账期不可再开,琥珀点为待入账,右上角红点为未结清。",
+ "rangeLabel": "账期范围",
+ "rangeHint": "先选开始日期,再选结束日期;单日账期可点同一天两次。",
+ "markerOccupied": "已有账期",
+ "markerPending": "待入账流水",
+ "markerUnpaid": "未结清账期",
+ "overlapsOccupied": "所选范围与已有账期重叠,请避开灰色删除线的日期。",
+ "hintsFailed": "无法加载开账建议"
},
"lineProvision": {
"title": "创建一级代理",
diff --git a/src/i18n/locales/zh/common.json b/src/i18n/locales/zh/common.json
index 4d075bc..9eec73a 100644
--- a/src/i18n/locales/zh/common.json
+++ b/src/i18n/locales/zh/common.json
@@ -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": "当前账号没有访问此页面的权限。如需开通,请联系管理员在角色管理中分配相应功能权限。"
diff --git a/src/i18n/locales/zh/config.json b/src/i18n/locales/zh/config.json
index 53fe3c9..dd59a99 100644
--- a/src/i18n/locales/zh/config.json
+++ b/src/i18n/locales/zh/config.json
@@ -631,10 +631,12 @@
"readOnly": "只读",
"defaultCap": {
"title": "默认限额",
- "fieldLabel": "限额金额"
+ "fieldLabel": "限额金额",
+ "description": "未命中特殊配置的号码,统一回落到这里。"
},
"specialCaps": {
- "title": "号码限额"
+ "title": "号码限额",
+ "description": "选择期号则为按期号单独限额,不选期为全局号码限额。"
},
"scope": {
diff --git a/src/i18n/locales/zh/players.json b/src/i18n/locales/zh/players.json
index 067e9a4..1a99772 100644
--- a/src/i18n/locales/zh/players.json
+++ b/src/i18n/locales/zh/players.json
@@ -105,6 +105,9 @@
"usernamePlaceholderOptional": "选填",
"nicknamePlaceholderOptional": "选填",
"defaultCurrency": "默认币种",
+ "editPlayer": "编辑玩家",
+ "deletePlayer": "删除玩家",
+ "saveChanges": "保存修改",
"cancel": "取消",
"save": "保存",
"saving": "保存中…",
diff --git a/src/i18n/locales/zh/settlementCenter.json b/src/i18n/locales/zh/settlementCenter.json
index 720d9ac..0ceab9c 100644
--- a/src/i18n/locales/zh/settlementCenter.json
+++ b/src/i18n/locales/zh/settlementCenter.json
@@ -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": "玩家应向直属代理结算",