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

View File

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

View File

@@ -289,19 +289,27 @@
"end": "End", "end": "End",
"endDate": "End date", "endDate": "End date",
"hideAdvanced": "Hide custom dates", "hideAdvanced": "Hide custom dates",
"hintsFailed": "Failed to load opening suggestions",
"invalidRange": "End date cannot be before start date", "invalidRange": "End date cannot be before start date",
"manageHint": "Open and close periods here; bills above update automatically. Quick presets are usually enough.", "manageHint": "Open and close periods here; bills above update automatically. Quick presets are usually enough.",
"manageTitle": "Period management", "manageTitle": "Period management",
"markerOccupied": "Occupied period",
"markerPending": "Pending turnover",
"markerUnpaid": "Unsettled period",
"open": "Open 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", "openFailed": "Failed to open period",
"openHint": "Local dates ({{tz}})", "openHint": "Local dates ({{tz}})",
"openWithPreset": "Apply quick preset", "openWithPreset": "Apply quick preset",
"opened": "Period opened", "opened": "Period opened",
"overlapsOccupied": "The selected range overlaps with existing periods. Please avoid dates with gray strikethrough lines.",
"presetHint": "Quick period presets (recommended)", "presetHint": "Quick period presets (recommended)",
"presetLastWeek": "Last week", "presetLastWeek": "Last week",
"presetThisMonth": "This month", "presetThisMonth": "This month",
"presetThisWeek": "This week", "presetThisWeek": "This week",
"range": "Period", "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", "showAdvanced": "Custom start/end dates",
"start": "Start", "start": "Start",
"startDate": "Start date", "startDate": "Start date",

View File

@@ -29,10 +29,16 @@
"exportExcel": "Export Excel", "exportExcel": "Export Excel",
"save": "Save changes", "save": "Save changes",
"saving": "Saving…", "saving": "Saving…",
"retry": "Retry",
"cancel": "Cancel",
"updateSuccess": "Updated successfully", "updateSuccess": "Updated successfully",
"updateFailed": "Update failed", "updateFailed": "Update failed",
"updatePassword": "Update password" "updatePassword": "Update password"
}, },
"loading": "Loading…",
"submitting": "Submitting…",
"loadFailed": "Load failed",
"cancel": "Cancel",
"accountSettings": "Account settings", "accountSettings": "Account settings",
"accountSettingsDesc": "Manage your profile and security settings.", "accountSettingsDesc": "Manage your profile and security settings.",
"profileSettings": "Profile", "profileSettings": "Profile",
@@ -115,7 +121,8 @@
"comingSoon": "Feature under development", "comingSoon": "Feature under development",
"yes": "Yes", "yes": "Yes",
"no": "No", "no": "No",
"none": "None" "none": "None",
"empty": "No data"
}, },
"status": { "status": {
"enabled": "Enabled", "enabled": "Enabled",
@@ -129,6 +136,16 @@
"errors": { "errors": {
"loadFailed": "Failed to load" "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": { "permission": {
"deniedTitle": "Access denied", "deniedTitle": "Access denied",
"deniedDescription": "Your account does not have permission to open this page. Ask an administrator to assign the required role permissions." "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": { "riskCap": {
"actions": { "actions": {
"addSpecialCap": "+ Add special cap", "addSpecialCap": "+ Add special cap",
"addNumberCap": "+ Add number cap",
"close": "Close", "close": "Close",
"exportCsv": "Export CSV", "exportCsv": "Export CSV",
"filterPresets": "Filter presets…", "filterPresets": "Filter presets…",
@@ -509,6 +510,7 @@
}, },
"table": { "table": {
"actions": "Actions", "actions": "Actions",
"draw": "Draw",
"capAmount": "Cap amount", "capAmount": "Cap amount",
"number": "Number", "number": "Number",
"ratio": "Ratio", "ratio": "Ratio",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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