Compare commits
2 Commits
d4cf4ff436
...
b924496a26
| Author | SHA1 | Date | |
|---|---|---|---|
| b924496a26 | |||
| a020e34a7d |
20
.github/workflows/ci.yml
vendored
Normal file
20
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
name: lotteryadmin CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main, master, develop]
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "22"
|
||||||
|
cache: npm
|
||||||
|
cache-dependency-path: package-lock.json
|
||||||
|
- run: npm ci
|
||||||
|
- run: npm run lint
|
||||||
|
- run: npm run build
|
||||||
@@ -36,12 +36,14 @@ This version has breaking changes — APIs, conventions, and file structure may
|
|||||||
- 文档 i18n:`useTranslation` 须显式 `ns`;`returnObjects` 列表用 `Array.isArray` 守卫;避免节名与表头 key 冲突(如 `billStatus`)。
|
- 文档 i18n:`useTranslation` 须显式 `ns`;`returnObjects` 列表用 `Array.isArray` 守卫;避免节名与表头 key 冲突(如 `billStatus`)。
|
||||||
- 运营页少堆 `text-xs` 说明与多层免责条;口径/默认范围合并进各模块一行 `summary`,勿叠加 filterPanel/queryHint/disclaimer 等小字(对账、报表中心已按此精简)。
|
- 运营页少堆 `text-xs` 说明与多层免责条;口径/默认范围合并进各模块一行 `summary`,勿叠加 filterPanel/queryHint/disclaimer 等小字(对账、报表中心已按此精简)。
|
||||||
- i18n 按语言懒加载,不要一次 import 三语全套。
|
- i18n 按语言懒加载,不要一次 import 三语全套。
|
||||||
|
- 金额展示须防大额截断:卡片/摘要用 `AdminMoneyDisplay`(自适应字号 + `break-all`,禁止 `truncate`);表格金额列用 `.admin-money-value`。
|
||||||
|
|
||||||
## Learned Workspace Facts
|
## Learned Workspace Facts
|
||||||
|
|
||||||
- 无接入站时依赖站点的页面展示 `<AdminNoIntegrationSiteState />`;仅 `profile.is_super_admin` 显示创建入口。
|
- 无接入站时依赖站点的页面展示 `<AdminNoIntegrationSiteState />`;仅 `profile.is_super_admin` 显示创建入口。
|
||||||
- 超管判定用登录态 `is_super_admin`,勿用站点角色或 `admin_user_site_roles` 绑定推断。
|
- 超管判定用登录态 `is_super_admin`,勿用站点角色或 `admin_user_site_roles` 绑定推断。
|
||||||
- 站点管理员(`profile.site != null`)代理 UI 绕过选中代理的 `can_create_*` 门控,按自身 manage 权限展示 Tab/操作;在代理下创建玩家须传 `agent_node_id`,勿默认挂根代理。
|
- 站点运营内置角色 `site_admin|site_finance|site_cs`(`admin_user_site_roles`,无代理绑定);识别用 `isSiteOperator`/`isSiteAdminOperator`(`admin-session-variants.ts`)。仪表盘按 `account_kind` 分流:`SiteDashboardConsole` / `SiteFinanceDashboardConsole` / `SiteCsDashboardConsole`。
|
||||||
|
- 站点管理员(`isSiteAdminOperator`)代理 UI 绕过选中代理的 `can_create_*` 门控,按自身 manage 权限展示 Tab/操作;在代理下创建玩家须传 `agent_node_id`,勿默认挂根代理。
|
||||||
- 客户对外文档:`/docs`、`/docs/integration`、`/docs/admin` 公开免登录;读者为接入方与站点运营/代理;顶栏「管理后台」链 `/admin`;SSO 无登录换票、JWT+`player/me`、iframe `data.token`;Docs 侧栏 `--docs-sticky-top`;静态校验用 `document.body.innerText`。
|
- 客户对外文档:`/docs`、`/docs/integration`、`/docs/admin` 公开免登录;读者为接入方与站点运营/代理;顶栏「管理后台」链 `/admin`;SSO 无登录换票、JWT+`player/me`、iframe `data.token`;Docs 侧栏 `--docs-sticky-top`;静态校验用 `document.body.innerText`。
|
||||||
- `SettlementBillRow` 无 `currency_code`;账单金额展示用玩家 `default_currency`。
|
- `SettlementBillRow` 无 `currency_code`;账单金额展示用玩家 `default_currency`。
|
||||||
- 浏览器 `/api/v1/*` 由 Next 转发到 `LOTTERY_API_UPSTREAM`;与本地 Postgres 对账前须确认 upstream 与所查库一致。
|
- 浏览器 `/api/v1/*` 由 Next 转发到 `LOTTERY_API_UPSTREAM`;与本地 Postgres 对账前须确认 upstream 与所查库一致。
|
||||||
|
|||||||
236
scripts/merge-en-translations.mjs
Normal file
236
scripts/merge-en-translations.mjs
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
/**
|
||||||
|
* Merge missing English (en) i18n keys.
|
||||||
|
* Usage: node scripts/merge-en-translations.mjs
|
||||||
|
*/
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
|
|
||||||
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
|
const root = path.join(__dirname, "..");
|
||||||
|
const localesDir = path.join(root, "src/i18n/locales");
|
||||||
|
|
||||||
|
/** @type {Record<string, Record<string, string>>} */
|
||||||
|
const translations = {
|
||||||
|
"adminUsers.json": {
|
||||||
|
roleListHint:
|
||||||
|
"You can add custom roles and configure permissions. Built-in roles (super admin, site admin, site finance, site support, agent) cannot be deleted.",
|
||||||
|
"rolePermissionDialog.packageHint":
|
||||||
|
"Checking a module row on the left grants View only. Select Manage separately for data entry, close, draw, and other admin actions.",
|
||||||
|
confirmSaveRolesTitle: "Save admin roles?",
|
||||||
|
confirmSaveRolesDescription:
|
||||||
|
"This updates role bindings for admin {{name}}; their console permissions will change accordingly.",
|
||||||
|
confirmSaveAccountTitle: "Save admin account?",
|
||||||
|
confirmSaveAccountCreateDescription: "This creates a new admin account and assigns the selected roles.",
|
||||||
|
confirmSaveAccountEditDescription:
|
||||||
|
"This updates account details for admin {{name}}, including status and password changes.",
|
||||||
|
confirmSaveRolePermissionsTitle: "Save role permissions?",
|
||||||
|
confirmSaveRolePermissionsDescription:
|
||||||
|
"This updates feature permissions for role “{{name}}”. All admins bound to this role are affected immediately.",
|
||||||
|
confirmSaveRoleTitle: "Save role details?",
|
||||||
|
confirmSaveRoleCreateDescription: "This creates a new role {{name}}.",
|
||||||
|
confirmSaveRoleEditDescription: "This updates the name, description, and status of role {{name}}.",
|
||||||
|
},
|
||||||
|
"agents.json": {
|
||||||
|
"lineUi.profileReadOnlyHint":
|
||||||
|
"Share, credit, and rebate are configured by your upline. Contact your parent agent or the platform to request changes.",
|
||||||
|
"lineUi.selfAgentOverviewHint":
|
||||||
|
"Credit below is allocated by your upline. Share and rebate are maintained upstream; this account cannot view or edit them.",
|
||||||
|
"lineUi.overviewDownlineHint": "{{count}} direct downline agent(s). Manage them in the Downline tab.",
|
||||||
|
"lineUi.playersUnavailableHint":
|
||||||
|
"This agent cannot create players. Enable “Allow create player” in the agent profile first.",
|
||||||
|
"lineUi.playersNoPermissionHint": "This account does not have player management permission on this node.",
|
||||||
|
"lineUi.downlineColumns.email": "Email",
|
||||||
|
"lineUi.downlineColumns.downlineCount": "Downline count",
|
||||||
|
"lineUi.editCurrent": "Edit this agent",
|
||||||
|
"lineUi.profileTabHint":
|
||||||
|
"Maintain share, credit, rebate, and risk tags here. Use Account & status for login name and password.",
|
||||||
|
"lineUi.nextSteps": "Suggested next steps",
|
||||||
|
"lineUi.stepProfile": "Configure share, credit, and rebate",
|
||||||
|
"lineUi.stepDownline": "Manage direct downline ({{count}} now)",
|
||||||
|
"lineUi.stepPlayers": "Create or maintain direct players",
|
||||||
|
"lineUi.downlineEmpty": "No direct downline yet. Child agents will appear here after creation.",
|
||||||
|
"lineUi.downlineEmptyShort": "No direct downline yet.",
|
||||||
|
"lineUi.sidebarShareRate": "Share {{rate}}%",
|
||||||
|
"lineUi.sidebarAvailableCredit": "Available to grant {{amount}}",
|
||||||
|
"lineUi.expand": "Expand",
|
||||||
|
"lineUi.collapse": "Collapse",
|
||||||
|
"profile.relativeShareRate": "Share rate (% of parent)",
|
||||||
|
"profile.relativeShareRateValue": "{{rate}}% of parent",
|
||||||
|
"profile.capabilityHint":
|
||||||
|
"Takes effect on this agent’s primary account after save. If the platform Agent role included player/node management, login permissions are now tightened by these switches.",
|
||||||
|
"profile.parentCaps": "Parent share {{share}}%, available to grant {{credit}}",
|
||||||
|
"profile.availableCredit": "Available to grant {{amount}}",
|
||||||
|
"profile.riskTags": "Risk tags",
|
||||||
|
"profile.riskTagsPlaceholder": "Comma-separated, e.g. overdue, high_turnover",
|
||||||
|
"profile.saveSuccess": "Share and credit settings saved",
|
||||||
|
"settlementBills.platform": "Platform",
|
||||||
|
"settlementBills.filteredByPeriod": "Showing bills for period #{{id}} only",
|
||||||
|
"settlementBills.clearPeriodFilter": "Show all periods",
|
||||||
|
"settlementBills.columns.party": "Party",
|
||||||
|
"settlementBills.columns.counterparty": "Counterparty",
|
||||||
|
"settlementBills.columns.grossWinLoss": "Win/Loss",
|
||||||
|
"settlementBills.detail": "Details",
|
||||||
|
"settlementBills.confirm": "Confirm bill",
|
||||||
|
"settlementBills.confirmed": "Confirmed",
|
||||||
|
"settlementBills.paymentAmount": "Payment amount",
|
||||||
|
"settlementBills.recordPayment": "Record payment",
|
||||||
|
"settlementBills.paid": "Payment recorded",
|
||||||
|
"settlementBills.subtreeSummary": "Subtree summary",
|
||||||
|
"settlementBills.grossWinLoss": "Win/Loss (gross_win_loss)",
|
||||||
|
"settlementBills.rebateAmount": "Rebate",
|
||||||
|
"settlementBills.shareProfit": "Share profit",
|
||||||
|
"settlementBills.platformRounding": "Platform rounding",
|
||||||
|
"settlementReports.title": "Period reports (credit share line)",
|
||||||
|
"settlementReports.description":
|
||||||
|
"Report set: player win/loss, agent share, rebate, credit, unpaid/overdue bills, and platform P/L.",
|
||||||
|
"settlementReports.type": "Report type",
|
||||||
|
"settlementReports.footnote":
|
||||||
|
"These reports use credit-line period semantics, not legacy wallet commission/rebate reports.",
|
||||||
|
"settlementReports.noPeriodHint":
|
||||||
|
"When no specific period is selected, the last 7 days are used. Platform P/L requires a period.",
|
||||||
|
"settlementReports.types.summary": "Summary",
|
||||||
|
"settlementReports.types.player_win_loss": "Player win/loss",
|
||||||
|
"settlementReports.types.agent_share": "Agent share",
|
||||||
|
"settlementReports.types.rebate": "Rebate",
|
||||||
|
"settlementReports.types.credit": "Credit",
|
||||||
|
"settlementReports.types.unpaid_bills": "Unpaid bills",
|
||||||
|
"settlementReports.types.overdue": "Overdue",
|
||||||
|
"settlementReports.types.platform_pnl": "Platform P/L",
|
||||||
|
"settlementReports.types.draw_period": "By draw",
|
||||||
|
"settlementReports.summary.billCount": "Bill count",
|
||||||
|
"settlementReports.summary.totalNet": "Total net",
|
||||||
|
"settlementReports.summary.totalUnpaid": "Total unpaid",
|
||||||
|
"settlementReports.summary.overdueCount": "Overdue bills",
|
||||||
|
"settlementReports.summary.platformRounding": "Total platform rounding",
|
||||||
|
"settlementReports.rebate.accrued": "Accrued",
|
||||||
|
"settlementReports.rebate.inBill": "In bill",
|
||||||
|
"settlementReports.rebate.settled": "Settled",
|
||||||
|
"settlementReports.rebate.allocated": "Allocated",
|
||||||
|
"settlementReports.credit.agents": "Agent credit",
|
||||||
|
"settlementReports.credit.players": "Player credit",
|
||||||
|
"settlementReports.platformPnl.periodRequired": "Select a specific period to view platform P/L.",
|
||||||
|
"settlementReports.platformPnl.billNet": "Platform bill net",
|
||||||
|
"settlementReports.platformPnl.rounding": "Rounding adjustment",
|
||||||
|
"settlementReports.platformPnl.shareProfit": "Share profit (metadata)",
|
||||||
|
"settlementReports.columns.player": "Player",
|
||||||
|
"settlementReports.columns.gameType": "Play",
|
||||||
|
"settlementReports.columns.grossWinLoss": "Win/Loss",
|
||||||
|
"settlementReports.columns.rebate": "Rebate",
|
||||||
|
"settlementReports.columns.agentId": "Agent ID",
|
||||||
|
"settlementReports.columns.count": "Count",
|
||||||
|
"settlementReports.columns.billId": "Bill",
|
||||||
|
"settlementReports.columns.billType": "Type",
|
||||||
|
"settlementReports.columns.unpaid": "Unpaid",
|
||||||
|
"settlementReports.columns.status": "Status",
|
||||||
|
"settlementReports.columns.overdueDays": "Overdue days",
|
||||||
|
"settlementReports.columns.drawNo": "Draw no.",
|
||||||
|
"settlementReports.columns.code": "Code",
|
||||||
|
"settlementReports.columns.name": "Name",
|
||||||
|
"settlementReports.columns.creditLimit": "Credit limit",
|
||||||
|
"settlementReports.columns.allocated": "Allocated",
|
||||||
|
"settlementReports.columns.available": "Available",
|
||||||
|
"settlementReports.columns.used": "Used",
|
||||||
|
"settlementReports.columns.frozen": "Frozen",
|
||||||
|
"settlementReports.columns.rebateType": "Rebate type",
|
||||||
|
"settlementReports.columns.amount": "Amount",
|
||||||
|
"settlementPeriods.title": "Agent periods",
|
||||||
|
"settlementPeriods.presetHint": "Quick period presets (recommended)",
|
||||||
|
"settlementPeriods.openWithPreset": "Apply quick preset",
|
||||||
|
"settlementPeriods.showAdvanced": "Custom start/end dates",
|
||||||
|
"settlementPeriods.hideAdvanced": "Hide custom dates",
|
||||||
|
"settlementPeriods.range": "Period",
|
||||||
|
"settlementPeriods.empty": "No periods yet. Choose a quick preset and open a period.",
|
||||||
|
"settlementPeriods.start": "Start",
|
||||||
|
"settlementPeriods.end": "End",
|
||||||
|
"settlementPeriods.status": "Status",
|
||||||
|
"settlementPeriods.close": "Close period and generate bills",
|
||||||
|
"settlementPeriods.viewBills": "Bills",
|
||||||
|
"settlementPeriods.opened": "Period opened",
|
||||||
|
"settlementPeriods.closed": "Period closed; bills generated",
|
||||||
|
"settlementPeriods.closeFailed": "Failed to close period",
|
||||||
|
"lineProvision.siteCode": "Integration site",
|
||||||
|
"lineProvision.siteCodePlaceholder": "Select site",
|
||||||
|
"lineProvision.siteRequired": "Select an integration site",
|
||||||
|
"lineProvision.noUnboundSite": "No sites without a level-1 agent",
|
||||||
|
"lineProvision.openIntegrationSites": "Go to integration sites",
|
||||||
|
"lineProvision.passwordHint": "At least 8 characters",
|
||||||
|
"playersPanel.siteCode": "Line site",
|
||||||
|
"playersPanel.passwordHint": "At least 8 characters",
|
||||||
|
"playersPanel.passwordMinLength": "Initial password must be at least 8 characters",
|
||||||
|
"playersPanel.creditLimitInvalid": "Credit limit must be an integer ≥ 0",
|
||||||
|
"playersPanel.creditLimitExceeded": "Credit limit cannot exceed this agent’s available grant",
|
||||||
|
"playersPanel.rebateRateInvalid": "Rebate rate must be between 0 and 100%",
|
||||||
|
"playersPanel.fundingMode": "Funding mode",
|
||||||
|
"playersPanel.authSource": "Auth source",
|
||||||
|
"playersPanel.rebateInherited": "Inherit agent default rebate",
|
||||||
|
"playersPanel.creditListHint":
|
||||||
|
"Credit line: below shows player credit limits and available credit, not main-site wallet balance.",
|
||||||
|
"playersPanel.playerRef": "Player ref",
|
||||||
|
"playersPanel.usernameNickname": "Username / nickname",
|
||||||
|
"playersPanel.creditLimitAvailable": "Credit limit / available",
|
||||||
|
"roles.selectedCount": "{{selected}} / {{total}} selected",
|
||||||
|
"roles.groupSelectedCount": "{{selected}} / {{total}}",
|
||||||
|
"roles.selectGroup": "Select all in group",
|
||||||
|
"roles.noAssignablePermissions": "No permissions available to assign",
|
||||||
|
},
|
||||||
|
"config.json": {
|
||||||
|
"integrationSites.columns.currency": "Currency",
|
||||||
|
"integrationSites.columns.lineRoot": "Level-1 agent",
|
||||||
|
"integrationSites.columns.h5Url": "Lottery H5",
|
||||||
|
"integrationSites.columns.ssoSecret": "SSO secret",
|
||||||
|
"integrationSites.columns.walletApiKey": "Wallet API key",
|
||||||
|
"integrationSites.lineRootBound": "Bound",
|
||||||
|
"integrationSites.lineRootUnbound": "Unbound",
|
||||||
|
"integrationSites.secretNotConfigured": "Secret not configured",
|
||||||
|
"integrationSites.secretCopyRequiresManage":
|
||||||
|
"Integration site manage permission is required to copy secrets",
|
||||||
|
},
|
||||||
|
"jackpot.json": {
|
||||||
|
confirmSavePoolTitle: "Save jackpot pool settings?",
|
||||||
|
confirmSavePoolDescription:
|
||||||
|
"This updates fill rate, thresholds, payout ratio, and related parameters (not pool balance). Use Balance adjustment for balance changes.",
|
||||||
|
},
|
||||||
|
"players.json": {
|
||||||
|
rebateRate: "Rebate",
|
||||||
|
riskTags: "Risk tags",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function setNested(obj, dotKey, value) {
|
||||||
|
const parts = dotKey.split(".");
|
||||||
|
let cur = obj;
|
||||||
|
for (let i = 0; i < parts.length - 1; i++) {
|
||||||
|
if (!(parts[i] in cur) || typeof cur[parts[i]] !== "object" || Array.isArray(cur[parts[i]])) {
|
||||||
|
cur[parts[i]] = {};
|
||||||
|
}
|
||||||
|
cur = cur[parts[i]];
|
||||||
|
}
|
||||||
|
cur[parts[parts.length - 1]] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortKeysDeep(value) {
|
||||||
|
if (Array.isArray(value)) return value;
|
||||||
|
if (value && typeof value === "object") {
|
||||||
|
return Object.fromEntries(
|
||||||
|
Object.keys(value)
|
||||||
|
.sort()
|
||||||
|
.map((k) => [k, sortKeysDeep(value[k])]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
let merged = 0;
|
||||||
|
for (const [file, keys] of Object.entries(translations)) {
|
||||||
|
const enPath = path.join(localesDir, "en", file);
|
||||||
|
const en = JSON.parse(fs.readFileSync(enPath, "utf8"));
|
||||||
|
for (const [dotKey, enValue] of Object.entries(keys)) {
|
||||||
|
setNested(en, dotKey, enValue);
|
||||||
|
merged++;
|
||||||
|
}
|
||||||
|
fs.writeFileSync(enPath, `${JSON.stringify(sortKeysDeep(en), null, 2)}\n`, "utf8");
|
||||||
|
console.log(`Updated ${file} (+${Object.keys(keys).length} keys)`);
|
||||||
|
}
|
||||||
|
console.log(`Total merged: ${merged}`);
|
||||||
316
scripts/merge-ne-translations.mjs
Normal file
316
scripts/merge-ne-translations.mjs
Normal file
@@ -0,0 +1,316 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
/**
|
||||||
|
* Merge missing Nepali (ne) i18n keys from translations map.
|
||||||
|
* Usage: node scripts/merge-ne-translations.mjs
|
||||||
|
*/
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
|
|
||||||
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
|
const root = path.join(__dirname, "..");
|
||||||
|
const localesDir = path.join(root, "src/i18n/locales");
|
||||||
|
|
||||||
|
/** @type {Record<string, Record<string, string>>} */
|
||||||
|
const translations = {
|
||||||
|
"adminUsers.json": {
|
||||||
|
siteRequired: "साइट छान्नुहोस्",
|
||||||
|
"table.sites": "बाँधिएका साइटहरू",
|
||||||
|
"permissionDialog.site": "साइट",
|
||||||
|
"accountDialog.site": "बाँधिएको साइट",
|
||||||
|
"accountDialog.sitePlaceholder": "यो खाताले पहुँच पाउने साइट छान्नुहोस्",
|
||||||
|
},
|
||||||
|
"agents.json": {
|
||||||
|
"lineUi.kicker": "क्रेडिट शेयर · एजेन्ट ट्री",
|
||||||
|
"lineUi.agentCount": "यो समूहमा {{count}} एजेन्ट",
|
||||||
|
"lineUi.searchPlaceholder": "नाम वा लगइन खोज्नुहोस्",
|
||||||
|
"lineUi.directChildren": "प्रत्यक्ष अधीनस्थ {{count}}",
|
||||||
|
"lineUi.selectAgent": "शेयर र क्रेडिट हेर्न एजेन्ट छान्नुहोस्",
|
||||||
|
"lineUi.selectAgentHint":
|
||||||
|
"सेटलमेन्ट सीमा एजेन्ट ट्री अनुसार; शेयर, क्रेडिट र रिबेट प्रति नोड कन्फिग गरिन्छ।",
|
||||||
|
"lineUi.allocatedCredit": "बाँडिएको",
|
||||||
|
"lineUi.availableCredit": "उपलब्ध",
|
||||||
|
"lineUi.profileFootnote": "रिबेट सीमा {{rebate}}% · पूर्वनिर्धारित {{defaultRebate}}%",
|
||||||
|
"lineUi.tabOverview": "अवलोकन",
|
||||||
|
"lineUi.tabProfile": "शेयर र क्रेडिट",
|
||||||
|
"lineUi.tabProfileReadOnly": "शेयर र क्रेडिट (पढ्न मात्र)",
|
||||||
|
"lineUi.currentSite": "साइट",
|
||||||
|
"lineUi.viewAll": "सबै हेर्नुहोस्",
|
||||||
|
"lineUi.shareRebateCap": "रिबेट सीमा {{rate}}%",
|
||||||
|
"lineUi.overviewDownlineCard": "प्रत्यक्ष अधीनस्थ एजेन्ट हेर्नुहोस् र व्यवस्थापन गर्नुहोस्",
|
||||||
|
"lineUi.overviewDownlineCount": "{{count}}",
|
||||||
|
"lineUi.overviewPlayersHint": "प्रत्यक्ष खेलाडी र क्रेडिट स्थिति हेर्नुहोस्",
|
||||||
|
"lineUi.overviewPlayersSummary": "खेलाडी व्यवस्थापन",
|
||||||
|
"lineUi.downlineEmptyTitle": "अहिले प्रत्यक्ष अधीनस्थ छैन",
|
||||||
|
"lineUi.editAccount": "खाता र स्थिति",
|
||||||
|
"lineUi.saveProfile": "शेयर र क्रेडिट बचत",
|
||||||
|
"lineUi.tabDownline": "अधीनस्थ",
|
||||||
|
"lineUi.tabPlayers": "खेलाडी",
|
||||||
|
"lineUi.noDelegatedTabs":
|
||||||
|
"यो एजेन्टले अधीनस्थ एजेन्ट वा खेलाडी सिर्जना गर्न सक्दैन; शेयर र क्रेडिट मात्र लागू हुन्छ।",
|
||||||
|
listSearch: "नाम / कोड / लगइन खोज्नुहोस्",
|
||||||
|
siteSearch: "साइट नाम खोज्नुहोस्",
|
||||||
|
parentAgent: "माथिल्लो",
|
||||||
|
childrenCount: "प्रत्यक्ष अधीनस्थ",
|
||||||
|
"subnav.provisionHint": "एक पटकको अनबोर्डिङ; दैनिक कामका लागि लाइन र एजेन्ट ट्री प्रयोग गर्नुहोस्",
|
||||||
|
"profile.validation.creditBelowAllocated":
|
||||||
|
"क्रेडिट सीमा बाँडिएको क्रेडिभन्दा कम हुन सक्दैन (न्यूनतम {{min}})",
|
||||||
|
"profile.validation.creditExceedsParentWithMax": "क्रेडिट सीमा {{max}} भन्दा बढी हुन सक्दैन",
|
||||||
|
"settlementBills.periodLabel": "अवधि",
|
||||||
|
"settlementBills.periodPlaceholder": "अवधि छान्नुहोस्",
|
||||||
|
"settlementBills.allPeriods": "सबै अवधि",
|
||||||
|
"settlementBills.filteredByPeriodRange": "{{range}} का बिलहरू",
|
||||||
|
"settlementBills.emptyNoPeriodsManage":
|
||||||
|
"अहिले अवधि वा बिल छैन। अवधि व्यवस्थापनमा छिटो प्रिसेट प्रयोग गर्नुहोस्, त्यसपछि अवधि बन्द गर्नुहोस्।",
|
||||||
|
"settlementBills.emptyNoPeriodsAgent":
|
||||||
|
"अहिले बिल छैन। तपाईंको माथिल्लो वा प्लेटफर्मले अवधि बन्द गर्छ; मिति प्रविष्ट गर्नु पर्दैन।",
|
||||||
|
"settlementBills.emptyNoClosed": "बन्द अवधि छैन। बिल बन्द पछि सिर्जना हुन्छ।",
|
||||||
|
"settlementBills.typePlayer": "खेलाडी बिल",
|
||||||
|
"settlementBills.typeAgent": "एजेन्ट बिल",
|
||||||
|
"settlementBills.columns.period": "अवधि",
|
||||||
|
"settlementPeriods.manageTitle": "अवधि व्यवस्थापन",
|
||||||
|
"settlementPeriods.manageHint":
|
||||||
|
"यहाँ अवधि खोल्नुहोस् र बन्द गर्नुहोस्; माथिका बिल स्वतः अद्यावधिक हुन्छ। छिटो प्रिसेट सामान्यतया पर्याप्त।",
|
||||||
|
"settlementPeriods.presetThisWeek": "यो हप्ता",
|
||||||
|
"settlementPeriods.presetLastWeek": "गत हप्ता",
|
||||||
|
"settlementPeriods.presetThisMonth": "यो महिना",
|
||||||
|
"settlementPeriods.openHint": "स्थानीय मिति ({{tz}})",
|
||||||
|
"settlementPeriods.startDate": "सुरु मिति",
|
||||||
|
"settlementPeriods.endDate": "अन्त्य मिति",
|
||||||
|
"settlementPeriods.open": "अवधि खोल्नुहोस्",
|
||||||
|
"settlementPeriods.openFailed": "अवधि खोल्न असफल",
|
||||||
|
"settlementPeriods.datesRequired": "सुरु र अन्त्य मिति प्रविष्ट गर्नुहोस्",
|
||||||
|
"settlementPeriods.invalidRange": "अन्त्य मिति सुरु मितिभन्दा अगाडि हुन सक्दैन",
|
||||||
|
"settlementPeriods.statusOpen": "खुला",
|
||||||
|
"settlementPeriods.statusClosed": "बन्द",
|
||||||
|
"playersPanel.loginRequired": "लगइन प्रयोगकर्ता नाम र प्रारम्भिक पासवर्ड प्रविष्ट गर्नुहोस्",
|
||||||
|
"playersPanel.loginUsername": "लगइन प्रयोगकर्ता नाम",
|
||||||
|
"playersPanel.initialPassword": "प्रारम्भिक पासवर्ड",
|
||||||
|
"playersPanel.externalIdOptional": "बाह्य ID (वैकल्पिक)",
|
||||||
|
"playersPanel.externalIdHint": "स्वतः सिर्जनाका लागि खाली राख्नुहोस्",
|
||||||
|
"playersPanel.creditLimit": "क्रेडिट सीमा",
|
||||||
|
"playersPanel.rebateRate": "रिबेट दर (%)",
|
||||||
|
"playersPanel.rebateRateHint": "प्रतिशत लेख्नुहोस्, जस्तै 5 = 5%",
|
||||||
|
"playersPanel.availableToGrant": "एजेन्टले दिन सक्ने: {{amount}}",
|
||||||
|
"playersPanel.riskTags": "जोखिम ट्याग",
|
||||||
|
"playersPanel.riskTagsPlaceholder": "अल्पविरामले छुट्याउनुहोस्",
|
||||||
|
"playersPanel.createSuccessNative": "खेलाडी {{name}} सिर्जना भयो — लटरी /login प्रयोग गर्नुहोस्",
|
||||||
|
"users.email": "इमेल",
|
||||||
|
},
|
||||||
|
"common.json": {
|
||||||
|
"export.ticketCombinations.filename": "ticket-combinations",
|
||||||
|
"export.ticketCombinations.sheetName": "संयोजनहरू",
|
||||||
|
"integrationSites.emptyPlatformHint":
|
||||||
|
"अहिले एकीकरण साइट छैन। एजेन्ट, खेलाडी वा सेटलमेन्ट व्यवस्थापन अघि साइट सिर्जना गर्नुहोस्।",
|
||||||
|
"integrationSites.createSite": "एकीकरण साइट सिर्जना",
|
||||||
|
},
|
||||||
|
"config.json": {
|
||||||
|
"integrationSites.adminAccountCreated": "साइट एडमिन खाता {{username}} सिर्जना भयो",
|
||||||
|
"integrationSites.delete": "साइट मेटाउनुहोस्",
|
||||||
|
"integrationSites.deleteSuccess": "साइट {{code}} मेटाइयो",
|
||||||
|
"integrationSites.deleteFailed": "साइट मेटाउन असफल",
|
||||||
|
"integrationSites.deleteConfirmTitle": "यो साइट मेटाउने?",
|
||||||
|
"integrationSites.deleteConfirmDescription":
|
||||||
|
"यसले साइट {{code}} ({{name}}), यसको एजेन्ट लाइन, सेटलमेन्ट अवधि, खेलाडी र साइट एडमिन खाता स्थायी रूपमा हटाउँछ। पूर्ववत गर्न मिल्दैन।",
|
||||||
|
"integrationSites.deleteConfirm": "मेटाउनुहोस्",
|
||||||
|
"integrationSites.deleting": "मेटाउँदै…",
|
||||||
|
"integrationSites.form.adminUsernameRequired": "साइट एडमिन प्रयोगकर्ता नाम आवश्यक",
|
||||||
|
"integrationSites.form.adminNicknameRequired": "साइट एडमिन उपनाम आवश्यक",
|
||||||
|
"integrationSites.form.adminPasswordRequired": "प्रारम्भिक साइट एडमिन पासवर्ड कम्तीमा ८ अक्षर",
|
||||||
|
"integrationSites.fields.adminUsername": "एडमिन प्रयोगकर्ता नाम",
|
||||||
|
"integrationSites.fields.adminNickname": "एडमिन उपनाम",
|
||||||
|
"integrationSites.fields.adminPassword": "प्रारम्भिक पासवर्ड",
|
||||||
|
"integrationSites.fields.adminEmail": "इमेल (वैकल्पिक)",
|
||||||
|
"integrationSites.placeholders.adminUsername": "एडमिन प्रयोगकर्ता नाम लेख्नुहोस्",
|
||||||
|
"integrationSites.placeholders.adminNickname": "खाता उपनाम लेख्नुहोस्",
|
||||||
|
"integrationSites.placeholders.adminPassword": "कम्तीमा ८ अक्षर",
|
||||||
|
"integrationSites.placeholders.adminEmail": "इमेल लेख्नुहोस्",
|
||||||
|
"integrationSites.adminAccountSectionTitle": "साइट एडमिन खाता",
|
||||||
|
"integrationSites.adminAccountSectionDescription":
|
||||||
|
"साइट सिर्जना गर्दा त्यस साइटसँग बाँधिएको एउटा एडमिन खाता पनि सिर्जना हुन्छ।",
|
||||||
|
"system.saveDrawSuccess": "ड्र प्यारामिटर बचत भयो",
|
||||||
|
"system.saveCurrencyFormatSuccess": "मुद्रा प्रदर्शन ढाँचा बचत भयो",
|
||||||
|
"system.saveSettlementSuccess": "सेटलमेन्ट स्वचालन बचत भयो",
|
||||||
|
"system.sections.draw": "ड्र तालिका र समीक्षा",
|
||||||
|
"system.sections.drawDescription":
|
||||||
|
"ड्र समय, बन्द सञ्झ्याल, म्यानुअल समीक्षा र कूलडाउन नियन्त्रण। यो ब्लकमा परिवर्तित फिल्ड मात्र पेश हुन्छ।",
|
||||||
|
"system.sections.currencyFormat": "मुद्रा प्रदर्शन ढाँचा",
|
||||||
|
"system.sections.currencyFormatDescription":
|
||||||
|
"साइटभरि रकमका दशमलव र विभाजक (मुद्रा मास्टर डाटाबाट अलग)।",
|
||||||
|
"system.sections.settlement": "सेटलमेन्ट स्वचालन",
|
||||||
|
"system.sections.settlementDescription":
|
||||||
|
"टिक स्वतः सेटलमेन्ट, अनुमोदन र भुक्तानी चलाउने नियन्त्रण। यो ब्लकमा परिवर्तित फिल्ड मात्र पेश हुन्छ।",
|
||||||
|
"system.confirmSaveDrawTitle": "ड्र प्यारामिटर बचत गर्ने?",
|
||||||
|
"system.confirmSaveDrawDescription":
|
||||||
|
"यसले यो ब्लकमा ड्र समीक्षा, तालिका समय र कूलडाउन मात्र अद्यावधिक गर्छ।",
|
||||||
|
"system.confirmSaveCurrencyFormatTitle": "मुद्रा प्रदर्शन ढाँचा बचत गर्ने?",
|
||||||
|
"system.confirmSaveCurrencyFormatDescription": "यसले दशमलव स्थान र विभाजक अद्यावधिक गर्छ।",
|
||||||
|
"system.confirmSaveSettlementTitle": "सेटलमेन्ट स्वचालन बचत गर्ने?",
|
||||||
|
"system.confirmSaveSettlementDescription":
|
||||||
|
"यसले स्वतः सेटलमेन्ट, अनुमोदन र भुक्तानी स्विच अद्यावधिक गर्छ।",
|
||||||
|
"play.filters.sectionTitle": "खेल फिल्टर",
|
||||||
|
"play.filters.sectionDescription":
|
||||||
|
"पहिले सूची संकुचित गर्नुहोस्, त्यसपछि ब्याच स्विच वा पङ्क्ति सम्पादन प्रयोग गर्नुहोस्।",
|
||||||
|
"play.filters.keyword": "खेल खोज्नुहोस्",
|
||||||
|
"play.filters.keywordPlaceholder": "खेल कोड, प्रदर्शन नाम वा श्रेणीले फिल्टर",
|
||||||
|
"play.filters.category": "श्रेणी",
|
||||||
|
"play.filters.status": "स्थिति",
|
||||||
|
"play.filters.allCategories": "सबै श्रेणी",
|
||||||
|
"play.filters.allStatuses": "सबै स्थिति",
|
||||||
|
"play.filters.uncategorized": "अवर्गीकृत",
|
||||||
|
"play.filters.reset": "फिल्टर हटाउनुहोस्",
|
||||||
|
"play.filters.empty": "मिल्ने खेल प्रकार छैन",
|
||||||
|
"play.filters.groupCount": "{{count}} खेल",
|
||||||
|
},
|
||||||
|
"dashboard.json": {
|
||||||
|
"analytics.summaryShareProfit": "आफ्नो शेयर नाफा",
|
||||||
|
"analytics.shareProfitHint":
|
||||||
|
"विभाजन पछि तपाईंको शेयर — प्लेटफर्म वा सम्पूर्ण टोलीको कुल नाफा/नोक्सान होइन",
|
||||||
|
currentDrawFinanceHint: "तलका चार्ट ड्र {{drawNo}} का लागि",
|
||||||
|
"agent.heroEyebrow": "आजको लाइन ककपिट",
|
||||||
|
"agent.heroTitle": "{{name}} प्रत्यक्ष सञ्चालन",
|
||||||
|
"agent.creditAllocated": "बाँडिएको {{amount}}",
|
||||||
|
"agent.creditUsed": "प्रयोग {{amount}}",
|
||||||
|
"agent.settlementCycle": "चक्र {{cycle}}",
|
||||||
|
"agent.betOrdersToday": "आजका बाजी अर्डर",
|
||||||
|
"agent.todayPayout": "आजको भुक्तानी",
|
||||||
|
"agent.todayProfit": "आजको नाफा",
|
||||||
|
"agent.sevenDayPayout": "भुक्तानी {{amount}}",
|
||||||
|
"agent.sevenDayProfit": "नाफा {{amount}}",
|
||||||
|
"agent.sevenDayShareProfit": "शेयर नाफा {{amount}}",
|
||||||
|
"agent.topMomentum": "आजको बाजी केन्द्र",
|
||||||
|
"agent.topMomentumHint": "नाफा {{profit}}",
|
||||||
|
"agent.topMomentumPayout": "भुक्तानी {{amount}}",
|
||||||
|
"agent.managementFocus": "व्यवस्थापन केन्द्र",
|
||||||
|
"agent.focusBet": "आजको बाजी मात्रा निगरानी",
|
||||||
|
"agent.focusPlayers": "आजका सक्रिय खेलाडी",
|
||||||
|
"agent.focusBills": "पछ्याउन बाँकी बिल",
|
||||||
|
"agent.quickStatsTitle": "लाइन अनुमति झलक",
|
||||||
|
"agent.canCreateChildAgent": "सन्तान एजेन्ट सिर्जना गर्न सक्छ",
|
||||||
|
"agent.canCreatePlayer": "खेलाडी सिर्जना गर्न सक्छ",
|
||||||
|
"agent.lineDepth": "लाइन गहिराइ",
|
||||||
|
"agent.viewBills": "बिल हेर्नुहोस्",
|
||||||
|
"agent.viewLine": "एजेन्ट लाइन",
|
||||||
|
"agent.quickLinks.tickets": "टिकट",
|
||||||
|
"agent.quickLinks.players": "खेलाडी",
|
||||||
|
"agent.quickLinks.reports": "रिपोर्ट",
|
||||||
|
"agent.quickLinks.agents": "अधीनस्थ एजेन्ट",
|
||||||
|
"agent.quickLinks.bills": "एजेन्ट बिल",
|
||||||
|
"warnings.apiResourceMissing":
|
||||||
|
"ड्यासबोर्ड विश्लेषण API दर्ता छैन। चलाउनुहोस्: php artisan lottery:admin-auth-sync (वा पछिल्लो माइग्रेसन), त्यसपछि रिफ्रेस।",
|
||||||
|
},
|
||||||
|
"draws.json": {
|
||||||
|
backToList: "ड्र सूचीमा फर्कनुहोस्",
|
||||||
|
overviewTitle: "ड्र अवलोकन",
|
||||||
|
overviewBetTotal: "कुल बाजी",
|
||||||
|
overviewPayoutTotal: "कुल भुक्तानी",
|
||||||
|
overviewProfitLoss: "नाफा/नोक्सान",
|
||||||
|
reviewQueueHint: "नतिजा सिर्जना पछि समीक्षा र प्रकाशनमा जारी राख्नुहोस्।",
|
||||||
|
},
|
||||||
|
"players.json": {
|
||||||
|
ticketTableHint:
|
||||||
|
"यो तालिकाले खेलाडीका हालैका टिकट देखाउँछ। पूर्ण सन्दर्भ र समस्या समाधानका लागि पङ्क्ति कार्यबाट मुख्य टिकट सूचीमा जानुहोस्।",
|
||||||
|
tabCreditLedger: "क्रेडिट लेजर",
|
||||||
|
filterSite: "साइट",
|
||||||
|
filterAllSites: "सबै साइट",
|
||||||
|
scopeAllSites: "स्कोप: सबै साइटका सबै खेलाडी (सुपर एडमिन)",
|
||||||
|
scopeFilteredSite: "स्कोप: साइट {{site}}",
|
||||||
|
scopeAgentLine: "स्कोप: {{site}} · एजेन्ट लाइन “{{name}}” र अधीनस्थ खेलाडी",
|
||||||
|
scopeSingleSite: "स्कोप: साइट {{site}}",
|
||||||
|
scopeMultiSite: "स्कोप: {{count}} बाँधिएका साइट; संकुचित गर्न फिल्टर प्रयोग गर्नुहोस्",
|
||||||
|
fundingMode: "फन्डिङ मोड",
|
||||||
|
authSource: "प्रमाणीकरण स्रोत",
|
||||||
|
creditSection: "क्रेडिट लाइन",
|
||||||
|
usedCredit: "प्रयोग भएको क्रेडिट",
|
||||||
|
fundingCredit: "क्रेडिट लाइन",
|
||||||
|
fundingWallet: "मुख्य साइट वालेट",
|
||||||
|
authMainSite: "मुख्य साइट SSO",
|
||||||
|
authNative: "लटरी नेटिभ",
|
||||||
|
creditLimit: "क्रेडिट सीमा",
|
||||||
|
availableCredit: "उपलब्ध क्रेडिट",
|
||||||
|
confirmFreezeTitle: "खेलाडी फ्रिज गर्ने?",
|
||||||
|
confirmFreezeDescription: "खेलाडी {{name}} ले बाजी लगाउन सक्ने छैन।",
|
||||||
|
confirmUnfreezeTitle: "खेलाडी अनफ्रिज गर्ने?",
|
||||||
|
confirmUnfreezeDescription: "खेलाडी {{name}} सामान्य स्थितिमा फर्किनेछ।",
|
||||||
|
},
|
||||||
|
"reconcile.json": {
|
||||||
|
createHint:
|
||||||
|
"छानिएको अवधिमा ट्रान्सफर अर्डर स्क्यान गर्छ, लटरी वालेट लेजर तुलना गर्छ, र वालेट API कन्फिग भएमा मुख्य साइट idempotent रेकर्ड जाँच गर्छ।",
|
||||||
|
createSuccessEmpty: "स्क्यान सम्पन्न: कुनै समस्या फेला परेन",
|
||||||
|
transferNo: "ट्रान्सफर नं.",
|
||||||
|
walletTxnNo: "लटरी वालेट लेनदेन",
|
||||||
|
mainSiteRef: "मुख्य साइट सन्दर्भ",
|
||||||
|
mainSiteCheck: "मुख्य साइट जाँच",
|
||||||
|
actions: "कार्य",
|
||||||
|
itemMainSiteRecordMissing: "मुख्य साइटमा छैन",
|
||||||
|
itemMainSiteFailed: "मुख्य साइटमा असफल",
|
||||||
|
mainSiteMatched: "मुख्य साइट ठीक",
|
||||||
|
mainSiteNotFound: "मुख्य साइटमा छैन",
|
||||||
|
mainSiteFailed: "मुख्य साइट असफल",
|
||||||
|
mainSiteUnavailable: "मुख्य साइट उपलब्ध छैन",
|
||||||
|
mainSiteSkipped: "जाँच गरिएको छैन",
|
||||||
|
},
|
||||||
|
"reports.json": {
|
||||||
|
"tasks.currentReportHint": "यहाँ हाल छानिएको रिपोर्टका निर्यात कार्य मात्र देखिन्छ।",
|
||||||
|
"preview.stats.notQueried": "क्वेरी गरिएको छैन",
|
||||||
|
"preview.stats.notSet": "सेट गरिएको छैन",
|
||||||
|
},
|
||||||
|
"risk.json": {
|
||||||
|
"confirm.closeTitle": "नम्बर बन्द गर्ने?",
|
||||||
|
"confirm.closeDescription": "नम्बर {{number}} यो ड्रका लागि ब्लक हुनेछ।",
|
||||||
|
"confirm.recoverTitle": "नम्बर पुन: खोल्ने?",
|
||||||
|
"confirm.recoverDescription": "नम्बर {{number}} फेरि बाजीका लागि खुल्नेछ।",
|
||||||
|
},
|
||||||
|
"tickets.json": {
|
||||||
|
filterSite: "साइट",
|
||||||
|
filterAllSites: "सबै साइट",
|
||||||
|
viewTicketInList: "यो टिकट हेर्नुहोस्",
|
||||||
|
statusSelectedCount: "{{count}} छानिएको",
|
||||||
|
},
|
||||||
|
"wallet.json": {
|
||||||
|
scopeHint:
|
||||||
|
"यो क्षेत्र मुख्य साइट वालेट मोड (वालेट लेनदेन र ट्रान्सफर) का लागि हो। क्रेडिट लाइन अवधि सेटलमेन्टका लागि हेर्नुहोस्",
|
||||||
|
scopeHintSettlementLink: "सेटलमेन्ट केन्द्र",
|
||||||
|
scopeHintSettlement: "सेटलमेन्ट केन्द्र",
|
||||||
|
ledgerChannel: "लेजर",
|
||||||
|
ledgerCredit: "क्रेडिट लेजर",
|
||||||
|
ledgerWallet: "वालेट लेनदेन",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function setNested(obj, dotKey, value) {
|
||||||
|
const parts = dotKey.split(".");
|
||||||
|
let cur = obj;
|
||||||
|
for (let i = 0; i < parts.length - 1; i++) {
|
||||||
|
if (!(parts[i] in cur) || typeof cur[parts[i]] !== "object" || Array.isArray(cur[parts[i]])) {
|
||||||
|
cur[parts[i]] = {};
|
||||||
|
}
|
||||||
|
cur = cur[parts[i]];
|
||||||
|
}
|
||||||
|
cur[parts[parts.length - 1]] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortKeysDeep(value) {
|
||||||
|
if (Array.isArray(value)) return value;
|
||||||
|
if (value && typeof value === "object") {
|
||||||
|
return Object.fromEntries(
|
||||||
|
Object.keys(value)
|
||||||
|
.sort()
|
||||||
|
.map((k) => [k, sortKeysDeep(value[k])]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
let merged = 0;
|
||||||
|
for (const [file, keys] of Object.entries(translations)) {
|
||||||
|
const nePath = path.join(localesDir, "ne", file);
|
||||||
|
const ne = JSON.parse(fs.readFileSync(nePath, "utf8"));
|
||||||
|
for (const [dotKey, neValue] of Object.entries(keys)) {
|
||||||
|
setNested(ne, dotKey, neValue);
|
||||||
|
merged++;
|
||||||
|
}
|
||||||
|
fs.writeFileSync(nePath, `${JSON.stringify(sortKeysDeep(ne), null, 2)}\n`, "utf8");
|
||||||
|
console.log(`Updated ${file} (+${Object.keys(keys).length} keys)`);
|
||||||
|
}
|
||||||
|
console.log(`Total merged: ${merged}`);
|
||||||
@@ -7,7 +7,6 @@ import type {
|
|||||||
AdminReportPlayDimensionRow,
|
AdminReportPlayDimensionRow,
|
||||||
AdminReportPlayerWinLossRow,
|
AdminReportPlayerWinLossRow,
|
||||||
AdminReportQueryParams,
|
AdminReportQueryParams,
|
||||||
AdminReportRebateCommissionRow,
|
|
||||||
} from "@/types/api/admin-reports";
|
} from "@/types/api/admin-reports";
|
||||||
|
|
||||||
const A = `/admin`;
|
const A = `/admin`;
|
||||||
@@ -35,11 +34,3 @@ export async function getAdminReportPlayDimension(
|
|||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getAdminReportRebateCommission(
|
|
||||||
params: AdminReportQueryParams,
|
|
||||||
): Promise<AdminReportListData<AdminReportRebateCommissionRow>> {
|
|
||||||
return adminRequest.get<AdminReportListData<AdminReportRebateCommissionRow>>(`${A}/reports/rebate-commission`, {
|
|
||||||
params,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ export {
|
|||||||
getAdminReportDailyProfit,
|
getAdminReportDailyProfit,
|
||||||
getAdminReportPlayDimension,
|
getAdminReportPlayDimension,
|
||||||
getAdminReportPlayerWinLoss,
|
getAdminReportPlayerWinLoss,
|
||||||
getAdminReportRebateCommission,
|
|
||||||
} from "@/api/admin-reports";
|
} from "@/api/admin-reports";
|
||||||
export {
|
export {
|
||||||
downloadAdminReportJob,
|
downloadAdminReportJob,
|
||||||
|
|||||||
42
src/app/error.tsx
Normal file
42
src/app/error.tsx
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { useEffect } from "react";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
export default function AdminError({
|
||||||
|
error,
|
||||||
|
reset,
|
||||||
|
}: {
|
||||||
|
error: Error & { digest?: string };
|
||||||
|
reset: () => void;
|
||||||
|
}): React.ReactElement {
|
||||||
|
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>
|
||||||
|
<p className="max-w-md text-sm text-muted-foreground">
|
||||||
|
管理后台遇到意外错误,请重试或返回首页。
|
||||||
|
</p>
|
||||||
|
{process.env.NODE_ENV === "development" ? (
|
||||||
|
<pre className="max-w-xl overflow-auto rounded-md bg-muted p-3 text-left text-xs">
|
||||||
|
{error.message}
|
||||||
|
</pre>
|
||||||
|
) : null}
|
||||||
|
<div className="flex gap-3">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={reset}
|
||||||
|
className="rounded-md border px-4 py-2 text-sm"
|
||||||
|
>
|
||||||
|
重试
|
||||||
|
</button>
|
||||||
|
<Link href="/admin" className="rounded-md bg-primary px-4 py-2 text-sm text-primary-foreground">
|
||||||
|
返回首页
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -190,6 +190,15 @@
|
|||||||
@apply text-sm text-muted-foreground;
|
@apply text-sm text-muted-foreground;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 金额列:允许换行/缩小,避免大额 truncate 或溢出裁切 */
|
||||||
|
.admin-money-value {
|
||||||
|
@apply min-w-0 whitespace-normal break-words [overflow-wrap:anywhere] tabular-nums leading-tight tracking-tight;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-table-shell [data-slot="table-cell"].admin-money-cell {
|
||||||
|
@apply min-w-[4.5rem] max-w-[11rem] whitespace-normal align-top leading-snug;
|
||||||
|
}
|
||||||
|
|
||||||
[data-slot="table-head"],
|
[data-slot="table-head"],
|
||||||
[data-slot="table-cell"] {
|
[data-slot="table-cell"] {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
13
src/app/not-found.tsx
Normal file
13
src/app/not-found.tsx
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
export default function AdminNotFound(): React.ReactElement {
|
||||||
|
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>
|
||||||
|
<Link href="/admin" className="rounded-md bg-primary px-4 py-2 text-sm text-primary-foreground">
|
||||||
|
返回首页
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
57
src/components/admin/admin-money-display.tsx
Normal file
57
src/components/admin/admin-money-display.tsx
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import type { ElementType, ReactElement, ReactNode } from "react";
|
||||||
|
|
||||||
|
import {
|
||||||
|
adminMoneyDisplayClass,
|
||||||
|
adminMoneyDisplayTitle,
|
||||||
|
type AdminMoneyDisplaySize,
|
||||||
|
} from "@/lib/admin-money-display";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
|
export type AdminMoneyDisplayProps = {
|
||||||
|
children: ReactNode;
|
||||||
|
/** 用于自适应字号与 hover 完整值;缺省时从 string children 推断 */
|
||||||
|
value?: string | number | null;
|
||||||
|
size?: AdminMoneyDisplaySize;
|
||||||
|
emphasize?: boolean;
|
||||||
|
className?: string;
|
||||||
|
title?: string;
|
||||||
|
as?: ElementType;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 卡片/摘要区金额:自适应字号 + 换行,禁止 truncate 裁切 */
|
||||||
|
export function AdminMoneyDisplay({
|
||||||
|
children,
|
||||||
|
value,
|
||||||
|
size = "lg",
|
||||||
|
emphasize = true,
|
||||||
|
className,
|
||||||
|
title,
|
||||||
|
as: Component = "span",
|
||||||
|
}: AdminMoneyDisplayProps): ReactElement {
|
||||||
|
const resolvedValue =
|
||||||
|
value != null
|
||||||
|
? String(value)
|
||||||
|
: typeof children === "string" || typeof children === "number"
|
||||||
|
? String(children)
|
||||||
|
: "";
|
||||||
|
const resolvedTitle = title ?? adminMoneyDisplayTitle(resolvedValue);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Component
|
||||||
|
title={resolvedTitle}
|
||||||
|
className={cn(
|
||||||
|
resolvedValue
|
||||||
|
? adminMoneyDisplayClass(resolvedValue, { size, emphasize, className })
|
||||||
|
: cn(
|
||||||
|
"min-w-0 whitespace-normal break-words [overflow-wrap:anywhere] tabular-nums leading-tight tracking-tight",
|
||||||
|
emphasize ? "font-semibold" : "font-medium",
|
||||||
|
className,
|
||||||
|
),
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</Component>
|
||||||
|
);
|
||||||
|
}
|
||||||
46
src/components/admin/admin-table-money.tsx
Normal file
46
src/components/admin/admin-table-money.tsx
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import type { ReactElement, ReactNode } from "react";
|
||||||
|
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
|
import type { AdminMoneyDisplaySize } from "@/lib/admin-money-display";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
|
/** 表格/列表内金额:自适应字号 + 换行,配合 TableCell 的 admin-money-cell */
|
||||||
|
export function AdminTableMoney({
|
||||||
|
children,
|
||||||
|
className,
|
||||||
|
size = "sm",
|
||||||
|
emphasize = true,
|
||||||
|
}: {
|
||||||
|
children: ReactNode;
|
||||||
|
className?: string;
|
||||||
|
size?: AdminMoneyDisplaySize;
|
||||||
|
emphasize?: boolean;
|
||||||
|
}): ReactElement {
|
||||||
|
if (typeof children === "string" || typeof children === "number") {
|
||||||
|
const text = String(children);
|
||||||
|
return (
|
||||||
|
<AdminMoneyDisplay
|
||||||
|
as="span"
|
||||||
|
value={text}
|
||||||
|
size={size}
|
||||||
|
emphasize={emphasize}
|
||||||
|
className={cn("inline-block max-w-full", className)}
|
||||||
|
>
|
||||||
|
{text}
|
||||||
|
</AdminMoneyDisplay>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<span className={cn("admin-money-value inline-block max-w-full", className)}>
|
||||||
|
{children}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** TableCell 金额列常用 className */
|
||||||
|
export function adminMoneyCellClassName(className?: string): string {
|
||||||
|
return cn("admin-money-cell min-w-0 whitespace-normal align-top leading-snug", className);
|
||||||
|
}
|
||||||
44
src/hooks/use-admin-permission.ts
Normal file
44
src/hooks/use-admin-permission.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import {
|
||||||
|
adminHasAnyPermission,
|
||||||
|
adminHasAnyPermissionCode,
|
||||||
|
adminOperationalPermissionCodes,
|
||||||
|
} from "@/lib/admin-permissions";
|
||||||
|
import { useAdminProfile } from "@/stores/admin-session";
|
||||||
|
import type { AdminAccountKind, AdminProfile } from "@/types/api/admin-auth";
|
||||||
|
|
||||||
|
export function resolveAdminAccountKind(profile: AdminProfile | null | undefined): AdminAccountKind | null {
|
||||||
|
if (!profile) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (profile.account_kind) {
|
||||||
|
return profile.account_kind === "site_operator" ? "site_admin" : profile.account_kind;
|
||||||
|
}
|
||||||
|
if (profile.is_super_admin) {
|
||||||
|
return "super_admin";
|
||||||
|
}
|
||||||
|
if (profile.agent != null) {
|
||||||
|
return "agent_operator";
|
||||||
|
}
|
||||||
|
if (profile.site != null) {
|
||||||
|
return "site_admin";
|
||||||
|
}
|
||||||
|
return "platform_account";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 统一权限与会话身份读取:legacy `prd.*` 与 action code 并存,新代码优先用 `hasAnyCode`。 */
|
||||||
|
export function useAdminPermission() {
|
||||||
|
const profile = useAdminProfile();
|
||||||
|
const legacyPermissions = profile?.permissions ?? [];
|
||||||
|
const operationalPermissions = adminOperationalPermissionCodes(profile);
|
||||||
|
|
||||||
|
return {
|
||||||
|
profile,
|
||||||
|
legacyPermissions,
|
||||||
|
operationalPermissions,
|
||||||
|
accountKind: resolveAdminAccountKind(profile),
|
||||||
|
isSuperAdmin: profile?.is_super_admin === true,
|
||||||
|
/** @deprecated 逐步改用 {@link hasAnyCode} */
|
||||||
|
hasAnyLegacy: (required: readonly string[]) => adminHasAnyPermission(legacyPermissions, required),
|
||||||
|
hasAnyCode: (required: readonly string[]) => adminHasAnyPermissionCode(operationalPermissions, required),
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,215 +1,227 @@
|
|||||||
{
|
{
|
||||||
"title": "Admins",
|
|
||||||
"listTitle": "Admin user list",
|
|
||||||
"createAdmin": "Create admin",
|
|
||||||
"searchPlaceholder": "Search by username / nickname / email",
|
|
||||||
"loadFailed": "Failed to load admin list",
|
|
||||||
"nicknameRequired": "Enter a nickname",
|
|
||||||
"newPasswordMin": "New password must be at least 8 characters",
|
|
||||||
"siteRequired": "Select a site",
|
|
||||||
"roleRequired": "Select at least one role",
|
|
||||||
"usernameRequired": "Enter a login username",
|
|
||||||
"passwordMin": "Password must be at least 8 characters",
|
|
||||||
"createSuccess": "Created admin {{name}}",
|
|
||||||
"updateSuccess": "Updated {{name}}",
|
|
||||||
"saveAccountFailed": "Failed to save account",
|
|
||||||
"deleteSuccess": "Deleted {{name}}",
|
|
||||||
"deleteFailed": "Delete failed",
|
|
||||||
"roleLoadFailed": "Failed to load role list",
|
|
||||||
"roleListTitle": "Role Management",
|
|
||||||
"createRole": "Create role",
|
|
||||||
"roleCreateSuccess": "Created role {{name}}",
|
|
||||||
"roleUpdateSuccess": "Updated role {{name}}",
|
|
||||||
"roleSaveFailed": "Failed to save role",
|
|
||||||
"roleDeleteSuccess": "Deleted role {{name}}",
|
|
||||||
"roleDeleteFailed": "Failed to delete role",
|
|
||||||
"rolePermissionSaveSuccess": "Role permissions updated",
|
|
||||||
"rolePermissionSaveFailed": "Failed to save role permissions",
|
|
||||||
"roleFormRequired": "Role name and slug are required",
|
|
||||||
"allPermissions": "All permissions",
|
|
||||||
"saveRoleSuccess": "Updated roles for {{name}}",
|
|
||||||
"saveRoleFailed": "Failed to save roles",
|
|
||||||
"savePermissionSuccess": "Updated permissions for {{name}}",
|
|
||||||
"savePermissionFailed": "Failed to save permissions",
|
|
||||||
"modelGuide": "Accounts bind roles only. Maintain functional permissions in Role Management.",
|
|
||||||
"saving": "Saving…",
|
|
||||||
"deleting": "Deleting…",
|
|
||||||
"common": {
|
|
||||||
"none": "None"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"account": "Account",
|
|
||||||
"nickname": "Nickname",
|
|
||||||
"status": "Status",
|
|
||||||
"sites": "Bound sites",
|
|
||||||
"roles": "Roles",
|
|
||||||
"effective": "Effective",
|
|
||||||
"actions": "Actions"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"enabled": "Enabled",
|
|
||||||
"disabled": "Disabled"
|
|
||||||
},
|
|
||||||
"roleType": {
|
|
||||||
"system": "System",
|
|
||||||
"custom": "Custom"
|
|
||||||
},
|
|
||||||
"actions": {
|
|
||||||
"permissions": "Assign roles",
|
|
||||||
"edit": "Edit",
|
|
||||||
"delete": "Delete",
|
|
||||||
"cancel": "Cancel",
|
|
||||||
"save": "Save"
|
|
||||||
},
|
|
||||||
"roleTable": {
|
|
||||||
"name": "Role",
|
|
||||||
"slug": "Role Code",
|
|
||||||
"type": "Type",
|
|
||||||
"status": "Status",
|
|
||||||
"users": "Users",
|
|
||||||
"permissions": "Permission count",
|
|
||||||
"actions": "Actions"
|
|
||||||
},
|
|
||||||
"roleActions": {
|
|
||||||
"permissions": "Permissions"
|
|
||||||
},
|
|
||||||
"permissionLevels": {
|
|
||||||
"view": "View",
|
|
||||||
"node_view": "Nodes · View",
|
|
||||||
"node_manage": "Nodes · Manage",
|
|
||||||
"role_view": "Roles · View",
|
|
||||||
"role_manage": "Roles · Manage",
|
|
||||||
"user_view": "Accounts · View",
|
|
||||||
"user_manage": "Accounts · Manage",
|
|
||||||
"manage": "Manage",
|
|
||||||
"review": "Review",
|
|
||||||
"export": "Export",
|
|
||||||
"control": "Control",
|
|
||||||
"config": "Configure",
|
|
||||||
"reopen": "Reopen",
|
|
||||||
"special": "Privileged"
|
|
||||||
},
|
|
||||||
"permissionDialog": {
|
|
||||||
"title": "Assign roles",
|
|
||||||
"rolesTitle": "Roles",
|
|
||||||
"site": "Site",
|
|
||||||
"rolesDescription": "Admins only bind roles here. Maintain detailed permissions in Role Management. Save roles per site.",
|
|
||||||
"rolePermissionCount": "Contains {{count}} functional permissions",
|
|
||||||
"selectedRoles": "Selected roles:",
|
|
||||||
"saveRoles": "Save roles"
|
|
||||||
},
|
|
||||||
"rolePermissionDialog": {
|
|
||||||
"title": "Role Permissions"
|
|
||||||
},
|
|
||||||
"roleDialog": {
|
|
||||||
"createTitle": "Create Role",
|
|
||||||
"editTitle": "Edit Role",
|
|
||||||
"description": "Roles group backend function permissions and are then assigned to admin accounts.",
|
|
||||||
"slug": "Role code",
|
|
||||||
"slugPlaceholder": "Enter role identifier, for example super_admin",
|
|
||||||
"name": "Role name",
|
|
||||||
"namePlaceholder": "Enter role name",
|
|
||||||
"descriptionLabel": "Role description",
|
|
||||||
"descriptionPlaceholder": "Enter role description",
|
|
||||||
"status": "Status"
|
|
||||||
},
|
|
||||||
"accountDialog": {
|
"accountDialog": {
|
||||||
"createTitle": "Create admin",
|
|
||||||
"editTitle": "Edit account",
|
|
||||||
"createDescription": "Assign at least one default-site role. Login usernames may contain letters, numbers, dots, underscores, and hyphens only, and are stored in lowercase.",
|
"createDescription": "Assign at least one default-site role. Login usernames may contain letters, numbers, dots, underscores, and hyphens only, and are stored in lowercase.",
|
||||||
|
"createTitle": "Create admin",
|
||||||
"editDescription": "Login username cannot be changed. Leave password empty to keep it unchanged.",
|
"editDescription": "Login username cannot be changed. Leave password empty to keep it unchanged.",
|
||||||
"username": "Login username",
|
"editTitle": "Edit account",
|
||||||
"usernamePlaceholder": "For example: ops_admin",
|
|
||||||
"nickname": "Nickname",
|
|
||||||
"nicknamePlaceholder": "Display name",
|
|
||||||
"emailOptional": "Email (optional)",
|
"emailOptional": "Email (optional)",
|
||||||
"emailPlaceholder": "Leave empty if not needed",
|
"emailPlaceholder": "Leave empty if not needed",
|
||||||
|
"nickname": "Nickname",
|
||||||
|
"nicknamePlaceholder": "Display name",
|
||||||
|
"noRoles": "No roles available yet. Wait for the list to finish loading and try again.",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"passwordOptional": "Password (optional)",
|
"passwordOptional": "Password (optional)",
|
||||||
"passwordPlaceholderCreate": "At least 8 characters",
|
"passwordPlaceholderCreate": "At least 8 characters",
|
||||||
"passwordPlaceholderEdit": "Leave empty to keep unchanged",
|
"passwordPlaceholderEdit": "Leave empty to keep unchanged",
|
||||||
|
"rolesDescription": "After creation, adjust per-site role bindings in Assign Roles.",
|
||||||
|
"rolesRequired": "Roles (at least one)",
|
||||||
"site": "Bound site",
|
"site": "Bound site",
|
||||||
"sitePlaceholder": "Select which site this account can access",
|
"sitePlaceholder": "Select which site this account can access",
|
||||||
"rolesRequired": "Roles (at least one)",
|
"username": "Login username",
|
||||||
"rolesDescription": "After creation, adjust per-site role bindings in Assign Roles.",
|
"usernamePlaceholder": "For example: ops_admin"
|
||||||
"noRoles": "No roles available yet. Wait for the list to finish loading and try again."
|
|
||||||
},
|
},
|
||||||
|
"actions": {
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"delete": "Delete",
|
||||||
|
"edit": "Edit",
|
||||||
|
"permissions": "Assign roles",
|
||||||
|
"save": "Save"
|
||||||
|
},
|
||||||
|
"allPermissions": "All permissions",
|
||||||
|
"common": {
|
||||||
|
"none": "None"
|
||||||
|
},
|
||||||
|
"confirmSaveAccountCreateDescription": "This creates a new admin account and assigns the selected roles.",
|
||||||
|
"confirmSaveAccountEditDescription": "This updates account details for admin {{name}}, including status and password changes.",
|
||||||
|
"confirmSaveAccountTitle": "Save admin account?",
|
||||||
|
"confirmSaveRoleCreateDescription": "This creates a new role {{name}}.",
|
||||||
|
"confirmSaveRoleEditDescription": "This updates the name, description, and status of role {{name}}.",
|
||||||
|
"confirmSaveRolePermissionsDescription": "This updates feature permissions for role “{{name}}”. All admins bound to this role are affected immediately.",
|
||||||
|
"confirmSaveRolePermissionsTitle": "Save role permissions?",
|
||||||
|
"confirmSaveRoleTitle": "Save role details?",
|
||||||
|
"confirmSaveRolesDescription": "This updates role bindings for admin {{name}}; their console permissions will change accordingly.",
|
||||||
|
"confirmSaveRolesTitle": "Save admin roles?",
|
||||||
|
"createAdmin": "Create admin",
|
||||||
|
"createRole": "Create role",
|
||||||
|
"createSuccess": "Created admin {{name}}",
|
||||||
"delete": {
|
"delete": {
|
||||||
"currentUserBlocked": "You cannot delete the currently signed-in account",
|
"confirmDescription": "Delete admin {{name}}? This action cannot be undone.",
|
||||||
"rowActionTitle": "Delete this admin",
|
|
||||||
"confirmTitle": "Confirm deletion",
|
"confirmTitle": "Confirm deletion",
|
||||||
"confirmDescription": "Delete admin {{name}}? This action cannot be undone."
|
"currentUserBlocked": "You cannot delete the currently signed-in account",
|
||||||
|
"rowActionTitle": "Delete this admin"
|
||||||
},
|
},
|
||||||
"roleDelete": {
|
"deleteFailed": "Delete failed",
|
||||||
"confirmTitle": "Delete Role",
|
"deleteSuccess": "Deleted {{name}}",
|
||||||
"confirmDescription": "Delete role {{name}}?"
|
"deleting": "Deleting…",
|
||||||
|
"listTitle": "Admin user list",
|
||||||
|
"loadFailed": "Failed to load admin list",
|
||||||
|
"modelGuide": "Accounts bind roles only. Maintain functional permissions in Role Management.",
|
||||||
|
"newPasswordMin": "New password must be at least 8 characters",
|
||||||
|
"nicknameRequired": "Enter a nickname",
|
||||||
|
"passwordMin": "Password must be at least 8 characters",
|
||||||
|
"permissionDialog": {
|
||||||
|
"rolePermissionCount": "Contains {{count}} functional permissions",
|
||||||
|
"rolesDescription": "Admins only bind roles here. Maintain detailed permissions in Role Management. Save roles per site.",
|
||||||
|
"rolesTitle": "Roles",
|
||||||
|
"saveRoles": "Save roles",
|
||||||
|
"selectedRoles": "Selected roles:",
|
||||||
|
"site": "Site",
|
||||||
|
"title": "Assign roles"
|
||||||
},
|
},
|
||||||
"permissionGroups": {
|
"permissionGroups": {
|
||||||
"all": "All Permissions",
|
|
||||||
"dashboard": "Dashboard",
|
|
||||||
"admin_users": "Admin Users",
|
|
||||||
"admin_roles": "Role Management",
|
"admin_roles": "Role Management",
|
||||||
|
"admin_users": "Admin Users",
|
||||||
"agents": "Agent Management",
|
"agents": "Agent Management",
|
||||||
"players": "Players",
|
"all": "All Permissions",
|
||||||
"currencies": "Currencies",
|
"audit": "Audit Logs",
|
||||||
"wallet": "Wallet",
|
|
||||||
"draws": "Draws",
|
|
||||||
"config": "Configuration",
|
"config": "Configuration",
|
||||||
"rules_plays": "Play Rules",
|
"currencies": "Currencies",
|
||||||
"rules_odds": "Odds & Rebate",
|
"dashboard": "Dashboard",
|
||||||
"risk_cap": "Risk Cap Rules",
|
"draws": "Draws",
|
||||||
"risk": "Risk",
|
"integration": "Integration Sites",
|
||||||
"settlement": "Settlement",
|
|
||||||
"jackpot": "Jackpot",
|
"jackpot": "Jackpot",
|
||||||
|
"players": "Players",
|
||||||
"reconcile": "Reconcile",
|
"reconcile": "Reconcile",
|
||||||
"reports": "Reports",
|
"reports": "Reports",
|
||||||
"tickets": "Tickets",
|
"risk": "Risk",
|
||||||
"audit": "Audit Logs",
|
"risk_cap": "Risk Cap Rules",
|
||||||
|
"rules_odds": "Odds & Rebate",
|
||||||
|
"rules_plays": "Play Rules",
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
"integration": "Integration Sites"
|
"settlement": "Settlement",
|
||||||
|
"tickets": "Tickets",
|
||||||
|
"wallet": "Wallet"
|
||||||
|
},
|
||||||
|
"permissionLevels": {
|
||||||
|
"config": "Configure",
|
||||||
|
"control": "Control",
|
||||||
|
"export": "Export",
|
||||||
|
"manage": "Manage",
|
||||||
|
"node_manage": "Nodes · Manage",
|
||||||
|
"node_view": "Nodes · View",
|
||||||
|
"reopen": "Reopen",
|
||||||
|
"review": "Review",
|
||||||
|
"role_manage": "Roles · Manage",
|
||||||
|
"role_view": "Roles · View",
|
||||||
|
"special": "Privileged",
|
||||||
|
"user_manage": "Accounts · Manage",
|
||||||
|
"user_view": "Accounts · View",
|
||||||
|
"view": "View"
|
||||||
},
|
},
|
||||||
"permissionNames": {
|
"permissionNames": {
|
||||||
"prd.dashboard.view": "Dashboard · View",
|
|
||||||
"prd.agent.view": "Agent Management · View",
|
|
||||||
"prd.agent.manage": "Agent Management · Manage",
|
|
||||||
"prd.agent.role.view": "Agent Roles · View",
|
|
||||||
"prd.agent.role.manage": "Agent Roles · Manage",
|
|
||||||
"prd.agent.user.view": "Agent Accounts · View",
|
|
||||||
"prd.agent.user.manage": "Agent Accounts · Manage",
|
|
||||||
"prd.admin_user.manage": "Admin Users · Manage",
|
|
||||||
"prd.admin_role.manage": "Role Management · Manage",
|
"prd.admin_role.manage": "Role Management · Manage",
|
||||||
"prd.integration.view": "Integration Sites · View",
|
"prd.admin_user.manage": "Admin Users · Manage",
|
||||||
"prd.integration.manage": "Integration Sites · Manage",
|
"prd.agent.manage": "Agent Management · Manage",
|
||||||
"prd.users.manage": "Players · Manage",
|
"prd.agent.role.manage": "Agent Roles · Manage",
|
||||||
|
"prd.agent.role.view": "Agent Roles · View",
|
||||||
|
"prd.agent.user.manage": "Agent Accounts · Manage",
|
||||||
|
"prd.agent.user.view": "Agent Accounts · View",
|
||||||
|
"prd.agent.view": "Agent Management · View",
|
||||||
|
"prd.audit.view": "Audit Logs · View",
|
||||||
"prd.currency.manage": "Currency Management · Manage",
|
"prd.currency.manage": "Currency Management · Manage",
|
||||||
"prd.users.view_finance": "Players · View Finance",
|
"prd.dashboard.view": "Dashboard · View",
|
||||||
"prd.users.view_cs": "Players · View Customer Service Cases",
|
"prd.draw_reopen.manage": "Draw Reopen · Manage",
|
||||||
"prd.player_freeze.manage": "Freeze/Unfreeze Player · Manage",
|
|
||||||
"prd.wallet_reconcile.manage": "Wallet Reconcile · Manage",
|
|
||||||
"prd.wallet_reconcile.view": "Wallet Reconcile · View",
|
|
||||||
"prd.wallet_reconcile.view_cs": "Wallet Reconcile · Customer Service View",
|
|
||||||
"prd.wallet_adjust.manage": "Adjustment/Reversal · Manage",
|
|
||||||
"prd.draw_result.manage": "Draw Results Entry · Manage",
|
"prd.draw_result.manage": "Draw Results Entry · Manage",
|
||||||
"prd.draw_result.view": "Draw Results · View",
|
"prd.draw_result.view": "Draw Results · View",
|
||||||
"prd.draw_reopen.manage": "Draw Reopen · Manage",
|
"prd.integration.manage": "Integration Sites · Manage",
|
||||||
"prd.play_switch.manage": "Play Switches · Manage",
|
"prd.integration.view": "Integration Sites · View",
|
||||||
|
"prd.jackpot.manage": "Jackpot Configuration · Manage",
|
||||||
|
"prd.jackpot.manual_burst": "Jackpot Manual Burst · Super Admin Only",
|
||||||
|
"prd.jackpot.view": "Jackpot Configuration · View",
|
||||||
"prd.odds.manage": "Odds Configuration · Manage",
|
"prd.odds.manage": "Odds Configuration · Manage",
|
||||||
"prd.odds.view": "Odds Configuration · View",
|
"prd.odds.view": "Odds Configuration · View",
|
||||||
"prd.risk_cap.manage": "Risk Caps · Manage",
|
|
||||||
"prd.risk_cap.view": "Risk Caps · View",
|
|
||||||
"prd.rebate.manage": "Commission/Rebate · Manage",
|
|
||||||
"prd.rebate.view": "Commission/Rebate · View",
|
|
||||||
"prd.jackpot.manage": "Jackpot Configuration · Manage",
|
|
||||||
"prd.jackpot.view": "Jackpot Configuration · View",
|
|
||||||
"prd.jackpot.manual_burst": "Jackpot Manual Burst · Super Admin Only",
|
|
||||||
"prd.payout.manage": "Payout Confirmation · Manage",
|
"prd.payout.manage": "Payout Confirmation · Manage",
|
||||||
"prd.payout.review": "Payout Confirmation · Review",
|
"prd.payout.review": "Payout Confirmation · Review",
|
||||||
"prd.payout.view": "Payout Confirmation · View",
|
"prd.payout.view": "Payout Confirmation · View",
|
||||||
"prd.tickets.view": "Player Tickets · View",
|
"prd.play_switch.manage": "Play Switches · Manage",
|
||||||
"prd.audit.view": "Audit Logs · View",
|
"prd.player_freeze.manage": "Freeze/Unfreeze Player · Manage",
|
||||||
"prd.report.view": "Reports · View",
|
"prd.rebate.manage": "Commission/Rebate · Manage",
|
||||||
|
"prd.rebate.view": "Commission/Rebate · View",
|
||||||
"prd.report.export": "Reports · Export",
|
"prd.report.export": "Reports · Export",
|
||||||
|
"prd.report.view": "Reports · View",
|
||||||
|
"prd.risk.manage": "Risk Center · Manage",
|
||||||
"prd.risk.view": "Risk Center · View",
|
"prd.risk.view": "Risk Center · View",
|
||||||
"prd.risk.manage": "Risk Center · Manage"
|
"prd.risk_cap.manage": "Risk Caps · Manage",
|
||||||
}
|
"prd.risk_cap.view": "Risk Caps · View",
|
||||||
|
"prd.tickets.view": "Player Tickets · View",
|
||||||
|
"prd.users.manage": "Players · Manage",
|
||||||
|
"prd.users.view_cs": "Players · View Customer Service Cases",
|
||||||
|
"prd.users.view_finance": "Players · View Finance",
|
||||||
|
"prd.wallet_adjust.manage": "Adjustment/Reversal · Manage",
|
||||||
|
"prd.wallet_reconcile.manage": "Wallet Reconcile · Manage",
|
||||||
|
"prd.wallet_reconcile.view": "Wallet Reconcile · View",
|
||||||
|
"prd.wallet_reconcile.view_cs": "Wallet Reconcile · Customer Service View"
|
||||||
|
},
|
||||||
|
"roleActions": {
|
||||||
|
"permissions": "Permissions"
|
||||||
|
},
|
||||||
|
"roleCreateSuccess": "Created role {{name}}",
|
||||||
|
"roleDelete": {
|
||||||
|
"confirmDescription": "Delete role {{name}}?",
|
||||||
|
"confirmTitle": "Delete Role"
|
||||||
|
},
|
||||||
|
"roleDeleteFailed": "Failed to delete role",
|
||||||
|
"roleDeleteSuccess": "Deleted role {{name}}",
|
||||||
|
"roleDialog": {
|
||||||
|
"createTitle": "Create Role",
|
||||||
|
"description": "Roles group backend function permissions and are then assigned to admin accounts.",
|
||||||
|
"descriptionLabel": "Role description",
|
||||||
|
"descriptionPlaceholder": "Enter role description",
|
||||||
|
"editTitle": "Edit Role",
|
||||||
|
"name": "Role name",
|
||||||
|
"namePlaceholder": "Enter role name",
|
||||||
|
"slug": "Role code",
|
||||||
|
"slugPlaceholder": "Enter role identifier, for example super_admin",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"roleFormRequired": "Role name and slug are required",
|
||||||
|
"roleListHint": "You can add custom roles and configure permissions. Built-in roles (super admin, site admin, site finance, site support, agent) cannot be deleted.",
|
||||||
|
"roleListTitle": "Role Management",
|
||||||
|
"roleLoadFailed": "Failed to load role list",
|
||||||
|
"rolePermissionDialog": {
|
||||||
|
"packageHint": "Checking a module row on the left grants View only. Select Manage separately for data entry, close, draw, and other admin actions.",
|
||||||
|
"title": "Role Permissions"
|
||||||
|
},
|
||||||
|
"rolePermissionSaveFailed": "Failed to save role permissions",
|
||||||
|
"rolePermissionSaveSuccess": "Role permissions updated",
|
||||||
|
"roleRequired": "Select at least one role",
|
||||||
|
"roleSaveFailed": "Failed to save role",
|
||||||
|
"roleTable": {
|
||||||
|
"actions": "Actions",
|
||||||
|
"name": "Role",
|
||||||
|
"permissions": "Permission count",
|
||||||
|
"slug": "Role Code",
|
||||||
|
"status": "Status",
|
||||||
|
"type": "Type",
|
||||||
|
"users": "Users"
|
||||||
|
},
|
||||||
|
"roleType": {
|
||||||
|
"custom": "Custom",
|
||||||
|
"system": "System"
|
||||||
|
},
|
||||||
|
"roleUpdateSuccess": "Updated role {{name}}",
|
||||||
|
"saveAccountFailed": "Failed to save account",
|
||||||
|
"savePermissionFailed": "Failed to save permissions",
|
||||||
|
"savePermissionSuccess": "Updated permissions for {{name}}",
|
||||||
|
"saveRoleFailed": "Failed to save roles",
|
||||||
|
"saveRoleSuccess": "Updated roles for {{name}}",
|
||||||
|
"saving": "Saving…",
|
||||||
|
"searchPlaceholder": "Search by username / nickname / email",
|
||||||
|
"siteRequired": "Select a site",
|
||||||
|
"status": {
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"enabled": "Enabled"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"account": "Account",
|
||||||
|
"actions": "Actions",
|
||||||
|
"effective": "Effective",
|
||||||
|
"nickname": "Nickname",
|
||||||
|
"roles": "Roles",
|
||||||
|
"sites": "Bound sites",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"title": "Admins",
|
||||||
|
"updateSuccess": "Updated {{name}}",
|
||||||
|
"usernameRequired": "Enter a login username"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,249 +1,397 @@
|
|||||||
{
|
{
|
||||||
"title": "Agent management",
|
|
||||||
"sitesListHint": "For integration keys and callbacks, go to",
|
|
||||||
"sitesListLink": "Config · Connected sites",
|
|
||||||
"lineUi": {
|
|
||||||
"kicker": "Credit share · Agent tree",
|
|
||||||
"agentCount": "{{count}} agents in this group",
|
|
||||||
"searchPlaceholder": "Search name or login",
|
|
||||||
"directChildren": "{{count}} direct downline",
|
|
||||||
"selectAgent": "Select an agent to view share & credit",
|
|
||||||
"selectAgentHint": "Settlement boundaries follow the agent tree; share, credit and rebate are configured per node.",
|
|
||||||
"allocatedCredit": "Allocated",
|
|
||||||
"availableCredit": "Available",
|
|
||||||
"profileFootnote": "Rebate cap {{rebate}}% · Default {{defaultRebate}}%",
|
|
||||||
"tabOverview": "Overview",
|
|
||||||
"tabProfile": "Share & credit",
|
|
||||||
"tabProfileReadOnly": "Share & credit (read-only)",
|
|
||||||
"currentSite": "Site",
|
|
||||||
"viewAll": "View all",
|
|
||||||
"shareRebateCap": "Rebate cap {{rate}}%",
|
|
||||||
"overviewDownlineCard": "View and manage direct downline agents",
|
|
||||||
"overviewDownlineCount": "{{count}}",
|
|
||||||
"overviewPlayersHint": "View direct players and credit status",
|
|
||||||
"overviewPlayersSummary": "Player management",
|
|
||||||
"downlineEmptyTitle": "No direct downline yet",
|
|
||||||
"editAccount": "Account & status",
|
|
||||||
"saveProfile": "Save share & credit",
|
|
||||||
"tabDownline": "Downline",
|
|
||||||
"tabPlayers": "Players",
|
|
||||||
"noDelegatedTabs": "This agent cannot create downline agents or players; only share and credit settings apply."
|
|
||||||
},
|
|
||||||
"listTitle": "Agents",
|
|
||||||
"listSearch": "Search name / code / login",
|
|
||||||
"siteSearch": "Search site name",
|
|
||||||
"parentAgent": "Parent",
|
|
||||||
"childrenCount": "Direct downline",
|
|
||||||
"subnav": {
|
|
||||||
"label": "Agent management navigation",
|
|
||||||
"noPermission": "No permission",
|
|
||||||
"operations": "Line & agent tree",
|
|
||||||
"provision": "Provision level-1 agent",
|
|
||||||
"settlementBills": "Periods & bills",
|
|
||||||
"provisionHint": "One-time onboarding; use Line & agent tree for daily work"
|
|
||||||
},
|
|
||||||
"includeRoots": "Include root nodes",
|
|
||||||
"includeRootsHint": "Root nodes represent site boundaries and are excluded from operating agent counts by default.",
|
|
||||||
"directoryStatus": {
|
|
||||||
"all": "All statuses",
|
|
||||||
"enabled": "Enabled only",
|
|
||||||
"disabled": "Disabled only"
|
|
||||||
},
|
|
||||||
"tabs": {
|
|
||||||
"subordinates": "Subordinates",
|
|
||||||
"accounts": "Primary account",
|
|
||||||
"players": "Players",
|
|
||||||
"overview": "Overview",
|
|
||||||
"roles": "Roles",
|
|
||||||
"users": "Accounts",
|
|
||||||
"delegation": "Delegation ceiling"
|
|
||||||
},
|
|
||||||
"filterParent": "Parent agent",
|
|
||||||
"filterParentAll": "All subordinates",
|
|
||||||
"listFlatHint": "All operating agents in a flat list. Use row actions to add a child under a specific agent.",
|
|
||||||
"addChildNeedParent": "Select a parent agent before adding a subordinate",
|
"addChildNeedParent": "Select a parent agent before adding a subordinate",
|
||||||
"treeTitle": "Agent tree",
|
"bindAccountHint": "No login account is bound yet. Saving will create and bind one automatically.",
|
||||||
"detailTitle": "Node details",
|
"bindAccountPasswordRequired": "This agent has no login account yet. Enter an initial password to create one.",
|
||||||
"selectNode": "Select an agent node from the tree",
|
"childrenCount": "Direct downline",
|
||||||
"loadFailed": "Failed to load agent tree",
|
"code": "Code",
|
||||||
"lineFilter": "Level-1 agent",
|
"codeRequired": "Code and name are required",
|
||||||
"createChild": "Add child agent",
|
"createChild": "Add child agent",
|
||||||
"viewDownline": "View sub-agents and players",
|
"createSuccess": "Created agent {{name}}",
|
||||||
"downlineDialogTitle": "{{name}} — sub-agents and players",
|
"delegation": {
|
||||||
"downlineAgentsSection": "Sub-agents",
|
"canDelegate": "May delegate further",
|
||||||
"downlinePlayersSection": "Direct players",
|
"empty": "No actions available to assign",
|
||||||
"downlineNoAgents": "No sub-agents yet",
|
"hint": "Select actions this child agent may grant to its own subordinates. Agent roles cannot exceed this ceiling.",
|
||||||
"editNode": "Edit node",
|
"permission": "Action",
|
||||||
"deleteNode": "Delete node",
|
"rootDenied": "Root nodes do not use delegation ceilings",
|
||||||
"deleteNodeConfirm": "This action cannot be undone. Make sure the node has no children, users, or roles.",
|
"save": "Save ceiling",
|
||||||
"deleteNodeBlockedHint": "Remove child agents, roles, and accounts before deleting this node",
|
"saveSuccess": "Delegation ceiling saved",
|
||||||
"deleteNodeBlockedPrefix": "Cannot delete yet: ",
|
"title": "Delegation ceiling"
|
||||||
|
},
|
||||||
"deleteBlocked": {
|
"deleteBlocked": {
|
||||||
"children": "{{count}} child agent(s) remain",
|
"children": "{{count}} child agent(s) remain",
|
||||||
"roles": "{{count}} role(s) must be removed in the Roles tab first",
|
"roles": "{{count}} role(s) must be removed in the Roles tab first",
|
||||||
"users": "{{count}} bound account(s) remain"
|
"users": "{{count}} bound account(s) remain"
|
||||||
},
|
},
|
||||||
"code": "Code",
|
"deleteNode": "Delete node",
|
||||||
"name": "Name",
|
"deleteNodeBlockedHint": "Remove child agents, roles, and accounts before deleting this node",
|
||||||
"namePlaceholder": "Enter agent name",
|
"deleteNodeBlockedPrefix": "Cannot delete yet: ",
|
||||||
"depth": "Depth",
|
"deleteNodeConfirm": "This action cannot be undone. Make sure the node has no children, users, or roles.",
|
||||||
"path": "Path",
|
|
||||||
"status": "Status",
|
|
||||||
"isRoot": "Root",
|
|
||||||
"createSuccess": "Created agent {{name}}",
|
|
||||||
"updateSuccess": "Updated {{name}}",
|
|
||||||
"deleteSuccess": "Deleted agent {{name}}",
|
"deleteSuccess": "Deleted agent {{name}}",
|
||||||
"saveFailed": "Save failed",
|
"depth": "Depth",
|
||||||
"codeRequired": "Code and name are required",
|
"detailTitle": "Node details",
|
||||||
"nameRequired": "Agent name is required",
|
"directoryStatus": {
|
||||||
"usernameRequired": "Login name is required",
|
"all": "All statuses",
|
||||||
"passwordRequired": "Password is required",
|
"disabled": "Disabled only",
|
||||||
"passwordMinLength": "Password must be at least 8 characters",
|
"enabled": "Enabled only"
|
||||||
"bindAccountPasswordRequired": "This agent has no login account yet. Enter an initial password to create one.",
|
|
||||||
"bindAccountHint": "No login account is bound yet. Saving will create and bind one automatically.",
|
|
||||||
"modelGuide": "Agent layer controls data scope and delegation ceiling. Account permissions are assigned through roles.",
|
|
||||||
"pageGuide": "Manage the agent tree, agent roles, agent accounts, and delegation ceilings here. Platform accounts and platform roles stay in platform governance pages.",
|
|
||||||
"summary": {
|
|
||||||
"currentSiteNodes": "Current site nodes",
|
|
||||||
"currentSiteAgents": "Current site operating agents",
|
|
||||||
"visibleList": "Current flat list rows",
|
|
||||||
"visibleAgents": "Current visible operating agents",
|
|
||||||
"globalNodes": "All-site node total",
|
|
||||||
"globalAgents": "All-site operating agents",
|
|
||||||
"enabledAgents": "Enabled operating agents",
|
|
||||||
"rootNodes": "Root node count"
|
|
||||||
},
|
|
||||||
"profile": {
|
|
||||||
"section": "Share & credit",
|
|
||||||
"totalShareRate": "Share rate (%)",
|
|
||||||
"creditLimit": "Credit limit",
|
|
||||||
"rebateLimit": "Rebate ceiling (%)",
|
|
||||||
"defaultPlayerRebate": "Default player rebate (%)",
|
|
||||||
"settlementCycle": "Settlement cycle",
|
|
||||||
"canGrantExtraRebate": "Allow extra rebate",
|
|
||||||
"canCreatePlayer": "Allow creating players",
|
|
||||||
"canCreateChildAgent": "Allow creating sub-agents",
|
|
||||||
"cycleDaily": "Daily",
|
|
||||||
"cycleWeekly": "Weekly",
|
|
||||||
"cycleMonthly": "Monthly",
|
|
||||||
"loading": "Loading share and credit settings…",
|
|
||||||
"loadFailed": "Failed to load share and credit settings. Close and try again.",
|
|
||||||
"loadingBlocked": "Share and credit settings are still loading. Please wait before saving.",
|
|
||||||
"validation": {
|
|
||||||
"shareRange": "Share rate must be between 0 and 100",
|
|
||||||
"creditInvalid": "Credit limit cannot be negative",
|
|
||||||
"creditBelowAllocated": "Credit limit cannot be below allocated credit (minimum {{min}})",
|
|
||||||
"creditExceedsParentWithMax": "Credit limit cannot exceed {{max}}",
|
|
||||||
"rebateLimitRange": "Rebate ceiling must be between 0 and 100%",
|
|
||||||
"defaultRebateRange": "Default player rebate must be between 0 and 100%",
|
|
||||||
"defaultExceedsLimit": "Default player rebate cannot exceed the rebate ceiling"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"settlementBills": {
|
|
||||||
"title": "Agent bills",
|
|
||||||
"description": "Bills appear after a period is closed; latest period is selected by default.",
|
|
||||||
"periodLabel": "Period",
|
|
||||||
"periodPlaceholder": "Select period",
|
|
||||||
"allPeriods": "All periods",
|
|
||||||
"filteredByPeriodRange": "Bills for {{range}}",
|
|
||||||
"emptyNoPeriodsManage": "No periods or bills yet. Use quick presets under Period management, then close the period.",
|
|
||||||
"emptyNoPeriodsAgent": "No bills yet. Your upline or platform will close periods; you do not need to enter dates.",
|
|
||||||
"emptyNoClosed": "No closed period yet. Bills are generated after close.",
|
|
||||||
"typePlayer": "Player bill",
|
|
||||||
"typeAgent": "Agent bill",
|
|
||||||
"columns": {
|
|
||||||
"id": "ID",
|
|
||||||
"period": "Period",
|
|
||||||
"type": "Type",
|
|
||||||
"net": "Net",
|
|
||||||
"unpaid": "Unpaid",
|
|
||||||
"status": "Status"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"settlementPeriods": {
|
|
||||||
"manageTitle": "Period management",
|
|
||||||
"manageHint": "Open and close periods here; bills above update automatically. Quick presets are usually enough.",
|
|
||||||
"presetThisWeek": "This week",
|
|
||||||
"presetLastWeek": "Last week",
|
|
||||||
"presetThisMonth": "This month",
|
|
||||||
"openHint": "Local dates ({{tz}})",
|
|
||||||
"startDate": "Start date",
|
|
||||||
"endDate": "End date",
|
|
||||||
"open": "Open period",
|
|
||||||
"openFailed": "Failed to open period",
|
|
||||||
"datesRequired": "Enter start and end dates",
|
|
||||||
"invalidRange": "End date cannot be before start date",
|
|
||||||
"statusOpen": "Open",
|
|
||||||
"statusClosed": "Closed"
|
|
||||||
},
|
},
|
||||||
|
"downlineAgentsSection": "Sub-agents",
|
||||||
|
"downlineDialogTitle": "{{name}} — sub-agents and players",
|
||||||
|
"downlineNoAgents": "No sub-agents yet",
|
||||||
|
"downlinePlayersSection": "Direct players",
|
||||||
|
"editNode": "Edit node",
|
||||||
|
"filterParent": "Parent agent",
|
||||||
|
"filterParentAll": "All subordinates",
|
||||||
|
"includeRoots": "Include root nodes",
|
||||||
|
"includeRootsHint": "Root nodes represent site boundaries and are excluded from operating agent counts by default.",
|
||||||
|
"isRoot": "Root",
|
||||||
|
"lineFilter": "Level-1 agent",
|
||||||
"lineProvision": {
|
"lineProvision": {
|
||||||
"title": "Create level-1 agent",
|
|
||||||
"description": "Creates the level-1 agent, admin login, and line settings (share, credit, rebate, settlement cycle) in one step.",
|
"description": "Creates the level-1 agent, admin login, and line settings (share, credit, rebate, settlement cycle) in one step.",
|
||||||
|
"link": "Create level-1 agent",
|
||||||
"name": "Level-1 agent name",
|
"name": "Level-1 agent name",
|
||||||
"username": "Admin login",
|
"noUnboundSite": "No sites without a level-1 agent",
|
||||||
|
"openIntegrationSites": "Go to integration sites",
|
||||||
"password": "Initial password",
|
"password": "Initial password",
|
||||||
"walletUrl": "Wallet API URL (optional technical field)",
|
"passwordHint": "At least 8 characters",
|
||||||
|
"secretsOnce": "Integration secrets are shown once — save them now",
|
||||||
|
"siteCode": "Integration site",
|
||||||
|
"siteCodePlaceholder": "Select site",
|
||||||
|
"siteRequired": "Select an integration site",
|
||||||
"submit": "Create level-1 agent",
|
"submit": "Create level-1 agent",
|
||||||
"success": "Level-1 agent created",
|
"success": "Level-1 agent created",
|
||||||
"secretsOnce": "Integration secrets are shown once — save them now",
|
"title": "Create level-1 agent",
|
||||||
"link": "Create level-1 agent"
|
"username": "Admin login",
|
||||||
|
"walletUrl": "Wallet API URL (optional technical field)"
|
||||||
},
|
},
|
||||||
|
"lineUi": {
|
||||||
|
"agentCount": "{{count}} agents in this group",
|
||||||
|
"allocatedCredit": "Allocated",
|
||||||
|
"availableCredit": "Available",
|
||||||
|
"collapse": "Collapse",
|
||||||
|
"currentSite": "Site",
|
||||||
|
"directChildren": "{{count}} direct downline",
|
||||||
|
"downlineColumns": {
|
||||||
|
"downlineCount": "Downline count",
|
||||||
|
"email": "Email"
|
||||||
|
},
|
||||||
|
"downlineEmpty": "No direct downline yet. Child agents will appear here after creation.",
|
||||||
|
"downlineEmptyShort": "No direct downline yet.",
|
||||||
|
"downlineEmptyTitle": "No direct downline yet",
|
||||||
|
"editAccount": "Account & status",
|
||||||
|
"editCurrent": "Edit this agent",
|
||||||
|
"expand": "Expand",
|
||||||
|
"kicker": "Credit share · Agent tree",
|
||||||
|
"nextSteps": "Suggested next steps",
|
||||||
|
"noDelegatedTabs": "This agent cannot create downline agents or players; only share and credit settings apply.",
|
||||||
|
"overviewDownlineCard": "View and manage direct downline agents",
|
||||||
|
"overviewDownlineCount": "{{count}}",
|
||||||
|
"overviewDownlineHint": "{{count}} direct downline agent(s). Manage them in the Downline tab.",
|
||||||
|
"overviewPlayersHint": "View direct players and credit status",
|
||||||
|
"overviewPlayersSummary": "Player management",
|
||||||
|
"playersNoPermissionHint": "This account does not have player management permission on this node.",
|
||||||
|
"playersUnavailableHint": "This agent cannot create players. Enable “Allow create player” in the agent profile first.",
|
||||||
|
"profileFootnote": "Rebate cap {{rebate}}% · Default {{defaultRebate}}%",
|
||||||
|
"profileReadOnlyHint": "Share, credit, and rebate are configured by your upline. Contact your parent agent or the platform to request changes.",
|
||||||
|
"profileTabHint": "Maintain share, credit, rebate, and risk tags here. Use Account & status for login name and password.",
|
||||||
|
"saveProfile": "Save share & credit",
|
||||||
|
"searchPlaceholder": "Search name or login",
|
||||||
|
"selectAgent": "Select an agent to view share & credit",
|
||||||
|
"selectAgentHint": "Settlement boundaries follow the agent tree; share, credit and rebate are configured per node.",
|
||||||
|
"selfAgentOverviewHint": "Credit below is allocated by your upline. Share and rebate are maintained upstream; this account cannot view or edit them.",
|
||||||
|
"shareRebateCap": "Rebate cap {{rate}}%",
|
||||||
|
"sidebarAvailableCredit": "Available to grant {{amount}}",
|
||||||
|
"sidebarShareRate": "Share {{rate}}%",
|
||||||
|
"stepDownline": "Manage direct downline ({{count}} now)",
|
||||||
|
"stepPlayers": "Create or maintain direct players",
|
||||||
|
"stepProfile": "Configure share, credit, and rebate",
|
||||||
|
"tabDownline": "Downline",
|
||||||
|
"tabOverview": "Overview",
|
||||||
|
"tabPlayers": "Players",
|
||||||
|
"tabProfile": "Share & credit",
|
||||||
|
"tabProfileReadOnly": "Share & credit (read-only)",
|
||||||
|
"viewAll": "View all"
|
||||||
|
},
|
||||||
|
"listFlatHint": "All operating agents in a flat list. Use row actions to add a child under a specific agent.",
|
||||||
|
"listSearch": "Search name / code / login",
|
||||||
|
"listTitle": "Agents",
|
||||||
|
"loadFailed": "Failed to load agent tree",
|
||||||
|
"modelGuide": "Agent layer controls data scope and delegation ceiling. Account permissions are assigned through roles.",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Enter agent name",
|
||||||
|
"nameRequired": "Agent name is required",
|
||||||
"noAccess": "You do not have permission to manage agents. Contact an administrator.",
|
"noAccess": "You do not have permission to manage agents. Contact an administrator.",
|
||||||
|
"pageGuide": "Manage the agent tree, agent roles, agent accounts, and delegation ceilings here. Platform accounts and platform roles stay in platform governance pages.",
|
||||||
|
"parentAgent": "Parent",
|
||||||
|
"passwordMinLength": "Password must be at least 8 characters",
|
||||||
|
"passwordOptionalHint": "Leave empty to keep unchanged, or enter an 8-character password",
|
||||||
|
"passwordPlaceholder": "Enter an 8-character password",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"path": "Path",
|
||||||
"playersPanel": {
|
"playersPanel": {
|
||||||
"create": "Create player",
|
|
||||||
"scopedTo": "Direct players: {{agent}}",
|
|
||||||
"allUnderSite": "Players visible on this site",
|
"allUnderSite": "Players visible on this site",
|
||||||
|
"authSource": "Auth source",
|
||||||
|
"availableToGrant": "Agent available to grant: {{amount}}",
|
||||||
|
"create": "Create player",
|
||||||
|
"createSuccessNative": "Player {{name}} created — use lottery /login",
|
||||||
|
"creditLimit": "Credit limit",
|
||||||
|
"creditLimitAvailable": "Credit limit / available",
|
||||||
|
"creditLimitExceeded": "Credit limit cannot exceed this agent’s available grant",
|
||||||
|
"creditLimitInvalid": "Credit limit must be an integer ≥ 0",
|
||||||
|
"creditListHint": "Credit line: below shows player credit limits and available credit, not main-site wallet balance.",
|
||||||
|
"externalIdHint": "Leave blank to auto-generate",
|
||||||
|
"externalIdOptional": "External ID (optional)",
|
||||||
"filterHint": "Filter direct players by parent agent.",
|
"filterHint": "Filter direct players by parent agent.",
|
||||||
|
"fundingMode": "Funding mode",
|
||||||
|
"initialPassword": "Initial password",
|
||||||
"loginRequired": "Enter login username and initial password",
|
"loginRequired": "Enter login username and initial password",
|
||||||
"loginUsername": "Login username",
|
"loginUsername": "Login username",
|
||||||
"initialPassword": "Initial password",
|
"passwordHint": "At least 8 characters",
|
||||||
"externalIdOptional": "External ID (optional)",
|
"passwordMinLength": "Initial password must be at least 8 characters",
|
||||||
"externalIdHint": "Leave blank to auto-generate",
|
"playerRef": "Player ref",
|
||||||
"creditLimit": "Credit limit",
|
"rebateInherited": "Inherit agent default rebate",
|
||||||
"rebateRate": "Rebate rate (%)",
|
"rebateRate": "Rebate rate (%)",
|
||||||
"rebateRateHint": "Enter percent, e.g. 5 = 5%",
|
"rebateRateHint": "Enter percent, e.g. 5 = 5%",
|
||||||
"availableToGrant": "Agent available to grant: {{amount}}",
|
"rebateRateInvalid": "Rebate rate must be between 0 and 100%",
|
||||||
"riskTags": "Risk tags",
|
"riskTags": "Risk tags",
|
||||||
"riskTagsPlaceholder": "Comma-separated",
|
"riskTagsPlaceholder": "Comma-separated",
|
||||||
"createSuccessNative": "Player {{name}} created — use lottery /login"
|
"scopedTo": "Direct players: {{agent}}",
|
||||||
|
"siteCode": "Line site",
|
||||||
|
"usernameNickname": "Username / nickname"
|
||||||
},
|
},
|
||||||
"delegation": {
|
"profile": {
|
||||||
"title": "Delegation ceiling",
|
"availableCredit": "Available to grant {{amount}}",
|
||||||
"hint": "Select actions this child agent may grant to its own subordinates. Agent roles cannot exceed this ceiling.",
|
"canCreateChildAgent": "Allow creating sub-agents",
|
||||||
"permission": "Action",
|
"canCreatePlayer": "Allow creating players",
|
||||||
"canDelegate": "May delegate further",
|
"canGrantExtraRebate": "Allow extra rebate",
|
||||||
"save": "Save ceiling",
|
"capabilityHint": "Takes effect on this agent’s primary account after save. If the platform Agent role included player/node management, login permissions are now tightened by these switches.",
|
||||||
"saveSuccess": "Delegation ceiling saved",
|
"creditLimit": "Credit limit",
|
||||||
"empty": "No actions available to assign",
|
"cycleDaily": "Daily",
|
||||||
"rootDenied": "Root nodes do not use delegation ceilings"
|
"cycleMonthly": "Monthly",
|
||||||
|
"cycleWeekly": "Weekly",
|
||||||
|
"defaultPlayerRebate": "Default player rebate (%)",
|
||||||
|
"loadFailed": "Failed to load share and credit settings. Close and try again.",
|
||||||
|
"loading": "Loading share and credit settings…",
|
||||||
|
"loadingBlocked": "Share and credit settings are still loading. Please wait before saving.",
|
||||||
|
"parentCaps": "Parent share {{share}}%, available to grant {{credit}}",
|
||||||
|
"rebateLimit": "Rebate ceiling (%)",
|
||||||
|
"relativeShareRate": "Share rate (% of parent)",
|
||||||
|
"relativeShareRateValue": "{{rate}}% of parent",
|
||||||
|
"riskTags": "Risk tags",
|
||||||
|
"riskTagsPlaceholder": "Comma-separated, e.g. overdue, high_turnover",
|
||||||
|
"saveSuccess": "Share and credit settings saved",
|
||||||
|
"section": "Share & credit",
|
||||||
|
"settlementCycle": "Settlement cycle",
|
||||||
|
"totalShareRate": "Share rate (%)",
|
||||||
|
"validation": {
|
||||||
|
"creditBelowAllocated": "Credit limit cannot be below allocated credit (minimum {{min}})",
|
||||||
|
"creditExceedsParentWithMax": "Credit limit cannot exceed {{max}}",
|
||||||
|
"creditInvalid": "Credit limit cannot be negative",
|
||||||
|
"defaultExceedsLimit": "Default player rebate cannot exceed the rebate ceiling",
|
||||||
|
"defaultRebateRange": "Default player rebate must be between 0 and 100%",
|
||||||
|
"rebateLimitRange": "Rebate ceiling must be between 0 and 100%",
|
||||||
|
"shareRange": "Share rate must be between 0 and 100"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"roles": {
|
"roles": {
|
||||||
"title": "Agent roles",
|
|
||||||
"create": "Create role",
|
"create": "Create role",
|
||||||
"permissions": "Permissions",
|
|
||||||
"slug": "Slug",
|
|
||||||
"userCount": "Users",
|
|
||||||
"createSuccess": "Created role {{name}}",
|
"createSuccess": "Created role {{name}}",
|
||||||
"updateSuccess": "Updated role {{name}}",
|
|
||||||
"deleteSuccess": "Deleted role {{name}}",
|
"deleteSuccess": "Deleted role {{name}}",
|
||||||
"permissionSaveSuccess": "Permissions updated",
|
"groupSelectedCount": "{{selected}} / {{total}}",
|
||||||
"readOnlyTemplate": "Read-only template",
|
|
||||||
"inUse": "{{count}} in use",
|
"inUse": "{{count}} in use",
|
||||||
"permissionSubsetHint": "Only permissions you hold can be assigned"
|
"noAssignablePermissions": "No permissions available to assign",
|
||||||
|
"permissionSaveSuccess": "Permissions updated",
|
||||||
|
"permissionSubsetHint": "Only permissions you hold can be assigned",
|
||||||
|
"permissions": "Permissions",
|
||||||
|
"readOnlyTemplate": "Read-only template",
|
||||||
|
"selectGroup": "Select all in group",
|
||||||
|
"selectedCount": "{{selected}} / {{total}} selected",
|
||||||
|
"slug": "Slug",
|
||||||
|
"title": "Agent roles",
|
||||||
|
"updateSuccess": "Updated role {{name}}",
|
||||||
|
"userCount": "Users"
|
||||||
},
|
},
|
||||||
|
"saveFailed": "Save failed",
|
||||||
|
"selectNode": "Select an agent node from the tree",
|
||||||
|
"settlementBills": {
|
||||||
|
"allPeriods": "All periods",
|
||||||
|
"clearPeriodFilter": "Show all periods",
|
||||||
|
"columns": {
|
||||||
|
"counterparty": "Counterparty",
|
||||||
|
"grossWinLoss": "Win/Loss",
|
||||||
|
"id": "ID",
|
||||||
|
"net": "Net",
|
||||||
|
"party": "Party",
|
||||||
|
"period": "Period",
|
||||||
|
"status": "Status",
|
||||||
|
"type": "Type",
|
||||||
|
"unpaid": "Unpaid"
|
||||||
|
},
|
||||||
|
"confirm": "Confirm bill",
|
||||||
|
"confirmed": "Confirmed",
|
||||||
|
"description": "Bills appear after a period is closed; latest period is selected by default.",
|
||||||
|
"detail": "Details",
|
||||||
|
"emptyNoClosed": "No closed period yet. Bills are generated after close.",
|
||||||
|
"emptyNoPeriodsAgent": "No bills yet. Your upline or platform will close periods; you do not need to enter dates.",
|
||||||
|
"emptyNoPeriodsManage": "No periods or bills yet. Use quick presets under Period management, then close the period.",
|
||||||
|
"filteredByPeriod": "Showing bills for period #{{id}} only",
|
||||||
|
"filteredByPeriodRange": "Bills for {{range}}",
|
||||||
|
"grossWinLoss": "Win/Loss (gross_win_loss)",
|
||||||
|
"paid": "Payment recorded",
|
||||||
|
"paymentAmount": "Payment amount",
|
||||||
|
"periodLabel": "Period",
|
||||||
|
"periodPlaceholder": "Select period",
|
||||||
|
"platform": "Platform",
|
||||||
|
"platformRounding": "Platform rounding",
|
||||||
|
"rebateAmount": "Rebate",
|
||||||
|
"recordPayment": "Record payment",
|
||||||
|
"shareProfit": "Share profit",
|
||||||
|
"subtreeSummary": "Subtree summary",
|
||||||
|
"title": "Agent bills",
|
||||||
|
"typeAgent": "Agent bill",
|
||||||
|
"typePlayer": "Player bill"
|
||||||
|
},
|
||||||
|
"settlementPeriods": {
|
||||||
|
"close": "Close period and generate bills",
|
||||||
|
"closeFailed": "Failed to close period",
|
||||||
|
"closed": "Period closed; bills generated",
|
||||||
|
"datesRequired": "Enter start and end dates",
|
||||||
|
"empty": "No periods yet. Choose a quick preset and open a period.",
|
||||||
|
"end": "End",
|
||||||
|
"endDate": "End date",
|
||||||
|
"hideAdvanced": "Hide custom dates",
|
||||||
|
"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",
|
||||||
|
"open": "Open period",
|
||||||
|
"openFailed": "Failed to open period",
|
||||||
|
"openHint": "Local dates ({{tz}})",
|
||||||
|
"openWithPreset": "Apply quick preset",
|
||||||
|
"opened": "Period opened",
|
||||||
|
"presetHint": "Quick period presets (recommended)",
|
||||||
|
"presetLastWeek": "Last week",
|
||||||
|
"presetThisMonth": "This month",
|
||||||
|
"presetThisWeek": "This week",
|
||||||
|
"range": "Period",
|
||||||
|
"showAdvanced": "Custom start/end dates",
|
||||||
|
"start": "Start",
|
||||||
|
"startDate": "Start date",
|
||||||
|
"status": "Status",
|
||||||
|
"statusClosed": "Closed",
|
||||||
|
"statusOpen": "Open",
|
||||||
|
"title": "Agent periods",
|
||||||
|
"viewBills": "Bills"
|
||||||
|
},
|
||||||
|
"settlementReports": {
|
||||||
|
"columns": {
|
||||||
|
"agentId": "Agent ID",
|
||||||
|
"allocated": "Allocated",
|
||||||
|
"amount": "Amount",
|
||||||
|
"available": "Available",
|
||||||
|
"billId": "Bill",
|
||||||
|
"billType": "Type",
|
||||||
|
"code": "Code",
|
||||||
|
"count": "Count",
|
||||||
|
"creditLimit": "Credit limit",
|
||||||
|
"drawNo": "Draw no.",
|
||||||
|
"frozen": "Frozen",
|
||||||
|
"gameType": "Play",
|
||||||
|
"grossWinLoss": "Win/Loss",
|
||||||
|
"name": "Name",
|
||||||
|
"overdueDays": "Overdue days",
|
||||||
|
"player": "Player",
|
||||||
|
"rebate": "Rebate",
|
||||||
|
"rebateType": "Rebate type",
|
||||||
|
"status": "Status",
|
||||||
|
"unpaid": "Unpaid",
|
||||||
|
"used": "Used"
|
||||||
|
},
|
||||||
|
"credit": {
|
||||||
|
"agents": "Agent credit",
|
||||||
|
"players": "Player credit"
|
||||||
|
},
|
||||||
|
"description": "Report set: player win/loss, agent share, rebate, credit, unpaid/overdue bills, and platform P/L.",
|
||||||
|
"footnote": "These reports use credit-line period semantics, not legacy wallet commission/rebate reports.",
|
||||||
|
"noPeriodHint": "When no specific period is selected, the last 7 days are used. Platform P/L requires a period.",
|
||||||
|
"platformPnl": {
|
||||||
|
"billNet": "Platform bill net",
|
||||||
|
"periodRequired": "Select a specific period to view platform P/L.",
|
||||||
|
"rounding": "Rounding adjustment",
|
||||||
|
"shareProfit": "Share profit (metadata)"
|
||||||
|
},
|
||||||
|
"rebate": {
|
||||||
|
"accrued": "Accrued",
|
||||||
|
"allocated": "Allocated",
|
||||||
|
"inBill": "In bill",
|
||||||
|
"settled": "Settled"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"billCount": "Bill count",
|
||||||
|
"overdueCount": "Overdue bills",
|
||||||
|
"platformRounding": "Total platform rounding",
|
||||||
|
"totalNet": "Total net",
|
||||||
|
"totalUnpaid": "Total unpaid"
|
||||||
|
},
|
||||||
|
"title": "Period reports (credit share line)",
|
||||||
|
"type": "Report type",
|
||||||
|
"types": {
|
||||||
|
"agent_share": "Agent share",
|
||||||
|
"credit": "Credit",
|
||||||
|
"draw_period": "By draw",
|
||||||
|
"overdue": "Overdue",
|
||||||
|
"platform_pnl": "Platform P/L",
|
||||||
|
"player_win_loss": "Player win/loss",
|
||||||
|
"rebate": "Rebate",
|
||||||
|
"summary": "Summary",
|
||||||
|
"unpaid_bills": "Unpaid bills"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"siteSearch": "Search site name",
|
||||||
|
"sitesListHint": "For integration keys and callbacks, go to",
|
||||||
|
"sitesListLink": "Config · Connected sites",
|
||||||
|
"status": "Status",
|
||||||
|
"subnav": {
|
||||||
|
"label": "Agent management navigation",
|
||||||
|
"noPermission": "No permission",
|
||||||
|
"operations": "Line & agent tree",
|
||||||
|
"provision": "Provision level-1 agent",
|
||||||
|
"provisionHint": "One-time onboarding; use Line & agent tree for daily work",
|
||||||
|
"settlementBills": "Periods & bills"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"currentSiteAgents": "Current site operating agents",
|
||||||
|
"currentSiteNodes": "Current site nodes",
|
||||||
|
"enabledAgents": "Enabled operating agents",
|
||||||
|
"globalAgents": "All-site operating agents",
|
||||||
|
"globalNodes": "All-site node total",
|
||||||
|
"rootNodes": "Root node count",
|
||||||
|
"visibleAgents": "Current visible operating agents",
|
||||||
|
"visibleList": "Current flat list rows"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"accounts": "Primary account",
|
||||||
|
"delegation": "Delegation ceiling",
|
||||||
|
"overview": "Overview",
|
||||||
|
"players": "Players",
|
||||||
|
"roles": "Roles",
|
||||||
|
"subordinates": "Subordinates",
|
||||||
|
"users": "Accounts"
|
||||||
|
},
|
||||||
|
"title": "Agent management",
|
||||||
|
"treeTitle": "Agent tree",
|
||||||
|
"updateSuccess": "Updated {{name}}",
|
||||||
|
"usernamePlaceholder": "Enter login username",
|
||||||
|
"usernameRequired": "Login name is required",
|
||||||
"users": {
|
"users": {
|
||||||
"title": "Agent accounts",
|
|
||||||
"create": "Create account",
|
"create": "Create account",
|
||||||
"username": "Username",
|
"createSuccess": "Created account {{name}}",
|
||||||
|
"deleteConfirm": "This admin will no longer be able to sign in. This cannot be undone.",
|
||||||
|
"deleteSuccess": "Deleted account {{name}}",
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"roles": "Roles",
|
|
||||||
"createSuccess": "Created account {{name}}",
|
|
||||||
"roleSaveSuccess": "Roles updated for {{name}}",
|
"roleSaveSuccess": "Roles updated for {{name}}",
|
||||||
"deleteConfirm": "This admin will no longer be able to sign in. This cannot be undone.",
|
"roles": "Roles",
|
||||||
"deleteSuccess": "Deleted account {{name}}"
|
"title": "Agent accounts",
|
||||||
|
"username": "Username"
|
||||||
},
|
},
|
||||||
"usernamePlaceholder": "Enter login username",
|
"viewDownline": "View sub-agents and players"
|
||||||
"passwordPlaceholder": "Enter an 8-character password",
|
|
||||||
"passwordOptionalHint": "Leave empty to keep unchanged, or enter an 8-character password"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,674 +1,683 @@
|
|||||||
{
|
{
|
||||||
"title": "Configuration Center",
|
"currencies": {
|
||||||
"nav": {
|
"actions": {
|
||||||
"aria": "Operations configuration sub-navigation",
|
"backToSettings": "Back to settings",
|
||||||
"sidebarTitle": "Operations configuration",
|
"create": "Add currency",
|
||||||
"groups": {
|
"delete": "Delete",
|
||||||
"betting": "Betting and display",
|
"edit": "Edit",
|
||||||
"risk": "Risk control"
|
"openStandalone": "Open dedicated page"
|
||||||
},
|
},
|
||||||
"items": {
|
"createFailed": "Failed to create currency",
|
||||||
"plays": "Play types and limits",
|
"createSuccess": "Currency created",
|
||||||
"odds": "Odds",
|
"deleteDialog": {
|
||||||
"rebate": "Commission / rebate",
|
"description": "Delete currency {{code}}? The system blocks deletion when it is still referenced by defaults, wallets, tickets, odds, or jackpot data.",
|
||||||
"jackpot": "Jackpot pool",
|
"title": "Delete currency?"
|
||||||
"risk-cap": "Payout caps"
|
|
||||||
},
|
},
|
||||||
"rulesPlaysTitle": "Play rules",
|
"deleteFailed": "Failed to delete currency",
|
||||||
"rulesOddsTitle": "Odds & base rebate",
|
"deleteSuccess": "Currency {{code}} deleted",
|
||||||
"rulesOddsDescription": "Odds matrix and base rebate are maintained on one page, sharing the same odds version line.",
|
"description": "Maintain currency master data for admin operations and control whether a currency is enabled or allowed for betting.",
|
||||||
"rulesOddsDescriptionShort": "Pick a play on the left, edit odds and base rebate on the right. Agent/player rebate is added on top of this base, then save and publish.",
|
"dialog": {
|
||||||
"riskCapTitle": "Risk cap rules"
|
"createTitle": "Add currency",
|
||||||
|
"description": "Currency code is immutable after creation. Disabling a currency also turns off bettable status.",
|
||||||
|
"editTitle": "Edit currency"
|
||||||
|
},
|
||||||
|
"empty": "No currencies yet.",
|
||||||
|
"form": {
|
||||||
|
"bettable": "Allow betting",
|
||||||
|
"bettableHint": "Only enabled currencies can be marked as bettable.",
|
||||||
|
"code": "Currency code",
|
||||||
|
"codePlaceholder": "Enter currency code, for example NPR",
|
||||||
|
"decimalInvalid": "Enter a valid decimal place value",
|
||||||
|
"decimals": "Decimal places",
|
||||||
|
"decimalsPlaceholder": "Enter decimal places, for example 2",
|
||||||
|
"enabled": "Enabled status",
|
||||||
|
"enabledHint": "Disabled currencies should not be used for new business.",
|
||||||
|
"name": "Currency name",
|
||||||
|
"namePlaceholder": "Enter currency name",
|
||||||
|
"required": "Please fill in the required fields"
|
||||||
|
},
|
||||||
|
"loadFailed": "Failed to load currencies",
|
||||||
|
"loading": "Loading currencies…",
|
||||||
|
"table": {
|
||||||
|
"actions": "Actions",
|
||||||
|
"bettable": "Bettable",
|
||||||
|
"code": "Code",
|
||||||
|
"decimals": "Decimals",
|
||||||
|
"enabled": "Enabled",
|
||||||
|
"name": "Name"
|
||||||
|
},
|
||||||
|
"title": "Currency management",
|
||||||
|
"updateFailed": "Failed to update currency",
|
||||||
|
"updateSuccess": "Currency updated"
|
||||||
},
|
},
|
||||||
"hub": {
|
"hub": {
|
||||||
"title": "Operations configuration",
|
|
||||||
"description": "Jump to play rules, odds & rebate, jackpot, and risk cap by domain. The sidebar provides direct links; this page is an overview.",
|
"description": "Jump to play rules, odds & rebate, jackpot, and risk cap by domain. The sidebar provides direct links; this page is an overview.",
|
||||||
"playsTitle": "Play rules",
|
|
||||||
"playsDesc": "Play switches, limits, and rule copy",
|
|
||||||
"oddsTitle": "Odds & base rebate",
|
|
||||||
"oddsDesc": "Odds matrix and base rebate in one version stream",
|
|
||||||
"jackpotTitle": "Jackpot",
|
|
||||||
"jackpotDesc": "Pool parameters and ledger records",
|
|
||||||
"riskCapTitle": "Risk cap rules",
|
|
||||||
"riskCapDesc": "Per-number payout caps and occupancy",
|
|
||||||
"integrationTitle": "Integration sites",
|
|
||||||
"integrationDesc": "site_code, JWT secrets, partner wallet URL, iframe allowlist",
|
"integrationDesc": "site_code, JWT secrets, partner wallet URL, iframe allowlist",
|
||||||
|
"integrationGuideDesc": "SSO and wallet integration document for client engineering teams, with index, examples, and test flow",
|
||||||
"integrationGuideTitle": "Client integration guide",
|
"integrationGuideTitle": "Client integration guide",
|
||||||
"integrationGuideDesc": "SSO and wallet integration document for client engineering teams, with index, examples, and test flow"
|
"integrationTitle": "Integration sites",
|
||||||
|
"jackpotDesc": "Pool parameters and ledger records",
|
||||||
|
"jackpotTitle": "Jackpot",
|
||||||
|
"oddsDesc": "Odds matrix and base rebate in one version stream",
|
||||||
|
"oddsTitle": "Odds & base rebate",
|
||||||
|
"playsDesc": "Play switches, limits, and rule copy",
|
||||||
|
"playsTitle": "Play rules",
|
||||||
|
"riskCapDesc": "Per-number payout caps and occupancy",
|
||||||
|
"riskCapTitle": "Risk cap rules",
|
||||||
|
"title": "Operations configuration"
|
||||||
},
|
},
|
||||||
"integrationGuide": {
|
"integrationGuide": {
|
||||||
"title": "Lottery client integration guide"
|
"title": "Lottery client integration guide"
|
||||||
},
|
},
|
||||||
"integrationSites": {
|
"integrationSites": {
|
||||||
"title": "Integration sites",
|
|
||||||
"description": "Maintain partner integration settings in admin. site_code cannot be changed after creation.",
|
|
||||||
"pageGuide": "Wallet-mode partners need an integration site and SSO/wallet secrets; see API docs for technical setup.",
|
|
||||||
"create": "New site",
|
|
||||||
"edit": "Edit",
|
|
||||||
"save": "Save",
|
|
||||||
"saving": "Saving…",
|
|
||||||
"cancel": "Cancel",
|
|
||||||
"copy": "Copy",
|
|
||||||
"loading": "Loading…",
|
|
||||||
"empty": "No integration sites",
|
|
||||||
"loadFailed": "Failed to load integration sites",
|
|
||||||
"saveFailed": "Save failed",
|
|
||||||
"createSuccess": "Created site {{code}}",
|
|
||||||
"adminAccountCreated": "Created site admin account {{username}}",
|
"adminAccountCreated": "Created site admin account {{username}}",
|
||||||
"updateSuccess": "Updated site {{code}}",
|
"adminAccountSectionDescription": "Creating a site will also create one admin account bound to that site.",
|
||||||
"connectivityTest": "Test connectivity",
|
"adminAccountSectionTitle": "Site admin account",
|
||||||
"connectivityTitle": "Partner wallet connectivity",
|
"cancel": "Cancel",
|
||||||
|
"codeImmutable": "site_code cannot be changed after creation",
|
||||||
|
"columns": {
|
||||||
|
"actions": "Actions",
|
||||||
|
"code": "site_code",
|
||||||
|
"currency": "Currency",
|
||||||
|
"h5Url": "Lottery H5",
|
||||||
|
"lineRoot": "Level-1 agent",
|
||||||
|
"name": "Name",
|
||||||
|
"ssoSecret": "SSO secret",
|
||||||
|
"status": "Status",
|
||||||
|
"walletApiKey": "Wallet API key",
|
||||||
|
"walletUrl": "Wallet API"
|
||||||
|
},
|
||||||
"connectivityDescription": "Call the balance API for site {{code}} using a test player.",
|
"connectivityDescription": "Call the balance API for site {{code}} using a test player.",
|
||||||
|
"connectivityFailed": "Connectivity failed",
|
||||||
"connectivityPlayerId": "Test site_player_id",
|
"connectivityPlayerId": "Test site_player_id",
|
||||||
"connectivityRun": "Run test",
|
"connectivityRun": "Run test",
|
||||||
"connectivityRunning": "Testing…",
|
"connectivityRunning": "Testing…",
|
||||||
"connectivitySuccess": "Connectivity OK",
|
"connectivitySuccess": "Connectivity OK",
|
||||||
"connectivityFailed": "Connectivity failed",
|
"connectivityTest": "Test connectivity",
|
||||||
|
"connectivityTitle": "Partner wallet connectivity",
|
||||||
|
"copied": "Copied {{field}}",
|
||||||
|
"copy": "Copy",
|
||||||
|
"copyFailed": "Copy failed",
|
||||||
|
"create": "New site",
|
||||||
|
"createSuccess": "Created site {{code}}",
|
||||||
|
"delete": "Delete site",
|
||||||
|
"deleteConfirm": "Delete",
|
||||||
|
"deleteConfirmDescription": "This permanently removes site {{code}} ({{name}}), its agent line, settlement periods, players, and site admin accounts. This cannot be undone.",
|
||||||
|
"deleteConfirmTitle": "Delete this site?",
|
||||||
|
"deleteFailed": "Failed to delete site",
|
||||||
|
"deleteSuccess": "Deleted site {{code}}",
|
||||||
|
"deleting": "Deleting…",
|
||||||
|
"description": "Maintain partner integration settings in admin. site_code cannot be changed after creation.",
|
||||||
|
"dialogCreateTitle": "New integration site",
|
||||||
|
"dialogDescription": "Default wallet paths are fine unless the partner uses custom URLs.",
|
||||||
|
"dialogEditTitle": "Edit integration site",
|
||||||
|
"edit": "Edit",
|
||||||
|
"empty": "No integration sites",
|
||||||
|
"exportFailed": "Export failed",
|
||||||
"exportParams": "Export params",
|
"exportParams": "Export params",
|
||||||
"exportSuccess": "Exported parameter sheet for {{code}}",
|
"exportSuccess": "Exported parameter sheet for {{code}}",
|
||||||
"exportFailed": "Export failed",
|
|
||||||
"rotateSecrets": "Rotate secrets",
|
|
||||||
"rotateSuccess": "Rotated secrets for {{code}}",
|
|
||||||
"rotateFailed": "Failed to rotate secrets",
|
|
||||||
"rotateConfirmTitle": "Rotate secrets?",
|
|
||||||
"rotateConfirmDescription": "New SSO and wallet keys will be generated for {{code}}. Old keys stop working immediately.",
|
|
||||||
"rotateConfirm": "Rotate",
|
|
||||||
"delete": "Delete site",
|
|
||||||
"deleteSuccess": "Deleted site {{code}}",
|
|
||||||
"deleteFailed": "Failed to delete site",
|
|
||||||
"deleteConfirmTitle": "Delete this site?",
|
|
||||||
"deleteConfirmDescription": "This permanently removes site {{code}} ({{name}}), its agent line, settlement periods, players, and site admin accounts. This cannot be undone.",
|
|
||||||
"deleteConfirm": "Delete",
|
|
||||||
"deleting": "Deleting…",
|
|
||||||
"secretsTitle": "Save these secrets now",
|
|
||||||
"secretsDescription": "Secrets for {{code}} are shown only once.",
|
|
||||||
"secretsDismiss": "I have saved them",
|
|
||||||
"copied": "Copied {{field}}",
|
|
||||||
"copyFailed": "Copy failed",
|
|
||||||
"noPermission": "No permission to view integration sites",
|
|
||||||
"codeImmutable": "site_code cannot be changed after creation",
|
|
||||||
"statusEnabled": "Enabled",
|
|
||||||
"statusDisabled": "Disabled",
|
|
||||||
"dialogCreateTitle": "New integration site",
|
|
||||||
"dialogEditTitle": "Edit integration site",
|
|
||||||
"dialogDescription": "Default wallet paths are fine unless the partner uses custom URLs.",
|
|
||||||
"form": {
|
|
||||||
"required": "Site name is required",
|
|
||||||
"codeRequired": "site_code is required",
|
|
||||||
"adminUsernameRequired": "Site admin username is required",
|
|
||||||
"adminNicknameRequired": "Site admin nickname is required",
|
|
||||||
"adminPasswordRequired": "Initial site admin password must be at least 8 characters"
|
|
||||||
},
|
|
||||||
"columns": {
|
|
||||||
"code": "site_code",
|
|
||||||
"name": "Name",
|
|
||||||
"status": "Status",
|
|
||||||
"walletUrl": "Wallet API",
|
|
||||||
"actions": "Actions"
|
|
||||||
},
|
|
||||||
"fields": {
|
"fields": {
|
||||||
"code": "site_code",
|
"adminEmail": "Email (optional)",
|
||||||
"name": "Site name",
|
|
||||||
"adminUsername": "Admin username",
|
|
||||||
"adminNickname": "Admin nickname",
|
"adminNickname": "Admin nickname",
|
||||||
"adminPassword": "Initial password",
|
"adminPassword": "Initial password",
|
||||||
"adminEmail": "Email (optional)",
|
"adminUsername": "Admin username",
|
||||||
|
"code": "site_code",
|
||||||
"currency": "Default currency",
|
"currency": "Default currency",
|
||||||
"status": "Status",
|
|
||||||
"walletApiUrl": "Partner wallet base URL",
|
|
||||||
"lotteryH5BaseUrl": "Lottery H5 base URL (optional)",
|
|
||||||
"iframeOrigins": "iframe allowlist (one origin per line)",
|
"iframeOrigins": "iframe allowlist (one origin per line)",
|
||||||
|
"lotteryH5BaseUrl": "Lottery H5 base URL (optional)",
|
||||||
|
"name": "Site name",
|
||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
"ssoSecret": "SSO secret",
|
"ssoSecret": "SSO secret",
|
||||||
"walletApiKey": "Wallet API key"
|
"status": "Status",
|
||||||
},
|
"walletApiKey": "Wallet API key",
|
||||||
"placeholders": {
|
"walletApiUrl": "Partner wallet base URL"
|
||||||
"code": "Enter site identifier, for example partner-a",
|
|
||||||
"name": "Enter site name",
|
|
||||||
"adminUsername": "Enter admin username",
|
|
||||||
"adminNickname": "Enter account nickname",
|
|
||||||
"adminPassword": "At least 8 characters",
|
|
||||||
"adminEmail": "Enter email",
|
|
||||||
"currency": "Enter currency code, for example NPR",
|
|
||||||
"walletApiUrl": "Enter wallet API URL",
|
|
||||||
"lotteryH5BaseUrl": "Enter H5 URL",
|
|
||||||
"iframeOrigins": "Enter allowed origins, for example https://www.example.com",
|
|
||||||
"notes": "Enter notes",
|
|
||||||
"connectivityPlayerId": "Enter player ID, for example 10001"
|
|
||||||
},
|
|
||||||
"adminAccountSectionTitle": "Site admin account",
|
|
||||||
"adminAccountSectionDescription": "Creating a site will also create one admin account bound to that site."
|
|
||||||
},
|
|
||||||
"versionStatus": {
|
|
||||||
"active": "Active",
|
|
||||||
"draft": "Draft",
|
|
||||||
"archived": "Archived"
|
|
||||||
},
|
|
||||||
"versionSwitcher": {
|
|
||||||
"sheetTitle": "Switch configuration version",
|
|
||||||
"sheetDescription": "Choose a version to view on this page. Drafts are editable, while active and archived versions are read-only.",
|
|
||||||
"loading": "Loading…",
|
|
||||||
"noneSelected": "No version selected",
|
|
||||||
"switch": "Switch version",
|
|
||||||
"empty": "No version records yet.",
|
|
||||||
"count": "{{count}} items",
|
|
||||||
"effectiveAt": "Effective at: {{value}}",
|
|
||||||
"note": "Note: {{value}}",
|
|
||||||
"current": "Current",
|
|
||||||
"moreActions": "More actions for v{{version}}",
|
|
||||||
"selected": "Selected",
|
|
||||||
"view": "View",
|
|
||||||
"rollback": "Rollback",
|
|
||||||
"delete": "Delete",
|
|
||||||
"deleteConfirmTitle": "Delete this version?",
|
|
||||||
"deleteConfirmDescription": "Version ID {{id}} (version_no {{version}}) will be permanently deleted. Active versions cannot be deleted."
|
|
||||||
},
|
|
||||||
"versionToolbar": {
|
|
||||||
"draftEditing": "Editing a draft — save and publish to go live"
|
|
||||||
},
|
|
||||||
"versionActions": {
|
|
||||||
"publishCurrent": "Publish",
|
|
||||||
"refreshing": "Refreshing",
|
|
||||||
"refresh": "Refresh versions",
|
|
||||||
"newDraft": "New draft",
|
|
||||||
"saveDraft": "Save draft",
|
|
||||||
"saveFailed": "Failed to save configuration",
|
|
||||||
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
|
||||||
"rollbackFailed": "Rollback failed",
|
|
||||||
"rollbackDialog": {
|
|
||||||
"title": "Confirm rollback",
|
|
||||||
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
|
||||||
"confirm": "Confirm rollback"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallet": {
|
|
||||||
"title": "Wallet transfer limit settings",
|
|
||||||
"description": "Amounts use the game's minor currency unit (for example, under NPR, 100 = 1.00 NPR). The minimum amount must be at least 1 minor unit.",
|
|
||||||
"loadFailed": "Failed to load",
|
|
||||||
"saveSuccess": "Saved successfully",
|
|
||||||
"saveFailed": "Save failed",
|
|
||||||
"fields": {
|
|
||||||
"inMin": "Minimum transfer-in amount",
|
|
||||||
"inMax": "Maximum transfer-in amount",
|
|
||||||
"outMin": "Minimum transfer-out amount",
|
|
||||||
"outMax": "Maximum transfer-out amount"
|
|
||||||
},
|
|
||||||
"placeholders": {
|
|
||||||
"min": "For example: 1.00",
|
|
||||||
"max": "For example: 10000.00"
|
|
||||||
},
|
|
||||||
"hints": {
|
|
||||||
"inMin": "Per-order minimum from main wallet to lottery wallet",
|
|
||||||
"inMax": "Per-order maximum from main wallet to lottery wallet",
|
|
||||||
"outMin": "Per-order minimum from lottery wallet to main wallet",
|
|
||||||
"outMax": "Per-order maximum from lottery wallet to main wallet"
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"amountAtLeastMinorUnit": "{{field}} must be a valid amount and at least 0.01.",
|
|
||||||
"inRangeInvalid": "Maximum transfer-in amount cannot be less than the minimum transfer-in amount.",
|
|
||||||
"outRangeInvalid": "Maximum transfer-out amount cannot be less than the minimum transfer-out amount."
|
|
||||||
},
|
|
||||||
"discard": "Discard changes",
|
|
||||||
"confirmSaveTitle": "Save wallet limits?",
|
|
||||||
"confirmSaveDescription": "This updates per-order transfer-in/out limits and immediately affects player wallet transfers."
|
|
||||||
},
|
|
||||||
"system": {
|
|
||||||
"title": "Draw and settlement runtime settings",
|
|
||||||
"runtimeTitle": "Global runtime parameters",
|
|
||||||
"runtimeIntro1": "This area stores global system parameters that do not belong to play, odds, or risk-control versions. They directly affect wallet transfers, job switches, and runtime policy.",
|
|
||||||
"runtimeIntro2": "Play, odds, rebate, and cap management stay under operations configuration. System settings only carry cross-module runtime parameters to avoid overlapping responsibilities in admin.",
|
|
||||||
"description": "Controls review flow after RNG draw generation, cooldown duration, and automatic settlement behavior. These are global runtime policies and do not belong to versioned operations config.",
|
|
||||||
"loadFailed": "Failed to load system settings",
|
|
||||||
"saveSuccess": "System settings saved",
|
|
||||||
"saveRuntimeSuccess": "Draw and settlement parameters saved",
|
|
||||||
"saveDrawSuccess": "Draw parameters saved",
|
|
||||||
"saveCurrencyFormatSuccess": "Currency display format saved",
|
|
||||||
"saveSettlementSuccess": "Settlement automation saved",
|
|
||||||
"saveFrontendSuccess": "Front-end display settings saved",
|
|
||||||
"sections": {
|
|
||||||
"draw": "Draw schedule and review",
|
|
||||||
"drawDescription": "Controls draw timing, close window, manual review, and cooldown. Only changed fields in this block are submitted.",
|
|
||||||
"currencyFormat": "Currency display format",
|
|
||||||
"currencyFormatDescription": "Decimals and separators for amounts across the site (separate from currency master data).",
|
|
||||||
"settlement": "Settlement automation",
|
|
||||||
"settlementDescription": "Controls whether tick auto-runs settlement, approval, and payout. Only changed fields in this block are submitted."
|
|
||||||
},
|
|
||||||
"saveFailed": "Failed to save system settings",
|
|
||||||
"unsavedChanges": "Unsaved changes",
|
|
||||||
"frontendConfig": "Front-end configuration",
|
|
||||||
"fields": {
|
|
||||||
"manualReview": "Require manual review for draw results",
|
|
||||||
"cooldownMinutes": "Cooldown duration (minutes)",
|
|
||||||
"defaultCurrency": "Default currency code",
|
|
||||||
"drawIntervalMinutes": "Draw interval (minutes)",
|
|
||||||
"drawBettingWindowSeconds": "Betting window (seconds)",
|
|
||||||
"drawCloseBeforeDrawSeconds": "Close before draw (seconds)",
|
|
||||||
"drawBufferDrawsAhead": "Pre-generated future draws",
|
|
||||||
"currencyDisplayDecimals": "Display decimals",
|
|
||||||
"currencyDecimalSeparator": "Decimal separator",
|
|
||||||
"currencyThousandsSeparator": "Thousands separator",
|
|
||||||
"autoSettlement": "Run settlement automatically",
|
|
||||||
"autoApprove": "Auto-approve settlement batches",
|
|
||||||
"autoPayout": "Auto-credit winnings to wallets",
|
|
||||||
"applyRebateToPayout": "Deduct rebate again on winning payouts",
|
|
||||||
"playRulesHtml": "Play rules HTML (i18n)",
|
|
||||||
"playRulesHtmlDesc": "Rendered on the player play-rules page per locale. Leave empty to fall back to another language or the default empty state."
|
|
||||||
},
|
|
||||||
"placeholders": {
|
|
||||||
"defaultCurrency": "Enter default currency code, for example NPR",
|
|
||||||
"drawIntervalMinutes": "Enter draw interval in minutes",
|
|
||||||
"drawBettingWindowSeconds": "Enter betting window in seconds",
|
|
||||||
"drawCloseBeforeDrawSeconds": "Enter seconds to close before draw",
|
|
||||||
"drawBufferDrawsAhead": "Enter pre-generated draw count",
|
|
||||||
"cooldownMinutes": "Enter cooldown minutes",
|
|
||||||
"currencyDisplayDecimals": "Enter display decimal places, for example 2",
|
|
||||||
"currencyDecimalSeparator": "Enter decimal separator, for example .",
|
|
||||||
"currencyThousandsSeparator": "Enter thousands separator, for example ,"
|
|
||||||
},
|
|
||||||
"hints": {
|
|
||||||
"manualReview": "When enabled, RNG draw results enter pending review and must be published manually in admin.",
|
|
||||||
"cooldownMinutes": "How long to wait after publishing before entering settling. Use 0 to settle immediately.",
|
|
||||||
"autoSettlement": "When disabled, tick will not run settlement automatically and admins must trigger it manually.",
|
|
||||||
"autoApprove": "After cooldown ends and settlement completes, whether batches are automatically marked as approved.",
|
|
||||||
"autoPayout": "After a batch is approved, whether tick automatically credits winnings to player wallets.",
|
|
||||||
"applyRebateToPayout": "When enabled, payout = gross win × (1 - rebate_rate_snapshot). Default off (rebate already reflected in actual deduct)."
|
|
||||||
},
|
|
||||||
"states": {
|
|
||||||
"enabled": "Enabled",
|
|
||||||
"disabled": "Disabled"
|
|
||||||
},
|
|
||||||
"discard": "Discard changes",
|
|
||||||
"confirmSaveTitle": "Save system runtime parameters?",
|
|
||||||
"confirmSaveDescription": "This updates draw review, cooldown, auto settlement/approval/payout, and play-rules display. It may affect site-wide operation.",
|
|
||||||
"confirmSaveRuntimeTitle": "Save draw and settlement parameters?",
|
|
||||||
"confirmSaveRuntimeDescription": "This updates draw review, schedule timing, cooldown, and auto settlement/approval/payout. Play-rules HTML is not changed.",
|
|
||||||
"confirmSaveDrawTitle": "Save draw parameters?",
|
|
||||||
"confirmSaveDrawDescription": "This updates draw review, schedule timing, and cooldown in this block only.",
|
|
||||||
"confirmSaveCurrencyFormatTitle": "Save currency display format?",
|
|
||||||
"confirmSaveCurrencyFormatDescription": "This updates decimal places and separators.",
|
|
||||||
"confirmSaveSettlementTitle": "Save settlement automation?",
|
|
||||||
"confirmSaveSettlementDescription": "This updates auto settlement, approval, and payout switches.",
|
|
||||||
"confirmSaveFrontendTitle": "Save front-end display settings?",
|
|
||||||
"confirmSaveFrontendDescription": "This updates play-rules HTML on the player site. Draw and settlement logic are not changed."
|
|
||||||
},
|
|
||||||
"currencies": {
|
|
||||||
"title": "Currency management",
|
|
||||||
"description": "Maintain currency master data for admin operations and control whether a currency is enabled or allowed for betting.",
|
|
||||||
"loading": "Loading currencies…",
|
|
||||||
"empty": "No currencies yet.",
|
|
||||||
"loadFailed": "Failed to load currencies",
|
|
||||||
"createSuccess": "Currency created",
|
|
||||||
"createFailed": "Failed to create currency",
|
|
||||||
"updateSuccess": "Currency updated",
|
|
||||||
"updateFailed": "Failed to update currency",
|
|
||||||
"deleteSuccess": "Currency {{code}} deleted",
|
|
||||||
"deleteFailed": "Failed to delete currency",
|
|
||||||
"actions": {
|
|
||||||
"create": "Add currency",
|
|
||||||
"edit": "Edit",
|
|
||||||
"delete": "Delete",
|
|
||||||
"openStandalone": "Open dedicated page",
|
|
||||||
"backToSettings": "Back to settings"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"code": "Code",
|
|
||||||
"name": "Name",
|
|
||||||
"decimals": "Decimals",
|
|
||||||
"enabled": "Enabled",
|
|
||||||
"bettable": "Bettable",
|
|
||||||
"actions": "Actions"
|
|
||||||
},
|
|
||||||
"dialog": {
|
|
||||||
"createTitle": "Add currency",
|
|
||||||
"editTitle": "Edit currency",
|
|
||||||
"description": "Currency code is immutable after creation. Disabling a currency also turns off bettable status."
|
|
||||||
},
|
|
||||||
"deleteDialog": {
|
|
||||||
"title": "Delete currency?",
|
|
||||||
"description": "Delete currency {{code}}? The system blocks deletion when it is still referenced by defaults, wallets, tickets, odds, or jackpot data."
|
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"code": "Currency code",
|
"adminNicknameRequired": "Site admin nickname is required",
|
||||||
"name": "Currency name",
|
"adminPasswordRequired": "Initial site admin password must be at least 8 characters",
|
||||||
"decimals": "Decimal places",
|
"adminUsernameRequired": "Site admin username is required",
|
||||||
"codePlaceholder": "Enter currency code, for example NPR",
|
"codeRequired": "site_code is required",
|
||||||
"namePlaceholder": "Enter currency name",
|
"required": "Site name is required"
|
||||||
"decimalsPlaceholder": "Enter decimal places, for example 2",
|
|
||||||
"enabled": "Enabled status",
|
|
||||||
"enabledHint": "Disabled currencies should not be used for new business.",
|
|
||||||
"bettable": "Allow betting",
|
|
||||||
"bettableHint": "Only enabled currencies can be marked as bettable.",
|
|
||||||
"required": "Please fill in the required fields",
|
|
||||||
"decimalInvalid": "Enter a valid decimal place value"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"play": {
|
|
||||||
"batchGroups": {
|
|
||||||
"d2": "2D Global",
|
|
||||||
"d3": "3D Global",
|
|
||||||
"d4": "4D Global",
|
|
||||||
"big-small": "Big / Small",
|
|
||||||
"position": "Position Plays",
|
|
||||||
"box": "Box Plays",
|
|
||||||
"jackpot": "Jackpot"
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"minMaxInvalid": "{{playCode}}: min bet cannot exceed max bet",
|
|
||||||
"displayNameRequired": "Display name is required"
|
|
||||||
},
|
|
||||||
"publishFailed": "Publish failed",
|
|
||||||
"publishDialog": {
|
|
||||||
"title": "Publish play configuration?",
|
|
||||||
"description": "New settings affect future bets. Existing tickets still settle by their saved snapshot.",
|
|
||||||
"confirm": "Confirm publish"
|
|
||||||
},
|
|
||||||
"batchSwitchConfirmTitle": "Batch {{action}}?",
|
|
||||||
"batchSwitchConfirmDescription": "{{action}} {{count}} play types under «{{group}}» and write to the current draft.",
|
|
||||||
"batchSwitchEnable": "Enable",
|
|
||||||
"batchSwitchDisable": "Disable",
|
|
||||||
"toggleConfirmTitle": "{{action}} play {{playCode}}?",
|
|
||||||
"toggleConfirmDescription": "This updates the current draft only. Players see changes after save and publish.",
|
|
||||||
"batchPartialEnabled": "{{enabledCount}}/{{total}} enabled (not all on — turn on to enable all)",
|
|
||||||
"toggleEnable": "Enable",
|
|
||||||
"toggleDisable": "Disable",
|
|
||||||
"toggleInstantFailed": "Failed to apply play switch. Try again later.",
|
|
||||||
"createDraftSuccess": "Created draft v{{version}}",
|
|
||||||
"createDraftFailed": "Failed to create draft",
|
|
||||||
"ruleSavedLocal": "Rule text was saved into the local draft. Save the draft to persist it.",
|
|
||||||
"deleteFailed": "Delete failed",
|
|
||||||
"activeVersion": "Active version v{{version}}",
|
|
||||||
"readOnlyHint": "Limits and rules are read-only. Create a draft first.",
|
|
||||||
"batchSwitchesTitle": "Batch switches",
|
|
||||||
"batchSwitchesDesc": "Only updates the current draft. The player betting table refreshes after save and publish.",
|
|
||||||
"readOnlyDraftHint": "Current version is read-only. Create a draft first.",
|
|
||||||
"batchEnabledCount": "{{enabledCount}}/{{total}} enabled",
|
|
||||||
"noPlayTypes": "No play types",
|
|
||||||
"filters": {
|
|
||||||
"sectionTitle": "Filter plays",
|
|
||||||
"sectionDescription": "Narrow the list first, then use batch switches or row-level edits.",
|
|
||||||
"keyword": "Search plays",
|
|
||||||
"keywordPlaceholder": "Filter by play code, display name, or category",
|
|
||||||
"category": "Category",
|
|
||||||
"status": "Status",
|
|
||||||
"allCategories": "All categories",
|
|
||||||
"allStatuses": "All statuses",
|
|
||||||
"uncategorized": "Uncategorized",
|
|
||||||
"reset": "Clear filters",
|
|
||||||
"empty": "No matching play types",
|
|
||||||
"groupCount": "{{count}} plays"
|
|
||||||
},
|
|
||||||
"actions": {
|
|
||||||
"enable": "Enable",
|
|
||||||
"disable": "Disable",
|
|
||||||
"ruleText": "Rule text",
|
|
||||||
"editDisplayName": "Edit name"
|
|
||||||
},
|
|
||||||
"locales": {
|
|
||||||
"zh": "Chinese",
|
|
||||||
"en": "English",
|
|
||||||
"ne": "Nepali"
|
|
||||||
},
|
|
||||||
"categories": {
|
|
||||||
"standard": "Standard",
|
|
||||||
"attribute": "Attribute",
|
|
||||||
"position": "Position",
|
|
||||||
"box": "Box",
|
|
||||||
"jackpot": "Jackpot"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"playCode": "Play code",
|
|
||||||
"category": "Category",
|
|
||||||
"status": "Status",
|
|
||||||
"displayName": "Display name",
|
|
||||||
"order": "Order",
|
|
||||||
"minBet": "Min bet",
|
|
||||||
"maxBet": "Max bet",
|
|
||||||
"actions": "Actions"
|
|
||||||
},
|
},
|
||||||
|
"lineRootBound": "Bound",
|
||||||
|
"lineRootUnbound": "Unbound",
|
||||||
|
"loadFailed": "Failed to load integration sites",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"noPermission": "No permission to view integration sites",
|
||||||
|
"pageGuide": "Wallet-mode partners need an integration site and SSO/wallet secrets; see API docs for technical setup.",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"displayOrder": "Order",
|
"adminEmail": "Enter email",
|
||||||
"minBetAmount": "Minimum amount",
|
"adminNickname": "Enter account nickname",
|
||||||
"maxBetAmount": "Maximum amount"
|
"adminPassword": "At least 8 characters",
|
||||||
|
"adminUsername": "Enter admin username",
|
||||||
|
"code": "Enter site identifier, for example partner-a",
|
||||||
|
"connectivityPlayerId": "Enter player ID, for example 10001",
|
||||||
|
"currency": "Enter currency code, for example NPR",
|
||||||
|
"iframeOrigins": "Enter allowed origins, for example https://www.example.com",
|
||||||
|
"lotteryH5BaseUrl": "Enter H5 URL",
|
||||||
|
"name": "Enter site name",
|
||||||
|
"notes": "Enter notes",
|
||||||
|
"walletApiUrl": "Enter wallet API URL"
|
||||||
},
|
},
|
||||||
"states": {
|
"rotateConfirm": "Rotate",
|
||||||
"enabled": "Enabled",
|
"rotateConfirmDescription": "New SSO and wallet keys will be generated for {{code}}. Old keys stop working immediately.",
|
||||||
"disabled": "Disabled",
|
"rotateConfirmTitle": "Rotate secrets?",
|
||||||
"readOnly": "Read only"
|
"rotateFailed": "Failed to rotate secrets",
|
||||||
|
"rotateSecrets": "Rotate secrets",
|
||||||
|
"rotateSuccess": "Rotated secrets for {{code}}",
|
||||||
|
"save": "Save",
|
||||||
|
"saveFailed": "Save failed",
|
||||||
|
"saving": "Saving…",
|
||||||
|
"secretCopyRequiresManage": "Integration site manage permission is required to copy secrets",
|
||||||
|
"secretNotConfigured": "Secret not configured",
|
||||||
|
"secretsDescription": "Secrets for {{code}} are shown only once.",
|
||||||
|
"secretsDismiss": "I have saved them",
|
||||||
|
"secretsTitle": "Save these secrets now",
|
||||||
|
"statusDisabled": "Disabled",
|
||||||
|
"statusEnabled": "Enabled",
|
||||||
|
"title": "Integration sites",
|
||||||
|
"updateSuccess": "Updated site {{code}}"
|
||||||
},
|
},
|
||||||
"aria": {
|
"nav": {
|
||||||
"enablePlay": "Enable {{playCode}}",
|
"aria": "Operations configuration sub-navigation",
|
||||||
"batchGroupSwitch": "Toggle batch switch for {{group}}"
|
"groups": {
|
||||||
|
"betting": "Betting and display",
|
||||||
|
"risk": "Risk control"
|
||||||
},
|
},
|
||||||
"nameDialog": {
|
"items": {
|
||||||
"title": "Edit display name",
|
"jackpot": "Jackpot pool",
|
||||||
"description": "Play {{playCode}}. The player site shows this label after you save and publish the draft.",
|
"odds": "Odds",
|
||||||
"apply": "Apply to draft",
|
"plays": "Play types and limits",
|
||||||
"savedLocal": "Display names were saved into the local draft. Save the draft to persist them."
|
"rebate": "Commission / rebate",
|
||||||
|
"risk-cap": "Payout caps"
|
||||||
},
|
},
|
||||||
"ruleDialog": {
|
"riskCapTitle": "Risk cap rules",
|
||||||
"title": "Rule text (i18n)",
|
"rulesOddsDescription": "Odds matrix and base rebate are maintained on one page, sharing the same odds version line.",
|
||||||
"description": "Play {{playCode}}. Changes stay in the draft until you save and publish it.",
|
"rulesOddsDescriptionShort": "Pick a play on the left, edit odds and base rebate on the right. Agent/player rebate is added on top of this base, then save and publish.",
|
||||||
"apply": "Apply to draft"
|
"rulesOddsTitle": "Odds & base rebate",
|
||||||
}
|
"rulesPlaysTitle": "Play rules",
|
||||||
},
|
"sidebarTitle": "Operations configuration"
|
||||||
"prizeScopes": {
|
|
||||||
"first": "First prize odds",
|
|
||||||
"second": "Second prize odds",
|
|
||||||
"third": "Third prize odds",
|
|
||||||
"starter": "Starter prize odds",
|
|
||||||
"consolation": "Consolation prize odds"
|
|
||||||
},
|
},
|
||||||
"odds": {
|
"odds": {
|
||||||
"sectionHint": "Pick a version to edit prize-tier odds; publishing applies to new tickets immediately.",
|
|
||||||
"sections": {
|
|
||||||
"playScope": "Play scope",
|
|
||||||
"oddsConfig": "Odds"
|
|
||||||
},
|
|
||||||
"currentSelection": "Selection: {{category}} / {{play}}",
|
|
||||||
"playSelectPlaceholder": "Select play type",
|
|
||||||
"readOnlyBanner": "This version is read-only. Create a draft to edit odds and base rebate.",
|
|
||||||
"table": {
|
|
||||||
"prizeScope": "Prize scope",
|
|
||||||
"multiplier": "Odds multiplier"
|
|
||||||
},
|
|
||||||
"draftBar": {
|
|
||||||
"unsaved": "Unsaved changes",
|
|
||||||
"saved": "Changes kept in local draft"
|
|
||||||
},
|
|
||||||
"playGroups": {
|
|
||||||
"bigSmall": "Big / small",
|
|
||||||
"combo4": "4D position",
|
|
||||||
"number3": "3D position",
|
|
||||||
"number2": "2D position",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"title": "Summary",
|
|
||||||
"contextTitle": "Version & tips",
|
|
||||||
"version": "Editing version",
|
|
||||||
"activeVersion": "Active version",
|
|
||||||
"statusLabel": "Status",
|
|
||||||
"readOnlyTag": "Read-only",
|
|
||||||
"readOnlyHint": "This version is read-only. Create a draft to make changes.",
|
|
||||||
"draftHint": "Save draft changes before publishing; publish affects new tickets only.",
|
|
||||||
"activeHint": "This version is active; new tickets use these settings."
|
|
||||||
},
|
|
||||||
"tabs": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"category": "Category",
|
|
||||||
"playType": "Play type",
|
|
||||||
"noPlayTypes": "No play types in this category.",
|
|
||||||
"sheetDescription": "Choose a version to view here. Non-draft versions can be rolled back into a new draft.",
|
|
||||||
"activeVersionPrefix": "Active version:",
|
"activeVersionPrefix": "Active version:",
|
||||||
"readOnlyHint": "This version is read-only. Create a draft before editing odds.",
|
"category": "Category",
|
||||||
|
"createDraftFailed": "Failed to create draft",
|
||||||
|
"createDraftSuccess": "Created draft v{{version}}",
|
||||||
|
"currentSelection": "Selection: {{category}} / {{play}}",
|
||||||
|
"deleteFailed": "Delete failed",
|
||||||
|
"draftBar": {
|
||||||
|
"saved": "Changes kept in local draft",
|
||||||
|
"unsaved": "Unsaved changes"
|
||||||
|
},
|
||||||
"loadingDetails": "Loading details…",
|
"loadingDetails": "Loading details…",
|
||||||
"multiplier": "Multiplier x{{value}} · {{currency}}",
|
|
||||||
"missingScopeRow": "Missing {{scope}} row. Check seed or version data.",
|
"missingScopeRow": "Missing {{scope}} row. Check seed or version data.",
|
||||||
"rebateRate": "Base rebate rate (%)",
|
"multiplier": "Multiplier x{{value}} · {{currency}}",
|
||||||
"rebateRateHint": "This is the platform base rebate. It writes rebate_rate to all prize scopes under this play type; agent/player rebate is added on top of it.",
|
"noPlayTypes": "No play types in this category.",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"multiplier": "Enter odds multiplier",
|
"multiplier": "Enter odds multiplier",
|
||||||
"rebateRate": "Enter base rebate rate"
|
"rebateRate": "Enter base rebate rate"
|
||||||
},
|
},
|
||||||
|
"playGroups": {
|
||||||
|
"bigSmall": "Big / small",
|
||||||
|
"combo4": "4D position",
|
||||||
|
"number2": "2D position",
|
||||||
|
"number3": "3D position",
|
||||||
|
"other": "Other"
|
||||||
|
},
|
||||||
|
"playSelectPlaceholder": "Select play type",
|
||||||
|
"playType": "Play type",
|
||||||
|
"publishDialog": {
|
||||||
|
"columns": {
|
||||||
|
"afterPublish": "After publish",
|
||||||
|
"currentActive": "Current active",
|
||||||
|
"prizeScope": "Prize scope"
|
||||||
|
},
|
||||||
|
"confirm": "Confirm publish",
|
||||||
|
"description": "New odds affect new tickets immediately. Existing successful tickets still settle by their saved odds snapshot.",
|
||||||
|
"title": "Publish odds version?"
|
||||||
|
},
|
||||||
"publishFailed": "Publish failed",
|
"publishFailed": "Publish failed",
|
||||||
"createDraftSuccess": "Created draft v{{version}}",
|
"readOnlyBanner": "This version is read-only. Create a draft to edit odds and base rebate.",
|
||||||
"createDraftFailed": "Failed to create draft",
|
"readOnlyHint": "This version is read-only. Create a draft before editing odds.",
|
||||||
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
"rebateRate": "Base rebate rate (%)",
|
||||||
"rollbackFailed": "Rollback failed",
|
"rebateRateHint": "This is the platform base rebate. It writes rebate_rate to all prize scopes under this play type; agent/player rebate is added on top of it.",
|
||||||
"deleteFailed": "Delete failed",
|
|
||||||
"rollbackDialog": {
|
"rollbackDialog": {
|
||||||
"title": "Confirm rollback",
|
"confirm": "Confirm rollback",
|
||||||
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
||||||
"confirm": "Confirm rollback"
|
"title": "Confirm rollback"
|
||||||
|
},
|
||||||
|
"rollbackFailed": "Rollback failed",
|
||||||
|
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
||||||
|
"sectionHint": "Pick a version to edit prize-tier odds; publishing applies to new tickets immediately.",
|
||||||
|
"sections": {
|
||||||
|
"oddsConfig": "Odds",
|
||||||
|
"playScope": "Play scope"
|
||||||
|
},
|
||||||
|
"sheetDescription": "Choose a version to view here. Non-draft versions can be rolled back into a new draft.",
|
||||||
|
"summary": {
|
||||||
|
"activeHint": "This version is active; new tickets use these settings.",
|
||||||
|
"activeVersion": "Active version",
|
||||||
|
"contextTitle": "Version & tips",
|
||||||
|
"draftHint": "Save draft changes before publishing; publish affects new tickets only.",
|
||||||
|
"readOnlyHint": "This version is read-only. Create a draft to make changes.",
|
||||||
|
"readOnlyTag": "Read-only",
|
||||||
|
"statusLabel": "Status",
|
||||||
|
"title": "Summary",
|
||||||
|
"version": "Editing version"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"multiplier": "Odds multiplier",
|
||||||
|
"prizeScope": "Prize scope"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"all": "All"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"play": {
|
||||||
|
"actions": {
|
||||||
|
"disable": "Disable",
|
||||||
|
"editDisplayName": "Edit name",
|
||||||
|
"enable": "Enable",
|
||||||
|
"ruleText": "Rule text"
|
||||||
|
},
|
||||||
|
"activeVersion": "Active version v{{version}}",
|
||||||
|
"aria": {
|
||||||
|
"batchGroupSwitch": "Toggle batch switch for {{group}}",
|
||||||
|
"enablePlay": "Enable {{playCode}}"
|
||||||
|
},
|
||||||
|
"batchEnabledCount": "{{enabledCount}}/{{total}} enabled",
|
||||||
|
"batchGroups": {
|
||||||
|
"big-small": "Big / Small",
|
||||||
|
"box": "Box Plays",
|
||||||
|
"d2": "2D Global",
|
||||||
|
"d3": "3D Global",
|
||||||
|
"d4": "4D Global",
|
||||||
|
"jackpot": "Jackpot",
|
||||||
|
"position": "Position Plays"
|
||||||
|
},
|
||||||
|
"batchPartialEnabled": "{{enabledCount}}/{{total}} enabled (not all on — turn on to enable all)",
|
||||||
|
"batchSwitchConfirmDescription": "{{action}} {{count}} play types under «{{group}}» and write to the current draft.",
|
||||||
|
"batchSwitchConfirmTitle": "Batch {{action}}?",
|
||||||
|
"batchSwitchDisable": "Disable",
|
||||||
|
"batchSwitchEnable": "Enable",
|
||||||
|
"batchSwitchesDesc": "Only updates the current draft. The player betting table refreshes after save and publish.",
|
||||||
|
"batchSwitchesTitle": "Batch switches",
|
||||||
|
"categories": {
|
||||||
|
"attribute": "Attribute",
|
||||||
|
"box": "Box",
|
||||||
|
"jackpot": "Jackpot",
|
||||||
|
"position": "Position",
|
||||||
|
"standard": "Standard"
|
||||||
|
},
|
||||||
|
"createDraftFailed": "Failed to create draft",
|
||||||
|
"createDraftSuccess": "Created draft v{{version}}",
|
||||||
|
"deleteFailed": "Delete failed",
|
||||||
|
"filters": {
|
||||||
|
"allCategories": "All categories",
|
||||||
|
"allStatuses": "All statuses",
|
||||||
|
"category": "Category",
|
||||||
|
"empty": "No matching play types",
|
||||||
|
"groupCount": "{{count}} plays",
|
||||||
|
"keyword": "Search plays",
|
||||||
|
"keywordPlaceholder": "Filter by play code, display name, or category",
|
||||||
|
"reset": "Clear filters",
|
||||||
|
"sectionDescription": "Narrow the list first, then use batch switches or row-level edits.",
|
||||||
|
"sectionTitle": "Filter plays",
|
||||||
|
"status": "Status",
|
||||||
|
"uncategorized": "Uncategorized"
|
||||||
|
},
|
||||||
|
"locales": {
|
||||||
|
"en": "English",
|
||||||
|
"ne": "Nepali",
|
||||||
|
"zh": "Chinese"
|
||||||
|
},
|
||||||
|
"nameDialog": {
|
||||||
|
"apply": "Apply to draft",
|
||||||
|
"description": "Play {{playCode}}. The player site shows this label after you save and publish the draft.",
|
||||||
|
"savedLocal": "Display names were saved into the local draft. Save the draft to persist them.",
|
||||||
|
"title": "Edit display name"
|
||||||
|
},
|
||||||
|
"noPlayTypes": "No play types",
|
||||||
|
"placeholders": {
|
||||||
|
"displayOrder": "Order",
|
||||||
|
"maxBetAmount": "Maximum amount",
|
||||||
|
"minBetAmount": "Minimum amount"
|
||||||
},
|
},
|
||||||
"publishDialog": {
|
"publishDialog": {
|
||||||
"title": "Publish odds version?",
|
|
||||||
"description": "New odds affect new tickets immediately. Existing successful tickets still settle by their saved odds snapshot.",
|
|
||||||
"confirm": "Confirm publish",
|
"confirm": "Confirm publish",
|
||||||
"columns": {
|
"description": "New settings affect future bets. Existing tickets still settle by their saved snapshot.",
|
||||||
"prizeScope": "Prize scope",
|
"title": "Publish play configuration?"
|
||||||
"currentActive": "Current active",
|
},
|
||||||
"afterPublish": "After publish"
|
"publishFailed": "Publish failed",
|
||||||
}
|
"readOnlyDraftHint": "Current version is read-only. Create a draft first.",
|
||||||
|
"readOnlyHint": "Limits and rules are read-only. Create a draft first.",
|
||||||
|
"ruleDialog": {
|
||||||
|
"apply": "Apply to draft",
|
||||||
|
"description": "Play {{playCode}}. Changes stay in the draft until you save and publish it.",
|
||||||
|
"title": "Rule text (i18n)"
|
||||||
|
},
|
||||||
|
"ruleSavedLocal": "Rule text was saved into the local draft. Save the draft to persist it.",
|
||||||
|
"states": {
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"enabled": "Enabled",
|
||||||
|
"readOnly": "Read only"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"actions": "Actions",
|
||||||
|
"category": "Category",
|
||||||
|
"displayName": "Display name",
|
||||||
|
"maxBet": "Max bet",
|
||||||
|
"minBet": "Min bet",
|
||||||
|
"order": "Order",
|
||||||
|
"playCode": "Play code",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"toggleConfirmDescription": "This updates the current draft only. Players see changes after save and publish.",
|
||||||
|
"toggleConfirmTitle": "{{action}} play {{playCode}}?",
|
||||||
|
"toggleDisable": "Disable",
|
||||||
|
"toggleEnable": "Enable",
|
||||||
|
"toggleInstantFailed": "Failed to apply play switch. Try again later.",
|
||||||
|
"validation": {
|
||||||
|
"displayNameRequired": "Display name is required",
|
||||||
|
"minMaxInvalid": "{{playCode}}: min bet cannot exceed max bet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"prizeScopes": {
|
||||||
|
"consolation": "Consolation prize odds",
|
||||||
|
"first": "First prize odds",
|
||||||
|
"second": "Second prize odds",
|
||||||
|
"starter": "Starter prize odds",
|
||||||
|
"third": "Third prize odds"
|
||||||
|
},
|
||||||
"rebate": {
|
"rebate": {
|
||||||
"sectionHint": "This section configures the base rebate, which is stored in the odds version; select or create an odds draft in the section above first.",
|
|
||||||
"lazyLoadHint": "Scroll down to the rebate section to load",
|
|
||||||
"embeddedVersionHint": "Base rebate shares the odds version line—switch versions in the Odds section above.",
|
|
||||||
"sheetDescription": "Rebate is stored in the odds draft version and shares the same version set as odds.",
|
|
||||||
"publishLabel": "Publish",
|
|
||||||
"publishSuccess": "Published odds version with rebate",
|
|
||||||
"publishFailed": "Publish failed",
|
|
||||||
"publishDialog": {
|
|
||||||
"title": "Publish base rebate/odds version?",
|
|
||||||
"description": "After publish, the base rebate applies to new tickets. Agent/player extra rebate is still added on top.",
|
|
||||||
"confirm": "Confirm publish"
|
|
||||||
},
|
|
||||||
"createDraftSuccess": "Created draft v{{version}}",
|
|
||||||
"createDraftFailed": "Failed to create draft",
|
"createDraftFailed": "Failed to create draft",
|
||||||
|
"createDraftSuccess": "Created draft v{{version}}",
|
||||||
"deleteFailed": "Delete failed",
|
"deleteFailed": "Delete failed",
|
||||||
"editingVersion": "Editing version v{{version}} · {{status}}",
|
|
||||||
"readOnlyHint": "Create a draft before editing base rebate.",
|
|
||||||
"dimensionRatesMixedHint": "Base rebate within the same dimension (2D/3D/4D) is not identical: the three percentage inputs show the first play (alphabetically) that has the primary prize scope; use the table as the source of truth. Bulk inputs will overwrite all plays in that dimension to one rate.",
|
"dimensionRatesMixedHint": "Base rebate within the same dimension (2D/3D/4D) is not identical: the three percentage inputs show the first play (alphabetically) that has the primary prize scope; use the table as the source of truth. Bulk inputs will overwrite all plays in that dimension to one rate.",
|
||||||
|
"editingVersion": "Editing version v{{version}} · {{status}}",
|
||||||
|
"effectiveTime": "Effective time (current active odds version)",
|
||||||
|
"embeddedVersionHint": "Base rebate shares the odds version line—switch versions in the Odds section above.",
|
||||||
"fields": {
|
"fields": {
|
||||||
"d2": "2D base rebate rate (%)",
|
"d2": "2D base rebate rate (%)",
|
||||||
"d3": "3D base rebate rate (%)",
|
"d3": "3D base rebate rate (%)",
|
||||||
"d4": "4D base rebate rate (%)"
|
"d4": "4D base rebate rate (%)"
|
||||||
},
|
},
|
||||||
|
"lazyLoadHint": "Scroll down to the rebate section to load",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"d2": "Enter 2D base rebate",
|
"d2": "Enter 2D base rebate",
|
||||||
"d3": "Enter 3D base rebate",
|
"d3": "Enter 3D base rebate",
|
||||||
"d4": "Enter 4D base rebate"
|
"d4": "Enter 4D base rebate"
|
||||||
},
|
},
|
||||||
"winEnjoy": {
|
"publishDialog": {
|
||||||
"label": "Deduct rebate on winning payouts",
|
"confirm": "Confirm publish",
|
||||||
"description": "Maps to settlement.apply_rebate_to_payout: when enabled, winning payout uses gross win × (1 - rebate_rate_snapshot).",
|
"description": "After publish, the base rebate applies to new tickets. Agent/player extra rebate is still added on top.",
|
||||||
"hint": "Global switch; affects future settlement payouts immediately (not tied to odds version publish).",
|
"title": "Publish base rebate/odds version?"
|
||||||
"saveSuccess": "Winning-ticket rebate setting updated",
|
|
||||||
"saveFailed": "Update failed"
|
|
||||||
},
|
|
||||||
"effectiveTime": "Effective time (current active odds version)"
|
|
||||||
},
|
|
||||||
"riskCap": {
|
|
||||||
"placeholders": {
|
|
||||||
"defaultCap": "Enter default cap amount",
|
|
||||||
"number": "4-digit number",
|
|
||||||
"capAmount": "Enter cap amount"
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"requireAtLeastOne": "At least one cap row is required",
|
|
||||||
"defaultGreaterThanZero": "Default cap amount must be greater than 0",
|
|
||||||
"defaultCannotBindDraw": "Default cap cannot be bound to a specific draw",
|
|
||||||
"specialGreaterThanZero": "Special cap amount must be greater than 0: {{number}}",
|
|
||||||
"numberMustBe4Digits": "Number must be 4 digits: {{number}}",
|
|
||||||
"enterValidCapAmount": "Enter a valid cap amount"
|
|
||||||
},
|
},
|
||||||
"publishFailed": "Publish failed",
|
"publishFailed": "Publish failed",
|
||||||
"publishDialog": {
|
"publishLabel": "Publish",
|
||||||
"title": "Publish cap configuration?",
|
"publishSuccess": "Published odds version with rebate",
|
||||||
"description": "After publish, per-number risk-pool cap limits take effect.",
|
"readOnlyHint": "Create a draft before editing base rebate.",
|
||||||
"confirm": "Confirm publish"
|
"sectionHint": "This section configures the base rebate, which is stored in the odds version; select or create an odds draft in the section above first.",
|
||||||
|
"sheetDescription": "Rebate is stored in the odds draft version and shares the same version set as odds.",
|
||||||
|
"winEnjoy": {
|
||||||
|
"description": "Maps to settlement.apply_rebate_to_payout: when enabled, winning payout uses gross win × (1 - rebate_rate_snapshot).",
|
||||||
|
"hint": "Global switch; affects future settlement payouts immediately (not tied to odds version publish).",
|
||||||
|
"label": "Deduct rebate on winning payouts",
|
||||||
|
"saveFailed": "Update failed",
|
||||||
|
"saveSuccess": "Winning-ticket rebate setting updated"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"riskCap": {
|
||||||
|
"actions": {
|
||||||
|
"addSpecialCap": "+ Add special cap",
|
||||||
|
"close": "Close",
|
||||||
|
"exportCsv": "Export CSV",
|
||||||
|
"filterPresets": "Filter presets…",
|
||||||
|
"update": "Update"
|
||||||
},
|
},
|
||||||
"createDraftSuccess": "Created draft v{{version}}",
|
|
||||||
"createDraftFailed": "Failed to create draft",
|
"createDraftFailed": "Failed to create draft",
|
||||||
"savedLocalDraft": "Saved into local draft. Save the draft to persist it.",
|
"createDraftSuccess": "Created draft v{{version}}",
|
||||||
|
"defaultCap": {
|
||||||
|
"description": "Numbers without a special cap use this default cap template.",
|
||||||
|
"fieldLabel": "Cap amount (major unit)",
|
||||||
|
"title": "Default cap"
|
||||||
|
},
|
||||||
"deleteFailed": "Delete failed",
|
"deleteFailed": "Delete failed",
|
||||||
"effectiveAt": "Effective at: {{value}}",
|
"effectiveAt": "Effective at: {{value}}",
|
||||||
"note": "Note: {{value}}",
|
|
||||||
"readOnlyHint": "Read only. Create a draft first.",
|
|
||||||
"readOnly": "Read only",
|
|
||||||
"defaultCap": {
|
|
||||||
"title": "Default cap",
|
|
||||||
"description": "Numbers without a special cap use this default cap template.",
|
|
||||||
"fieldLabel": "Cap amount (major unit)"
|
|
||||||
},
|
|
||||||
"specialCaps": {
|
|
||||||
"title": "Special caps",
|
|
||||||
"description": "No draw selected means a global number cap. Selecting a draw makes it a draw-specific cap."
|
|
||||||
},
|
|
||||||
"scope": {
|
|
||||||
"global": "Global number",
|
|
||||||
"drawId": "Draw ID: {{id}}"
|
|
||||||
},
|
|
||||||
"groups": {
|
"groups": {
|
||||||
"globalTitle": "Global number caps",
|
"count": "{{count}} rows",
|
||||||
"globalDescription": "Long-running caps that are not tied to a specific draw. Use these for normal number-level selling limits.",
|
|
||||||
"globalEmpty": "No global number caps yet.",
|
|
||||||
"drawTitle": "Draw-specific caps",
|
|
||||||
"drawDescription": "Only applies to the selected draw. Use these for temporary tightening or relaxing of a number cap.",
|
"drawDescription": "Only applies to the selected draw. Use these for temporary tightening or relaxing of a number cap.",
|
||||||
"drawEmpty": "No draw-specific caps yet.",
|
"drawEmpty": "No draw-specific caps yet.",
|
||||||
"count": "{{count}} rows"
|
"drawTitle": "Draw-specific caps",
|
||||||
},
|
"globalDescription": "Long-running caps that are not tied to a specific draw. Use these for normal number-level selling limits.",
|
||||||
"summary": {
|
"globalEmpty": "No global number caps yet.",
|
||||||
"defaultCap": "Default cap",
|
"globalTitle": "Global number caps"
|
||||||
"defaultHint": "Any number without a special rule falls back to this value.",
|
|
||||||
"globalCaps": "Global number caps",
|
|
||||||
"globalHint": "Long-running rules that do not change with a single draw.",
|
|
||||||
"drawCaps": "Draw-specific caps",
|
|
||||||
"drawHint": "Temporary rules that only apply to selected draws."
|
|
||||||
},
|
},
|
||||||
"loadingDetails": "Loading details…",
|
"loadingDetails": "Loading details…",
|
||||||
"noDetailRows": "No detail rows.",
|
"noDetailRows": "No detail rows.",
|
||||||
"table": {
|
"note": "Note: {{value}}",
|
||||||
"scope": "Scope",
|
|
||||||
"number": "Number",
|
|
||||||
"capAmount": "Cap amount",
|
|
||||||
"used": "Used",
|
|
||||||
"remaining": "Remaining",
|
|
||||||
"soldOut": "Sold out",
|
|
||||||
"ratio": "Ratio",
|
|
||||||
"actions": "Actions"
|
|
||||||
},
|
|
||||||
"occupancy": {
|
"occupancy": {
|
||||||
"searchLabel": "Search number",
|
"searchLabel": "Search number",
|
||||||
"searchPlaceholder": "e.g. 8888"
|
"searchPlaceholder": "e.g. 8888"
|
||||||
},
|
},
|
||||||
|
"placeholders": {
|
||||||
|
"capAmount": "Enter cap amount",
|
||||||
|
"defaultCap": "Enter default cap amount",
|
||||||
|
"number": "4-digit number"
|
||||||
|
},
|
||||||
|
"publishDialog": {
|
||||||
|
"confirm": "Confirm publish",
|
||||||
|
"description": "After publish, per-number risk-pool cap limits take effect.",
|
||||||
|
"title": "Publish cap configuration?"
|
||||||
|
},
|
||||||
|
"publishFailed": "Publish failed",
|
||||||
|
"readOnly": "Read only",
|
||||||
|
"readOnlyHint": "Read only. Create a draft first.",
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"title": "Per-draw occupancy (live)",
|
|
||||||
"description": "Loaded from the draw risk-pool API, not from the version draft above. Select a draw to see used, remaining, and sold-out state.",
|
"description": "Loaded from the draw risk-pool API, not from the version draft above. Select a draw to see used, remaining, and sold-out state.",
|
||||||
"drawLabel": "Draw",
|
"drawLabel": "Draw",
|
||||||
"drawPlaceholder": "Select draw",
|
"drawPlaceholder": "Select draw",
|
||||||
"filterAll": "All",
|
"filterAll": "All",
|
||||||
"filterSoldOut": "Sold out only",
|
|
||||||
"filterHighRisk": "High usage",
|
"filterHighRisk": "High usage",
|
||||||
|
"filterSoldOut": "Sold out only",
|
||||||
"manageHint": "Use the links above for full risk operations on this draw.",
|
"manageHint": "Use the links above for full risk operations on this draw.",
|
||||||
"noDraws": "No draws available; cannot load occupancy.",
|
"noDraws": "No draws available; cannot load occupancy.",
|
||||||
|
"soldNo": "No",
|
||||||
"soldYes": "Yes",
|
"soldYes": "Yes",
|
||||||
"soldNo": "No"
|
"title": "Per-draw occupancy (live)"
|
||||||
},
|
},
|
||||||
"actions": {
|
"savedLocalDraft": "Saved into local draft. Save the draft to persist it.",
|
||||||
"update": "Update",
|
"scope": {
|
||||||
"addSpecialCap": "+ Add special cap",
|
"drawId": "Draw ID: {{id}}",
|
||||||
"filterPresets": "Filter presets…",
|
"global": "Global number"
|
||||||
"exportCsv": "Export CSV",
|
},
|
||||||
"close": "Close"
|
"specialCaps": {
|
||||||
|
"description": "No draw selected means a global number cap. Selecting a draw makes it a draw-specific cap.",
|
||||||
|
"title": "Special caps"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"defaultCap": "Default cap",
|
||||||
|
"defaultHint": "Any number without a special rule falls back to this value.",
|
||||||
|
"drawCaps": "Draw-specific caps",
|
||||||
|
"drawHint": "Temporary rules that only apply to selected draws.",
|
||||||
|
"globalCaps": "Global number caps",
|
||||||
|
"globalHint": "Long-running rules that do not change with a single draw."
|
||||||
},
|
},
|
||||||
"syncDialog": {
|
"syncDialog": {
|
||||||
"title": "Sync default cap",
|
"confirm": "Confirm",
|
||||||
"description": "The default cap template will be set to {{value}}. This only changes the draft. Save and publish after confirming.",
|
"description": "The default cap template will be set to {{value}}. This only changes the draft. Save and publish after confirming.",
|
||||||
"confirm": "Confirm"
|
"title": "Sync default cap"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"actions": "Actions",
|
||||||
|
"capAmount": "Cap amount",
|
||||||
|
"number": "Number",
|
||||||
|
"ratio": "Ratio",
|
||||||
|
"remaining": "Remaining",
|
||||||
|
"scope": "Scope",
|
||||||
|
"soldOut": "Sold out",
|
||||||
|
"used": "Used"
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"defaultCannotBindDraw": "Default cap cannot be bound to a specific draw",
|
||||||
|
"defaultGreaterThanZero": "Default cap amount must be greater than 0",
|
||||||
|
"enterValidCapAmount": "Enter a valid cap amount",
|
||||||
|
"numberMustBe4Digits": "Number must be 4 digits: {{number}}",
|
||||||
|
"requireAtLeastOne": "At least one cap row is required",
|
||||||
|
"specialGreaterThanZero": "Special cap amount must be greater than 0: {{number}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"confirmSaveCurrencyFormatDescription": "This updates decimal places and separators.",
|
||||||
|
"confirmSaveCurrencyFormatTitle": "Save currency display format?",
|
||||||
|
"confirmSaveDescription": "This updates draw review, cooldown, auto settlement/approval/payout, and play-rules display. It may affect site-wide operation.",
|
||||||
|
"confirmSaveDrawDescription": "This updates draw review, schedule timing, and cooldown in this block only.",
|
||||||
|
"confirmSaveDrawTitle": "Save draw parameters?",
|
||||||
|
"confirmSaveFrontendDescription": "This updates play-rules HTML on the player site. Draw and settlement logic are not changed.",
|
||||||
|
"confirmSaveFrontendTitle": "Save front-end display settings?",
|
||||||
|
"confirmSaveRuntimeDescription": "This updates draw review, schedule timing, cooldown, and auto settlement/approval/payout. Play-rules HTML is not changed.",
|
||||||
|
"confirmSaveRuntimeTitle": "Save draw and settlement parameters?",
|
||||||
|
"confirmSaveSettlementDescription": "This updates auto settlement, approval, and payout switches.",
|
||||||
|
"confirmSaveSettlementTitle": "Save settlement automation?",
|
||||||
|
"confirmSaveTitle": "Save system runtime parameters?",
|
||||||
|
"description": "Controls review flow after RNG draw generation, cooldown duration, and automatic settlement behavior. These are global runtime policies and do not belong to versioned operations config.",
|
||||||
|
"discard": "Discard changes",
|
||||||
|
"fields": {
|
||||||
|
"applyRebateToPayout": "Deduct rebate again on winning payouts",
|
||||||
|
"autoApprove": "Auto-approve settlement batches",
|
||||||
|
"autoPayout": "Auto-credit winnings to wallets",
|
||||||
|
"autoSettlement": "Run settlement automatically",
|
||||||
|
"cooldownMinutes": "Cooldown duration (minutes)",
|
||||||
|
"currencyDecimalSeparator": "Decimal separator",
|
||||||
|
"currencyDisplayDecimals": "Display decimals",
|
||||||
|
"currencyThousandsSeparator": "Thousands separator",
|
||||||
|
"defaultCurrency": "Default currency code",
|
||||||
|
"drawBettingWindowSeconds": "Betting window (seconds)",
|
||||||
|
"drawBufferDrawsAhead": "Pre-generated future draws",
|
||||||
|
"drawCloseBeforeDrawSeconds": "Close before draw (seconds)",
|
||||||
|
"drawIntervalMinutes": "Draw interval (minutes)",
|
||||||
|
"manualReview": "Require manual review for draw results",
|
||||||
|
"playRulesHtml": "Play rules HTML (i18n)",
|
||||||
|
"playRulesHtmlDesc": "Rendered on the player play-rules page per locale. Leave empty to fall back to another language or the default empty state."
|
||||||
|
},
|
||||||
|
"frontendConfig": "Front-end configuration",
|
||||||
|
"hints": {
|
||||||
|
"applyRebateToPayout": "When enabled, payout = gross win × (1 - rebate_rate_snapshot). Default off (rebate already reflected in actual deduct).",
|
||||||
|
"autoApprove": "After cooldown ends and settlement completes, whether batches are automatically marked as approved.",
|
||||||
|
"autoPayout": "After a batch is approved, whether tick automatically credits winnings to player wallets.",
|
||||||
|
"autoSettlement": "When disabled, tick will not run settlement automatically and admins must trigger it manually.",
|
||||||
|
"cooldownMinutes": "How long to wait after publishing before entering settling. Use 0 to settle immediately.",
|
||||||
|
"manualReview": "When enabled, RNG draw results enter pending review and must be published manually in admin."
|
||||||
|
},
|
||||||
|
"loadFailed": "Failed to load system settings",
|
||||||
|
"placeholders": {
|
||||||
|
"cooldownMinutes": "Enter cooldown minutes",
|
||||||
|
"currencyDecimalSeparator": "Enter decimal separator, for example .",
|
||||||
|
"currencyDisplayDecimals": "Enter display decimal places, for example 2",
|
||||||
|
"currencyThousandsSeparator": "Enter thousands separator, for example ,",
|
||||||
|
"defaultCurrency": "Enter default currency code, for example NPR",
|
||||||
|
"drawBettingWindowSeconds": "Enter betting window in seconds",
|
||||||
|
"drawBufferDrawsAhead": "Enter pre-generated draw count",
|
||||||
|
"drawCloseBeforeDrawSeconds": "Enter seconds to close before draw",
|
||||||
|
"drawIntervalMinutes": "Enter draw interval in minutes"
|
||||||
|
},
|
||||||
|
"runtimeIntro1": "This area stores global system parameters that do not belong to play, odds, or risk-control versions. They directly affect wallet transfers, job switches, and runtime policy.",
|
||||||
|
"runtimeIntro2": "Play, odds, rebate, and cap management stay under operations configuration. System settings only carry cross-module runtime parameters to avoid overlapping responsibilities in admin.",
|
||||||
|
"runtimeTitle": "Global runtime parameters",
|
||||||
|
"saveCurrencyFormatSuccess": "Currency display format saved",
|
||||||
|
"saveDrawSuccess": "Draw parameters saved",
|
||||||
|
"saveFailed": "Failed to save system settings",
|
||||||
|
"saveFrontendSuccess": "Front-end display settings saved",
|
||||||
|
"saveRuntimeSuccess": "Draw and settlement parameters saved",
|
||||||
|
"saveSettlementSuccess": "Settlement automation saved",
|
||||||
|
"saveSuccess": "System settings saved",
|
||||||
|
"sections": {
|
||||||
|
"currencyFormat": "Currency display format",
|
||||||
|
"currencyFormatDescription": "Decimals and separators for amounts across the site (separate from currency master data).",
|
||||||
|
"draw": "Draw schedule and review",
|
||||||
|
"drawDescription": "Controls draw timing, close window, manual review, and cooldown. Only changed fields in this block are submitted.",
|
||||||
|
"settlement": "Settlement automation",
|
||||||
|
"settlementDescription": "Controls whether tick auto-runs settlement, approval, and payout. Only changed fields in this block are submitted."
|
||||||
|
},
|
||||||
|
"states": {
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"enabled": "Enabled"
|
||||||
|
},
|
||||||
|
"title": "Draw and settlement runtime settings",
|
||||||
|
"unsavedChanges": "Unsaved changes"
|
||||||
|
},
|
||||||
|
"title": "Configuration Center",
|
||||||
|
"versionActions": {
|
||||||
|
"newDraft": "New draft",
|
||||||
|
"publishCurrent": "Publish",
|
||||||
|
"refresh": "Refresh versions",
|
||||||
|
"refreshing": "Refreshing",
|
||||||
|
"rollbackDialog": {
|
||||||
|
"confirm": "Confirm rollback",
|
||||||
|
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
||||||
|
"title": "Confirm rollback"
|
||||||
|
},
|
||||||
|
"rollbackFailed": "Rollback failed",
|
||||||
|
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
||||||
|
"saveDraft": "Save draft",
|
||||||
|
"saveFailed": "Failed to save configuration"
|
||||||
|
},
|
||||||
|
"versionStatus": {
|
||||||
|
"active": "Active",
|
||||||
|
"archived": "Archived",
|
||||||
|
"draft": "Draft"
|
||||||
|
},
|
||||||
|
"versionSwitcher": {
|
||||||
|
"count": "{{count}} items",
|
||||||
|
"current": "Current",
|
||||||
|
"delete": "Delete",
|
||||||
|
"deleteConfirmDescription": "Version ID {{id}} (version_no {{version}}) will be permanently deleted. Active versions cannot be deleted.",
|
||||||
|
"deleteConfirmTitle": "Delete this version?",
|
||||||
|
"effectiveAt": "Effective at: {{value}}",
|
||||||
|
"empty": "No version records yet.",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"moreActions": "More actions for v{{version}}",
|
||||||
|
"noneSelected": "No version selected",
|
||||||
|
"note": "Note: {{value}}",
|
||||||
|
"rollback": "Rollback",
|
||||||
|
"selected": "Selected",
|
||||||
|
"sheetDescription": "Choose a version to view on this page. Drafts are editable, while active and archived versions are read-only.",
|
||||||
|
"sheetTitle": "Switch configuration version",
|
||||||
|
"switch": "Switch version",
|
||||||
|
"view": "View"
|
||||||
|
},
|
||||||
|
"versionToolbar": {
|
||||||
|
"draftEditing": "Editing a draft — save and publish to go live"
|
||||||
|
},
|
||||||
|
"wallet": {
|
||||||
|
"confirmSaveDescription": "This updates per-order transfer-in/out limits and immediately affects player wallet transfers.",
|
||||||
|
"confirmSaveTitle": "Save wallet limits?",
|
||||||
|
"description": "Amounts use the game's minor currency unit (for example, under NPR, 100 = 1.00 NPR). The minimum amount must be at least 1 minor unit.",
|
||||||
|
"discard": "Discard changes",
|
||||||
|
"fields": {
|
||||||
|
"inMax": "Maximum transfer-in amount",
|
||||||
|
"inMin": "Minimum transfer-in amount",
|
||||||
|
"outMax": "Maximum transfer-out amount",
|
||||||
|
"outMin": "Minimum transfer-out amount"
|
||||||
|
},
|
||||||
|
"hints": {
|
||||||
|
"inMax": "Per-order maximum from main wallet to lottery wallet",
|
||||||
|
"inMin": "Per-order minimum from main wallet to lottery wallet",
|
||||||
|
"outMax": "Per-order maximum from lottery wallet to main wallet",
|
||||||
|
"outMin": "Per-order minimum from lottery wallet to main wallet"
|
||||||
|
},
|
||||||
|
"loadFailed": "Failed to load",
|
||||||
|
"placeholders": {
|
||||||
|
"max": "For example: 10000.00",
|
||||||
|
"min": "For example: 1.00"
|
||||||
|
},
|
||||||
|
"saveFailed": "Save failed",
|
||||||
|
"saveSuccess": "Saved successfully",
|
||||||
|
"title": "Wallet transfer limit settings",
|
||||||
|
"validation": {
|
||||||
|
"amountAtLeastMinorUnit": "{{field}} must be a valid amount and at least 0.01.",
|
||||||
|
"inRangeInvalid": "Maximum transfer-in amount cannot be less than the minimum transfer-in amount.",
|
||||||
|
"outRangeInvalid": "Maximum transfer-out amount cannot be less than the minimum transfer-out amount."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,6 +190,49 @@
|
|||||||
"bills": "Settlement"
|
"bills": "Settlement"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"finance": {
|
||||||
|
"title": "Finance workspace",
|
||||||
|
"subtitle": "{{name}} · reconcile & settlement",
|
||||||
|
"subtitleFallback": "Site finance · reconcile & settlement",
|
||||||
|
"abnormalTransfers": "Abnormal transfers",
|
||||||
|
"pendingConfirmBills": "Bills pending confirm",
|
||||||
|
"pendingConfirmHint": "Awaiting finance confirmation after period close",
|
||||||
|
"payableBills": "Bills pending payout",
|
||||||
|
"payableUnpaid": "Unpaid {{amount}}",
|
||||||
|
"payableUnpaidLabel": "Total unpaid",
|
||||||
|
"walletPlayers": "Wallet players",
|
||||||
|
"creditPlayersHint": "{{count}} credit players",
|
||||||
|
"settlementTitle": "Credit settlement",
|
||||||
|
"reconcileTitle": "Wallet reconcile",
|
||||||
|
"overviewEmpty": "No finance summary. Confirm the integration site is bound.",
|
||||||
|
"quickLinks": {
|
||||||
|
"reconcile": "Reconcile",
|
||||||
|
"transfers": "Transfer orders",
|
||||||
|
"bills": "Settlement center",
|
||||||
|
"reports": "Reports"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cs": {
|
||||||
|
"title": "Support workspace",
|
||||||
|
"subtitle": "{{name}} · player & ticket lookup",
|
||||||
|
"subtitleFallback": "Site support · player & ticket lookup",
|
||||||
|
"playerCount": "Site players",
|
||||||
|
"playerCountHint": "Registered players on this site",
|
||||||
|
"ticketsToday": "Tickets today",
|
||||||
|
"activePlayersToday": "Active players today",
|
||||||
|
"activePlayersHint": "Players with bets today",
|
||||||
|
"latestTicketAt": "Latest ticket {{time}}",
|
||||||
|
"noTicketToday": "No tickets yet today",
|
||||||
|
"workspaceTitle": "Quick access",
|
||||||
|
"scopeTitle": "Today at a glance",
|
||||||
|
"openModule": "Open module",
|
||||||
|
"overviewEmpty": "No support summary. Confirm the integration site is bound.",
|
||||||
|
"quickLinks": {
|
||||||
|
"players": "Players",
|
||||||
|
"tickets": "Tickets",
|
||||||
|
"wallet": "Wallet ledger"
|
||||||
|
}
|
||||||
|
},
|
||||||
"agent": {
|
"agent": {
|
||||||
"title": "Operations overview",
|
"title": "Operations overview",
|
||||||
"subtitle": "{{name}} · your line",
|
"subtitle": "{{name}} · your line",
|
||||||
|
|||||||
@@ -1,89 +1,91 @@
|
|||||||
{
|
{
|
||||||
"title": "Jackpot",
|
|
||||||
"configTitle": "Jackpot pool configuration",
|
|
||||||
"pageDescription": "Maintain per-currency pool parameters; contribution and payout logs are below.",
|
|
||||||
"poolsSectionDescription": "Contribution rate, burst threshold, switch, and manual burst.",
|
|
||||||
"rulesTitle": "Rules",
|
|
||||||
"rulesJoin": "Only successfully placed lines that meet the minimum participation bet amount contribute to the pool.",
|
|
||||||
"rulesBurst": "The pool releases when the burst threshold is reached, the forced burst gap is met, or a configured play combo triggers it.",
|
|
||||||
"rulesManual": "Manual burst is a super-admin fallback only. You can enter either the numeric draw ID or the draw number.",
|
|
||||||
"recordsSectionTitle": "Contribution & payout logs",
|
|
||||||
"recordsSectionDescription": "Filter payout and contribution entries (read-only).",
|
|
||||||
"loadFailed": "Failed to load",
|
|
||||||
"saveSuccess": "Saved",
|
|
||||||
"saveFailed": "Save failed",
|
|
||||||
"invalidDrawId": "Enter a valid draw ID or draw number",
|
|
||||||
"manualBurstSuccess": "Jackpot burst triggered manually",
|
|
||||||
"manualBurstFailed": "Manual burst failed",
|
|
||||||
"noPoolData": "No pool data",
|
|
||||||
"displayBalance": "Display balance {{amount}}",
|
|
||||||
"currentAmount": "Current pool balance (major unit)",
|
|
||||||
"balanceAdjustmentTitle": "Balance adjustment",
|
|
||||||
"balanceAdjustmentHint": "A reason is required; each change is recorded in the adjustment ledger. Balance cannot be edited via Save.",
|
|
||||||
"adjustmentDirection": "Direction",
|
|
||||||
"adjustmentIncrease": "Increase",
|
|
||||||
"adjustmentDecrease": "Decrease",
|
|
||||||
"adjustmentAmount": "Amount (major units)",
|
"adjustmentAmount": "Amount (major units)",
|
||||||
|
"adjustmentAmountInvalid": "Enter a valid adjustment amount",
|
||||||
"adjustmentAmountPlaceholder": "Enter adjustment amount",
|
"adjustmentAmountPlaceholder": "Enter adjustment amount",
|
||||||
|
"adjustmentDecrease": "Decrease",
|
||||||
|
"adjustmentDirection": "Direction",
|
||||||
|
"adjustmentFailed": "Adjustment failed",
|
||||||
|
"adjustmentIncrease": "Increase",
|
||||||
"adjustmentReason": "Reason (required)",
|
"adjustmentReason": "Reason (required)",
|
||||||
"adjustmentReasonPlaceholder": "Enter adjustment reason",
|
"adjustmentReasonPlaceholder": "Enter adjustment reason",
|
||||||
"submitAdjustment": "Submit adjustment",
|
|
||||||
"adjustmentSuccess": "Pool balance adjusted",
|
|
||||||
"adjustmentFailed": "Adjustment failed",
|
|
||||||
"adjustmentAmountInvalid": "Enter a valid adjustment amount",
|
|
||||||
"adjustmentReasonRequired": "Reason must be at least 3 characters",
|
"adjustmentReasonRequired": "Reason must be at least 3 characters",
|
||||||
"confirmAdjustmentTitle": "Confirm pool balance adjustment?",
|
"adjustmentSuccess": "Pool balance adjusted",
|
||||||
"confirmAdjustmentDescription": "This writes a ledger entry and updates the pool balance. Verify amount and reason.",
|
"apply": "Apply",
|
||||||
"recentAdjustments": "Recent adjustments",
|
"balanceAdjustmentHint": "A reason is required; each change is recorded in the adjustment ledger. Balance cannot be edited via Save.",
|
||||||
"contributionRate": "Contribution rate (%)",
|
"balanceAdjustmentTitle": "Balance adjustment",
|
||||||
"contributionRatePlaceholder": "e.g. 2 = 2%",
|
"cancel": "Cancel",
|
||||||
"triggerThreshold": "Burst threshold (major unit)",
|
|
||||||
"triggerThresholdPlaceholder": "Enter burst threshold",
|
|
||||||
"payoutRate": "Burst payout rate (%)",
|
|
||||||
"payoutRatePlaceholder": "e.g. 5 = 5%",
|
|
||||||
"forceTriggerGap": "Force burst gap (settled draws)",
|
|
||||||
"forceTriggerGapPlaceholder": "Enter forced burst gap in draws",
|
|
||||||
"minBetAmount": "Minimum participation bet amount (major unit)",
|
|
||||||
"minBetAmountPlaceholder": "Enter minimum bet amount",
|
|
||||||
"comboTriggerPlays": "Combo trigger plays (comma separated)",
|
"comboTriggerPlays": "Combo trigger plays (comma separated)",
|
||||||
"comboTriggerPlaysPlaceholder": "Enter play codes separated by commas, for example straight,ibox",
|
"comboTriggerPlaysPlaceholder": "Enter play codes separated by commas, for example straight,ibox",
|
||||||
"status": "Status",
|
"configTitle": "Jackpot pool configuration",
|
||||||
|
"confirmAdjustmentDescription": "This writes a ledger entry and updates the pool balance. Verify amount and reason.",
|
||||||
|
"confirmAdjustmentTitle": "Confirm pool balance adjustment?",
|
||||||
|
"confirmSavePoolDescription": "This updates fill rate, thresholds, payout ratio, and related parameters (not pool balance). Use Balance adjustment for balance changes.",
|
||||||
|
"confirmSavePoolTitle": "Save jackpot pool settings?",
|
||||||
|
"contributionAmount": "Contribution amount",
|
||||||
|
"contributionLoadFailed": "Failed to load contribution records",
|
||||||
|
"contributionRate": "Contribution rate (%)",
|
||||||
|
"contributionRatePlaceholder": "e.g. 2 = 2%",
|
||||||
|
"contributionRecords": "Jackpot contribution records",
|
||||||
|
"currentAmount": "Current pool balance (major unit)",
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
|
"displayBalance": "Display balance {{amount}}",
|
||||||
|
"drawNo": "Draw no.",
|
||||||
"enabled": "Enabled",
|
"enabled": "Enabled",
|
||||||
"saving": "Saving…",
|
"filter": "Filter",
|
||||||
"save": "Save",
|
"forceTriggerGap": "Force burst gap (settled draws)",
|
||||||
"manualBurstDrawId": "Draw for manual burst (ID or number)",
|
"forceTriggerGapPlaceholder": "Enter forced burst gap in draws",
|
||||||
"manualBurstHint": "Super admin only. You can enter either the numeric draw ID or the draw number. Requires a settled draw with first-prize winners. Pool release follows the configured payout rate.",
|
"invalidDrawId": "Enter a valid draw ID or draw number",
|
||||||
"manualBurstConfirmTitle": "Confirm manual jackpot burst?",
|
"loadFailed": "Failed to load",
|
||||||
"manualBurstConfirmDescription": "Jackpot will be split among first-prize winners for draw {{drawId}} using the payout rate. Pool balance will be reduced. This cannot be undone automatically.",
|
|
||||||
"processing": "Processing…",
|
|
||||||
"manualBurst": "Manual burst (super admin only)",
|
"manualBurst": "Manual burst (super admin only)",
|
||||||
"manualBurstConfirm": "Confirm burst",
|
"manualBurstConfirm": "Confirm burst",
|
||||||
"cancel": "Cancel",
|
"manualBurstConfirmDescription": "Jackpot will be split among first-prize winners for draw {{drawId}} using the payout rate. Pool balance will be reduced. This cannot be undone automatically.",
|
||||||
"filter": "Filter",
|
"manualBurstConfirmTitle": "Confirm manual jackpot burst?",
|
||||||
"drawNo": "Draw no.",
|
"manualBurstDrawId": "Draw for manual burst (ID or number)",
|
||||||
|
"manualBurstFailed": "Manual burst failed",
|
||||||
|
"manualBurstHint": "Super admin only. You can enter either the numeric draw ID or the draw number. Requires a settled draw with first-prize winners. Pool release follows the configured payout rate.",
|
||||||
|
"manualBurstSuccess": "Jackpot burst triggered manually",
|
||||||
|
"minBetAmount": "Minimum participation bet amount (major unit)",
|
||||||
|
"minBetAmountPlaceholder": "Enter minimum bet amount",
|
||||||
|
"noPoolData": "No pool data",
|
||||||
"optional": "Optional",
|
"optional": "Optional",
|
||||||
"apply": "Apply",
|
"pageDescription": "Maintain per-currency pool parameters; contribution and payout logs are below.",
|
||||||
"payoutRecords": "Jackpot payout records",
|
|
||||||
"contributionRecords": "Jackpot contribution records",
|
|
||||||
"recordsPage": {
|
|
||||||
"title": "Jackpot records",
|
|
||||||
"description": "Payout records and pool contribution flows"
|
|
||||||
},
|
|
||||||
"poolsSectionTitle": "Per-currency pool parameters",
|
|
||||||
"payoutLoadFailed": "Failed to load payout records",
|
|
||||||
"contributionLoadFailed": "Failed to load contribution records",
|
|
||||||
"trigger": "Trigger",
|
|
||||||
"triggerTypes": {
|
|
||||||
"threshold": "Threshold reached",
|
|
||||||
"forced_gap": "Forced by draw gap",
|
|
||||||
"play_combo": "Triggered by play combo",
|
|
||||||
"manual": "Manual trigger"
|
|
||||||
},
|
|
||||||
"payoutAmount": "Payout amount",
|
"payoutAmount": "Payout amount",
|
||||||
"winnerCount": "Winner count",
|
"payoutLoadFailed": "Failed to load payout records",
|
||||||
"time": "Time",
|
"payoutRate": "Burst payout rate (%)",
|
||||||
"ticketNo": "Ticket",
|
"payoutRatePlaceholder": "e.g. 5 = 5%",
|
||||||
|
"payoutRecords": "Jackpot payout records",
|
||||||
"player": "Player",
|
"player": "Player",
|
||||||
"contributionAmount": "Contribution amount"
|
"poolsSectionDescription": "Contribution rate, burst threshold, switch, and manual burst.",
|
||||||
|
"poolsSectionTitle": "Per-currency pool parameters",
|
||||||
|
"processing": "Processing…",
|
||||||
|
"recentAdjustments": "Recent adjustments",
|
||||||
|
"recordsPage": {
|
||||||
|
"description": "Payout records and pool contribution flows",
|
||||||
|
"title": "Jackpot records"
|
||||||
|
},
|
||||||
|
"recordsSectionDescription": "Filter payout and contribution entries (read-only).",
|
||||||
|
"recordsSectionTitle": "Contribution & payout logs",
|
||||||
|
"rulesBurst": "The pool releases when the burst threshold is reached, the forced burst gap is met, or a configured play combo triggers it.",
|
||||||
|
"rulesJoin": "Only successfully placed lines that meet the minimum participation bet amount contribute to the pool.",
|
||||||
|
"rulesManual": "Manual burst is a super-admin fallback only. You can enter either the numeric draw ID or the draw number.",
|
||||||
|
"rulesTitle": "Rules",
|
||||||
|
"save": "Save",
|
||||||
|
"saveFailed": "Save failed",
|
||||||
|
"saveSuccess": "Saved",
|
||||||
|
"saving": "Saving…",
|
||||||
|
"status": "Status",
|
||||||
|
"submitAdjustment": "Submit adjustment",
|
||||||
|
"ticketNo": "Ticket",
|
||||||
|
"time": "Time",
|
||||||
|
"title": "Jackpot",
|
||||||
|
"trigger": "Trigger",
|
||||||
|
"triggerThreshold": "Burst threshold (major unit)",
|
||||||
|
"triggerThresholdPlaceholder": "Enter burst threshold",
|
||||||
|
"triggerTypes": {
|
||||||
|
"forced_gap": "Forced by draw gap",
|
||||||
|
"manual": "Manual trigger",
|
||||||
|
"play_combo": "Triggered by play combo",
|
||||||
|
"threshold": "Threshold reached"
|
||||||
|
},
|
||||||
|
"winnerCount": "Winner count"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,99 +1,101 @@
|
|||||||
{
|
{
|
||||||
"title": "Players",
|
"actions": "Actions",
|
||||||
"pageGuide": "Wallet and credit players in one list; detail tabs adapt to funding_mode.",
|
|
||||||
"detailTitle": "Player details",
|
|
||||||
"listTitle": "Player list",
|
|
||||||
"viewDetail": "View details",
|
|
||||||
"backToList": "Back to player list",
|
|
||||||
"detailSubtitle": "{{site}} · {{sitePlayerId}} · ID {{playerId}}",
|
|
||||||
"tabOverview": "Overview",
|
|
||||||
"tabTickets": "Tickets",
|
|
||||||
"ticketTableHint": "This table shows the player's recent tickets. Use the row action to jump into the main ticket list for full context and troubleshooting.",
|
|
||||||
"tabWalletTxns": "Wallet transactions",
|
|
||||||
"tabCreditLedger": "Credit ledger",
|
|
||||||
"tabTransferOrders": "Transfer orders",
|
|
||||||
"profileSection": "Profile",
|
|
||||||
"walletsSection": "Wallets",
|
|
||||||
"createdAt": "Registered at",
|
|
||||||
"agent": "Agent",
|
"agent": "Agent",
|
||||||
"frozen": "Frozen",
|
|
||||||
"txnAmount": "Amount",
|
|
||||||
"balanceAfterTxn": "Balance after",
|
|
||||||
"invalidPlayerId": "Invalid player ID",
|
|
||||||
"createPlayer": "Create player",
|
|
||||||
"searchPlaceholder": "Search by player ID / username / nickname",
|
|
||||||
"filterSite": "Site",
|
|
||||||
"filterAllSites": "All sites",
|
|
||||||
"scopeAllSites": "Scope: all players on all sites (super admin)",
|
|
||||||
"scopeFilteredSite": "Scope: site {{site}}",
|
|
||||||
"scopeAgentLine": "Scope: {{site}} · agent line “{{name}}” and downstream players",
|
|
||||||
"scopeSingleSite": "Scope: site {{site}}",
|
|
||||||
"scopeMultiSite": "Scope: {{count}} bound site(s); use filter to narrow",
|
|
||||||
"search": "Search",
|
|
||||||
"refresh": "Refresh",
|
|
||||||
"loadFailed": "Failed to load player list",
|
|
||||||
"siteCodeRequired": "Enter the site code",
|
|
||||||
"sitePlayerIdRequired": "Enter the site player ID",
|
|
||||||
"createFailed": "Failed to create player",
|
|
||||||
"createAgentRequired": "Your account is not bound to an agent node. Sign in with an agent account, or as super admin pick a valid site and agent.",
|
|
||||||
"createAgentNode": "Agent node",
|
|
||||||
"createAgentNodePlaceholder": "Select agent node",
|
|
||||||
"createAgentAutoHint": "Player will be assigned to your agent: {{name}} ({{code}})",
|
|
||||||
"createSuccess": "Created player {{name}}",
|
|
||||||
"noChanges": "No changes",
|
|
||||||
"updateFailed": "Failed to update player",
|
|
||||||
"updateSuccess": "Updated {{name}}",
|
|
||||||
"deleteFailed": "Delete failed",
|
|
||||||
"deleteSuccess": "Deleted player {{name}}",
|
|
||||||
"statusNormal": "Normal",
|
|
||||||
"statusFrozen": "Frozen",
|
|
||||||
"statusBanned": "Banned",
|
|
||||||
"site": "Site",
|
|
||||||
"sitePlayerId": "Site player ID",
|
|
||||||
"username": "Username",
|
|
||||||
"nickname": "Nickname",
|
|
||||||
"currency": "Currency",
|
|
||||||
"balance": "Balance",
|
|
||||||
"available": "Available",
|
|
||||||
"status": "Status",
|
|
||||||
"lastLogin": "Last login",
|
|
||||||
"fundingMode": "Funding mode",
|
|
||||||
"authSource": "Auth source",
|
|
||||||
"creditSection": "Credit line",
|
|
||||||
"usedCredit": "Used credit",
|
|
||||||
"fundingCredit": "Credit line",
|
|
||||||
"fundingWallet": "Main-site wallet",
|
|
||||||
"authMainSite": "Main-site SSO",
|
"authMainSite": "Main-site SSO",
|
||||||
"authNative": "Lottery native",
|
"authNative": "Lottery native",
|
||||||
"creditLimit": "Credit limit",
|
"authSource": "Auth source",
|
||||||
|
"available": "Available",
|
||||||
"availableCredit": "Available credit",
|
"availableCredit": "Available credit",
|
||||||
"actions": "Actions",
|
"backToList": "Back to player list",
|
||||||
"edit": "Edit",
|
"balance": "Balance",
|
||||||
"freeze": "Freeze",
|
"balanceAfterTxn": "Balance after",
|
||||||
"unfreeze": "Unfreeze",
|
|
||||||
"freezeSuccess": "Player {{name}} frozen",
|
|
||||||
"unfreezeSuccess": "Player {{name}} unfrozen",
|
|
||||||
"freezeFailed": "Failed to freeze player",
|
|
||||||
"unfreezeFailed": "Failed to unfreeze player",
|
|
||||||
"delete": "Delete",
|
|
||||||
"createDialogTitle": "Create player",
|
|
||||||
"editDialogTitle": "Edit player",
|
|
||||||
"createDialogDesc": "Manually register a main-site player to the lottery platform. Usually this is created automatically through SSO login.",
|
|
||||||
"editDialogDesc": "Edit player information.",
|
|
||||||
"siteCode": "Site code",
|
|
||||||
"siteCodePlaceholder": "For example main_site",
|
|
||||||
"sitePlayerIdLabel": "Site player ID",
|
|
||||||
"sitePlayerIdPlaceholder": "Unique identifier returned by the main site",
|
|
||||||
"usernamePlaceholderOptional": "Optional",
|
|
||||||
"nicknamePlaceholderOptional": "Optional",
|
|
||||||
"defaultCurrency": "Default currency",
|
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
|
"confirmDelete": "Confirm delete",
|
||||||
|
"confirmDeleteDesc": "Delete player {{name}}? This action cannot be undone.",
|
||||||
|
"confirmFreezeDescription": "Player {{name}} will not be able to place bets.",
|
||||||
|
"confirmFreezeTitle": "Confirm freeze player?",
|
||||||
|
"confirmUnfreezeDescription": "Player {{name}} will return to normal status.",
|
||||||
|
"confirmUnfreezeTitle": "Confirm unfreeze player?",
|
||||||
|
"createAgentAutoHint": "Player will be assigned to your agent: {{name}} ({{code}})",
|
||||||
|
"createAgentNode": "Agent node",
|
||||||
|
"createAgentNodePlaceholder": "Select agent node",
|
||||||
|
"createAgentRequired": "Your account is not bound to an agent node. Sign in with an agent account, or as super admin pick a valid site and agent.",
|
||||||
|
"createDialogDesc": "Manually register a main-site player to the lottery platform. Usually this is created automatically through SSO login.",
|
||||||
|
"createDialogTitle": "Create player",
|
||||||
|
"createFailed": "Failed to create player",
|
||||||
|
"createPlayer": "Create player",
|
||||||
|
"createSuccess": "Created player {{name}}",
|
||||||
|
"createdAt": "Registered at",
|
||||||
|
"creditLimit": "Credit limit",
|
||||||
|
"creditSection": "Credit line",
|
||||||
|
"currency": "Currency",
|
||||||
|
"defaultCurrency": "Default currency",
|
||||||
|
"delete": "Delete",
|
||||||
|
"deleteFailed": "Delete failed",
|
||||||
|
"deleteSuccess": "Deleted player {{name}}",
|
||||||
|
"detailSubtitle": "{{site}} · {{sitePlayerId}} · ID {{playerId}}",
|
||||||
|
"detailTitle": "Player details",
|
||||||
|
"edit": "Edit",
|
||||||
|
"editDialogDesc": "Edit player information.",
|
||||||
|
"editDialogTitle": "Edit player",
|
||||||
|
"filterAllSites": "All sites",
|
||||||
|
"filterSite": "Site",
|
||||||
|
"freeze": "Freeze",
|
||||||
|
"freezeFailed": "Failed to freeze player",
|
||||||
|
"freezeSuccess": "Player {{name}} frozen",
|
||||||
|
"frozen": "Frozen",
|
||||||
|
"fundingCredit": "Credit line",
|
||||||
|
"fundingMode": "Funding mode",
|
||||||
|
"fundingWallet": "Main-site wallet",
|
||||||
|
"invalidPlayerId": "Invalid player ID",
|
||||||
|
"lastLogin": "Last login",
|
||||||
|
"listTitle": "Player list",
|
||||||
|
"loadFailed": "Failed to load player list",
|
||||||
|
"nickname": "Nickname",
|
||||||
|
"nicknamePlaceholderOptional": "Optional",
|
||||||
|
"noChanges": "No changes",
|
||||||
|
"pageGuide": "Wallet and credit players in one list; detail tabs adapt to funding_mode.",
|
||||||
|
"profileSection": "Profile",
|
||||||
|
"rebateRate": "Rebate",
|
||||||
|
"refresh": "Refresh",
|
||||||
|
"riskTags": "Risk tags",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"saving": "Saving…",
|
"saving": "Saving…",
|
||||||
"confirmFreezeTitle": "Confirm freeze player?",
|
"scopeAgentLine": "Scope: {{site}} · agent line “{{name}}” and downstream players",
|
||||||
"confirmFreezeDescription": "Player {{name}} will not be able to place bets.",
|
"scopeAllSites": "Scope: all players on all sites (super admin)",
|
||||||
"confirmUnfreezeTitle": "Confirm unfreeze player?",
|
"scopeFilteredSite": "Scope: site {{site}}",
|
||||||
"confirmUnfreezeDescription": "Player {{name}} will return to normal status.",
|
"scopeMultiSite": "Scope: {{count}} bound site(s); use filter to narrow",
|
||||||
"confirmDelete": "Confirm delete",
|
"scopeSingleSite": "Scope: site {{site}}",
|
||||||
"confirmDeleteDesc": "Delete player {{name}}? This action cannot be undone."
|
"search": "Search",
|
||||||
|
"searchPlaceholder": "Search by player ID / username / nickname",
|
||||||
|
"site": "Site",
|
||||||
|
"siteCode": "Site code",
|
||||||
|
"siteCodePlaceholder": "For example main_site",
|
||||||
|
"siteCodeRequired": "Enter the site code",
|
||||||
|
"sitePlayerId": "Site player ID",
|
||||||
|
"sitePlayerIdLabel": "Site player ID",
|
||||||
|
"sitePlayerIdPlaceholder": "Unique identifier returned by the main site",
|
||||||
|
"sitePlayerIdRequired": "Enter the site player ID",
|
||||||
|
"status": "Status",
|
||||||
|
"statusBanned": "Banned",
|
||||||
|
"statusFrozen": "Frozen",
|
||||||
|
"statusNormal": "Normal",
|
||||||
|
"tabCreditLedger": "Credit ledger",
|
||||||
|
"tabOverview": "Overview",
|
||||||
|
"tabTickets": "Tickets",
|
||||||
|
"tabTransferOrders": "Transfer orders",
|
||||||
|
"tabWalletTxns": "Wallet transactions",
|
||||||
|
"ticketTableHint": "This table shows the player's recent tickets. Use the row action to jump into the main ticket list for full context and troubleshooting.",
|
||||||
|
"title": "Players",
|
||||||
|
"txnAmount": "Amount",
|
||||||
|
"unfreeze": "Unfreeze",
|
||||||
|
"unfreezeFailed": "Failed to unfreeze player",
|
||||||
|
"unfreezeSuccess": "Player {{name}} unfrozen",
|
||||||
|
"updateFailed": "Failed to update player",
|
||||||
|
"updateSuccess": "Updated {{name}}",
|
||||||
|
"usedCredit": "Used credit",
|
||||||
|
"username": "Username",
|
||||||
|
"usernamePlaceholderOptional": "Optional",
|
||||||
|
"viewDetail": "View details",
|
||||||
|
"walletsSection": "Wallets"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,6 @@
|
|||||||
"hot_number_risk_report": "Hot number risk",
|
"hot_number_risk_report": "Hot number risk",
|
||||||
"play_dimension_report": "Play dimension",
|
"play_dimension_report": "Play dimension",
|
||||||
"sold_out_number_report": "Sold-out numbers",
|
"sold_out_number_report": "Sold-out numbers",
|
||||||
"rebate_commission_report": "Rebate / commission",
|
|
||||||
"audit_operation_report": "Admin audit"
|
"audit_operation_report": "Admin audit"
|
||||||
},
|
},
|
||||||
"empty": "No matching reports",
|
"empty": "No matching reports",
|
||||||
@@ -173,16 +172,6 @@
|
|||||||
"extra": "Usage",
|
"extra": "Usage",
|
||||||
"time": "Version"
|
"time": "Version"
|
||||||
},
|
},
|
||||||
"rebateCommission": {
|
|
||||||
"primary": "Play",
|
|
||||||
"secondary": "Orders",
|
|
||||||
"metricA": "Rebate",
|
|
||||||
"metricB": "Ticket items",
|
|
||||||
"metricC": "Commission",
|
|
||||||
"status": "Rule hit",
|
|
||||||
"extra": "Note",
|
|
||||||
"time": "Time"
|
|
||||||
},
|
|
||||||
"adminAudit": {
|
"adminAudit": {
|
||||||
"primary": "Log ID",
|
"primary": "Log ID",
|
||||||
"secondary": "Operator type",
|
"secondary": "Operator type",
|
||||||
@@ -303,10 +292,6 @@
|
|||||||
"title": "Sold-out number report",
|
"title": "Sold-out number report",
|
||||||
"summary": "Review sold-out numbers, sold-out time, and risk lock state by draw."
|
"summary": "Review sold-out numbers, sold-out time, and risk lock state by draw."
|
||||||
},
|
},
|
||||||
"rebate_commission": {
|
|
||||||
"title": "Commission / rebate report",
|
|
||||||
"summary": "Wallet-mode instant rebate by business date; defaults to the last 30 days. Not credit-line period settlement."
|
|
||||||
},
|
|
||||||
"admin_audit": {
|
"admin_audit": {
|
||||||
"title": "Admin operation audit report",
|
"title": "Admin operation audit report",
|
||||||
"summary": "Admin actions by operator and record time; defaults to the last 30 days."
|
"summary": "Admin actions by operator and record time; defaults to the last 30 days."
|
||||||
|
|||||||
@@ -1,210 +1,215 @@
|
|||||||
{
|
{
|
||||||
"title": "प्रशासक",
|
|
||||||
"listTitle": "प्रशासक सूची",
|
|
||||||
"createAdmin": "प्रशासक सिर्जना",
|
|
||||||
"searchPlaceholder": "प्रयोगकर्ता नाम / उपनाम / इमेलबाट खोज्नुहोस्",
|
|
||||||
"loadFailed": "प्रशासक सूची लोड असफल भयो",
|
|
||||||
"nicknameRequired": "उपनाम लेख्नुहोस्",
|
|
||||||
"newPasswordMin": "नयाँ पासवर्ड कम्तीमा 8 वर्ण हुनुपर्छ",
|
|
||||||
"roleRequired": "कम्तीमा एउटा भूमिका छान्नुहोस्",
|
|
||||||
"usernameRequired": "लगइन प्रयोगकर्ता नाम लेख्नुहोस्",
|
|
||||||
"passwordMin": "पासवर्ड कम्तीमा 8 वर्ण हुनुपर्छ",
|
|
||||||
"createSuccess": "प्रशासक {{name}} सिर्जना भयो",
|
|
||||||
"updateSuccess": "{{name}} अपडेट भयो",
|
|
||||||
"saveAccountFailed": "खाता सुरक्षित गर्न असफल",
|
|
||||||
"deleteSuccess": "{{name}} मेटाइयो",
|
|
||||||
"deleteFailed": "मेटाउन असफल",
|
|
||||||
"roleLoadFailed": "भूमिका सूची लोड असफल भयो",
|
|
||||||
"roleListTitle": "भूमिका व्यवस्थापन",
|
|
||||||
"createRole": "भूमिका थप्नुहोस्",
|
|
||||||
"roleCreateSuccess": "भूमिका {{name}} सिर्जना भयो",
|
|
||||||
"roleUpdateSuccess": "भूमिका {{name}} अपडेट भयो",
|
|
||||||
"roleSaveFailed": "भूमिका सुरक्षित गर्न असफल",
|
|
||||||
"roleDeleteSuccess": "भूमिका {{name}} मेटाइयो",
|
|
||||||
"roleDeleteFailed": "भूमिका मेटाउन असफल",
|
|
||||||
"rolePermissionSaveSuccess": "भूमिका अनुमति अद्यावधिक भयो",
|
|
||||||
"rolePermissionSaveFailed": "भूमिका अनुमति सुरक्षित गर्न असफल",
|
|
||||||
"roleFormRequired": "भूमिका नाम र slug अनिवार्य छन्",
|
|
||||||
"allPermissions": "सबै अनुमति",
|
|
||||||
"saveRoleSuccess": "{{name}} को भूमिका अपडेट भयो",
|
|
||||||
"saveRoleFailed": "भूमिका सुरक्षित गर्न असफल",
|
|
||||||
"savePermissionSuccess": "{{name}} को अनुमति अपडेट भयो",
|
|
||||||
"savePermissionFailed": "अनुमति सुरक्षित गर्न असफल",
|
|
||||||
"modelGuide": "खाता तहमा भूमिका मात्र बाँधिन्छ; कार्य अनुमति भूमिका व्यवस्थापनमा मिलाउनुहोस्।",
|
|
||||||
"saving": "सेभ हुँदैछ…",
|
|
||||||
"deleting": "मेटिँदैछ…",
|
|
||||||
"common": {
|
|
||||||
"none": "कुनै छैन"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"account": "खाता",
|
|
||||||
"nickname": "उपनाम",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"roles": "भूमिका",
|
|
||||||
"effective": "प्रभावी",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"enabled": "सक्रिय",
|
|
||||||
"disabled": "निष्क्रिय"
|
|
||||||
},
|
|
||||||
"roleType": {
|
|
||||||
"system": "सिस्टम",
|
|
||||||
"custom": "अनुकूलित"
|
|
||||||
},
|
|
||||||
"actions": {
|
|
||||||
"permissions": "भूमिका तोक्नुहोस्",
|
|
||||||
"edit": "सम्पादन",
|
|
||||||
"delete": "मेटाउनुहोस्",
|
|
||||||
"cancel": "रद्द गर्नुहोस्",
|
|
||||||
"save": "सेभ गर्नुहोस्"
|
|
||||||
},
|
|
||||||
"roleTable": {
|
|
||||||
"name": "भूमिका",
|
|
||||||
"slug": "角色 कोड",
|
|
||||||
"type": "प्रकार",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"users": "सम्बन्धित प्रयोगकर्ता",
|
|
||||||
"permissions": "अनुमति संख्या",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
|
||||||
"roleActions": {
|
|
||||||
"permissions": "अनुमति"
|
|
||||||
},
|
|
||||||
"permissionLevels": {
|
|
||||||
"view": "हेर्नुहोस्",
|
|
||||||
"node_view": "नोड · हेर्नुहोस्",
|
|
||||||
"node_manage": "नोड · व्यवस्थापन",
|
|
||||||
"role_view": "भूमिका · हेर्नुहोस्",
|
|
||||||
"role_manage": "भूमिका · व्यवस्थापन",
|
|
||||||
"user_view": "खाता · हेर्नुहोस्",
|
|
||||||
"user_manage": "खाता · व्यवस्थापन",
|
|
||||||
"manage": "व्यवस्थापन",
|
|
||||||
"review": "समीक्षा",
|
|
||||||
"export": "निर्यात",
|
|
||||||
"control": "नियन्त्रण",
|
|
||||||
"config": "कन्फिगर",
|
|
||||||
"reopen": "पुनःखोल्ने",
|
|
||||||
"special": "विशेष"
|
|
||||||
},
|
|
||||||
"permissionDialog": {
|
|
||||||
"title": "भूमिका तोक्नुहोस्",
|
|
||||||
"rolesTitle": "भूमिका",
|
|
||||||
"rolesDescription": "यहाँ प्रशासकलाई भूमिका मात्र जोडिन्छ। विस्तृत अनुमति भूमिका व्यवस्थापनमा मिलाउनुहोस्।",
|
|
||||||
"rolePermissionCount": "{{count}} वटा कार्य अनुमति समावेश",
|
|
||||||
"selectedRoles": "हाल छनोट गरिएका भूमिका:",
|
|
||||||
"saveRoles": "भूमिका सेभ गर्नुहोस्"
|
|
||||||
},
|
|
||||||
"rolePermissionDialog": {
|
|
||||||
"title": "भूमिका अनुमति"
|
|
||||||
},
|
|
||||||
"roleDialog": {
|
|
||||||
"createTitle": "भूमिका थप्नुहोस्",
|
|
||||||
"editTitle": "भूमिका सम्पादन",
|
|
||||||
"description": "भूमिकाले ब्याकएन्ड कार्य अनुमति समेट्छ र पछि प्रशासक खातालाई बाँडिन्छ।",
|
|
||||||
"slug": "भूमिका कोड",
|
|
||||||
"slugPlaceholder": "भूमिका चिन्ह प्रविष्ट गर्नुहोस्, जस्तै super_admin",
|
|
||||||
"name": "भूमिका नाम",
|
|
||||||
"namePlaceholder": "भूमिका नाम प्रविष्ट गर्नुहोस्",
|
|
||||||
"descriptionLabel": "भूमिका विवरण",
|
|
||||||
"descriptionPlaceholder": "भूमिका विवरण प्रविष्ट गर्नुहोस्",
|
|
||||||
"status": "स्थिति"
|
|
||||||
},
|
|
||||||
"accountDialog": {
|
"accountDialog": {
|
||||||
"createTitle": "प्रशासक सिर्जना",
|
|
||||||
"editTitle": "खाता सम्पादन",
|
|
||||||
"createDescription": "कम्तीमा एउटा पूर्वनिर्धारित साइट भूमिका तोक्नुपर्छ। लगइन नाममा अक्षर, अंक, डट, अन्डरस्कोर र हाइफन मात्र प्रयोग गर्न सकिन्छ र सेभ भएपछि साना अक्षरमा राखिन्छ।",
|
"createDescription": "कम्तीमा एउटा पूर्वनिर्धारित साइट भूमिका तोक्नुपर्छ। लगइन नाममा अक्षर, अंक, डट, अन्डरस्कोर र हाइफन मात्र प्रयोग गर्न सकिन्छ र सेभ भएपछि साना अक्षरमा राखिन्छ।",
|
||||||
|
"createTitle": "प्रशासक सिर्जना",
|
||||||
"editDescription": "लगइन नाम परिवर्तन गर्न मिल्दैन। पासवर्ड खाली छोडेमा परिवर्तन हुँदैन।",
|
"editDescription": "लगइन नाम परिवर्तन गर्न मिल्दैन। पासवर्ड खाली छोडेमा परिवर्तन हुँदैन।",
|
||||||
"username": "लगइन नाम",
|
"editTitle": "खाता सम्पादन",
|
||||||
"usernamePlaceholder": "उदाहरण: ops_admin",
|
|
||||||
"nickname": "उपनाम",
|
|
||||||
"nicknamePlaceholder": "देखिने नाम",
|
|
||||||
"emailOptional": "इमेल (वैकल्पिक)",
|
"emailOptional": "इमेल (वैकल्पिक)",
|
||||||
"emailPlaceholder": "नचाहिए खाली छोड्नुहोस्",
|
"emailPlaceholder": "नचाहिए खाली छोड्नुहोस्",
|
||||||
|
"nickname": "उपनाम",
|
||||||
|
"nicknamePlaceholder": "देखिने नाम",
|
||||||
|
"noRoles": "अहिले भूमिका डाटा छैन। सूची लोड भएपछि फेरि प्रयास गर्नुहोस्।",
|
||||||
"password": "पासवर्ड",
|
"password": "पासवर्ड",
|
||||||
"passwordOptional": "पासवर्ड (वैकल्पिक)",
|
"passwordOptional": "पासवर्ड (वैकल्पिक)",
|
||||||
"passwordPlaceholderCreate": "कम्तीमा 8 वर्ण",
|
"passwordPlaceholderCreate": "कम्तीमा 8 वर्ण",
|
||||||
"passwordPlaceholderEdit": "परिवर्तन नगर्न खाली छोड्नुहोस्",
|
"passwordPlaceholderEdit": "परिवर्तन नगर्न खाली छोड्नुहोस्",
|
||||||
"rolesRequired": "भूमिका (पूर्वनिर्धारित साइट, कम्तीमा एक)",
|
|
||||||
"rolesDescription": "सिर्जना भएपछि \"भूमिका तोक्नुहोस्\" मा गएर भूमिका बाइन्डिङ थप समायोजन गर्न सकिन्छ।",
|
"rolesDescription": "सिर्जना भएपछि \"भूमिका तोक्नुहोस्\" मा गएर भूमिका बाइन्डिङ थप समायोजन गर्न सकिन्छ।",
|
||||||
"noRoles": "अहिले भूमिका डाटा छैन। सूची लोड भएपछि फेरि प्रयास गर्नुहोस्।"
|
"rolesRequired": "भूमिका (पूर्वनिर्धारित साइट, कम्तीमा एक)",
|
||||||
|
"site": "बाँधिएको साइट",
|
||||||
|
"sitePlaceholder": "यो खाताले पहुँच पाउने साइट छान्नुहोस्",
|
||||||
|
"username": "लगइन नाम",
|
||||||
|
"usernamePlaceholder": "उदाहरण: ops_admin"
|
||||||
},
|
},
|
||||||
|
"actions": {
|
||||||
|
"cancel": "रद्द गर्नुहोस्",
|
||||||
|
"delete": "मेटाउनुहोस्",
|
||||||
|
"edit": "सम्पादन",
|
||||||
|
"permissions": "भूमिका तोक्नुहोस्",
|
||||||
|
"save": "सेभ गर्नुहोस्"
|
||||||
|
},
|
||||||
|
"allPermissions": "सबै अनुमति",
|
||||||
|
"common": {
|
||||||
|
"none": "कुनै छैन"
|
||||||
|
},
|
||||||
|
"createAdmin": "प्रशासक सिर्जना",
|
||||||
|
"createRole": "भूमिका थप्नुहोस्",
|
||||||
|
"createSuccess": "प्रशासक {{name}} सिर्जना भयो",
|
||||||
"delete": {
|
"delete": {
|
||||||
"currentUserBlocked": "हाल लगइन गरिएको खाता मेटाउन मिल्दैन",
|
"confirmDescription": "प्रशासक {{name}} मेटाउने? यो कार्य फिर्ता लिन सकिँदैन।",
|
||||||
"rowActionTitle": "यो प्रशासक मेटाउनुहोस्",
|
|
||||||
"confirmTitle": "मेटाउने पुष्टि",
|
"confirmTitle": "मेटाउने पुष्टि",
|
||||||
"confirmDescription": "प्रशासक {{name}} मेटाउने? यो कार्य फिर्ता लिन सकिँदैन।"
|
"currentUserBlocked": "हाल लगइन गरिएको खाता मेटाउन मिल्दैन",
|
||||||
|
"rowActionTitle": "यो प्रशासक मेटाउनुहोस्"
|
||||||
},
|
},
|
||||||
"roleDelete": {
|
"deleteFailed": "मेटाउन असफल",
|
||||||
"confirmTitle": "भूमिका मेटाउने पुष्टि",
|
"deleteSuccess": "{{name}} मेटाइयो",
|
||||||
"confirmDescription": "भूमिका {{name}} मेटाउने?"
|
"deleting": "मेटिँदैछ…",
|
||||||
|
"listTitle": "प्रशासक सूची",
|
||||||
|
"loadFailed": "प्रशासक सूची लोड असफल भयो",
|
||||||
|
"modelGuide": "खाता तहमा भूमिका मात्र बाँधिन्छ; कार्य अनुमति भूमिका व्यवस्थापनमा मिलाउनुहोस्।",
|
||||||
|
"newPasswordMin": "नयाँ पासवर्ड कम्तीमा 8 वर्ण हुनुपर्छ",
|
||||||
|
"nicknameRequired": "उपनाम लेख्नुहोस्",
|
||||||
|
"passwordMin": "पासवर्ड कम्तीमा 8 वर्ण हुनुपर्छ",
|
||||||
|
"permissionDialog": {
|
||||||
|
"rolePermissionCount": "{{count}} वटा कार्य अनुमति समावेश",
|
||||||
|
"rolesDescription": "यहाँ प्रशासकलाई भूमिका मात्र जोडिन्छ। विस्तृत अनुमति भूमिका व्यवस्थापनमा मिलाउनुहोस्।",
|
||||||
|
"rolesTitle": "भूमिका",
|
||||||
|
"saveRoles": "भूमिका सेभ गर्नुहोस्",
|
||||||
|
"selectedRoles": "हाल छनोट गरिएका भूमिका:",
|
||||||
|
"site": "साइट",
|
||||||
|
"title": "भूमिका तोक्नुहोस्"
|
||||||
},
|
},
|
||||||
"permissionGroups": {
|
"permissionGroups": {
|
||||||
"all": "सबै अनुमति",
|
|
||||||
"dashboard": "ड्यासबोर्ड",
|
|
||||||
"admin_users": "प्रशासक सूची",
|
|
||||||
"admin_roles": "भूमिका व्यवस्थापन",
|
"admin_roles": "भूमिका व्यवस्थापन",
|
||||||
|
"admin_users": "प्रशासक सूची",
|
||||||
"agents": "एजेन्ट व्यवस्थापन",
|
"agents": "एजेन्ट व्यवस्थापन",
|
||||||
"players": "खेलाडी सूची",
|
"all": "सबै अनुमति",
|
||||||
"currencies": "मुद्रा व्यवस्थापन",
|
"audit": "अडिट लग",
|
||||||
"wallet": "वालेट",
|
|
||||||
"draws": "ड्रअ सूची",
|
|
||||||
"config": "कन्फिगरेसन",
|
"config": "कन्फिगरेसन",
|
||||||
"rules_plays": "प्ले नियम",
|
"currencies": "मुद्रा व्यवस्थापन",
|
||||||
"rules_odds": "ओड्स र रिबेट",
|
"dashboard": "ड्यासबोर्ड",
|
||||||
"risk_cap": "जोखिम सीमा नियम",
|
"draws": "ड्रअ सूची",
|
||||||
"risk": "जोखिम",
|
"integration": "इन्टिग्रेशन साइटहरू",
|
||||||
"settlement": "सेटलमेन्ट",
|
|
||||||
"jackpot": "ज्याकपोट",
|
"jackpot": "ज्याकपोट",
|
||||||
|
"players": "खेलाडी सूची",
|
||||||
"reconcile": "मिलान",
|
"reconcile": "मिलान",
|
||||||
"reports": "रिपोर्टहरू",
|
"reports": "रिपोर्टहरू",
|
||||||
"tickets": "टिकटहरू",
|
"risk": "जोखिम",
|
||||||
"audit": "अडिट लग",
|
"risk_cap": "जोखिम सीमा नियम",
|
||||||
|
"rules_odds": "ओड्स र रिबेट",
|
||||||
|
"rules_plays": "प्ले नियम",
|
||||||
"settings": "सेटिङ",
|
"settings": "सेटिङ",
|
||||||
"integration": "इन्टिग्रेशन साइटहरू"
|
"settlement": "सेटलमेन्ट",
|
||||||
|
"tickets": "टिकटहरू",
|
||||||
|
"wallet": "वालेट"
|
||||||
|
},
|
||||||
|
"permissionLevels": {
|
||||||
|
"config": "कन्फिगर",
|
||||||
|
"control": "नियन्त्रण",
|
||||||
|
"export": "निर्यात",
|
||||||
|
"manage": "व्यवस्थापन",
|
||||||
|
"node_manage": "नोड · व्यवस्थापन",
|
||||||
|
"node_view": "नोड · हेर्नुहोस्",
|
||||||
|
"reopen": "पुनःखोल्ने",
|
||||||
|
"review": "समीक्षा",
|
||||||
|
"role_manage": "भूमिका · व्यवस्थापन",
|
||||||
|
"role_view": "भूमिका · हेर्नुहोस्",
|
||||||
|
"special": "विशेष",
|
||||||
|
"user_manage": "खाता · व्यवस्थापन",
|
||||||
|
"user_view": "खाता · हेर्नुहोस्",
|
||||||
|
"view": "हेर्नुहोस्"
|
||||||
},
|
},
|
||||||
"permissionNames": {
|
"permissionNames": {
|
||||||
"prd.dashboard.view": "ड्यासबोर्ड · हेर्नुहोस्",
|
|
||||||
"prd.agent.view": "एजेन्ट व्यवस्थापन · हेर्नुहोस्",
|
|
||||||
"prd.agent.manage": "एजेन्ट व्यवस्थापन · व्यवस्थापन",
|
|
||||||
"prd.agent.role.view": "एजेन्ट भूमिका · हेर्नुहोस्",
|
|
||||||
"prd.agent.role.manage": "एजेन्ट भूमिका · व्यवस्थापन",
|
|
||||||
"prd.agent.user.view": "एजेन्ट खाता · हेर्नुहोस्",
|
|
||||||
"prd.agent.user.manage": "एजेन्ट खाता · व्यवस्थापन",
|
|
||||||
"prd.admin_user.manage": "प्रशासक सूची · व्यवस्थापन",
|
|
||||||
"prd.admin_role.manage": "भूमिका व्यवस्थापन · व्यवस्थापन",
|
"prd.admin_role.manage": "भूमिका व्यवस्थापन · व्यवस्थापन",
|
||||||
"prd.integration.view": "इन्टिग्रेशन साइट · हेर्नुहोस्",
|
"prd.admin_user.manage": "प्रशासक सूची · व्यवस्थापन",
|
||||||
"prd.integration.manage": "इन्टिग्रेशन साइट · व्यवस्थापन",
|
"prd.agent.manage": "एजेन्ट व्यवस्थापन · व्यवस्थापन",
|
||||||
"prd.users.manage": "खेलाडी व्यवस्थापन · व्यवस्थापन",
|
"prd.agent.role.manage": "एजेन्ट भूमिका · व्यवस्थापन",
|
||||||
|
"prd.agent.role.view": "एजेन्ट भूमिका · हेर्नुहोस्",
|
||||||
|
"prd.agent.user.manage": "एजेन्ट खाता · व्यवस्थापन",
|
||||||
|
"prd.agent.user.view": "एजेन्ट खाता · हेर्नुहोस्",
|
||||||
|
"prd.agent.view": "एजेन्ट व्यवस्थापन · हेर्नुहोस्",
|
||||||
|
"prd.audit.view": "अडिट लग · हेर्नुहोस्",
|
||||||
"prd.currency.manage": "मुद्रा व्यवस्थापन · व्यवस्थापन",
|
"prd.currency.manage": "मुद्रा व्यवस्थापन · व्यवस्थापन",
|
||||||
"prd.users.view_finance": "खेलाडी व्यवस्थापन · वित्त हेर्नुहोस्",
|
"prd.dashboard.view": "ड्यासबोर्ड · हेर्नुहोस्",
|
||||||
"prd.users.view_cs": "खेलाडी व्यवस्थापन · ग्राहक सेवा एकल प्रयोगकर्ता",
|
"prd.draw_reopen.manage": "ड्रअ पुनःखोल्ने · व्यवस्थापन",
|
||||||
"prd.player_freeze.manage": "खेलाडी रोक्ने/फुकाउने · व्यवस्थापन",
|
|
||||||
"prd.wallet_reconcile.manage": "वालेट मिलान · व्यवस्थापन",
|
|
||||||
"prd.wallet_reconcile.view": "वालेट मिलान · हेर्नुहोस्",
|
|
||||||
"prd.wallet_reconcile.view_cs": "वालेट मिलान · ग्राहक सेवा दृश्य",
|
|
||||||
"prd.wallet_adjust.manage": "समायोजन/रिभर्सल · व्यवस्थापन",
|
|
||||||
"prd.draw_result.manage": "ड्रअ परिणाम प्रविष्टि · व्यवस्थापन",
|
"prd.draw_result.manage": "ड्रअ परिणाम प्रविष्टि · व्यवस्थापन",
|
||||||
"prd.draw_result.view": "ड्रअ परिणाम · हेर्नुहोस्",
|
"prd.draw_result.view": "ड्रअ परिणाम · हेर्नुहोस्",
|
||||||
"prd.draw_reopen.manage": "ड्रअ पुनःखोल्ने · व्यवस्थापन",
|
"prd.integration.manage": "इन्टिग्रेशन साइट · व्यवस्थापन",
|
||||||
"prd.play_switch.manage": "प्ले स्विच · व्यवस्थापन",
|
"prd.integration.view": "इन्टिग्रेशन साइट · हेर्नुहोस्",
|
||||||
|
"prd.jackpot.manage": "ज्याकपोट कन्फिगरेसन · व्यवस्थापन",
|
||||||
|
"prd.jackpot.manual_burst": "ज्याकपोट म्यानुअल बर्स्ट · सुपर एडमिन मात्र",
|
||||||
|
"prd.jackpot.view": "ज्याकपोट कन्फिगरेसन · हेर्नुहोस्",
|
||||||
"prd.odds.manage": "ओड्स कन्फिगरेसन · व्यवस्थापन",
|
"prd.odds.manage": "ओड्स कन्फिगरेसन · व्यवस्थापन",
|
||||||
"prd.odds.view": "ओड्स कन्फिगरेसन · हेर्नुहोस्",
|
"prd.odds.view": "ओड्स कन्फिगरेसन · हेर्नुहोस्",
|
||||||
"prd.risk_cap.manage": "जोखिम सीमा · व्यवस्थापन",
|
|
||||||
"prd.risk_cap.view": "जोखिम सीमा · हेर्नुहोस्",
|
|
||||||
"prd.rebate.manage": "कमिसन/रिबेट · व्यवस्थापन",
|
|
||||||
"prd.rebate.view": "कमिसन/रिबेट · हेर्नुहोस्",
|
|
||||||
"prd.jackpot.manage": "ज्याकपोट कन्फिगरेसन · व्यवस्थापन",
|
|
||||||
"prd.jackpot.view": "ज्याकपोट कन्फिगरेसन · हेर्नुहोस्",
|
|
||||||
"prd.jackpot.manual_burst": "ज्याकपोट म्यानुअल बर्स्ट · सुपर एडमिन मात्र",
|
|
||||||
"prd.payout.manage": "भुक्तानी पुष्टि · व्यवस्थापन",
|
"prd.payout.manage": "भुक्तानी पुष्टि · व्यवस्थापन",
|
||||||
"prd.payout.review": "भुक्तानी पुष्टि · समीक्षा",
|
"prd.payout.review": "भुक्तानी पुष्टि · समीक्षा",
|
||||||
"prd.payout.view": "भुक्तानी पुष्टि · हेर्नुहोस्",
|
"prd.payout.view": "भुक्तानी पुष्टि · हेर्नुहोस्",
|
||||||
"prd.tickets.view": "खेलाडी टिकट · हेर्नुहोस्",
|
"prd.play_switch.manage": "प्ले स्विच · व्यवस्थापन",
|
||||||
"prd.audit.view": "अडिट लग · हेर्नुहोस्",
|
"prd.player_freeze.manage": "खेलाडी रोक्ने/फुकाउने · व्यवस्थापन",
|
||||||
"prd.report.view": "रिपोर्ट · हेर्नुहोस्",
|
"prd.rebate.manage": "कमिसन/रिबेट · व्यवस्थापन",
|
||||||
|
"prd.rebate.view": "कमिसन/रिबेट · हेर्नुहोस्",
|
||||||
"prd.report.export": "रिपोर्ट · निर्यात",
|
"prd.report.export": "रिपोर्ट · निर्यात",
|
||||||
|
"prd.report.view": "रिपोर्ट · हेर्नुहोस्",
|
||||||
|
"prd.risk.manage": "जोखिम केन्द्र · व्यवस्थापन",
|
||||||
"prd.risk.view": "जोखिम केन्द्र · हेर्नुहोस्",
|
"prd.risk.view": "जोखिम केन्द्र · हेर्नुहोस्",
|
||||||
"prd.risk.manage": "जोखिम केन्द्र · व्यवस्थापन"
|
"prd.risk_cap.manage": "जोखिम सीमा · व्यवस्थापन",
|
||||||
}
|
"prd.risk_cap.view": "जोखिम सीमा · हेर्नुहोस्",
|
||||||
|
"prd.tickets.view": "खेलाडी टिकट · हेर्नुहोस्",
|
||||||
|
"prd.users.manage": "खेलाडी व्यवस्थापन · व्यवस्थापन",
|
||||||
|
"prd.users.view_cs": "खेलाडी व्यवस्थापन · ग्राहक सेवा एकल प्रयोगकर्ता",
|
||||||
|
"prd.users.view_finance": "खेलाडी व्यवस्थापन · वित्त हेर्नुहोस्",
|
||||||
|
"prd.wallet_adjust.manage": "समायोजन/रिभर्सल · व्यवस्थापन",
|
||||||
|
"prd.wallet_reconcile.manage": "वालेट मिलान · व्यवस्थापन",
|
||||||
|
"prd.wallet_reconcile.view": "वालेट मिलान · हेर्नुहोस्",
|
||||||
|
"prd.wallet_reconcile.view_cs": "वालेट मिलान · ग्राहक सेवा दृश्य"
|
||||||
|
},
|
||||||
|
"roleActions": {
|
||||||
|
"permissions": "अनुमति"
|
||||||
|
},
|
||||||
|
"roleCreateSuccess": "भूमिका {{name}} सिर्जना भयो",
|
||||||
|
"roleDelete": {
|
||||||
|
"confirmDescription": "भूमिका {{name}} मेटाउने?",
|
||||||
|
"confirmTitle": "भूमिका मेटाउने पुष्टि"
|
||||||
|
},
|
||||||
|
"roleDeleteFailed": "भूमिका मेटाउन असफल",
|
||||||
|
"roleDeleteSuccess": "भूमिका {{name}} मेटाइयो",
|
||||||
|
"roleDialog": {
|
||||||
|
"createTitle": "भूमिका थप्नुहोस्",
|
||||||
|
"description": "भूमिकाले ब्याकएन्ड कार्य अनुमति समेट्छ र पछि प्रशासक खातालाई बाँडिन्छ।",
|
||||||
|
"descriptionLabel": "भूमिका विवरण",
|
||||||
|
"descriptionPlaceholder": "भूमिका विवरण प्रविष्ट गर्नुहोस्",
|
||||||
|
"editTitle": "भूमिका सम्पादन",
|
||||||
|
"name": "भूमिका नाम",
|
||||||
|
"namePlaceholder": "भूमिका नाम प्रविष्ट गर्नुहोस्",
|
||||||
|
"slug": "भूमिका कोड",
|
||||||
|
"slugPlaceholder": "भूमिका चिन्ह प्रविष्ट गर्नुहोस्, जस्तै super_admin",
|
||||||
|
"status": "स्थिति"
|
||||||
|
},
|
||||||
|
"roleFormRequired": "भूमिका नाम र slug अनिवार्य छन्",
|
||||||
|
"roleListTitle": "भूमिका व्यवस्थापन",
|
||||||
|
"roleLoadFailed": "भूमिका सूची लोड असफल भयो",
|
||||||
|
"rolePermissionDialog": {
|
||||||
|
"title": "भूमिका अनुमति"
|
||||||
|
},
|
||||||
|
"rolePermissionSaveFailed": "भूमिका अनुमति सुरक्षित गर्न असफल",
|
||||||
|
"rolePermissionSaveSuccess": "भूमिका अनुमति अद्यावधिक भयो",
|
||||||
|
"roleRequired": "कम्तीमा एउटा भूमिका छान्नुहोस्",
|
||||||
|
"roleSaveFailed": "भूमिका सुरक्षित गर्न असफल",
|
||||||
|
"roleTable": {
|
||||||
|
"actions": "कार्य",
|
||||||
|
"name": "भूमिका",
|
||||||
|
"permissions": "अनुमति संख्या",
|
||||||
|
"slug": "角色 कोड",
|
||||||
|
"status": "स्थिति",
|
||||||
|
"type": "प्रकार",
|
||||||
|
"users": "सम्बन्धित प्रयोगकर्ता"
|
||||||
|
},
|
||||||
|
"roleType": {
|
||||||
|
"custom": "अनुकूलित",
|
||||||
|
"system": "सिस्टम"
|
||||||
|
},
|
||||||
|
"roleUpdateSuccess": "भूमिका {{name}} अपडेट भयो",
|
||||||
|
"saveAccountFailed": "खाता सुरक्षित गर्न असफल",
|
||||||
|
"savePermissionFailed": "अनुमति सुरक्षित गर्न असफल",
|
||||||
|
"savePermissionSuccess": "{{name}} को अनुमति अपडेट भयो",
|
||||||
|
"saveRoleFailed": "भूमिका सुरक्षित गर्न असफल",
|
||||||
|
"saveRoleSuccess": "{{name}} को भूमिका अपडेट भयो",
|
||||||
|
"saving": "सेभ हुँदैछ…",
|
||||||
|
"searchPlaceholder": "प्रयोगकर्ता नाम / उपनाम / इमेलबाट खोज्नुहोस्",
|
||||||
|
"siteRequired": "साइट छान्नुहोस्",
|
||||||
|
"status": {
|
||||||
|
"disabled": "निष्क्रिय",
|
||||||
|
"enabled": "सक्रिय"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"account": "खाता",
|
||||||
|
"actions": "कार्य",
|
||||||
|
"effective": "प्रभावी",
|
||||||
|
"nickname": "उपनाम",
|
||||||
|
"roles": "भूमिका",
|
||||||
|
"sites": "बाँधिएका साइटहरू",
|
||||||
|
"status": "स्थिति"
|
||||||
|
},
|
||||||
|
"title": "प्रशासक",
|
||||||
|
"updateSuccess": "{{name}} अपडेट भयो",
|
||||||
|
"usernameRequired": "लगइन प्रयोगकर्ता नाम लेख्नुहोस्"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,177 +1,250 @@
|
|||||||
{
|
{
|
||||||
"title": "एजेन्ट लाइन",
|
|
||||||
"listTitle": "एजेन्ट सूची",
|
|
||||||
"sitesListHint": "कुञ्जी र कलब्याकको लागि",
|
|
||||||
"sitesListLink": "कन्फिग · साइट",
|
|
||||||
"subnav": {
|
|
||||||
"label": "एजेन्ट लाइन नेभ",
|
|
||||||
"noPermission": "अनुमति छैन",
|
|
||||||
"operations": "सञ्चालन",
|
|
||||||
"provision": "प्रथम-स्तर एजेन्ट सिर्जना",
|
|
||||||
"settlementBills": "एजेन्ट बिल"
|
|
||||||
},
|
|
||||||
"tabs": {
|
|
||||||
"subordinates": "अधीनस्थ व्यवस्थापन",
|
|
||||||
"accounts": "मुख्य खाता",
|
|
||||||
"players": "प्लेयर व्यवस्थापन",
|
|
||||||
"overview": "Overview",
|
|
||||||
"roles": "Roles",
|
|
||||||
"users": "Accounts",
|
|
||||||
"delegation": "Delegation ceiling"
|
|
||||||
},
|
|
||||||
"filterParent": "माथिल्लो एजेन्ट",
|
|
||||||
"filterParentAll": "सबै अधीनस्थ",
|
|
||||||
"listFlatHint": "सबै सञ्चालन एजेन्ट सूचीमा; अधीनस्थ थप्न पङ्क्ति मेनु प्रयोग गर्नुहोस्।",
|
|
||||||
"addChildNeedParent": "अधीनस्थ थप्न पहिले माथिल्लो एजेन्ट छान्नुहोस्",
|
"addChildNeedParent": "अधीनस्थ थप्न पहिले माथिल्लो एजेन्ट छान्नुहोस्",
|
||||||
"includeRoots": "रुट नोड समावेश गर्नुहोस्",
|
"bindAccountHint": "No login account is bound yet. Saving will create one.",
|
||||||
"includeRootsHint": "रुट नोडले साइट सिमाना जनाउँछ, त्यसैले सामान्यतया सञ्चालन एजेन्ट गणनामा समावेश हुँदैन।",
|
"bindAccountPasswordRequired": "This agent has no login account yet. Enter an initial password.",
|
||||||
"directoryStatus": {
|
"childrenCount": "प्रत्यक्ष अधीनस्थ",
|
||||||
"all": "सबै स्थिति",
|
"code": "Code",
|
||||||
"enabled": "सक्रिय मात्र",
|
"codeRequired": "Code and name are required",
|
||||||
"disabled": "निष्क्रिय मात्र"
|
|
||||||
},
|
|
||||||
"treeTitle": "Agent tree",
|
|
||||||
"detailTitle": "Node details",
|
|
||||||
"selectNode": "Select an agent node from the tree",
|
|
||||||
"loadFailed": "Failed to load agent tree",
|
|
||||||
"lineFilter": "प्रथम-स्तर एजेन्ट",
|
|
||||||
"createChild": "Add child agent",
|
"createChild": "Add child agent",
|
||||||
"viewDownline": "चाइल्ड एजेन्ट र खेलाडी हेर्नुहोस्",
|
"createSuccess": "Created agent {{name}}",
|
||||||
"downlineDialogTitle": "{{name}} — चाइल्ड एजेन्ट र खेलाडी",
|
"delegation": {
|
||||||
"downlineAgentsSection": "चाइल्ड एजेन्ट",
|
"canDelegate": "May delegate further",
|
||||||
"downlinePlayersSection": "प्रत्यक्ष खेलाडी",
|
"empty": "No actions available",
|
||||||
"downlineNoAgents": "कुनै चाइल्ड एजेन्ट छैन",
|
"hint": "Select actions this child agent may grant to subordinates.",
|
||||||
"editNode": "Edit node",
|
"permission": "Action",
|
||||||
"deleteNode": "Delete node",
|
"rootDenied": "Root nodes do not use delegation ceilings",
|
||||||
"deleteNodeConfirm": "This action cannot be undone. Make sure the node has no children, users, or roles.",
|
"save": "Save ceiling",
|
||||||
"deleteNodeBlockedHint": "पहिले चाइल्ड एजेन्ट, भूमिका र खाता हटाउनुहोस्",
|
"saveSuccess": "Delegation ceiling saved",
|
||||||
"deleteNodeBlockedPrefix": "अहिले मेटाउन मिल्दैन: ",
|
"title": "Delegation ceiling"
|
||||||
|
},
|
||||||
"deleteBlocked": {
|
"deleteBlocked": {
|
||||||
"children": "{{count}} वटा चाइल्ड एजेन्ट बाँकी",
|
"children": "{{count}} वटा चाइल्ड एजेन्ट बाँकी",
|
||||||
"roles": "{{count}} वटा भूमिका पहिले हटाउनुहोस्",
|
"roles": "{{count}} वटा भूमिका पहिले हटाउनुहोस्",
|
||||||
"users": "{{count}} वटा खाता बाँकी"
|
"users": "{{count}} वटा खाता बाँकी"
|
||||||
},
|
},
|
||||||
"code": "Code",
|
"deleteNode": "Delete node",
|
||||||
"name": "Name",
|
"deleteNodeBlockedHint": "पहिले चाइल्ड एजेन्ट, भूमिका र खाता हटाउनुहोस्",
|
||||||
"namePlaceholder": "एजेन्ट नाम प्रविष्ट गर्नुहोस्",
|
"deleteNodeBlockedPrefix": "अहिले मेटाउन मिल्दैन: ",
|
||||||
"depth": "Depth",
|
"deleteNodeConfirm": "This action cannot be undone. Make sure the node has no children, users, or roles.",
|
||||||
"path": "Path",
|
|
||||||
"status": "Status",
|
|
||||||
"isRoot": "Root",
|
|
||||||
"createSuccess": "Created agent {{name}}",
|
|
||||||
"updateSuccess": "Updated {{name}}",
|
|
||||||
"deleteSuccess": "Deleted agent {{name}}",
|
"deleteSuccess": "Deleted agent {{name}}",
|
||||||
"saveFailed": "Save failed",
|
"depth": "Depth",
|
||||||
"codeRequired": "Code and name are required",
|
"detailTitle": "Node details",
|
||||||
"nameRequired": "Agent name is required",
|
"directoryStatus": {
|
||||||
"usernameRequired": "Login name is required",
|
"all": "सबै स्थिति",
|
||||||
"passwordRequired": "Password is required",
|
"disabled": "निष्क्रिय मात्र",
|
||||||
"passwordMinLength": "Password must be at least 8 characters",
|
"enabled": "सक्रिय मात्र"
|
||||||
"bindAccountPasswordRequired": "This agent has no login account yet. Enter an initial password.",
|
|
||||||
"bindAccountHint": "No login account is bound yet. Saving will create one.",
|
|
||||||
"modelGuide": "एजेन्ट तहले डाटा स्कोप र delegation ceiling नियन्त्रण गर्छ; खाताको अनुमति भूमिका मार्फत बाँडिन्छ।",
|
|
||||||
"pageGuide": "यहाँ एजेन्ट ट्री, एजेन्ट भूमिका, एजेन्ट खाता र delegation ceiling व्यवस्थापन गरिन्छ। प्लेटफर्म खाता र प्लेटफर्म भूमिका अलग पृष्ठमा राखिन्छ।",
|
|
||||||
"summary": {
|
|
||||||
"currentSiteNodes": "हालको साइट नोड संख्या",
|
|
||||||
"currentSiteAgents": "हालको साइट सञ्चालन एजेन्ट",
|
|
||||||
"visibleList": "हालको सूची पंक्ति",
|
|
||||||
"visibleAgents": "हाल देखिने सञ्चालन एजेन्ट",
|
|
||||||
"globalNodes": "सबै साइट नोड कुल",
|
|
||||||
"globalAgents": "सबै साइट सञ्चालन एजेन्ट",
|
|
||||||
"enabledAgents": "सक्रिय सञ्चालन एजेन्ट",
|
|
||||||
"rootNodes": "रुट नोड संख्या"
|
|
||||||
},
|
|
||||||
"profile": {
|
|
||||||
"section": "शेयर र क्रेडिट",
|
|
||||||
"totalShareRate": "शेयर दर (%)",
|
|
||||||
"creditLimit": "क्रेडिट सीमा",
|
|
||||||
"rebateLimit": "रिबेट सीमा",
|
|
||||||
"defaultPlayerRebate": "प्लेयर पूर्वनिर्धारित रिबेट",
|
|
||||||
"settlementCycle": "सेटलमेन्ट चक्र",
|
|
||||||
"canGrantExtraRebate": "अतिरिक्त रिबेट अनुमति",
|
|
||||||
"canCreatePlayer": "प्लेयर सिर्जना अनुमति",
|
|
||||||
"canCreateChildAgent": "अधीनस्थ एजेन्ट सिर्जना अनुमति",
|
|
||||||
"cycleDaily": "दैनिक",
|
|
||||||
"cycleWeekly": "साप्ताहिक",
|
|
||||||
"cycleMonthly": "मासिक",
|
|
||||||
"loading": "Loading share and credit settings…",
|
|
||||||
"loadFailed": "Failed to load share and credit settings.",
|
|
||||||
"loadingBlocked": "Share and credit settings are still loading.",
|
|
||||||
"validation": {
|
|
||||||
"shareRange": "Share rate must be between 0 and 100",
|
|
||||||
"creditInvalid": "Credit limit cannot be negative",
|
|
||||||
"rebateLimitRange": "Rebate ceiling must be between 0 and 1",
|
|
||||||
"defaultRebateRange": "Default player rebate must be between 0 and 1",
|
|
||||||
"defaultExceedsLimit": "Default player rebate cannot exceed the rebate ceiling"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"settlementBills": {
|
|
||||||
"title": "एजेन्ट बिल",
|
|
||||||
"description": "अवधि बन्द पछि बनेका प्लेयर/एजेन्ट बिल",
|
|
||||||
"columns": {
|
|
||||||
"id": "ID",
|
|
||||||
"type": "प्रकार",
|
|
||||||
"net": "नेट",
|
|
||||||
"unpaid": "बाँकी",
|
|
||||||
"status": "स्थिति"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
"downlineAgentsSection": "चाइल्ड एजेन्ट",
|
||||||
|
"downlineDialogTitle": "{{name}} — चाइल्ड एजेन्ट र खेलाडी",
|
||||||
|
"downlineNoAgents": "कुनै चाइल्ड एजेन्ट छैन",
|
||||||
|
"downlinePlayersSection": "प्रत्यक्ष खेलाडी",
|
||||||
|
"editNode": "Edit node",
|
||||||
|
"filterParent": "माथिल्लो एजेन्ट",
|
||||||
|
"filterParentAll": "सबै अधीनस्थ",
|
||||||
|
"includeRoots": "रुट नोड समावेश गर्नुहोस्",
|
||||||
|
"includeRootsHint": "रुट नोडले साइट सिमाना जनाउँछ, त्यसैले सामान्यतया सञ्चालन एजेन्ट गणनामा समावेश हुँदैन।",
|
||||||
|
"isRoot": "Root",
|
||||||
|
"lineFilter": "प्रथम-स्तर एजेन्ट",
|
||||||
"lineProvision": {
|
"lineProvision": {
|
||||||
"title": "प्रथम-स्तर एजेन्ट सिर्जना",
|
|
||||||
"description": "एकै चरणमा प्रथम-स्तर एजेन्ट, खाता र लाइन सेटिङ। कोड पछि बदल्न मिल्दैन।",
|
|
||||||
"code": "एजेन्ट कोड",
|
"code": "एजेन्ट कोड",
|
||||||
|
"description": "एकै चरणमा प्रथम-स्तर एजेन्ट, खाता र लाइन सेटिङ। कोड पछि बदल्न मिल्दैन।",
|
||||||
|
"link": "प्रथम-स्तर एजेन्ट सिर्जना",
|
||||||
"name": "एजेन्ट नाम",
|
"name": "एजेन्ट नाम",
|
||||||
"username": "एडमिन लगइन",
|
|
||||||
"password": "प्रारम्भिक पासवर्ड",
|
"password": "प्रारम्भिक पासवर्ड",
|
||||||
"walletUrl": "वालेट API URL (वैकल्पिक)",
|
"secretsOnce": "कुञ्जी एक पटक मात्र देखाइन्छ",
|
||||||
"submit": "सिर्जना गर्नुहोस्",
|
"submit": "सिर्जना गर्नुहोस्",
|
||||||
"success": "प्रथम-स्तर एजेन्ट सिर्जना भयो",
|
"success": "प्रथम-स्तर एजेन्ट सिर्जना भयो",
|
||||||
"secretsOnce": "कुञ्जी एक पटक मात्र देखाइन्छ",
|
"title": "प्रथम-स्तर एजेन्ट सिर्जना",
|
||||||
"link": "प्रथम-स्तर एजेन्ट सिर्जना"
|
"username": "एडमिन लगइन",
|
||||||
|
"walletUrl": "वालेट API URL (वैकल्पिक)"
|
||||||
},
|
},
|
||||||
|
"lineUi": {
|
||||||
|
"agentCount": "यो समूहमा {{count}} एजेन्ट",
|
||||||
|
"allocatedCredit": "बाँडिएको",
|
||||||
|
"availableCredit": "उपलब्ध",
|
||||||
|
"currentSite": "साइट",
|
||||||
|
"directChildren": "प्रत्यक्ष अधीनस्थ {{count}}",
|
||||||
|
"downlineEmptyTitle": "अहिले प्रत्यक्ष अधीनस्थ छैन",
|
||||||
|
"editAccount": "खाता र स्थिति",
|
||||||
|
"kicker": "क्रेडिट शेयर · एजेन्ट ट्री",
|
||||||
|
"noDelegatedTabs": "यो एजेन्टले अधीनस्थ एजेन्ट वा खेलाडी सिर्जना गर्न सक्दैन; शेयर र क्रेडिट मात्र लागू हुन्छ।",
|
||||||
|
"overviewDownlineCard": "प्रत्यक्ष अधीनस्थ एजेन्ट हेर्नुहोस् र व्यवस्थापन गर्नुहोस्",
|
||||||
|
"overviewDownlineCount": "{{count}}",
|
||||||
|
"overviewPlayersHint": "प्रत्यक्ष खेलाडी र क्रेडिट स्थिति हेर्नुहोस्",
|
||||||
|
"overviewPlayersSummary": "खेलाडी व्यवस्थापन",
|
||||||
|
"profileFootnote": "रिबेट सीमा {{rebate}}% · पूर्वनिर्धारित {{defaultRebate}}%",
|
||||||
|
"saveProfile": "शेयर र क्रेडिट बचत",
|
||||||
|
"searchPlaceholder": "नाम वा लगइन खोज्नुहोस्",
|
||||||
|
"selectAgent": "शेयर र क्रेडिट हेर्न एजेन्ट छान्नुहोस्",
|
||||||
|
"selectAgentHint": "सेटलमेन्ट सीमा एजेन्ट ट्री अनुसार; शेयर, क्रेडिट र रिबेट प्रति नोड कन्फिग गरिन्छ।",
|
||||||
|
"shareRebateCap": "रिबेट सीमा {{rate}}%",
|
||||||
|
"tabDownline": "अधीनस्थ",
|
||||||
|
"tabOverview": "अवलोकन",
|
||||||
|
"tabPlayers": "खेलाडी",
|
||||||
|
"tabProfile": "शेयर र क्रेडिट",
|
||||||
|
"tabProfileReadOnly": "शेयर र क्रेडिट (पढ्न मात्र)",
|
||||||
|
"viewAll": "सबै हेर्नुहोस्"
|
||||||
|
},
|
||||||
|
"listFlatHint": "सबै सञ्चालन एजेन्ट सूचीमा; अधीनस्थ थप्न पङ्क्ति मेनु प्रयोग गर्नुहोस्।",
|
||||||
|
"listSearch": "नाम / कोड / लगइन खोज्नुहोस्",
|
||||||
|
"listTitle": "एजेन्ट सूची",
|
||||||
|
"loadFailed": "Failed to load agent tree",
|
||||||
|
"modelGuide": "एजेन्ट तहले डाटा स्कोप र delegation ceiling नियन्त्रण गर्छ; खाताको अनुमति भूमिका मार्फत बाँडिन्छ।",
|
||||||
|
"name": "Name",
|
||||||
|
"namePlaceholder": "एजेन्ट नाम प्रविष्ट गर्नुहोस्",
|
||||||
|
"nameRequired": "Agent name is required",
|
||||||
"noAccess": "एजेन्ट सञ्चालन अनुमति छैन। प्रशासकलाई सम्पर्क गर्नुहोस्।",
|
"noAccess": "एजेन्ट सञ्चालन अनुमति छैन। प्रशासकलाई सम्पर्क गर्नुहोस्।",
|
||||||
|
"pageGuide": "यहाँ एजेन्ट ट्री, एजेन्ट भूमिका, एजेन्ट खाता र delegation ceiling व्यवस्थापन गरिन्छ। प्लेटफर्म खाता र प्लेटफर्म भूमिका अलग पृष्ठमा राखिन्छ।",
|
||||||
|
"parentAgent": "माथिल्लो",
|
||||||
|
"passwordMinLength": "Password must be at least 8 characters",
|
||||||
|
"passwordOptionalHint": "परिवर्तन नगर्ने भए खाली छोड्नुहोस्, परिवर्तन गर्न ८-अक्षरको पासवर्ड प्रविष्ट गर्नुहोस्",
|
||||||
|
"passwordPlaceholder": "८-अक्षरको पासवर्ड प्रविष्ट गर्नुहोस्",
|
||||||
|
"passwordRequired": "Password is required",
|
||||||
|
"path": "Path",
|
||||||
"playersPanel": {
|
"playersPanel": {
|
||||||
"create": "प्लेयर सिर्जना",
|
|
||||||
"scopedTo": "प्रत्यक्ष प्लेयर: {{agent}}",
|
|
||||||
"allUnderSite": "हालको साइटका प्लेयर",
|
"allUnderSite": "हालको साइटका प्लेयर",
|
||||||
"filterHint": "माथिल्लो एजेन्ट अनुसार प्लेयर हेर्नुहोस्।"
|
"availableToGrant": "एजेन्टले दिन सक्ने: {{amount}}",
|
||||||
|
"create": "प्लेयर सिर्जना",
|
||||||
|
"createSuccessNative": "खेलाडी {{name}} सिर्जना भयो — लटरी /login प्रयोग गर्नुहोस्",
|
||||||
|
"creditLimit": "क्रेडिट सीमा",
|
||||||
|
"externalIdHint": "स्वतः सिर्जनाका लागि खाली राख्नुहोस्",
|
||||||
|
"externalIdOptional": "बाह्य ID (वैकल्पिक)",
|
||||||
|
"filterHint": "माथिल्लो एजेन्ट अनुसार प्लेयर हेर्नुहोस्।",
|
||||||
|
"initialPassword": "प्रारम्भिक पासवर्ड",
|
||||||
|
"loginRequired": "लगइन प्रयोगकर्ता नाम र प्रारम्भिक पासवर्ड प्रविष्ट गर्नुहोस्",
|
||||||
|
"loginUsername": "लगइन प्रयोगकर्ता नाम",
|
||||||
|
"rebateRate": "रिबेट दर (%)",
|
||||||
|
"rebateRateHint": "प्रतिशत लेख्नुहोस्, जस्तै 5 = 5%",
|
||||||
|
"riskTags": "जोखिम ट्याग",
|
||||||
|
"riskTagsPlaceholder": "अल्पविरामले छुट्याउनुहोस्",
|
||||||
|
"scopedTo": "प्रत्यक्ष प्लेयर: {{agent}}"
|
||||||
},
|
},
|
||||||
"delegation": {
|
"profile": {
|
||||||
"title": "Delegation ceiling",
|
"canCreateChildAgent": "अधीनस्थ एजेन्ट सिर्जना अनुमति",
|
||||||
"hint": "Select actions this child agent may grant to subordinates.",
|
"canCreatePlayer": "प्लेयर सिर्जना अनुमति",
|
||||||
"permission": "Action",
|
"canGrantExtraRebate": "अतिरिक्त रिबेट अनुमति",
|
||||||
"canDelegate": "May delegate further",
|
"creditLimit": "क्रेडिट सीमा",
|
||||||
"save": "Save ceiling",
|
"cycleDaily": "दैनिक",
|
||||||
"saveSuccess": "Delegation ceiling saved",
|
"cycleMonthly": "मासिक",
|
||||||
"empty": "No actions available",
|
"cycleWeekly": "साप्ताहिक",
|
||||||
"rootDenied": "Root nodes do not use delegation ceilings"
|
"defaultPlayerRebate": "प्लेयर पूर्वनिर्धारित रिबेट",
|
||||||
|
"loadFailed": "Failed to load share and credit settings.",
|
||||||
|
"loading": "Loading share and credit settings…",
|
||||||
|
"loadingBlocked": "Share and credit settings are still loading.",
|
||||||
|
"rebateLimit": "रिबेट सीमा",
|
||||||
|
"section": "शेयर र क्रेडिट",
|
||||||
|
"settlementCycle": "सेटलमेन्ट चक्र",
|
||||||
|
"totalShareRate": "शेयर दर (%)",
|
||||||
|
"validation": {
|
||||||
|
"creditBelowAllocated": "क्रेडिट सीमा बाँडिएको क्रेडिभन्दा कम हुन सक्दैन (न्यूनतम {{min}})",
|
||||||
|
"creditExceedsParentWithMax": "क्रेडिट सीमा {{max}} भन्दा बढी हुन सक्दैन",
|
||||||
|
"creditInvalid": "Credit limit cannot be negative",
|
||||||
|
"defaultExceedsLimit": "Default player rebate cannot exceed the rebate ceiling",
|
||||||
|
"defaultRebateRange": "Default player rebate must be between 0 and 1",
|
||||||
|
"rebateLimitRange": "Rebate ceiling must be between 0 and 1",
|
||||||
|
"shareRange": "Share rate must be between 0 and 100"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"roles": {
|
"roles": {
|
||||||
"title": "Agent roles",
|
|
||||||
"create": "Create role",
|
"create": "Create role",
|
||||||
"permissions": "Permissions",
|
|
||||||
"slug": "Slug",
|
|
||||||
"userCount": "Users",
|
|
||||||
"createSuccess": "Created role {{name}}",
|
"createSuccess": "Created role {{name}}",
|
||||||
"updateSuccess": "Updated role {{name}}",
|
|
||||||
"deleteSuccess": "Deleted role {{name}}",
|
"deleteSuccess": "Deleted role {{name}}",
|
||||||
"permissionSaveSuccess": "Permissions updated",
|
|
||||||
"readOnlyTemplate": "Read-only template",
|
|
||||||
"inUse": "{{count}} प्रयोगमा",
|
"inUse": "{{count}} प्रयोगमा",
|
||||||
"permissionSubsetHint": "Only permissions you hold can be assigned"
|
"permissionSaveSuccess": "Permissions updated",
|
||||||
|
"permissionSubsetHint": "Only permissions you hold can be assigned",
|
||||||
|
"permissions": "Permissions",
|
||||||
|
"readOnlyTemplate": "Read-only template",
|
||||||
|
"slug": "Slug",
|
||||||
|
"title": "Agent roles",
|
||||||
|
"updateSuccess": "Updated role {{name}}",
|
||||||
|
"userCount": "Users"
|
||||||
},
|
},
|
||||||
"users": {
|
"saveFailed": "Save failed",
|
||||||
"title": "Agent accounts",
|
"selectNode": "Select an agent node from the tree",
|
||||||
"create": "Create account",
|
"settlementBills": {
|
||||||
"username": "Username",
|
"allPeriods": "सबै अवधि",
|
||||||
"password": "Password",
|
"columns": {
|
||||||
|
"id": "ID",
|
||||||
|
"net": "नेट",
|
||||||
|
"period": "अवधि",
|
||||||
|
"status": "स्थिति",
|
||||||
|
"type": "प्रकार",
|
||||||
|
"unpaid": "बाँकी"
|
||||||
|
},
|
||||||
|
"description": "अवधि बन्द पछि बनेका प्लेयर/एजेन्ट बिल",
|
||||||
|
"emptyNoClosed": "बन्द अवधि छैन। बिल बन्द पछि सिर्जना हुन्छ।",
|
||||||
|
"emptyNoPeriodsAgent": "अहिले बिल छैन। तपाईंको माथिल्लो वा प्लेटफर्मले अवधि बन्द गर्छ; मिति प्रविष्ट गर्नु पर्दैन।",
|
||||||
|
"emptyNoPeriodsManage": "अहिले अवधि वा बिल छैन। अवधि व्यवस्थापनमा छिटो प्रिसेट प्रयोग गर्नुहोस्, त्यसपछि अवधि बन्द गर्नुहोस्।",
|
||||||
|
"filteredByPeriodRange": "{{range}} का बिलहरू",
|
||||||
|
"periodLabel": "अवधि",
|
||||||
|
"periodPlaceholder": "अवधि छान्नुहोस्",
|
||||||
|
"title": "एजेन्ट बिल",
|
||||||
|
"typeAgent": "एजेन्ट बिल",
|
||||||
|
"typePlayer": "खेलाडी बिल"
|
||||||
|
},
|
||||||
|
"settlementPeriods": {
|
||||||
|
"datesRequired": "सुरु र अन्त्य मिति प्रविष्ट गर्नुहोस्",
|
||||||
|
"endDate": "अन्त्य मिति",
|
||||||
|
"invalidRange": "अन्त्य मिति सुरु मितिभन्दा अगाडि हुन सक्दैन",
|
||||||
|
"manageHint": "यहाँ अवधि खोल्नुहोस् र बन्द गर्नुहोस्; माथिका बिल स्वतः अद्यावधिक हुन्छ। छिटो प्रिसेट सामान्यतया पर्याप्त।",
|
||||||
|
"manageTitle": "अवधि व्यवस्थापन",
|
||||||
|
"open": "अवधि खोल्नुहोस्",
|
||||||
|
"openFailed": "अवधि खोल्न असफल",
|
||||||
|
"openHint": "स्थानीय मिति ({{tz}})",
|
||||||
|
"presetLastWeek": "गत हप्ता",
|
||||||
|
"presetThisMonth": "यो महिना",
|
||||||
|
"presetThisWeek": "यो हप्ता",
|
||||||
|
"startDate": "सुरु मिति",
|
||||||
|
"statusClosed": "बन्द",
|
||||||
|
"statusOpen": "खुला"
|
||||||
|
},
|
||||||
|
"siteSearch": "साइट नाम खोज्नुहोस्",
|
||||||
|
"sitesListHint": "कुञ्जी र कलब्याकको लागि",
|
||||||
|
"sitesListLink": "कन्फिग · साइट",
|
||||||
|
"status": "Status",
|
||||||
|
"subnav": {
|
||||||
|
"label": "एजेन्ट लाइन नेभ",
|
||||||
|
"noPermission": "अनुमति छैन",
|
||||||
|
"operations": "सञ्चालन",
|
||||||
|
"provision": "प्रथम-स्तर एजेन्ट सिर्जना",
|
||||||
|
"provisionHint": "एक पटकको अनबोर्डिङ; दैनिक कामका लागि लाइन र एजेन्ट ट्री प्रयोग गर्नुहोस्",
|
||||||
|
"settlementBills": "एजेन्ट बिल"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"currentSiteAgents": "हालको साइट सञ्चालन एजेन्ट",
|
||||||
|
"currentSiteNodes": "हालको साइट नोड संख्या",
|
||||||
|
"enabledAgents": "सक्रिय सञ्चालन एजेन्ट",
|
||||||
|
"globalAgents": "सबै साइट सञ्चालन एजेन्ट",
|
||||||
|
"globalNodes": "सबै साइट नोड कुल",
|
||||||
|
"rootNodes": "रुट नोड संख्या",
|
||||||
|
"visibleAgents": "हाल देखिने सञ्चालन एजेन्ट",
|
||||||
|
"visibleList": "हालको सूची पंक्ति"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"accounts": "मुख्य खाता",
|
||||||
|
"delegation": "Delegation ceiling",
|
||||||
|
"overview": "Overview",
|
||||||
|
"players": "प्लेयर व्यवस्थापन",
|
||||||
"roles": "Roles",
|
"roles": "Roles",
|
||||||
"createSuccess": "Created account {{name}}",
|
"subordinates": "अधीनस्थ व्यवस्थापन",
|
||||||
"roleSaveSuccess": "Roles updated for {{name}}",
|
"users": "Accounts"
|
||||||
"deleteConfirm": "यो खाता अब लगइन गर्न सक्दैन।",
|
|
||||||
"deleteSuccess": "खाता {{name}} मेटियो"
|
|
||||||
},
|
},
|
||||||
|
"title": "एजेन्ट लाइन",
|
||||||
|
"treeTitle": "Agent tree",
|
||||||
|
"updateSuccess": "Updated {{name}}",
|
||||||
"usernamePlaceholder": "लगइन नाम प्रविष्ट गर्नुहोस्",
|
"usernamePlaceholder": "लगइन नाम प्रविष्ट गर्नुहोस्",
|
||||||
"passwordPlaceholder": "८-अक्षरको पासवर्ड प्रविष्ट गर्नुहोस्",
|
"usernameRequired": "Login name is required",
|
||||||
"passwordOptionalHint": "परिवर्तन नगर्ने भए खाली छोड्नुहोस्, परिवर्तन गर्न ८-अक्षरको पासवर्ड प्रविष्ट गर्नुहोस्"
|
"users": {
|
||||||
|
"create": "Create account",
|
||||||
|
"createSuccess": "Created account {{name}}",
|
||||||
|
"deleteConfirm": "यो खाता अब लगइन गर्न सक्दैन।",
|
||||||
|
"deleteSuccess": "खाता {{name}} मेटियो",
|
||||||
|
"email": "इमेल",
|
||||||
|
"password": "Password",
|
||||||
|
"roleSaveSuccess": "Roles updated for {{name}}",
|
||||||
|
"roles": "Roles",
|
||||||
|
"title": "Agent accounts",
|
||||||
|
"username": "Username"
|
||||||
|
},
|
||||||
|
"viewDownline": "चाइल्ड एजेन्ट र खेलाडी हेर्नुहोस्"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,186 +1,41 @@
|
|||||||
{
|
{
|
||||||
"language": {
|
|
||||||
"en": "English",
|
|
||||||
"ne": "नेपाली",
|
|
||||||
"zh": "中文",
|
|
||||||
"title": "इन्टरफेस भाषा",
|
|
||||||
"changed": "भाषा {{language}} मा परिवर्तन भयो"
|
|
||||||
},
|
|
||||||
"app": {
|
|
||||||
"title": "Lottery Admin"
|
|
||||||
},
|
|
||||||
"actions": {
|
|
||||||
"refresh": "रिफ्रेस",
|
|
||||||
"download": "डाउनलोड",
|
|
||||||
"search": "खोज",
|
|
||||||
"apply": "लागू गर्नुहोस्",
|
|
||||||
"reset": "रिसेट",
|
|
||||||
"loading": "लोड हुँदैछ...",
|
|
||||||
"submitting": "पेश हुँदैछ...",
|
|
||||||
"logout": "लगआउट",
|
|
||||||
"close": "बन्द गर्नुहोस्",
|
|
||||||
"viewAll": "सबै हेर्नुहोस्",
|
|
||||||
"viewDetails": "विवरण हेर्नुहोस्",
|
|
||||||
"reviewNow": "अहिले समीक्षा गर्नुहोस्",
|
|
||||||
"create": "सिर्जना गर्नुहोस्",
|
|
||||||
"createTask": "टास्क सिर्जना गर्नुहोस्",
|
|
||||||
"clear": "खाली गर्नुहोस्",
|
|
||||||
"done": "समाप्त",
|
|
||||||
"exportExcel": "Excel निर्यात",
|
|
||||||
"save": "परिवर्तन सुरक्षित गर्नुहोस्",
|
|
||||||
"updateSuccess": "सफलतापूर्वक अद्यावधिक भयो",
|
|
||||||
"updateFailed": "अद्यावधिक असफल भयो",
|
|
||||||
"updatePassword": "पासवर्ड अद्यावधिक गर्नुहोस्"
|
|
||||||
},
|
|
||||||
"accountSettings": "खाता सेटिङ",
|
"accountSettings": "खाता सेटिङ",
|
||||||
"accountSettingsDesc": "आफ्नो प्रोफाइल र सुरक्षा सेटिङ व्यवस्थापन गर्नुहोस्।",
|
"accountSettingsDesc": "आफ्नो प्रोफाइल र सुरक्षा सेटिङ व्यवस्थापन गर्नुहोस्।",
|
||||||
"profileSettings": "आधारभूत प्रोफाइल",
|
"actions": {
|
||||||
"profileSettingsDesc": "आफ्नो प्रदर्शन नाम अद्यावधिक गर्नुहोस्।",
|
"apply": "लागू गर्नुहोस्",
|
||||||
"securitySettings": "सुरक्षा सेटिङ",
|
"clear": "खाली गर्नुहोस्",
|
||||||
"securitySettingsDesc": "लगइन पासवर्ड परिवर्तन गर्नुहोस्। नपरिवर्तन गर्दा खाली छोड्नुहोस्।",
|
"close": "बन्द गर्नुहोस्",
|
||||||
"fields": {
|
"create": "सिर्जना गर्नुहोस्",
|
||||||
"nickname": "उपनाम",
|
"createTask": "टास्क सिर्जना गर्नुहोस्",
|
||||||
"newPassword": "नयाँ पासवर्ड",
|
"done": "समाप्त",
|
||||||
"confirmPassword": "पासवर्ड पुष्टि"
|
"download": "डाउनलोड",
|
||||||
},
|
"exportExcel": "Excel निर्यात",
|
||||||
"placeholders": {
|
"loading": "लोड हुँदैछ...",
|
||||||
"nickname": "उपनाम प्रविष्ट गर्नुहोस्",
|
"logout": "लगआउट",
|
||||||
"password": "नयाँ पासवर्ड प्रविष्ट गर्नुहोस्",
|
"refresh": "रिफ्रेस",
|
||||||
"confirmPassword": "पासवर्ड फेरि प्रविष्ट गर्नुहोस्"
|
"reset": "रिसेट",
|
||||||
},
|
"reviewNow": "अहिले समीक्षा गर्नुहोस्",
|
||||||
"validation": {
|
"save": "परिवर्तन सुरक्षित गर्नुहोस्",
|
||||||
"required": "{{field}} अनिवार्य छ",
|
"search": "खोज",
|
||||||
"passwordMismatch": "पासवर्ड मिलेन"
|
"submitting": "पेश हुँदैछ...",
|
||||||
},
|
"updateFailed": "अद्यावधिक असफल भयो",
|
||||||
"aria": {
|
"updatePassword": "पासवर्ड अद्यावधिक गर्नुहोस्",
|
||||||
"expand": "खोल्नुहोस्",
|
"updateSuccess": "सफलतापूर्वक अद्यावधिक भयो",
|
||||||
"collapse": "बन्द गर्नुहोस्",
|
"viewAll": "सबै हेर्नुहोस्",
|
||||||
"rowActionsMenu": "पङ्क्ति कार्य मेनु"
|
"viewDetails": "विवरण हेर्नुहोस्"
|
||||||
},
|
|
||||||
"export": {
|
|
||||||
"drawsList": { "filename": "draw-suchi", "sheetName": "Draw" },
|
|
||||||
"drawFinance": { "filename": "draw-arth-{{drawNo}}", "sheetName": "Draw finance" },
|
|
||||||
"adminRoles": { "filename": "bhumika-suchi", "sheetName": "Bhumika" },
|
|
||||||
"adminUsers": { "filename": "admin-prayogkarta", "sheetName": "Admin users" },
|
|
||||||
"players": { "filename": "khiladi-suchi", "sheetName": "Khiladi" },
|
|
||||||
"walletTransferOrders": { "filename": "transfer-ades", "sheetName": "Transfer" },
|
|
||||||
"walletTransactions": { "filename": "wallet-len-den", "sheetName": "Len-den" },
|
|
||||||
"playerWallets": { "filename": "khiladi-wallet", "sheetName": "Wallet" },
|
|
||||||
"tickets": { "filename": "ticket-suchi", "sheetName": "Ticket" },
|
|
||||||
"settlementBatches": { "filename": "settlement-batch", "sheetName": "Settlement" },
|
|
||||||
"jackpotPayouts": { "filename": "jackpot-bhugtan", "sheetName": "Bhugtan" },
|
|
||||||
"jackpotContributions": { "filename": "jackpot-yogdan", "sheetName": "Yogdan" },
|
|
||||||
"riskLockLogs": { "filename": "jokhim-lock", "sheetName": "Lock log" },
|
|
||||||
"riskPools": { "filename": "jokhim-pool", "sheetName": "Risk pool" },
|
|
||||||
"riskIndex": { "filename": "jokhim-draw", "sheetName": "Jokhim" },
|
|
||||||
"riskPoolDetail": { "filename": "pool-{{number}}", "sheetName": "Pool detail" },
|
|
||||||
"auditLogs": { "filename": "audit-log", "sheetName": "Audit" },
|
|
||||||
"currencies": { "filename": "mudra", "sheetName": "Mudra" }
|
|
||||||
},
|
|
||||||
"toast": {
|
|
||||||
"exportDone": "निर्यात भयो",
|
|
||||||
"exportFailed": "निर्यात असफल"
|
|
||||||
},
|
|
||||||
"datetime": {
|
|
||||||
"optionalHint": "खाली छोड्नुहोस् — सर्वर सेटिङबाट स्वचालित"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"placeholder": "मिति छान्नुहोस्",
|
|
||||||
"rangePlaceholder": "मिति दायरा छान्नुहोस्",
|
|
||||||
"rangeHint": "सुरु मिति छान्नुहोस्, त्यसपछि अन्त्य मिति। एउटै दिनका लागि सोही मितिमा दुई पटक क्लिक गर्नुहोस्। बन्द गर्न Done थिच्नुहोस्।",
|
|
||||||
"weekdays": {
|
|
||||||
"sunday": "आइतबार",
|
|
||||||
"monday": "सोमबार",
|
|
||||||
"tuesday": "मंगलबार",
|
|
||||||
"wednesday": "बुधबार",
|
|
||||||
"thursday": "बिहिबार",
|
|
||||||
"friday": "शुक्रबार",
|
|
||||||
"saturday": "शनिबार"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pagination": {
|
|
||||||
"perPage": "प्रति पृष्ठ",
|
|
||||||
"selectPlaceholder": "छान्नुहोस्",
|
|
||||||
"summary": "कुल {{total}}; पृष्ठ {{page}} / {{lastPage}}",
|
|
||||||
"previous": "अघिल्लो",
|
|
||||||
"next": "अर्को"
|
|
||||||
},
|
|
||||||
"states": {
|
|
||||||
"noResource": "स्रोत छैन",
|
|
||||||
"noData": "स्रोत छैन",
|
|
||||||
"loading": "लोड हुँदैछ…",
|
|
||||||
"comingSoon": "सुविधा विकासमा छ"
|
|
||||||
},
|
|
||||||
"errors": {
|
|
||||||
"loadFailed": "लोड असफल भयो"
|
|
||||||
},
|
|
||||||
"permission": {
|
|
||||||
"deniedTitle": "पहुँच अनुमति छैन",
|
|
||||||
"deniedDescription": "यो पृष्ठ खोल्ने अनुमति तपाईंको खातामा छैन। भूमिका व्यवस्थापनबाट आवश्यक अनुमति दिन प्रशासकलाई सम्पर्क गर्नुहोस्।"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"id": "ID",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
|
||||||
"playerColumns": {
|
|
||||||
"site": "साइट",
|
|
||||||
"display": "खेलाडी",
|
|
||||||
"sitePlayerId": "खेलाडी ID"
|
|
||||||
},
|
},
|
||||||
"agentColumns": {
|
"agentColumns": {
|
||||||
"agent": "एजेन्ट",
|
"agent": "एजेन्ट",
|
||||||
"filter": "एजेन्ट",
|
"filter": "एजेन्ट",
|
||||||
"filterAll": "सबै एजेन्ट"
|
"filterAll": "सबै एजेन्ट"
|
||||||
},
|
},
|
||||||
"toolbar": {
|
"app": {
|
||||||
"defaultAdmin": "प्रशासक",
|
"title": "Lottery Admin"
|
||||||
"notifications": "सूचना",
|
|
||||||
"notificationsComingSoon": "सूचना सुविधा विकासमा छ",
|
|
||||||
"accountSettings": "खाता सेटिङ",
|
|
||||||
"relatedDocs": "सम्बन्धित कागजात",
|
|
||||||
"loggedOut": "लगआउट भयो"
|
|
||||||
},
|
},
|
||||||
"docs": {
|
"aria": {
|
||||||
"learnMore": "पूर्ण मार्गदर्शन हेर्नुहोस्"
|
"collapse": "बन्द गर्नुहोस्",
|
||||||
},
|
"expand": "खोल्नुहोस्",
|
||||||
"nav": {
|
"rowActionsMenu": "पङ्क्ति कार्य मेनु"
|
||||||
"home": "गृह",
|
|
||||||
"dashboard": "ड्यासबोर्ड",
|
|
||||||
"admin_users": "प्रशासक सूची",
|
|
||||||
"admin_roles": "भूमिका व्यवस्थापन",
|
|
||||||
"players": "खेलाडी सूची",
|
|
||||||
"currencies": "मुद्रा व्यवस्थापन",
|
|
||||||
"wallet": "वालेट",
|
|
||||||
"reports": "रिपोर्ट",
|
|
||||||
"draws": "ड्रअहरू",
|
|
||||||
"rules_plays": "खेल नियम",
|
|
||||||
"rules_odds": "बाधा र रिबेट",
|
|
||||||
"rules": "खेल नियम",
|
|
||||||
"risk_cap": "जोखिम क्याप संस्करण",
|
|
||||||
"risk": "जोखिम केन्द्र",
|
|
||||||
"settlement": "सेटलमेन्ट",
|
|
||||||
"jackpot": "Jackpot",
|
|
||||||
"reconcile": "मिलान",
|
|
||||||
"tickets": "टिकट सूची",
|
|
||||||
"audit": "अडिट लग",
|
|
||||||
"settings": "सेटिङ",
|
|
||||||
"account": "खाता सेटिङ",
|
|
||||||
"integration": "मुख्य साइट एकीकरण",
|
|
||||||
"agents": "एजेन्ट लाइन",
|
|
||||||
"agent_list": "एजेन्ट सूची",
|
|
||||||
"settlement_center": "सेटलमेन्ट केन्द्र",
|
|
||||||
"config": "सञ्चालन कन्फिगरेसन"
|
|
||||||
},
|
|
||||||
"sidebar": {
|
|
||||||
"workspace": "कार्यस्थान",
|
|
||||||
"group": {
|
|
||||||
"overview": "सारांश",
|
|
||||||
"agent": "एजेन्ट संगठन",
|
|
||||||
"operations": "दैनिक सञ्चालन",
|
|
||||||
"finance": "वित्त र रिपोर्ट",
|
|
||||||
"rules": "नियम र प्यारामिटर",
|
|
||||||
"platform": "प्लेटफर्म"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"checking": "लगइन स्थिति जाँच हुँदैछ…",
|
"checking": "लगइन स्थिति जाँच हुँदैछ…",
|
||||||
@@ -191,5 +46,212 @@
|
|||||||
"cancel": "रद्द",
|
"cancel": "रद्द",
|
||||||
"confirm": "पुष्टि गर्नुहोस्",
|
"confirm": "पुष्टि गर्नुहोस्",
|
||||||
"confirmSave": "सुरक्षित गर्नुहोस्"
|
"confirmSave": "सुरक्षित गर्नुहोस्"
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"placeholder": "मिति छान्नुहोस्",
|
||||||
|
"rangeHint": "सुरु मिति छान्नुहोस्, त्यसपछि अन्त्य मिति। एउटै दिनका लागि सोही मितिमा दुई पटक क्लिक गर्नुहोस्। बन्द गर्न Done थिच्नुहोस्।",
|
||||||
|
"rangePlaceholder": "मिति दायरा छान्नुहोस्",
|
||||||
|
"weekdays": {
|
||||||
|
"friday": "शुक्रबार",
|
||||||
|
"monday": "सोमबार",
|
||||||
|
"saturday": "शनिबार",
|
||||||
|
"sunday": "आइतबार",
|
||||||
|
"thursday": "बिहिबार",
|
||||||
|
"tuesday": "मंगलबार",
|
||||||
|
"wednesday": "बुधबार"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datetime": {
|
||||||
|
"optionalHint": "खाली छोड्नुहोस् — सर्वर सेटिङबाट स्वचालित"
|
||||||
|
},
|
||||||
|
"docs": {
|
||||||
|
"learnMore": "पूर्ण मार्गदर्शन हेर्नुहोस्"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"loadFailed": "लोड असफल भयो"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"adminRoles": {
|
||||||
|
"filename": "bhumika-suchi",
|
||||||
|
"sheetName": "Bhumika"
|
||||||
|
},
|
||||||
|
"adminUsers": {
|
||||||
|
"filename": "admin-prayogkarta",
|
||||||
|
"sheetName": "Admin users"
|
||||||
|
},
|
||||||
|
"auditLogs": {
|
||||||
|
"filename": "audit-log",
|
||||||
|
"sheetName": "Audit"
|
||||||
|
},
|
||||||
|
"currencies": {
|
||||||
|
"filename": "mudra",
|
||||||
|
"sheetName": "Mudra"
|
||||||
|
},
|
||||||
|
"drawFinance": {
|
||||||
|
"filename": "draw-arth-{{drawNo}}",
|
||||||
|
"sheetName": "Draw finance"
|
||||||
|
},
|
||||||
|
"drawsList": {
|
||||||
|
"filename": "draw-suchi",
|
||||||
|
"sheetName": "Draw"
|
||||||
|
},
|
||||||
|
"jackpotContributions": {
|
||||||
|
"filename": "jackpot-yogdan",
|
||||||
|
"sheetName": "Yogdan"
|
||||||
|
},
|
||||||
|
"jackpotPayouts": {
|
||||||
|
"filename": "jackpot-bhugtan",
|
||||||
|
"sheetName": "Bhugtan"
|
||||||
|
},
|
||||||
|
"playerWallets": {
|
||||||
|
"filename": "khiladi-wallet",
|
||||||
|
"sheetName": "Wallet"
|
||||||
|
},
|
||||||
|
"players": {
|
||||||
|
"filename": "khiladi-suchi",
|
||||||
|
"sheetName": "Khiladi"
|
||||||
|
},
|
||||||
|
"riskIndex": {
|
||||||
|
"filename": "jokhim-draw",
|
||||||
|
"sheetName": "Jokhim"
|
||||||
|
},
|
||||||
|
"riskLockLogs": {
|
||||||
|
"filename": "jokhim-lock",
|
||||||
|
"sheetName": "Lock log"
|
||||||
|
},
|
||||||
|
"riskPoolDetail": {
|
||||||
|
"filename": "pool-{{number}}",
|
||||||
|
"sheetName": "Pool detail"
|
||||||
|
},
|
||||||
|
"riskPools": {
|
||||||
|
"filename": "jokhim-pool",
|
||||||
|
"sheetName": "Risk pool"
|
||||||
|
},
|
||||||
|
"settlementBatches": {
|
||||||
|
"filename": "settlement-batch",
|
||||||
|
"sheetName": "Settlement"
|
||||||
|
},
|
||||||
|
"ticketCombinations": {
|
||||||
|
"filename": "ticket-combinations",
|
||||||
|
"sheetName": "संयोजनहरू"
|
||||||
|
},
|
||||||
|
"tickets": {
|
||||||
|
"filename": "ticket-suchi",
|
||||||
|
"sheetName": "Ticket"
|
||||||
|
},
|
||||||
|
"walletTransactions": {
|
||||||
|
"filename": "wallet-len-den",
|
||||||
|
"sheetName": "Len-den"
|
||||||
|
},
|
||||||
|
"walletTransferOrders": {
|
||||||
|
"filename": "transfer-ades",
|
||||||
|
"sheetName": "Transfer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"confirmPassword": "पासवर्ड पुष्टि",
|
||||||
|
"newPassword": "नयाँ पासवर्ड",
|
||||||
|
"nickname": "उपनाम"
|
||||||
|
},
|
||||||
|
"integrationSites": {
|
||||||
|
"createSite": "एकीकरण साइट सिर्जना",
|
||||||
|
"emptyPlatformHint": "अहिले एकीकरण साइट छैन। एजेन्ट, खेलाडी वा सेटलमेन्ट व्यवस्थापन अघि साइट सिर्जना गर्नुहोस्।"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"changed": "भाषा {{language}} मा परिवर्तन भयो",
|
||||||
|
"en": "English",
|
||||||
|
"ne": "नेपाली",
|
||||||
|
"title": "इन्टरफेस भाषा",
|
||||||
|
"zh": "中文"
|
||||||
|
},
|
||||||
|
"nav": {
|
||||||
|
"account": "खाता सेटिङ",
|
||||||
|
"admin_roles": "भूमिका व्यवस्थापन",
|
||||||
|
"admin_users": "प्रशासक सूची",
|
||||||
|
"agent_list": "एजेन्ट सूची",
|
||||||
|
"agents": "एजेन्ट लाइन",
|
||||||
|
"audit": "अडिट लग",
|
||||||
|
"config": "सञ्चालन कन्फिगरेसन",
|
||||||
|
"currencies": "मुद्रा व्यवस्थापन",
|
||||||
|
"dashboard": "ड्यासबोर्ड",
|
||||||
|
"draws": "ड्रअहरू",
|
||||||
|
"home": "गृह",
|
||||||
|
"integration": "मुख्य साइट एकीकरण",
|
||||||
|
"jackpot": "Jackpot",
|
||||||
|
"players": "खेलाडी सूची",
|
||||||
|
"reconcile": "मिलान",
|
||||||
|
"reports": "रिपोर्ट",
|
||||||
|
"risk": "जोखिम केन्द्र",
|
||||||
|
"risk_cap": "जोखिम क्याप संस्करण",
|
||||||
|
"rules": "खेल नियम",
|
||||||
|
"rules_odds": "बाधा र रिबेट",
|
||||||
|
"rules_plays": "खेल नियम",
|
||||||
|
"settings": "सेटिङ",
|
||||||
|
"settlement": "सेटलमेन्ट",
|
||||||
|
"settlement_center": "सेटलमेन्ट केन्द्र",
|
||||||
|
"tickets": "टिकट सूची",
|
||||||
|
"wallet": "वालेट"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"next": "अर्को",
|
||||||
|
"perPage": "प्रति पृष्ठ",
|
||||||
|
"previous": "अघिल्लो",
|
||||||
|
"selectPlaceholder": "छान्नुहोस्",
|
||||||
|
"summary": "कुल {{total}}; पृष्ठ {{page}} / {{lastPage}}"
|
||||||
|
},
|
||||||
|
"permission": {
|
||||||
|
"deniedDescription": "यो पृष्ठ खोल्ने अनुमति तपाईंको खातामा छैन। भूमिका व्यवस्थापनबाट आवश्यक अनुमति दिन प्रशासकलाई सम्पर्क गर्नुहोस्।",
|
||||||
|
"deniedTitle": "पहुँच अनुमति छैन"
|
||||||
|
},
|
||||||
|
"placeholders": {
|
||||||
|
"confirmPassword": "पासवर्ड फेरि प्रविष्ट गर्नुहोस्",
|
||||||
|
"nickname": "उपनाम प्रविष्ट गर्नुहोस्",
|
||||||
|
"password": "नयाँ पासवर्ड प्रविष्ट गर्नुहोस्"
|
||||||
|
},
|
||||||
|
"playerColumns": {
|
||||||
|
"display": "खेलाडी",
|
||||||
|
"site": "साइट",
|
||||||
|
"sitePlayerId": "खेलाडी ID"
|
||||||
|
},
|
||||||
|
"profileSettings": "आधारभूत प्रोफाइल",
|
||||||
|
"profileSettingsDesc": "आफ्नो प्रदर्शन नाम अद्यावधिक गर्नुहोस्।",
|
||||||
|
"securitySettings": "सुरक्षा सेटिङ",
|
||||||
|
"securitySettingsDesc": "लगइन पासवर्ड परिवर्तन गर्नुहोस्। नपरिवर्तन गर्दा खाली छोड्नुहोस्।",
|
||||||
|
"sidebar": {
|
||||||
|
"group": {
|
||||||
|
"agent": "एजेन्ट संगठन",
|
||||||
|
"finance": "वित्त र रिपोर्ट",
|
||||||
|
"operations": "दैनिक सञ्चालन",
|
||||||
|
"overview": "सारांश",
|
||||||
|
"platform": "प्लेटफर्म",
|
||||||
|
"rules": "नियम र प्यारामिटर"
|
||||||
|
},
|
||||||
|
"workspace": "कार्यस्थान"
|
||||||
|
},
|
||||||
|
"states": {
|
||||||
|
"comingSoon": "सुविधा विकासमा छ",
|
||||||
|
"loading": "लोड हुँदैछ…",
|
||||||
|
"noData": "स्रोत छैन",
|
||||||
|
"noResource": "स्रोत छैन"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"actions": "कार्य",
|
||||||
|
"id": "ID"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"exportDone": "निर्यात भयो",
|
||||||
|
"exportFailed": "निर्यात असफल"
|
||||||
|
},
|
||||||
|
"toolbar": {
|
||||||
|
"accountSettings": "खाता सेटिङ",
|
||||||
|
"defaultAdmin": "प्रशासक",
|
||||||
|
"loggedOut": "लगआउट भयो",
|
||||||
|
"notifications": "सूचना",
|
||||||
|
"notificationsComingSoon": "सूचना सुविधा विकासमा छ",
|
||||||
|
"relatedDocs": "सम्बन्धित कागजात"
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"passwordMismatch": "पासवर्ड मिलेन",
|
||||||
|
"required": "{{field}} अनिवार्य छ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,622 +1,674 @@
|
|||||||
{
|
{
|
||||||
"title": "कन्फिगरेसन केन्द्र",
|
"currencies": {
|
||||||
"nav": {
|
"actions": {
|
||||||
"aria": "सञ्चालन कन्फिगरेसन उप-नेभिगेसन",
|
"backToSettings": "सेटिङमा फर्कनुहोस्",
|
||||||
"sidebarTitle": "सञ्चालन कन्फिगरेसन",
|
"create": "मुद्रा थप्नुहोस्",
|
||||||
"groups": {
|
"delete": "मेटाउनुहोस्",
|
||||||
"betting": "बेटिङ र प्रदर्शन",
|
"edit": "सम्पादन",
|
||||||
"risk": "जोखिम नियन्त्रण"
|
"openStandalone": "अलग पृष्ठ खोल्नुहोस्"
|
||||||
},
|
},
|
||||||
"items": {
|
"createFailed": "मुद्रा सिर्जना असफल भयो",
|
||||||
"plays": "खेल प्रकार र सीमा",
|
"createSuccess": "मुद्रा सिर्जना भयो",
|
||||||
"odds": "अड्स",
|
"deleteDialog": {
|
||||||
"rebate": "कमिसन / रिबेट",
|
"description": "मुद्रा {{code}} मेटाउने? यदि यो मुद्रा default, wallet, ticket, odds वा jackpot डाटामा प्रयोग भएको छ भने प्रणालीले मेटाउन दिँदैन।",
|
||||||
"jackpot": "Jackpot पूल",
|
"title": "मुद्रा मेटाउने पुष्टि"
|
||||||
"risk-cap": "पेमेन्ट क्याप"
|
|
||||||
},
|
},
|
||||||
"rulesPlaysTitle": "खेल नियम",
|
"deleteFailed": "मुद्रा मेटाउन असफल",
|
||||||
"rulesOddsTitle": "बाधा र रिबेट",
|
"deleteSuccess": "मुद्रा {{code}} मेटाइयो",
|
||||||
"rulesOddsDescription": "बाधा म्याट्रिक्स र रिबेट दर एउटै पृष्ठमा, एउटै बाधा संस्करण लाइनमा।",
|
"description": "एडमिन सञ्चालनका लागि मुद्रा master data राख्नुहोस् र मुद्रा सक्रिय वा बेटिङका लागि उपलब्ध छ कि छैन नियन्त्रण गर्नुहोस्।",
|
||||||
"rulesOddsDescriptionShort": "बायाँबाट खेल छान्नुहोस्, दायाँबाट बाधा र रिबेट सम्पादन गर्नुहोस्, त्यसपछि सेभ र प्रकाशन गर्नुहोस्।",
|
"dialog": {
|
||||||
"riskCapTitle": "जोखिम क्याप संस्करण"
|
"createTitle": "मुद्रा थप्नुहोस्",
|
||||||
|
"description": "मुद्रा कोड सिर्जना भएपछि परिवर्तन गर्न मिल्दैन। मुद्रा निष्क्रिय गर्दा bettable पनि स्वतः बन्द हुन्छ।",
|
||||||
|
"editTitle": "मुद्रा सम्पादन गर्नुहोस्"
|
||||||
|
},
|
||||||
|
"empty": "अहिलेसम्म मुद्रा छैन।",
|
||||||
|
"form": {
|
||||||
|
"bettable": "बेटिङ अनुमति",
|
||||||
|
"bettableHint": "सक्रिय मुद्रा मात्र bettable बनाउन सकिन्छ।",
|
||||||
|
"code": "मुद्रा कोड",
|
||||||
|
"codePlaceholder": "मुद्रा कोड प्रविष्ट गर्नुहोस्, जस्तै NPR",
|
||||||
|
"decimalInvalid": "मान्य दशमलव स्थान प्रविष्ट गर्नुहोस्",
|
||||||
|
"decimals": "दशमलव स्थान",
|
||||||
|
"decimalsPlaceholder": "दशमलव स्थान प्रविष्ट गर्नुहोस्, जस्तै 2",
|
||||||
|
"enabled": "सक्रिय स्थिति",
|
||||||
|
"enabledHint": "निष्क्रिय मुद्रा नयाँ व्यवसायमा प्रयोग गर्नु हुँदैन।",
|
||||||
|
"name": "मुद्रा नाम",
|
||||||
|
"namePlaceholder": "मुद्रा नाम प्रविष्ट गर्नुहोस्",
|
||||||
|
"required": "कृपया आवश्यक फिल्ड भर्नुहोस्"
|
||||||
|
},
|
||||||
|
"loadFailed": "मुद्रा सूची लोड गर्न असफल",
|
||||||
|
"loading": "मुद्रा सूची लोड हुँदैछ…",
|
||||||
|
"table": {
|
||||||
|
"actions": "कार्य",
|
||||||
|
"bettable": "बेटिङयोग्य",
|
||||||
|
"code": "कोड",
|
||||||
|
"decimals": "दशमलव स्थान",
|
||||||
|
"enabled": "सक्रिय",
|
||||||
|
"name": "नाम"
|
||||||
|
},
|
||||||
|
"title": "मुद्रा व्यवस्थापन",
|
||||||
|
"updateFailed": "मुद्रा अद्यावधिक गर्न असफल",
|
||||||
|
"updateSuccess": "मुद्रा अद्यावधिक भयो"
|
||||||
},
|
},
|
||||||
"hub": {
|
"hub": {
|
||||||
"title": "सञ्चालन कन्फिगरेसन अवलोकन",
|
|
||||||
"description": "खेल नियम, बाधा/रिबेट, Jackpot र क्याप क्षेत्रअनुसार खोल्नुहोस्। साइडबारबाट सिधा जान सकिन्छ; यो पृष्ठ सारांश हो।",
|
"description": "खेल नियम, बाधा/रिबेट, Jackpot र क्याप क्षेत्रअनुसार खोल्नुहोस्। साइडबारबाट सिधा जान सकिन्छ; यो पृष्ठ सारांश हो।",
|
||||||
"playsTitle": "खेल नियम",
|
|
||||||
"playsDesc": "खेल स्विच, सीमा र नियम पाठ",
|
|
||||||
"oddsTitle": "बाधा र रिबेट",
|
|
||||||
"oddsDesc": "बाधा म्याट्रिक्स र रिबेट, एउटै संस्करण",
|
|
||||||
"jackpotTitle": "Jackpot",
|
|
||||||
"jackpotDesc": "पूल प्यारामिटर र लेजर",
|
|
||||||
"riskCapTitle": "जोखिम क्याप",
|
|
||||||
"riskCapDesc": "नम्बर क्याप र ओगट उपस्थिति",
|
|
||||||
"integrationTitle": "मुख्य साइट एकीकरण",
|
|
||||||
"integrationDesc": "site_code, JWT गोप्य, पार्टनर वालेट URL र iframe श्वेतसूची",
|
"integrationDesc": "site_code, JWT गोप्य, पार्टनर वालेट URL र iframe श्वेतसूची",
|
||||||
|
"integrationGuideDesc": "ग्राहक प्राविधिक टोलीका लागि SSO र वालेट एकीकरण दस्तावेज, अनुक्रमणिका, उदाहरण र परीक्षण प्रवाह सहित",
|
||||||
"integrationGuideTitle": "ग्राहक एकीकरण दस्तावेज",
|
"integrationGuideTitle": "ग्राहक एकीकरण दस्तावेज",
|
||||||
"integrationGuideDesc": "ग्राहक प्राविधिक टोलीका लागि SSO र वालेट एकीकरण दस्तावेज, अनुक्रमणिका, उदाहरण र परीक्षण प्रवाह सहित"
|
"integrationTitle": "मुख्य साइट एकीकरण",
|
||||||
|
"jackpotDesc": "पूल प्यारामिटर र लेजर",
|
||||||
|
"jackpotTitle": "Jackpot",
|
||||||
|
"oddsDesc": "बाधा म्याट्रिक्स र रिबेट, एउटै संस्करण",
|
||||||
|
"oddsTitle": "बाधा र रिबेट",
|
||||||
|
"playsDesc": "खेल स्विच, सीमा र नियम पाठ",
|
||||||
|
"playsTitle": "खेल नियम",
|
||||||
|
"riskCapDesc": "नम्बर क्याप र ओगट उपस्थिति",
|
||||||
|
"riskCapTitle": "जोखिम क्याप",
|
||||||
|
"title": "सञ्चालन कन्फिगरेसन अवलोकन"
|
||||||
},
|
},
|
||||||
"integrationGuide": {
|
"integrationGuide": {
|
||||||
"title": "लटरी ग्राहक एकीकरण दस्तावेज"
|
"title": "लटरी ग्राहक एकीकरण दस्तावेज"
|
||||||
},
|
},
|
||||||
"integrationSites": {
|
"integrationSites": {
|
||||||
"title": "मुख्य साइट एकीकरण साइटहरू",
|
"adminAccountCreated": "साइट एडमिन खाता {{username}} सिर्जना भयो",
|
||||||
"description": "एडमिनमा पार्टनर एकीकरण सेटिङ मिलाउनुहोस्। site_code सिर्जना पछि परिवर्तन गर्न मिल्दैन।",
|
"adminAccountSectionDescription": "साइट सिर्जना गर्दा त्यस साइटसँग बाँधिएको एउटा एडमिन खाता पनि सिर्जना हुन्छ।",
|
||||||
"pageGuide": "वालेट ग्राहकलाई एकीकरण साइट र कुञ्जी चाहिन्छ; API कागजात हेर्नुहोस्।",
|
"adminAccountSectionTitle": "साइट एडमिन खाता",
|
||||||
"create": "नयाँ साइट",
|
|
||||||
"edit": "सम्पादन",
|
|
||||||
"save": "बचत",
|
|
||||||
"saving": "बचत हुँदैछ…",
|
|
||||||
"cancel": "रद्द",
|
"cancel": "रद्द",
|
||||||
"copy": "प्रतिलिपि",
|
"codeImmutable": "site_code सिर्जना पछि परिवर्तन गर्न मिल्दैन",
|
||||||
"loading": "लोड हुँदैछ…",
|
"columns": {
|
||||||
"empty": "कुनै एकीकरण साइट छैन",
|
"actions": "कार्य",
|
||||||
"loadFailed": "एकीकरण साइट लोड असफल",
|
"code": "site_code",
|
||||||
"saveFailed": "बचत असफल",
|
"name": "नाम",
|
||||||
"createSuccess": "साइट {{code}} सिर्जना भयो",
|
"status": "स्थिति",
|
||||||
"updateSuccess": "साइट {{code}} अद्यावधिक भयो",
|
"walletUrl": "वालेट API"
|
||||||
"connectivityTest": "जडान परीक्षण",
|
},
|
||||||
"connectivityTitle": "पार्टनर वालेट जडान परीक्षण",
|
|
||||||
"connectivityDescription": "परीक्षण खेलाडीबाट साइट {{code}} को balance API कल गर्नुहोस्।",
|
"connectivityDescription": "परीक्षण खेलाडीबाट साइट {{code}} को balance API कल गर्नुहोस्।",
|
||||||
|
"connectivityFailed": "जडान असफल",
|
||||||
"connectivityPlayerId": "परीक्षण site_player_id",
|
"connectivityPlayerId": "परीक्षण site_player_id",
|
||||||
"connectivityRun": "परीक्षण सुरु",
|
"connectivityRun": "परीक्षण सुरु",
|
||||||
"connectivityRunning": "परीक्षण हुँदैछ…",
|
"connectivityRunning": "परीक्षण हुँदैछ…",
|
||||||
"connectivitySuccess": "जडान सफल",
|
"connectivitySuccess": "जडान सफल",
|
||||||
"connectivityFailed": "जडान असफल",
|
"connectivityTest": "जडान परीक्षण",
|
||||||
|
"connectivityTitle": "पार्टनर वालेट जडान परीक्षण",
|
||||||
|
"copied": "{{field}} प्रतिलिपि भयो",
|
||||||
|
"copy": "प्रतिलिपि",
|
||||||
|
"copyFailed": "प्रतिलिपि असफल",
|
||||||
|
"create": "नयाँ साइट",
|
||||||
|
"createSuccess": "साइट {{code}} सिर्जना भयो",
|
||||||
|
"delete": "साइट मेटाउनुहोस्",
|
||||||
|
"deleteConfirm": "मेटाउनुहोस्",
|
||||||
|
"deleteConfirmDescription": "यसले साइट {{code}} ({{name}}), यसको एजेन्ट लाइन, सेटलमेन्ट अवधि, खेलाडी र साइट एडमिन खाता स्थायी रूपमा हटाउँछ। पूर्ववत गर्न मिल्दैन।",
|
||||||
|
"deleteConfirmTitle": "यो साइट मेटाउने?",
|
||||||
|
"deleteFailed": "साइट मेटाउन असफल",
|
||||||
|
"deleteSuccess": "साइट {{code}} मेटाइयो",
|
||||||
|
"deleting": "मेटाउँदै…",
|
||||||
|
"description": "एडमिनमा पार्टनर एकीकरण सेटिङ मिलाउनुहोस्। site_code सिर्जना पछि परिवर्तन गर्न मिल्दैन।",
|
||||||
|
"dialogCreateTitle": "नयाँ एकीकरण साइट",
|
||||||
|
"dialogDescription": "पार्टनरले अनुकूल URL नभएसम्म पूर्वनिर्धारित वालेट path प्रयोग गर्न सकिन्छ।",
|
||||||
|
"dialogEditTitle": "एकीकरण साइट सम्पादन",
|
||||||
|
"edit": "सम्पादन",
|
||||||
|
"empty": "कुनै एकीकरण साइट छैन",
|
||||||
|
"exportFailed": "निर्यात असफल",
|
||||||
"exportParams": "प्यारामिटर निर्यात",
|
"exportParams": "प्यारामिटर निर्यात",
|
||||||
"exportSuccess": "{{code}} को प्यारामिटर चिट्ठा निर्यात भयो",
|
"exportSuccess": "{{code}} को प्यारामिटर चिट्ठा निर्यात भयो",
|
||||||
"exportFailed": "निर्यात असफल",
|
|
||||||
"rotateSecrets": "गोप्य कुञ्जी पुनः सिर्जना",
|
|
||||||
"rotateSuccess": "साइट {{code}} का गोप्य कुञ्जी पुनः सिर्जना भयो",
|
|
||||||
"rotateFailed": "गोप्य कुञ्जी पुनः सिर्जना असफल",
|
|
||||||
"rotateConfirmTitle": "गोप्य कुञ्जी पुनः सिर्जना गर्ने?",
|
|
||||||
"rotateConfirmDescription": "साइट {{code}} का नयाँ SSO र वालेट कुञ्जी सिर्जना हुन्छ। पुराना कुञ्जी तुरुन्त अमान्य हुन्छन्।",
|
|
||||||
"rotateConfirm": "पुष्टि",
|
|
||||||
"secretsTitle": "गोप्य कुञ्जी अहिले नै सुरक्षित राख्नुहोस्",
|
|
||||||
"secretsDescription": "साइट {{code}} का गोप्य कुञ्जी एक पटक मात्र देखिन्छ।",
|
|
||||||
"secretsDismiss": "सुरक्षित गरिसके",
|
|
||||||
"copied": "{{field}} प्रतिलिपि भयो",
|
|
||||||
"copyFailed": "प्रतिलिपि असफल",
|
|
||||||
"noPermission": "एकीकरण साइट हेर्ने अनुमति छैन",
|
|
||||||
"codeImmutable": "site_code सिर्जना पछि परिवर्तन गर्न मिल्दैन",
|
|
||||||
"statusEnabled": "सक्रिय",
|
|
||||||
"statusDisabled": "निष्क्रिय",
|
|
||||||
"dialogCreateTitle": "नयाँ एकीकरण साइट",
|
|
||||||
"dialogEditTitle": "एकीकरण साइट सम्पादन",
|
|
||||||
"dialogDescription": "पार्टनरले अनुकूल URL नभएसम्म पूर्वनिर्धारित वालेट path प्रयोग गर्न सकिन्छ।",
|
|
||||||
"form": {
|
|
||||||
"required": "साइट नाम अनिवार्य छ",
|
|
||||||
"codeRequired": "site_code अनिवार्य छ"
|
|
||||||
},
|
|
||||||
"columns": {
|
|
||||||
"code": "site_code",
|
|
||||||
"name": "नाम",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"walletUrl": "वालेट API",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"adminEmail": "इमेल (वैकल्पिक)",
|
||||||
|
"adminNickname": "एडमिन उपनाम",
|
||||||
|
"adminPassword": "प्रारम्भिक पासवर्ड",
|
||||||
|
"adminUsername": "एडमिन प्रयोगकर्ता नाम",
|
||||||
"code": "site_code",
|
"code": "site_code",
|
||||||
"name": "साइट नाम",
|
|
||||||
"currency": "पूर्वनिर्धारित मुद्रा",
|
"currency": "पूर्वनिर्धारित मुद्रा",
|
||||||
"status": "स्थिति",
|
|
||||||
"walletApiUrl": "पार्टनर वालेट आधार URL",
|
|
||||||
"lotteryH5BaseUrl": "लटरी H5 आधार URL (वैकल्पिक)",
|
|
||||||
"iframeOrigins": "iframe श्वेतसूची (प्रति लाइन एक origin)",
|
"iframeOrigins": "iframe श्वेतसूची (प्रति लाइन एक origin)",
|
||||||
|
"lotteryH5BaseUrl": "लटरी H5 आधार URL (वैकल्पिक)",
|
||||||
|
"name": "साइट नाम",
|
||||||
"notes": "टिप्पणी",
|
"notes": "टिप्पणी",
|
||||||
"ssoSecret": "SSO गोप्य",
|
"ssoSecret": "SSO गोप्य",
|
||||||
"walletApiKey": "वालेट API कुञ्जी"
|
"status": "स्थिति",
|
||||||
},
|
"walletApiKey": "वालेट API कुञ्जी",
|
||||||
"placeholders": {
|
"walletApiUrl": "पार्टनर वालेट आधार URL"
|
||||||
"code": "साइट चिन्ह प्रविष्ट गर्नुहोस्, जस्तै partner-a",
|
|
||||||
"name": "साइट नाम प्रविष्ट गर्नुहोस्",
|
|
||||||
"currency": "मुद्रा कोड प्रविष्ट गर्नुहोस्, जस्तै NPR",
|
|
||||||
"walletApiUrl": "वालेट API ठेगाना प्रविष्ट गर्नुहोस्",
|
|
||||||
"lotteryH5BaseUrl": "H5 ठेगाना प्रविष्ट गर्नुहोस्",
|
|
||||||
"iframeOrigins": "अनुमत origin प्रविष्ट गर्नुहोस्, जस्तै https://www.example.com",
|
|
||||||
"notes": "टिप्पणी प्रविष्ट गर्नुहोस्",
|
|
||||||
"connectivityPlayerId": "खेलाडी ID प्रविष्ट गर्नुहोस्, जस्तै 10001"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"versionStatus": {
|
|
||||||
"active": "सक्रिय",
|
|
||||||
"draft": "ड्राफ्ट",
|
|
||||||
"archived": "अभिलेख"
|
|
||||||
},
|
|
||||||
"versionSwitcher": {
|
|
||||||
"sheetTitle": "कन्फिगरेसन संस्करण बदल्नुहोस्",
|
|
||||||
"sheetDescription": "यस पृष्ठमा हेर्न एउटा संस्करण छान्नुहोस्। ड्राफ्ट सम्पादनयोग्य छ; सक्रिय र अभिलेख संस्करण केवल पढ्न मिल्ने छन्।",
|
|
||||||
"loading": "लोड हुँदैछ…",
|
|
||||||
"noneSelected": "कुनै संस्करण छानिएको छैन",
|
|
||||||
"switch": "संस्करण बदल्नुहोस्",
|
|
||||||
"empty": "संस्करण रेकर्ड छैन।",
|
|
||||||
"count": "{{count}} वटा",
|
|
||||||
"effectiveAt": "लागू समय: {{value}}",
|
|
||||||
"note": "टिप्पणी: {{value}}",
|
|
||||||
"current": "हाल हेर्दै",
|
|
||||||
"moreActions": "v{{version}} थप कार्य",
|
|
||||||
"selected": "छानिएको",
|
|
||||||
"view": "हेर्नुहोस्",
|
|
||||||
"rollback": "रोलब्याक",
|
|
||||||
"delete": "मेटाउनुहोस्",
|
|
||||||
"deleteConfirmTitle": "यो संस्करण मेटाउने?",
|
|
||||||
"deleteConfirmDescription": "संस्करण ID {{id}} (version_no {{version}}) स्थायी रूपमा मेटाइनेछ। सक्रिय संस्करण मेटाउन मिल्दैन।"
|
|
||||||
},
|
|
||||||
"versionToolbar": {
|
|
||||||
"draftEditing": "ड्राफ्ट सम्पादन — सेभ र प्रकाशित गरेपछि लाइभ हुन्छ"
|
|
||||||
},
|
|
||||||
"versionActions": {
|
|
||||||
"publishCurrent": "प्रकाशित गर्नुहोस्",
|
|
||||||
"refreshing": "रिफ्रेस हुँदैछ",
|
|
||||||
"refresh": "संस्करण रिफ्रेस",
|
|
||||||
"newDraft": "नयाँ ड्राफ्ट",
|
|
||||||
"saveDraft": "ड्राफ्ट सेभ गर्नुहोस्",
|
|
||||||
"saveFailed": "कन्फिगरेसन सुरक्षित गर्न असफल",
|
|
||||||
"rollbackSuccess": "v{{fromVersion}} बाट नयाँ ड्राफ्ट v{{version}} क्लोन गरियो",
|
|
||||||
"rollbackFailed": "रोलब्याक असफल भयो",
|
|
||||||
"rollbackDialog": {
|
|
||||||
"title": "रोलब्याक पुष्टि गर्ने?",
|
|
||||||
"description": "संस्करण v{{version}} बाट नयाँ ड्राफ्ट क्लोन हुनेछ। सक्रिय संस्करण सिधै अधिलेखन हुँदैन।",
|
|
||||||
"confirm": "रोलब्याक पुष्टि"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallet": {
|
|
||||||
"title": "वालेट ट्रान्सफर सीमा सेटिङ",
|
|
||||||
"description": "रकम खेलको सानो मुद्रा एकाइमा हुन्छ (उदाहरण, NPR मा 100 = 1.00 NPR)। न्यूनतम रकम कम्तीमा 1 सानो एकाइ हुनुपर्छ।",
|
|
||||||
"loadFailed": "लोड असफल भयो",
|
|
||||||
"saveSuccess": "सफलतापूर्वक सेभ भयो",
|
|
||||||
"saveFailed": "सेभ असफल भयो",
|
|
||||||
"fields": {
|
|
||||||
"inMin": "न्यूनतम ट्रान्सफर-इन रकम",
|
|
||||||
"inMax": "अधिकतम ट्रान्सफर-इन रकम",
|
|
||||||
"outMin": "न्यूनतम ट्रान्सफर-आउट रकम",
|
|
||||||
"outMax": "अधिकतम ट्रान्सफर-आउट रकम"
|
|
||||||
},
|
|
||||||
"placeholders": {
|
|
||||||
"min": "उदाहरण: 1.00",
|
|
||||||
"max": "उदाहरण: 10000.00"
|
|
||||||
},
|
|
||||||
"hints": {
|
|
||||||
"inMin": "मुख्य वालेटबाट लटरी वालेटमा प्रति अर्डर न्यूनतम",
|
|
||||||
"inMax": "मुख्य वालेटबाट लटरी वालेटमा प्रति अर्डर अधिकतम",
|
|
||||||
"outMin": "लटरी वालेटबाट मुख्य वालेटमा प्रति अर्डर न्यूनतम",
|
|
||||||
"outMax": "लटरी वालेटबाट मुख्य वालेटमा प्रति अर्डर अधिकतम"
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"amountAtLeastMinorUnit": "{{field}} मान्य रकम हुनुपर्छ र कम्तीमा 0.01 हुनुपर्छ।",
|
|
||||||
"inRangeInvalid": "अधिकतम ट्रान्सफर-इन रकम न्यूनतम ट्रान्सफर-इन रकमभन्दा कम हुन सक्दैन।",
|
|
||||||
"outRangeInvalid": "अधिकतम ट्रान्सफर-आउट रकम न्यूनतम ट्रान्सफर-आउट रकमभन्दा कम हुन सक्दैन।"
|
|
||||||
},
|
|
||||||
"discard": "परिवर्तन त्याग्नुहोस्",
|
|
||||||
"confirmSaveTitle": "वालेट सीमा सुरक्षित गर्ने?",
|
|
||||||
"confirmSaveDescription": "ट्रान्सफर-इन/आउटको प्रति अर्डर सीमा अद्यावधिक हुन्छ र खेलाडीको वालेट ट्रान्सफरमा तुरुन्त असर पर्छ।"
|
|
||||||
},
|
|
||||||
"system": {
|
|
||||||
"title": "ड्रअ र सेटलमेन्ट रनटाइम सेटिङ",
|
|
||||||
"runtimeTitle": "ग्लोबल रनटाइम प्यारामिटर",
|
|
||||||
"runtimeIntro1": "यहाँ खेल प्रकार, अड्स वा जोखिम संस्करणमा नपर्ने ग्लोबल प्रणाली प्यारामिटर राखिन्छ। यसले वालेट ट्रान्सफर, कार्य स्विच र प्रणाली सञ्चालन नीतिमा सीधा असर गर्छ।",
|
|
||||||
"runtimeIntro2": "खेल प्रकार, अड्स, रिबेट र क्याप अझै पनि सञ्चालन कन्फिगरेसनमै रहन्छन्। प्रणाली सेटिङले मात्र क्रस-मोड्युल रनटाइम प्यारामिटर सम्हाल्छ ताकि प्रशासनिक जिम्मेवारी नदोहोरोस्।",
|
|
||||||
"description": "RNG ड्रअपछि समीक्षा प्रवाह, कूलडाउन अवधि र स्वचालित सेटलमेन्ट व्यवहार नियन्त्रण गर्छ। यी ग्लोबल रनटाइम नीति हुन् र संस्करणयुक्त सञ्चालन कन्फिगरेसनमा पर्दैनन्।",
|
|
||||||
"loadFailed": "प्रणाली सेटिङ लोड असफल भयो",
|
|
||||||
"saveSuccess": "प्रणाली सेटिङ सुरक्षित भयो",
|
|
||||||
"saveRuntimeSuccess": "ड्रअ र सेटलमेन्ट प्यारामिटर सुरक्षित भयो",
|
|
||||||
"saveFrontendSuccess": "फ्रन्ट-एन्ड प्रदर्शन सेटिङ सुरक्षित भयो",
|
|
||||||
"saveFailed": "प्रणाली सेटिङ सुरक्षित गर्न असफल",
|
|
||||||
"unsavedChanges": "नसुरक्षित परिवर्तन छ",
|
|
||||||
"frontendConfig": "फ्रन्ट-एन्ड कन्फिग",
|
|
||||||
"fields": {
|
|
||||||
"manualReview": "ड्रअ परिणामका लागि म्यानुअल समीक्षा चाहिने",
|
|
||||||
"cooldownMinutes": "कूलडाउन अवधि (मिनेट)",
|
|
||||||
"defaultCurrency": "पूर्वनिर्धारित मुद्रा कोड",
|
|
||||||
"drawIntervalMinutes": "ड्रअ अन्तराल (मिनेट)",
|
|
||||||
"drawBettingWindowSeconds": "बेटिङ विन्डो (सेकेन्ड)",
|
|
||||||
"drawCloseBeforeDrawSeconds": "ड्रअ अघि बन्द (सेकेन्ड)",
|
|
||||||
"drawBufferDrawsAhead": "अग्रिम सिर्जना गरिने ड्रअ संख्या",
|
|
||||||
"currencyDisplayDecimals": "प्रदर्शन दशमलव स्थान",
|
|
||||||
"currencyDecimalSeparator": "दशमलव विभाजक",
|
|
||||||
"currencyThousandsSeparator": "हजार विभाजक",
|
|
||||||
"autoSettlement": "सेटलमेन्ट स्वतः चलाउने",
|
|
||||||
"autoApprove": "सेटलमेन्ट ब्याच स्वतः स्वीकृत",
|
|
||||||
"autoPayout": "जित रकम स्वतः वालेटमा जम्मा",
|
|
||||||
"applyRebateToPayout": "जितेको टिकटको पेआउटमा पुनः रिबेट घटाउने",
|
|
||||||
"playRulesHtml": "खेल नियम HTML (बहुभाषी)",
|
|
||||||
"playRulesHtmlDesc": "खेलाडीको नियम पृष्ठमा भाषा अनुसार HTML देखिन्छ। खाली छोड्दा अर्को भाषा वा पूर्वनिर्धारित खाली सूचना देखिन्छ।"
|
|
||||||
},
|
|
||||||
"placeholders": {
|
|
||||||
"defaultCurrency": "पूर्वनिर्धारित मुद्रा कोड प्रविष्ट गर्नुहोस्, जस्तै NPR",
|
|
||||||
"drawIntervalMinutes": "ड्रअ अन्तराल मिनेट प्रविष्ट गर्नुहोस्",
|
|
||||||
"drawBettingWindowSeconds": "बेटिङ विन्डो सेकेन्ड प्रविष्ट गर्नुहोस्",
|
|
||||||
"drawCloseBeforeDrawSeconds": "ड्रअ अघि बन्द हुने सेकेन्ड प्रविष्ट गर्नुहोस्",
|
|
||||||
"drawBufferDrawsAhead": "अग्रिम सिर्जना गरिने ड्रअ संख्या प्रविष्ट गर्नुहोस्",
|
|
||||||
"cooldownMinutes": "कूलडाउन मिनेट प्रविष्ट गर्नुहोस्",
|
|
||||||
"currencyDisplayDecimals": "प्रदर्शन दशमलव स्थान प्रविष्ट गर्नुहोस्, जस्तै 2",
|
|
||||||
"currencyDecimalSeparator": "दशमलव विभाजक प्रविष्ट गर्नुहोस्, जस्तै .",
|
|
||||||
"currencyThousandsSeparator": "हजार विभाजक प्रविष्ट गर्नुहोस्, जस्तै ,"
|
|
||||||
},
|
|
||||||
"hints": {
|
|
||||||
"manualReview": "सक्रिय हुँदा RNG ड्रअ परिणाम pending review मा जान्छ र एडमिनबाट म्यानुअल रूपमा प्रकाशित गर्नुपर्छ।",
|
|
||||||
"cooldownMinutes": "प्रकाशनपछि settling मा जानुअघि कति समय पर्खने। 0 राखे तुरुन्त सेटलमेन्ट सुरु हुन्छ।",
|
|
||||||
"autoSettlement": "बन्द हुँदा tick ले सेटलमेन्ट स्वतः चलाउँदैन र एडमिनले म्यानुअल रूपमा ट्रिगर गर्नुपर्छ।",
|
|
||||||
"autoApprove": "कूलडाउन सकिएर सेटलमेन्ट पूरा भएपछि ब्याच स्वतः अनुमोदित हुने हो कि होइन।",
|
|
||||||
"autoPayout": "ब्याच अनुमोदित भएपछि tick ले जित रकम खेलाडीको वालेटमा स्वतः जम्मा गर्ने हो कि होइन।",
|
|
||||||
"applyRebateToPayout": "सक्रिय हुँदा पेआउट = gross win × (1 - rebate_rate_snapshot)। पूर्वनिर्धारित बन्द (रिबेट actual deduct मा पहिले नै समायोजित)।"
|
|
||||||
},
|
|
||||||
"states": {
|
|
||||||
"enabled": "सक्रिय",
|
|
||||||
"disabled": "बन्द"
|
|
||||||
},
|
|
||||||
"discard": "परिवर्तन त्याग्नुहोस्",
|
|
||||||
"confirmSaveTitle": "प्रणाली रनटाइम प्यारामिटर सुरक्षित गर्ने?",
|
|
||||||
"confirmSaveDescription": "ड्रअ समीक्षा, कूलडाउन, स्वचालित सेटलमेन्ट/अनुमोदन/पेआउट र खेल नियम प्रदर्शन अद्यावधिक हुन्छ। साइटव्यापी सञ्चालनमा असर पर्न सक्छ।",
|
|
||||||
"confirmSaveRuntimeTitle": "ड्रअ र सेटलमेन्ट प्यारामिटर सुरक्षित गर्ने?",
|
|
||||||
"confirmSaveRuntimeDescription": "ड्रअ समीक्षा, तालिका, कूलडाउन, स्वचालित सेटलमेन्ट/अनुमोदन/पेआउट अद्यावधिक हुन्छ। खेल नियम HTML परिवर्तन हुँदैन।",
|
|
||||||
"confirmSaveFrontendTitle": "फ्रन्ट-एन्ड प्रदर्शन सेटिङ सुरक्षित गर्ने?",
|
|
||||||
"confirmSaveFrontendDescription": "खेलाडी साइटको खेल नियम HTML अद्यावधिक हुन्छ। ड्रअ र सेटलमेन्ट तर्क परिवर्तन हुँदैन।"
|
|
||||||
},
|
|
||||||
"currencies": {
|
|
||||||
"title": "मुद्रा व्यवस्थापन",
|
|
||||||
"description": "एडमिन सञ्चालनका लागि मुद्रा master data राख्नुहोस् र मुद्रा सक्रिय वा बेटिङका लागि उपलब्ध छ कि छैन नियन्त्रण गर्नुहोस्।",
|
|
||||||
"loading": "मुद्रा सूची लोड हुँदैछ…",
|
|
||||||
"empty": "अहिलेसम्म मुद्रा छैन।",
|
|
||||||
"loadFailed": "मुद्रा सूची लोड गर्न असफल",
|
|
||||||
"createSuccess": "मुद्रा सिर्जना भयो",
|
|
||||||
"createFailed": "मुद्रा सिर्जना असफल भयो",
|
|
||||||
"updateSuccess": "मुद्रा अद्यावधिक भयो",
|
|
||||||
"updateFailed": "मुद्रा अद्यावधिक गर्न असफल",
|
|
||||||
"deleteSuccess": "मुद्रा {{code}} मेटाइयो",
|
|
||||||
"deleteFailed": "मुद्रा मेटाउन असफल",
|
|
||||||
"actions": {
|
|
||||||
"create": "मुद्रा थप्नुहोस्",
|
|
||||||
"edit": "सम्पादन",
|
|
||||||
"delete": "मेटाउनुहोस्",
|
|
||||||
"openStandalone": "अलग पृष्ठ खोल्नुहोस्",
|
|
||||||
"backToSettings": "सेटिङमा फर्कनुहोस्"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"code": "कोड",
|
|
||||||
"name": "नाम",
|
|
||||||
"decimals": "दशमलव स्थान",
|
|
||||||
"enabled": "सक्रिय",
|
|
||||||
"bettable": "बेटिङयोग्य",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
|
||||||
"dialog": {
|
|
||||||
"createTitle": "मुद्रा थप्नुहोस्",
|
|
||||||
"editTitle": "मुद्रा सम्पादन गर्नुहोस्",
|
|
||||||
"description": "मुद्रा कोड सिर्जना भएपछि परिवर्तन गर्न मिल्दैन। मुद्रा निष्क्रिय गर्दा bettable पनि स्वतः बन्द हुन्छ।"
|
|
||||||
},
|
|
||||||
"deleteDialog": {
|
|
||||||
"title": "मुद्रा मेटाउने पुष्टि",
|
|
||||||
"description": "मुद्रा {{code}} मेटाउने? यदि यो मुद्रा default, wallet, ticket, odds वा jackpot डाटामा प्रयोग भएको छ भने प्रणालीले मेटाउन दिँदैन।"
|
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"code": "मुद्रा कोड",
|
"adminNicknameRequired": "साइट एडमिन उपनाम आवश्यक",
|
||||||
"name": "मुद्रा नाम",
|
"adminPasswordRequired": "प्रारम्भिक साइट एडमिन पासवर्ड कम्तीमा ८ अक्षर",
|
||||||
"decimals": "दशमलव स्थान",
|
"adminUsernameRequired": "साइट एडमिन प्रयोगकर्ता नाम आवश्यक",
|
||||||
"codePlaceholder": "मुद्रा कोड प्रविष्ट गर्नुहोस्, जस्तै NPR",
|
"codeRequired": "site_code अनिवार्य छ",
|
||||||
"namePlaceholder": "मुद्रा नाम प्रविष्ट गर्नुहोस्",
|
"required": "साइट नाम अनिवार्य छ"
|
||||||
"decimalsPlaceholder": "दशमलव स्थान प्रविष्ट गर्नुहोस्, जस्तै 2",
|
|
||||||
"enabled": "सक्रिय स्थिति",
|
|
||||||
"enabledHint": "निष्क्रिय मुद्रा नयाँ व्यवसायमा प्रयोग गर्नु हुँदैन।",
|
|
||||||
"bettable": "बेटिङ अनुमति",
|
|
||||||
"bettableHint": "सक्रिय मुद्रा मात्र bettable बनाउन सकिन्छ।",
|
|
||||||
"required": "कृपया आवश्यक फिल्ड भर्नुहोस्",
|
|
||||||
"decimalInvalid": "मान्य दशमलव स्थान प्रविष्ट गर्नुहोस्"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"play": {
|
|
||||||
"batchGroups": {
|
|
||||||
"d2": "2D ग्लोबल",
|
|
||||||
"d3": "3D ग्लोबल",
|
|
||||||
"d4": "4D ग्लोबल",
|
|
||||||
"big-small": "Big / Small",
|
|
||||||
"position": "स्थिति खेलहरू",
|
|
||||||
"box": "बक्स खेलहरू",
|
|
||||||
"jackpot": "Jackpot"
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"minMaxInvalid": "{{playCode}}: न्यूनतम बेट अधिकतम बेटभन्दा ठूलो हुन सक्दैन",
|
|
||||||
"displayNameRequired": "प्रदर्शित नाम अनिवार्य छ"
|
|
||||||
},
|
|
||||||
"publishFailed": "प्रकाशन असफल भयो",
|
|
||||||
"publishDialog": {
|
|
||||||
"title": "खेल कन्फिग प्रकाशित गर्ने?",
|
|
||||||
"description": "नयाँ सेटिङले आगामी बेटहरूमा असर गर्छ। पुराना टिकटहरू आफ्नो snapshot अनुसार नै सेटल हुन्छन्।",
|
|
||||||
"confirm": "प्रकाशन पुष्टि गर्नुहोस्"
|
|
||||||
},
|
|
||||||
"batchSwitchConfirmTitle": "समूह {{action}} पुष्टि गर्ने?",
|
|
||||||
"batchSwitchConfirmDescription": "«{{group}}» अन्तर्गत {{count}} खेल प्रकार {{action}} गरी हालको ड्राफ्टमा लेखिनेछ।",
|
|
||||||
"batchSwitchEnable": "सक्रिय",
|
|
||||||
"batchSwitchDisable": "निष्क्रिय",
|
|
||||||
"toggleConfirmTitle": "खेल {{playCode}} {{action}} गर्ने?",
|
|
||||||
"toggleConfirmDescription": "यो हालको ड्राफ्ट मात्र अपडेट गर्छ। सेभ र प्रकाशित गरेपछि खेलाडीलाई देखिन्छ।",
|
|
||||||
"batchPartialEnabled": "{{enabledCount}}/{{total}} सक्रिय (सबै खुला छैन — अन गर्दा सबै सक्रिय हुन्छ)",
|
|
||||||
"toggleEnable": "सक्रिय",
|
|
||||||
"toggleDisable": "निष्क्रिय",
|
|
||||||
"toggleInstantFailed": "खेल स्विच तुरुन्त लागू गर्न असफल। पछि पुनः प्रयास गर्नुहोस्।",
|
|
||||||
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
|
||||||
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
|
||||||
"ruleSavedLocal": "नियम पाठ स्थानीय ड्राफ्टमा सुरक्षित भयो। स्थायी बनाउन ड्राफ्ट सेभ गर्नुहोस्।",
|
|
||||||
"deleteFailed": "मेटाउन असफल",
|
|
||||||
"activeVersion": "हाल सक्रिय संस्करण v{{version}}",
|
|
||||||
"readOnlyHint": "सीमा र नियमहरू केवल पढ्न मिल्ने छन्। पहिले ड्राफ्ट बनाउनुहोस्।",
|
|
||||||
"batchSwitchesTitle": "समूह स्विचहरू",
|
|
||||||
"batchSwitchesDesc": "यसले हालको ड्राफ्ट मात्र अपडेट गर्छ। सेभ र प्रकाशित गरेपछि खेलाडीको बेटिङ तालिका रिफ्रेस हुन्छ।",
|
|
||||||
"readOnlyDraftHint": "हालको संस्करण केवल पढ्न मिल्ने छ। पहिले ड्राफ्ट बनाउनुहोस्।",
|
|
||||||
"batchEnabledCount": "{{enabledCount}}/{{total}} सक्रिय",
|
|
||||||
"noPlayTypes": "खेल प्रकार छैन",
|
|
||||||
"actions": {
|
|
||||||
"enable": "सक्रिय",
|
|
||||||
"disable": "निष्क्रिय",
|
|
||||||
"ruleText": "नियम पाठ",
|
|
||||||
"editDisplayName": "नाम सम्पादन"
|
|
||||||
},
|
|
||||||
"locales": {
|
|
||||||
"zh": "चिनियाँ",
|
|
||||||
"en": "English",
|
|
||||||
"ne": "नेपाली"
|
|
||||||
},
|
|
||||||
"categories": {
|
|
||||||
"standard": "मानक",
|
|
||||||
"attribute": "विशेषता",
|
|
||||||
"position": "स्थिति",
|
|
||||||
"box": "बक्स",
|
|
||||||
"jackpot": "ज्याकपोट"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"playCode": "खेल कोड",
|
|
||||||
"category": "श्रेणी",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"displayName": "प्रदर्शित नाम",
|
|
||||||
"order": "क्रम",
|
|
||||||
"minBet": "न्यूनतम बेट",
|
|
||||||
"maxBet": "अधिकतम बेट",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
},
|
||||||
|
"loadFailed": "एकीकरण साइट लोड असफल",
|
||||||
|
"loading": "लोड हुँदैछ…",
|
||||||
|
"noPermission": "एकीकरण साइट हेर्ने अनुमति छैन",
|
||||||
|
"pageGuide": "वालेट ग्राहकलाई एकीकरण साइट र कुञ्जी चाहिन्छ; API कागजात हेर्नुहोस्।",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"displayOrder": "क्रम",
|
"adminEmail": "इमेल लेख्नुहोस्",
|
||||||
"minBetAmount": "न्यूनतम रकम",
|
"adminNickname": "खाता उपनाम लेख्नुहोस्",
|
||||||
"maxBetAmount": "अधिकतम रकम"
|
"adminPassword": "कम्तीमा ८ अक्षर",
|
||||||
|
"adminUsername": "एडमिन प्रयोगकर्ता नाम लेख्नुहोस्",
|
||||||
|
"code": "साइट चिन्ह प्रविष्ट गर्नुहोस्, जस्तै partner-a",
|
||||||
|
"connectivityPlayerId": "खेलाडी ID प्रविष्ट गर्नुहोस्, जस्तै 10001",
|
||||||
|
"currency": "मुद्रा कोड प्रविष्ट गर्नुहोस्, जस्तै NPR",
|
||||||
|
"iframeOrigins": "अनुमत origin प्रविष्ट गर्नुहोस्, जस्तै https://www.example.com",
|
||||||
|
"lotteryH5BaseUrl": "H5 ठेगाना प्रविष्ट गर्नुहोस्",
|
||||||
|
"name": "साइट नाम प्रविष्ट गर्नुहोस्",
|
||||||
|
"notes": "टिप्पणी प्रविष्ट गर्नुहोस्",
|
||||||
|
"walletApiUrl": "वालेट API ठेगाना प्रविष्ट गर्नुहोस्"
|
||||||
},
|
},
|
||||||
"states": {
|
"rotateConfirm": "पुष्टि",
|
||||||
"enabled": "सक्रिय",
|
"rotateConfirmDescription": "साइट {{code}} का नयाँ SSO र वालेट कुञ्जी सिर्जना हुन्छ। पुराना कुञ्जी तुरुन्त अमान्य हुन्छन्।",
|
||||||
"disabled": "बन्द",
|
"rotateConfirmTitle": "गोप्य कुञ्जी पुनः सिर्जना गर्ने?",
|
||||||
"readOnly": "केवल पढ्न मिल्ने"
|
"rotateFailed": "गोप्य कुञ्जी पुनः सिर्जना असफल",
|
||||||
|
"rotateSecrets": "गोप्य कुञ्जी पुनः सिर्जना",
|
||||||
|
"rotateSuccess": "साइट {{code}} का गोप्य कुञ्जी पुनः सिर्जना भयो",
|
||||||
|
"save": "बचत",
|
||||||
|
"saveFailed": "बचत असफल",
|
||||||
|
"saving": "बचत हुँदैछ…",
|
||||||
|
"secretsDescription": "साइट {{code}} का गोप्य कुञ्जी एक पटक मात्र देखिन्छ।",
|
||||||
|
"secretsDismiss": "सुरक्षित गरिसके",
|
||||||
|
"secretsTitle": "गोप्य कुञ्जी अहिले नै सुरक्षित राख्नुहोस्",
|
||||||
|
"statusDisabled": "निष्क्रिय",
|
||||||
|
"statusEnabled": "सक्रिय",
|
||||||
|
"title": "मुख्य साइट एकीकरण साइटहरू",
|
||||||
|
"updateSuccess": "साइट {{code}} अद्यावधिक भयो"
|
||||||
},
|
},
|
||||||
"aria": {
|
"nav": {
|
||||||
"enablePlay": "{{playCode}} सक्रिय गर्ने",
|
"aria": "सञ्चालन कन्फिगरेसन उप-नेभिगेसन",
|
||||||
"batchGroupSwitch": "«{{group}}» समूह स्विच टगल गर्नुहोस्"
|
"groups": {
|
||||||
|
"betting": "बेटिङ र प्रदर्शन",
|
||||||
|
"risk": "जोखिम नियन्त्रण"
|
||||||
},
|
},
|
||||||
"nameDialog": {
|
"items": {
|
||||||
"title": "प्रदर्शित नाम (बहुभाषी)",
|
"jackpot": "Jackpot पूल",
|
||||||
"description": "खेल {{playCode}}। चिनियाँ अनिवार्य; अंग्रेजी र नेपाली वैकल्पिक। प्रकाशनपछि खेलाडीको भाषा अनुसार देखिन्छ।",
|
"odds": "अड्स",
|
||||||
"apply": "ड्राफ्टमा लागू गर्नुहोस्",
|
"plays": "खेल प्रकार र सीमा",
|
||||||
"savedLocal": "प्रदर्शित नाम स्थानीय ड्राफ्टमा सुरक्षित भयो। स्थायी बनाउन ड्राफ्ट सेभ गर्नुहोस्।"
|
"rebate": "कमिसन / रिबेट",
|
||||||
|
"risk-cap": "पेमेन्ट क्याप"
|
||||||
},
|
},
|
||||||
"ruleDialog": {
|
"riskCapTitle": "जोखिम क्याप संस्करण",
|
||||||
"title": "नियम पाठ (बहुभाषी)",
|
"rulesOddsDescription": "बाधा म्याट्रिक्स र रिबेट दर एउटै पृष्ठमा, एउटै बाधा संस्करण लाइनमा।",
|
||||||
"description": "खेल {{playCode}}। परिवर्तनहरू सेभ र प्रकाशित नगरेसम्म ड्राफ्टमै रहन्छन्।",
|
"rulesOddsDescriptionShort": "बायाँबाट खेल छान्नुहोस्, दायाँबाट बाधा र रिबेट सम्पादन गर्नुहोस्, त्यसपछि सेभ र प्रकाशन गर्नुहोस्।",
|
||||||
"apply": "ड्राफ्टमा लागू गर्नुहोस्"
|
"rulesOddsTitle": "बाधा र रिबेट",
|
||||||
}
|
"rulesPlaysTitle": "खेल नियम",
|
||||||
},
|
"sidebarTitle": "सञ्चालन कन्फिगरेसन"
|
||||||
"prizeScopes": {
|
|
||||||
"first": "पहिलो पुरस्कार बाधा",
|
|
||||||
"second": "दोस्रो पुरस्कार बाधा",
|
|
||||||
"third": "तेस्रो पुरस्कार बाधा",
|
|
||||||
"starter": "स्टार्टर पुरस्कार बाधा",
|
|
||||||
"consolation": "सान्त्वना पुरस्कार बाधा"
|
|
||||||
},
|
},
|
||||||
"odds": {
|
"odds": {
|
||||||
"sectionHint": "संस्करण छानेर पुरस्कार-स्तर बाधा सम्पादन गर्नुहोस्; प्रकाशनपछि नयाँ टिकटमा लागू हुन्छ।",
|
|
||||||
"sections": {
|
|
||||||
"playScope": "खेल दायरा",
|
|
||||||
"oddsConfig": "बाधा सेटिङ"
|
|
||||||
},
|
|
||||||
"currentSelection": "हालको छनोट: {{category}} / {{play}}",
|
|
||||||
"playSelectPlaceholder": "खेल प्रकार छान्नुहोस्",
|
|
||||||
"readOnlyBanner": "यो संस्करण पढ्न मात्र हो। बाधा र रिबेट सम्पादन गर्न ड्राफ्ट बनाउनुहोस्।",
|
|
||||||
"table": {
|
|
||||||
"prizeScope": "पुरस्कार दायरा",
|
|
||||||
"multiplier": "बाधा गुणक"
|
|
||||||
},
|
|
||||||
"draftBar": {
|
|
||||||
"unsaved": "नसेभ परिवर्तनहरू",
|
|
||||||
"saved": "परिवर्तन स्थानीय ड्राफ्टमा राखिएको छ"
|
|
||||||
},
|
|
||||||
"playGroups": {
|
|
||||||
"bigSmall": "ठूलो / सानो",
|
|
||||||
"combo4": "4D स्थिति",
|
|
||||||
"number3": "3D स्थिति",
|
|
||||||
"number2": "2D स्थिति",
|
|
||||||
"other": "अन्य"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"title": "सारांश",
|
|
||||||
"contextTitle": "संस्करण र सुझाव",
|
|
||||||
"version": "सम्पादन संस्करण",
|
|
||||||
"activeVersion": "सक्रिय संस्करण",
|
|
||||||
"statusLabel": "स्थिति",
|
|
||||||
"readOnlyTag": "पढ्न मात्र",
|
|
||||||
"readOnlyHint": "यो संस्करण पढ्न मात्र हो। परिवर्तन गर्न ड्राफ्ट बनाउनुहोस्।",
|
|
||||||
"draftHint": "प्रकाशन अघि ड्राफ्ट सेभ गर्नुहोस्; प्रकाशनले नयाँ टिकटमा मात्र असर गर्छ।",
|
|
||||||
"activeHint": "यो संस्करण सक्रिय छ; नयाँ टिकट यही सेटिङ प्रयोग गर्छ।"
|
|
||||||
},
|
|
||||||
"tabs": {
|
|
||||||
"all": "सबै"
|
|
||||||
},
|
|
||||||
"category": "श्रेणी",
|
|
||||||
"playType": "खेल प्रकार",
|
|
||||||
"noPlayTypes": "यस श्रेणीमा खेल प्रकार छैन।",
|
|
||||||
"sheetDescription": "यहाँ हेर्नका लागि एउटा संस्करण छान्नुहोस्। गैर-ड्राफ्ट संस्करणलाई नयाँ ड्राफ्टमा रोलब्याक गर्न सकिन्छ।",
|
|
||||||
"activeVersionPrefix": "हाल सक्रिय संस्करण:",
|
"activeVersionPrefix": "हाल सक्रिय संस्करण:",
|
||||||
"readOnlyHint": "यो संस्करण केवल पढ्न मिल्ने छ। अड्स सम्पादन गर्नुअघि ड्राफ्ट बनाउनुहोस्।",
|
"category": "श्रेणी",
|
||||||
|
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
||||||
|
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
||||||
|
"currentSelection": "हालको छनोट: {{category}} / {{play}}",
|
||||||
|
"deleteFailed": "मेटाउन असफल",
|
||||||
|
"draftBar": {
|
||||||
|
"saved": "परिवर्तन स्थानीय ड्राफ्टमा राखिएको छ",
|
||||||
|
"unsaved": "नसेभ परिवर्तनहरू"
|
||||||
|
},
|
||||||
"loadingDetails": "विवरण लोड हुँदैछ…",
|
"loadingDetails": "विवरण लोड हुँदैछ…",
|
||||||
"multiplier": "गुणक x{{value}} · {{currency}}",
|
|
||||||
"missingScopeRow": "{{scope}} को row हराइरहेको छ। seed वा version data जाँच गर्नुहोस्।",
|
"missingScopeRow": "{{scope}} को row हराइरहेको छ। seed वा version data जाँच गर्नुहोस्।",
|
||||||
"rebateRate": "रिबेट दर (%)",
|
"multiplier": "गुणक x{{value}} · {{currency}}",
|
||||||
"rebateRateHint": "यसले यो खेल प्रकारअन्तर्गत सबै prize scope मा rebate_rate लेख्छ।",
|
"noPlayTypes": "यस श्रेणीमा खेल प्रकार छैन।",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"multiplier": "अड्स गुणक प्रविष्ट गर्नुहोस्",
|
"multiplier": "अड्स गुणक प्रविष्ट गर्नुहोस्",
|
||||||
"rebateRate": "रिबेट दर प्रविष्ट गर्नुहोस्"
|
"rebateRate": "रिबेट दर प्रविष्ट गर्नुहोस्"
|
||||||
},
|
},
|
||||||
|
"playGroups": {
|
||||||
|
"bigSmall": "ठूलो / सानो",
|
||||||
|
"combo4": "4D स्थिति",
|
||||||
|
"number2": "2D स्थिति",
|
||||||
|
"number3": "3D स्थिति",
|
||||||
|
"other": "अन्य"
|
||||||
|
},
|
||||||
|
"playSelectPlaceholder": "खेल प्रकार छान्नुहोस्",
|
||||||
|
"playType": "खेल प्रकार",
|
||||||
|
"publishDialog": {
|
||||||
|
"columns": {
|
||||||
|
"afterPublish": "प्रकाशनपछि",
|
||||||
|
"currentActive": "हाल सक्रिय",
|
||||||
|
"prizeScope": "पुरस्कार दायरा"
|
||||||
|
},
|
||||||
|
"confirm": "प्रकाशन पुष्टि गर्नुहोस्",
|
||||||
|
"description": "नयाँ अड्सले तुरुन्तै नयाँ टिकटहरूमा असर गर्छ। सफल भइसकेका टिकटहरू आफ्नो सुरक्षित odds snapshot अनुसार नै सेटल हुन्छन्।",
|
||||||
|
"title": "अड्स संस्करण प्रकाशित गर्ने?"
|
||||||
|
},
|
||||||
"publishFailed": "प्रकाशन असफल भयो",
|
"publishFailed": "प्रकाशन असफल भयो",
|
||||||
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
"readOnlyBanner": "यो संस्करण पढ्न मात्र हो। बाधा र रिबेट सम्पादन गर्न ड्राफ्ट बनाउनुहोस्।",
|
||||||
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
"readOnlyHint": "यो संस्करण केवल पढ्न मिल्ने छ। अड्स सम्पादन गर्नुअघि ड्राफ्ट बनाउनुहोस्।",
|
||||||
"rollbackSuccess": "v{{fromVersion}} बाट नयाँ ड्राफ्ट v{{version}} क्लोन गरियो",
|
"rebateRate": "रिबेट दर (%)",
|
||||||
"rollbackFailed": "रोलब्याक असफल भयो",
|
"rebateRateHint": "यसले यो खेल प्रकारअन्तर्गत सबै prize scope मा rebate_rate लेख्छ।",
|
||||||
"deleteFailed": "मेटाउन असफल",
|
|
||||||
"rollbackDialog": {
|
"rollbackDialog": {
|
||||||
"title": "रोलब्याक पुष्टि गर्नुहोस्",
|
"confirm": "रोलब्याक पुष्टि गर्नुहोस्",
|
||||||
"description": "संस्करण v{{version}} बाट नयाँ ड्राफ्ट क्लोन हुनेछ। हाल सक्रिय संस्करण प्रत्यक्ष रूपमा ओभरराइट हुँदैन।",
|
"description": "संस्करण v{{version}} बाट नयाँ ड्राफ्ट क्लोन हुनेछ। हाल सक्रिय संस्करण प्रत्यक्ष रूपमा ओभरराइट हुँदैन।",
|
||||||
"confirm": "रोलब्याक पुष्टि गर्नुहोस्"
|
"title": "रोलब्याक पुष्टि गर्नुहोस्"
|
||||||
|
},
|
||||||
|
"rollbackFailed": "रोलब्याक असफल भयो",
|
||||||
|
"rollbackSuccess": "v{{fromVersion}} बाट नयाँ ड्राफ्ट v{{version}} क्लोन गरियो",
|
||||||
|
"sectionHint": "संस्करण छानेर पुरस्कार-स्तर बाधा सम्पादन गर्नुहोस्; प्रकाशनपछि नयाँ टिकटमा लागू हुन्छ।",
|
||||||
|
"sections": {
|
||||||
|
"oddsConfig": "बाधा सेटिङ",
|
||||||
|
"playScope": "खेल दायरा"
|
||||||
|
},
|
||||||
|
"sheetDescription": "यहाँ हेर्नका लागि एउटा संस्करण छान्नुहोस्। गैर-ड्राफ्ट संस्करणलाई नयाँ ड्राफ्टमा रोलब्याक गर्न सकिन्छ।",
|
||||||
|
"summary": {
|
||||||
|
"activeHint": "यो संस्करण सक्रिय छ; नयाँ टिकट यही सेटिङ प्रयोग गर्छ।",
|
||||||
|
"activeVersion": "सक्रिय संस्करण",
|
||||||
|
"contextTitle": "संस्करण र सुझाव",
|
||||||
|
"draftHint": "प्रकाशन अघि ड्राफ्ट सेभ गर्नुहोस्; प्रकाशनले नयाँ टिकटमा मात्र असर गर्छ।",
|
||||||
|
"readOnlyHint": "यो संस्करण पढ्न मात्र हो। परिवर्तन गर्न ड्राफ्ट बनाउनुहोस्।",
|
||||||
|
"readOnlyTag": "पढ्न मात्र",
|
||||||
|
"statusLabel": "स्थिति",
|
||||||
|
"title": "सारांश",
|
||||||
|
"version": "सम्पादन संस्करण"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"multiplier": "बाधा गुणक",
|
||||||
|
"prizeScope": "पुरस्कार दायरा"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"all": "सबै"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"play": {
|
||||||
|
"actions": {
|
||||||
|
"disable": "निष्क्रिय",
|
||||||
|
"editDisplayName": "नाम सम्पादन",
|
||||||
|
"enable": "सक्रिय",
|
||||||
|
"ruleText": "नियम पाठ"
|
||||||
|
},
|
||||||
|
"activeVersion": "हाल सक्रिय संस्करण v{{version}}",
|
||||||
|
"aria": {
|
||||||
|
"batchGroupSwitch": "«{{group}}» समूह स्विच टगल गर्नुहोस्",
|
||||||
|
"enablePlay": "{{playCode}} सक्रिय गर्ने"
|
||||||
|
},
|
||||||
|
"batchEnabledCount": "{{enabledCount}}/{{total}} सक्रिय",
|
||||||
|
"batchGroups": {
|
||||||
|
"big-small": "Big / Small",
|
||||||
|
"box": "बक्स खेलहरू",
|
||||||
|
"d2": "2D ग्लोबल",
|
||||||
|
"d3": "3D ग्लोबल",
|
||||||
|
"d4": "4D ग्लोबल",
|
||||||
|
"jackpot": "Jackpot",
|
||||||
|
"position": "स्थिति खेलहरू"
|
||||||
|
},
|
||||||
|
"batchPartialEnabled": "{{enabledCount}}/{{total}} सक्रिय (सबै खुला छैन — अन गर्दा सबै सक्रिय हुन्छ)",
|
||||||
|
"batchSwitchConfirmDescription": "«{{group}}» अन्तर्गत {{count}} खेल प्रकार {{action}} गरी हालको ड्राफ्टमा लेखिनेछ।",
|
||||||
|
"batchSwitchConfirmTitle": "समूह {{action}} पुष्टि गर्ने?",
|
||||||
|
"batchSwitchDisable": "निष्क्रिय",
|
||||||
|
"batchSwitchEnable": "सक्रिय",
|
||||||
|
"batchSwitchesDesc": "यसले हालको ड्राफ्ट मात्र अपडेट गर्छ। सेभ र प्रकाशित गरेपछि खेलाडीको बेटिङ तालिका रिफ्रेस हुन्छ।",
|
||||||
|
"batchSwitchesTitle": "समूह स्विचहरू",
|
||||||
|
"categories": {
|
||||||
|
"attribute": "विशेषता",
|
||||||
|
"box": "बक्स",
|
||||||
|
"jackpot": "ज्याकपोट",
|
||||||
|
"position": "स्थिति",
|
||||||
|
"standard": "मानक"
|
||||||
|
},
|
||||||
|
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
||||||
|
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
||||||
|
"deleteFailed": "मेटाउन असफल",
|
||||||
|
"filters": {
|
||||||
|
"allCategories": "सबै श्रेणी",
|
||||||
|
"allStatuses": "सबै स्थिति",
|
||||||
|
"category": "श्रेणी",
|
||||||
|
"empty": "मिल्ने खेल प्रकार छैन",
|
||||||
|
"groupCount": "{{count}} खेल",
|
||||||
|
"keyword": "खेल खोज्नुहोस्",
|
||||||
|
"keywordPlaceholder": "खेल कोड, प्रदर्शन नाम वा श्रेणीले फिल्टर",
|
||||||
|
"reset": "फिल्टर हटाउनुहोस्",
|
||||||
|
"sectionDescription": "पहिले सूची संकुचित गर्नुहोस्, त्यसपछि ब्याच स्विच वा पङ्क्ति सम्पादन प्रयोग गर्नुहोस्।",
|
||||||
|
"sectionTitle": "खेल फिल्टर",
|
||||||
|
"status": "स्थिति",
|
||||||
|
"uncategorized": "अवर्गीकृत"
|
||||||
|
},
|
||||||
|
"locales": {
|
||||||
|
"en": "English",
|
||||||
|
"ne": "नेपाली",
|
||||||
|
"zh": "चिनियाँ"
|
||||||
|
},
|
||||||
|
"nameDialog": {
|
||||||
|
"apply": "ड्राफ्टमा लागू गर्नुहोस्",
|
||||||
|
"description": "खेल {{playCode}}। चिनियाँ अनिवार्य; अंग्रेजी र नेपाली वैकल्पिक। प्रकाशनपछि खेलाडीको भाषा अनुसार देखिन्छ।",
|
||||||
|
"savedLocal": "प्रदर्शित नाम स्थानीय ड्राफ्टमा सुरक्षित भयो। स्थायी बनाउन ड्राफ्ट सेभ गर्नुहोस्।",
|
||||||
|
"title": "प्रदर्शित नाम (बहुभाषी)"
|
||||||
|
},
|
||||||
|
"noPlayTypes": "खेल प्रकार छैन",
|
||||||
|
"placeholders": {
|
||||||
|
"displayOrder": "क्रम",
|
||||||
|
"maxBetAmount": "अधिकतम रकम",
|
||||||
|
"minBetAmount": "न्यूनतम रकम"
|
||||||
},
|
},
|
||||||
"publishDialog": {
|
"publishDialog": {
|
||||||
"title": "अड्स संस्करण प्रकाशित गर्ने?",
|
|
||||||
"description": "नयाँ अड्सले तुरुन्तै नयाँ टिकटहरूमा असर गर्छ। सफल भइसकेका टिकटहरू आफ्नो सुरक्षित odds snapshot अनुसार नै सेटल हुन्छन्।",
|
|
||||||
"confirm": "प्रकाशन पुष्टि गर्नुहोस्",
|
"confirm": "प्रकाशन पुष्टि गर्नुहोस्",
|
||||||
"columns": {
|
"description": "नयाँ सेटिङले आगामी बेटहरूमा असर गर्छ। पुराना टिकटहरू आफ्नो snapshot अनुसार नै सेटल हुन्छन्।",
|
||||||
"prizeScope": "पुरस्कार दायरा",
|
"title": "खेल कन्फिग प्रकाशित गर्ने?"
|
||||||
"currentActive": "हाल सक्रिय",
|
},
|
||||||
"afterPublish": "प्रकाशनपछि"
|
"publishFailed": "प्रकाशन असफल भयो",
|
||||||
}
|
"readOnlyDraftHint": "हालको संस्करण केवल पढ्न मिल्ने छ। पहिले ड्राफ्ट बनाउनुहोस्।",
|
||||||
|
"readOnlyHint": "सीमा र नियमहरू केवल पढ्न मिल्ने छन्। पहिले ड्राफ्ट बनाउनुहोस्।",
|
||||||
|
"ruleDialog": {
|
||||||
|
"apply": "ड्राफ्टमा लागू गर्नुहोस्",
|
||||||
|
"description": "खेल {{playCode}}। परिवर्तनहरू सेभ र प्रकाशित नगरेसम्म ड्राफ्टमै रहन्छन्।",
|
||||||
|
"title": "नियम पाठ (बहुभाषी)"
|
||||||
|
},
|
||||||
|
"ruleSavedLocal": "नियम पाठ स्थानीय ड्राफ्टमा सुरक्षित भयो। स्थायी बनाउन ड्राफ्ट सेभ गर्नुहोस्।",
|
||||||
|
"states": {
|
||||||
|
"disabled": "बन्द",
|
||||||
|
"enabled": "सक्रिय",
|
||||||
|
"readOnly": "केवल पढ्न मिल्ने"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"actions": "कार्य",
|
||||||
|
"category": "श्रेणी",
|
||||||
|
"displayName": "प्रदर्शित नाम",
|
||||||
|
"maxBet": "अधिकतम बेट",
|
||||||
|
"minBet": "न्यूनतम बेट",
|
||||||
|
"order": "क्रम",
|
||||||
|
"playCode": "खेल कोड",
|
||||||
|
"status": "स्थिति"
|
||||||
|
},
|
||||||
|
"toggleConfirmDescription": "यो हालको ड्राफ्ट मात्र अपडेट गर्छ। सेभ र प्रकाशित गरेपछि खेलाडीलाई देखिन्छ।",
|
||||||
|
"toggleConfirmTitle": "खेल {{playCode}} {{action}} गर्ने?",
|
||||||
|
"toggleDisable": "निष्क्रिय",
|
||||||
|
"toggleEnable": "सक्रिय",
|
||||||
|
"toggleInstantFailed": "खेल स्विच तुरुन्त लागू गर्न असफल। पछि पुनः प्रयास गर्नुहोस्।",
|
||||||
|
"validation": {
|
||||||
|
"displayNameRequired": "प्रदर्शित नाम अनिवार्य छ",
|
||||||
|
"minMaxInvalid": "{{playCode}}: न्यूनतम बेट अधिकतम बेटभन्दा ठूलो हुन सक्दैन"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"prizeScopes": {
|
||||||
|
"consolation": "सान्त्वना पुरस्कार बाधा",
|
||||||
|
"first": "पहिलो पुरस्कार बाधा",
|
||||||
|
"second": "दोस्रो पुरस्कार बाधा",
|
||||||
|
"starter": "स्टार्टर पुरस्कार बाधा",
|
||||||
|
"third": "तेस्रो पुरस्कार बाधा"
|
||||||
|
},
|
||||||
"rebate": {
|
"rebate": {
|
||||||
"sectionHint": "रिबेट दर अड्स संस्करणमा लेखिन्छ; पहिले माथिको «बाधा» खण्डमा ड्राफ्ट छान्नुहोस्।",
|
|
||||||
"lazyLoadHint": "रिबेट खण्डमा स्क्रोल गर्दा लोड हुन्छ",
|
|
||||||
"embeddedVersionHint": "रिबेट माथिको बाधा संस्करण लाइन साझा गर्छ—संस्करण त्यहीँबाट बदल्नुहोस्।",
|
|
||||||
"sheetDescription": "रिबेट अड्स ड्राफ्ट संस्करणमा राखिन्छ र अड्ससँग एउटै संस्करण सेट साझा गर्छ।",
|
|
||||||
"publishLabel": "प्रकाशन",
|
|
||||||
"publishSuccess": "रिबेटसहितको अड्स संस्करण प्रकाशित भयो",
|
|
||||||
"publishFailed": "प्रकाशन असफल भयो",
|
|
||||||
"publishDialog": {
|
|
||||||
"title": "रिबेट/अड्स संस्करण प्रकाशित गर्ने?",
|
|
||||||
"description": "प्रकाशनपछि नयाँ टिकटहरूको रिबेट गणनामा असर पर्छ।",
|
|
||||||
"confirm": "प्रकाशन पुष्टि गर्नुहोस्"
|
|
||||||
},
|
|
||||||
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
|
||||||
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
||||||
|
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
||||||
"deleteFailed": "मेटाउन असफल",
|
"deleteFailed": "मेटाउन असफल",
|
||||||
"editingVersion": "सम्पादन भइरहेको संस्करण v{{version}} · {{status}}",
|
|
||||||
"readOnlyHint": "रिबेट सम्पादन गर्नुअघि ड्राफ्ट बनाउनुहोस्।",
|
|
||||||
"dimensionRatesMixedHint": "एउटै डाइमेन्शनभित्रका खेलका रिबेट दरहरू उस्तै छैनन्: माथिको तीन फिल्डहरू मुख्य पुरस्कार स्कोपको पहिलो प्ले (क्रम)को उदाहरण मात्र देखाउँछन्; वास्तविक दर टेबुलको लाइन हेर्नुहोस्। थोक इनपुटले डाइमेन्शनभित्रका सबै प्लेहरू एउटै दरले अधिलेखन गर्छ।",
|
"dimensionRatesMixedHint": "एउटै डाइमेन्शनभित्रका खेलका रिबेट दरहरू उस्तै छैनन्: माथिको तीन फिल्डहरू मुख्य पुरस्कार स्कोपको पहिलो प्ले (क्रम)को उदाहरण मात्र देखाउँछन्; वास्तविक दर टेबुलको लाइन हेर्नुहोस्। थोक इनपुटले डाइमेन्शनभित्रका सबै प्लेहरू एउटै दरले अधिलेखन गर्छ।",
|
||||||
|
"editingVersion": "सम्पादन भइरहेको संस्करण v{{version}} · {{status}}",
|
||||||
|
"effectiveTime": "लागू समय (हाल सक्रिय अड्स संस्करण)",
|
||||||
|
"embeddedVersionHint": "रिबेट माथिको बाधा संस्करण लाइन साझा गर्छ—संस्करण त्यहीँबाट बदल्नुहोस्।",
|
||||||
"fields": {
|
"fields": {
|
||||||
"d2": "2D रिबेट दर (%)",
|
"d2": "2D रिबेट दर (%)",
|
||||||
"d3": "3D रिबेट दर (%)",
|
"d3": "3D रिबेट दर (%)",
|
||||||
"d4": "4D रिबेट दर (%)"
|
"d4": "4D रिबेट दर (%)"
|
||||||
},
|
},
|
||||||
|
"lazyLoadHint": "रिबेट खण्डमा स्क्रोल गर्दा लोड हुन्छ",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"d2": "2D रिबेट प्रविष्ट गर्नुहोस्",
|
"d2": "2D रिबेट प्रविष्ट गर्नुहोस्",
|
||||||
"d3": "3D रिबेट प्रविष्ट गर्नुहोस्",
|
"d3": "3D रिबेट प्रविष्ट गर्नुहोस्",
|
||||||
"d4": "4D रिबेट प्रविष्ट गर्नुहोस्"
|
"d4": "4D रिबेट प्रविष्ट गर्नुहोस्"
|
||||||
},
|
},
|
||||||
"winEnjoy": {
|
"publishDialog": {
|
||||||
"label": "जितेको टिकटको पेआउटमा पुनः रिबेट घटाउने",
|
"confirm": "प्रकाशन पुष्टि गर्नुहोस्",
|
||||||
"description": "settlement.apply_rebate_to_payout सँग जोडिएको: सक्रिय हुँदा जित पेआउटमा rebate_rate_snapshot अनुसार घटाउँछ।",
|
"description": "प्रकाशनपछि नयाँ टिकटहरूको रिबेट गणनामा असर पर्छ।",
|
||||||
"hint": "वैश्विक switch; odds संस्करण प्रकाशनसँग नजोडिएको, सुरक्षित गर्दा तुरुन्त लागू।",
|
"title": "रिबेट/अड्स संस्करण प्रकाशित गर्ने?"
|
||||||
"saveSuccess": "जित टिकट रिबेट सेटिङ अद्यावधिक भयो",
|
|
||||||
"saveFailed": "अद्यावधिक असफल"
|
|
||||||
},
|
|
||||||
"effectiveTime": "लागू समय (हाल सक्रिय अड्स संस्करण)"
|
|
||||||
},
|
|
||||||
"riskCap": {
|
|
||||||
"placeholders": {
|
|
||||||
"defaultCap": "पूर्वनिर्धारित सीमा प्रविष्ट गर्नुहोस्",
|
|
||||||
"number": "४-अङ्कको नम्बर",
|
|
||||||
"capAmount": "सीमा रकम प्रविष्ट गर्नुहोस्"
|
|
||||||
},
|
|
||||||
"validation": {
|
|
||||||
"requireAtLeastOne": "कम्तीमा एक क्याप row आवश्यक छ",
|
|
||||||
"defaultGreaterThanZero": "पूर्वनिर्धारित क्याप रकम 0 भन्दा ठूलो हुनुपर्छ",
|
|
||||||
"defaultCannotBindDraw": "पूर्वनिर्धारित क्याप कुनै निश्चित draw मा बाँध्न मिल्दैन",
|
|
||||||
"specialGreaterThanZero": "विशेष क्याप रकम 0 भन्दा ठूलो हुनुपर्छ: {{number}}",
|
|
||||||
"numberMustBe4Digits": "नम्बर 4 अङ्कको हुनुपर्छ: {{number}}",
|
|
||||||
"enterValidCapAmount": "मान्य क्याप रकम प्रविष्ट गर्नुहोस्"
|
|
||||||
},
|
},
|
||||||
"publishFailed": "प्रकाशन असफल भयो",
|
"publishFailed": "प्रकाशन असफल भयो",
|
||||||
"publishDialog": {
|
"publishLabel": "प्रकाशन",
|
||||||
"title": "क्याप कन्फिग प्रकाशित गर्ने?",
|
"publishSuccess": "रिबेटसहितको अड्स संस्करण प्रकाशित भयो",
|
||||||
"description": "प्रकाशनपछि प्रत्येक नम्बरको जोखिम पूल क्याप सीमा लागू हुन्छ।",
|
"readOnlyHint": "रिबेट सम्पादन गर्नुअघि ड्राफ्ट बनाउनुहोस्।",
|
||||||
"confirm": "प्रकाशन पुष्टि गर्नुहोस्"
|
"sectionHint": "रिबेट दर अड्स संस्करणमा लेखिन्छ; पहिले माथिको «बाधा» खण्डमा ड्राफ्ट छान्नुहोस्।",
|
||||||
|
"sheetDescription": "रिबेट अड्स ड्राफ्ट संस्करणमा राखिन्छ र अड्ससँग एउटै संस्करण सेट साझा गर्छ।",
|
||||||
|
"winEnjoy": {
|
||||||
|
"description": "settlement.apply_rebate_to_payout सँग जोडिएको: सक्रिय हुँदा जित पेआउटमा rebate_rate_snapshot अनुसार घटाउँछ।",
|
||||||
|
"hint": "वैश्विक switch; odds संस्करण प्रकाशनसँग नजोडिएको, सुरक्षित गर्दा तुरुन्त लागू।",
|
||||||
|
"label": "जितेको टिकटको पेआउटमा पुनः रिबेट घटाउने",
|
||||||
|
"saveFailed": "अद्यावधिक असफल",
|
||||||
|
"saveSuccess": "जित टिकट रिबेट सेटिङ अद्यावधिक भयो"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"riskCap": {
|
||||||
|
"actions": {
|
||||||
|
"addSpecialCap": "+ विशेष क्याप थप्नुहोस्",
|
||||||
|
"close": "बन्द",
|
||||||
|
"exportCsv": "CSV निर्यात",
|
||||||
|
"filterPresets": "प्रिसेट फिल्टर…",
|
||||||
|
"update": "अपडेट"
|
||||||
},
|
},
|
||||||
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
|
||||||
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
"createDraftFailed": "ड्राफ्ट सिर्जना असफल भयो",
|
||||||
"savedLocalDraft": "स्थानीय ड्राफ्टमा सुरक्षित भयो। स्थायी बनाउन ड्राफ्ट सेभ गर्नुहोस्।",
|
"createDraftSuccess": "ड्राफ्ट v{{version}} सिर्जना भयो",
|
||||||
|
"defaultCap": {
|
||||||
|
"description": "विशेष क्याप नभएका नम्बरहरूमा यही पूर्वनिर्धारित क्याप टेम्प्लेट लागू हुन्छ।",
|
||||||
|
"fieldLabel": "क्याप रकम (मुख्य एकाइ)",
|
||||||
|
"title": "पूर्वनिर्धारित क्याप"
|
||||||
|
},
|
||||||
"deleteFailed": "मेटाउन असफल",
|
"deleteFailed": "मेटाउन असफल",
|
||||||
"effectiveAt": "लागू समय: {{value}}",
|
"effectiveAt": "लागू समय: {{value}}",
|
||||||
"note": "टिप्पणी: {{value}}",
|
|
||||||
"readOnlyHint": "केवल पढ्न मिल्ने। पहिले ड्राफ्ट बनाउनुहोस्।",
|
|
||||||
"readOnly": "केवल पढ्न मिल्ने",
|
|
||||||
"defaultCap": {
|
|
||||||
"title": "पूर्वनिर्धारित क्याप",
|
|
||||||
"description": "विशेष क्याप नभएका नम्बरहरूमा यही पूर्वनिर्धारित क्याप टेम्प्लेट लागू हुन्छ।",
|
|
||||||
"fieldLabel": "क्याप रकम (मुख्य एकाइ)"
|
|
||||||
},
|
|
||||||
"specialCaps": {
|
|
||||||
"title": "विशेष क्यापहरू",
|
|
||||||
"description": "draw नछानेमा ग्लोबल नम्बर क्याप हुन्छ; draw छानेपछि त्यो सोही draw को विशेष क्याप हुन्छ।"
|
|
||||||
},
|
|
||||||
"scope": {
|
|
||||||
"global": "ग्लोबल नम्बर",
|
|
||||||
"drawId": "Draw ID: {{id}}"
|
|
||||||
},
|
|
||||||
"groups": {
|
"groups": {
|
||||||
"globalTitle": "ग्लोबल नम्बर क्याप",
|
"count": "{{count}} वटा",
|
||||||
"globalDescription": "कुनै निश्चित draw मा नबाँधिने, दीर्घकालीन रूपमा लागू हुने क्याप। सामान्य नम्बर-स्तर सीमा यहीं राखिन्छ।",
|
|
||||||
"globalEmpty": "अहिलेसम्म कुनै ग्लोबल नम्बर क्याप छैन।",
|
|
||||||
"drawTitle": "Draw-विशेष क्याप",
|
|
||||||
"drawDescription": "छानिएको draw मा मात्र लागू हुन्छ। कुनै draw का लागि अस्थायी रूपमा सीमा कडा वा खुकुलो बनाउन प्रयोग गर्नुहोस्।",
|
"drawDescription": "छानिएको draw मा मात्र लागू हुन्छ। कुनै draw का लागि अस्थायी रूपमा सीमा कडा वा खुकुलो बनाउन प्रयोग गर्नुहोस्।",
|
||||||
"drawEmpty": "अहिलेसम्म कुनै draw-विशेष क्याप छैन।",
|
"drawEmpty": "अहिलेसम्म कुनै draw-विशेष क्याप छैन।",
|
||||||
"count": "{{count}} वटा"
|
"drawTitle": "Draw-विशेष क्याप",
|
||||||
},
|
"globalDescription": "कुनै निश्चित draw मा नबाँधिने, दीर्घकालीन रूपमा लागू हुने क्याप। सामान्य नम्बर-स्तर सीमा यहीं राखिन्छ।",
|
||||||
"summary": {
|
"globalEmpty": "अहिलेसम्म कुनै ग्लोबल नम्बर क्याप छैन।",
|
||||||
"defaultCap": "पूर्वनिर्धारित क्याप",
|
"globalTitle": "ग्लोबल नम्बर क्याप"
|
||||||
"defaultHint": "विशेष नियम नभएका नम्बरहरू अन्ततः यही मानमा फर्किन्छन्।",
|
|
||||||
"globalCaps": "ग्लोबल नम्बर क्याप",
|
|
||||||
"globalHint": "दीर्घकालीन नियम, कुनै एक draw सँग मात्र जोडिएको हुँदैन।",
|
|
||||||
"drawCaps": "Draw-विशेष क्याप",
|
|
||||||
"drawHint": "छानिएका draw हरूमा मात्र अस्थायी रूपमा लागू हुने नियम।"
|
|
||||||
},
|
},
|
||||||
"loadingDetails": "विवरण लोड हुँदैछ…",
|
"loadingDetails": "विवरण लोड हुँदैछ…",
|
||||||
"noDetailRows": "विवरण row छैन।",
|
"noDetailRows": "विवरण row छैन।",
|
||||||
"table": {
|
"note": "टिप्पणी: {{value}}",
|
||||||
"scope": "दायरा",
|
|
||||||
"number": "नम्बर",
|
|
||||||
"capAmount": "क्याप रकम",
|
|
||||||
"used": "प्रयोग भएको",
|
|
||||||
"remaining": "बाँकी",
|
|
||||||
"soldOut": "सोल्ड आउट",
|
|
||||||
"ratio": "अनुपात",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
|
||||||
"occupancy": {
|
"occupancy": {
|
||||||
"searchLabel": "नम्बर खोज्नुहोस्",
|
"searchLabel": "नम्बर खोज्नुहोस्",
|
||||||
"searchPlaceholder": "जस्तै 8888"
|
"searchPlaceholder": "जस्तै 8888"
|
||||||
},
|
},
|
||||||
|
"placeholders": {
|
||||||
|
"capAmount": "सीमा रकम प्रविष्ट गर्नुहोस्",
|
||||||
|
"defaultCap": "पूर्वनिर्धारित सीमा प्रविष्ट गर्नुहोस्",
|
||||||
|
"number": "४-अङ्कको नम्बर"
|
||||||
|
},
|
||||||
|
"publishDialog": {
|
||||||
|
"confirm": "प्रकाशन पुष्टि गर्नुहोस्",
|
||||||
|
"description": "प्रकाशनपछि प्रत्येक नम्बरको जोखिम पूल क्याप सीमा लागू हुन्छ।",
|
||||||
|
"title": "क्याप कन्फिग प्रकाशित गर्ने?"
|
||||||
|
},
|
||||||
|
"publishFailed": "प्रकाशन असफल भयो",
|
||||||
|
"readOnly": "केवल पढ्न मिल्ने",
|
||||||
|
"readOnlyHint": "केवल पढ्न मिल्ने। पहिले ड्राफ्ट बनाउनुहोस्।",
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"title": "ड्रअनुसार occupancy (लाइभ)",
|
|
||||||
"description": "माथिको संस्करण ड्राफ्ट होइन—चयन गरिएको ड्रअको risk-pool API बाट लोड हुन्छ। प्रयोग, बाँकी र sold-out हेर्नुहोस्।",
|
"description": "माथिको संस्करण ड्राफ्ट होइन—चयन गरिएको ड्रअको risk-pool API बाट लोड हुन्छ। प्रयोग, बाँकी र sold-out हेर्नुहोस्।",
|
||||||
"drawLabel": "ड्र",
|
"drawLabel": "ड्र",
|
||||||
"drawPlaceholder": "ड्र छान्नुहोस्",
|
"drawPlaceholder": "ड्र छान्नुहोस्",
|
||||||
"filterAll": "सबै",
|
"filterAll": "सबै",
|
||||||
"filterSoldOut": "मात्र sold-out",
|
|
||||||
"filterHighRisk": "उच्च प्रयोग",
|
"filterHighRisk": "उच्च प्रयोग",
|
||||||
|
"filterSoldOut": "मात्र sold-out",
|
||||||
"manageHint": "पूर्ण risk सञ्चालनका लागि माथिको लिङ्कबाट ड्र subpage खोल्नुहोस्।",
|
"manageHint": "पूर्ण risk सञ्चालनका लागि माथिको लिङ्कबाट ड्र subpage खोल्नुहोस्।",
|
||||||
"noDraws": "कुनै ड्र छैन; occupancy लोड गर्न सकिँदैन।",
|
"noDraws": "कुनै ड्र छैन; occupancy लोड गर्न सकिँदैन।",
|
||||||
|
"soldNo": "होइन",
|
||||||
"soldYes": "हो",
|
"soldYes": "हो",
|
||||||
"soldNo": "होइन"
|
"title": "ड्रअनुसार occupancy (लाइभ)"
|
||||||
},
|
},
|
||||||
"actions": {
|
"savedLocalDraft": "स्थानीय ड्राफ्टमा सुरक्षित भयो। स्थायी बनाउन ड्राफ्ट सेभ गर्नुहोस्।",
|
||||||
"update": "अपडेट",
|
"scope": {
|
||||||
"addSpecialCap": "+ विशेष क्याप थप्नुहोस्",
|
"drawId": "Draw ID: {{id}}",
|
||||||
"filterPresets": "प्रिसेट फिल्टर…",
|
"global": "ग्लोबल नम्बर"
|
||||||
"exportCsv": "CSV निर्यात",
|
},
|
||||||
"close": "बन्द"
|
"specialCaps": {
|
||||||
|
"description": "draw नछानेमा ग्लोबल नम्बर क्याप हुन्छ; draw छानेपछि त्यो सोही draw को विशेष क्याप हुन्छ।",
|
||||||
|
"title": "विशेष क्यापहरू"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"defaultCap": "पूर्वनिर्धारित क्याप",
|
||||||
|
"defaultHint": "विशेष नियम नभएका नम्बरहरू अन्ततः यही मानमा फर्किन्छन्।",
|
||||||
|
"drawCaps": "Draw-विशेष क्याप",
|
||||||
|
"drawHint": "छानिएका draw हरूमा मात्र अस्थायी रूपमा लागू हुने नियम।",
|
||||||
|
"globalCaps": "ग्लोबल नम्बर क्याप",
|
||||||
|
"globalHint": "दीर्घकालीन नियम, कुनै एक draw सँग मात्र जोडिएको हुँदैन।"
|
||||||
},
|
},
|
||||||
"syncDialog": {
|
"syncDialog": {
|
||||||
"title": "पूर्वनिर्धारित क्याप मिलाउनुहोस्",
|
"confirm": "पुष्टि",
|
||||||
"description": "पूर्वनिर्धारित क्याप टेम्प्लेट {{value}} मा सेट हुनेछ। यसले ड्राफ्ट मात्र बदल्छ। पुष्टि पछि सेभ र प्रकाशित गर्नुहोस्।",
|
"description": "पूर्वनिर्धारित क्याप टेम्प्लेट {{value}} मा सेट हुनेछ। यसले ड्राफ्ट मात्र बदल्छ। पुष्टि पछि सेभ र प्रकाशित गर्नुहोस्।",
|
||||||
"confirm": "पुष्टि"
|
"title": "पूर्वनिर्धारित क्याप मिलाउनुहोस्"
|
||||||
|
},
|
||||||
|
"table": {
|
||||||
|
"actions": "कार्य",
|
||||||
|
"capAmount": "क्याप रकम",
|
||||||
|
"number": "नम्बर",
|
||||||
|
"ratio": "अनुपात",
|
||||||
|
"remaining": "बाँकी",
|
||||||
|
"scope": "दायरा",
|
||||||
|
"soldOut": "सोल्ड आउट",
|
||||||
|
"used": "प्रयोग भएको"
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"defaultCannotBindDraw": "पूर्वनिर्धारित क्याप कुनै निश्चित draw मा बाँध्न मिल्दैन",
|
||||||
|
"defaultGreaterThanZero": "पूर्वनिर्धारित क्याप रकम 0 भन्दा ठूलो हुनुपर्छ",
|
||||||
|
"enterValidCapAmount": "मान्य क्याप रकम प्रविष्ट गर्नुहोस्",
|
||||||
|
"numberMustBe4Digits": "नम्बर 4 अङ्कको हुनुपर्छ: {{number}}",
|
||||||
|
"requireAtLeastOne": "कम्तीमा एक क्याप row आवश्यक छ",
|
||||||
|
"specialGreaterThanZero": "विशेष क्याप रकम 0 भन्दा ठूलो हुनुपर्छ: {{number}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"confirmSaveCurrencyFormatDescription": "यसले दशमलव स्थान र विभाजक अद्यावधिक गर्छ।",
|
||||||
|
"confirmSaveCurrencyFormatTitle": "मुद्रा प्रदर्शन ढाँचा बचत गर्ने?",
|
||||||
|
"confirmSaveDescription": "ड्रअ समीक्षा, कूलडाउन, स्वचालित सेटलमेन्ट/अनुमोदन/पेआउट र खेल नियम प्रदर्शन अद्यावधिक हुन्छ। साइटव्यापी सञ्चालनमा असर पर्न सक्छ।",
|
||||||
|
"confirmSaveDrawDescription": "यसले यो ब्लकमा ड्र समीक्षा, तालिका समय र कूलडाउन मात्र अद्यावधिक गर्छ।",
|
||||||
|
"confirmSaveDrawTitle": "ड्र प्यारामिटर बचत गर्ने?",
|
||||||
|
"confirmSaveFrontendDescription": "खेलाडी साइटको खेल नियम HTML अद्यावधिक हुन्छ। ड्रअ र सेटलमेन्ट तर्क परिवर्तन हुँदैन।",
|
||||||
|
"confirmSaveFrontendTitle": "फ्रन्ट-एन्ड प्रदर्शन सेटिङ सुरक्षित गर्ने?",
|
||||||
|
"confirmSaveRuntimeDescription": "ड्रअ समीक्षा, तालिका, कूलडाउन, स्वचालित सेटलमेन्ट/अनुमोदन/पेआउट अद्यावधिक हुन्छ। खेल नियम HTML परिवर्तन हुँदैन।",
|
||||||
|
"confirmSaveRuntimeTitle": "ड्रअ र सेटलमेन्ट प्यारामिटर सुरक्षित गर्ने?",
|
||||||
|
"confirmSaveSettlementDescription": "यसले स्वतः सेटलमेन्ट, अनुमोदन र भुक्तानी स्विच अद्यावधिक गर्छ।",
|
||||||
|
"confirmSaveSettlementTitle": "सेटलमेन्ट स्वचालन बचत गर्ने?",
|
||||||
|
"confirmSaveTitle": "प्रणाली रनटाइम प्यारामिटर सुरक्षित गर्ने?",
|
||||||
|
"description": "RNG ड्रअपछि समीक्षा प्रवाह, कूलडाउन अवधि र स्वचालित सेटलमेन्ट व्यवहार नियन्त्रण गर्छ। यी ग्लोबल रनटाइम नीति हुन् र संस्करणयुक्त सञ्चालन कन्फिगरेसनमा पर्दैनन्।",
|
||||||
|
"discard": "परिवर्तन त्याग्नुहोस्",
|
||||||
|
"fields": {
|
||||||
|
"applyRebateToPayout": "जितेको टिकटको पेआउटमा पुनः रिबेट घटाउने",
|
||||||
|
"autoApprove": "सेटलमेन्ट ब्याच स्वतः स्वीकृत",
|
||||||
|
"autoPayout": "जित रकम स्वतः वालेटमा जम्मा",
|
||||||
|
"autoSettlement": "सेटलमेन्ट स्वतः चलाउने",
|
||||||
|
"cooldownMinutes": "कूलडाउन अवधि (मिनेट)",
|
||||||
|
"currencyDecimalSeparator": "दशमलव विभाजक",
|
||||||
|
"currencyDisplayDecimals": "प्रदर्शन दशमलव स्थान",
|
||||||
|
"currencyThousandsSeparator": "हजार विभाजक",
|
||||||
|
"defaultCurrency": "पूर्वनिर्धारित मुद्रा कोड",
|
||||||
|
"drawBettingWindowSeconds": "बेटिङ विन्डो (सेकेन्ड)",
|
||||||
|
"drawBufferDrawsAhead": "अग्रिम सिर्जना गरिने ड्रअ संख्या",
|
||||||
|
"drawCloseBeforeDrawSeconds": "ड्रअ अघि बन्द (सेकेन्ड)",
|
||||||
|
"drawIntervalMinutes": "ड्रअ अन्तराल (मिनेट)",
|
||||||
|
"manualReview": "ड्रअ परिणामका लागि म्यानुअल समीक्षा चाहिने",
|
||||||
|
"playRulesHtml": "खेल नियम HTML (बहुभाषी)",
|
||||||
|
"playRulesHtmlDesc": "खेलाडीको नियम पृष्ठमा भाषा अनुसार HTML देखिन्छ। खाली छोड्दा अर्को भाषा वा पूर्वनिर्धारित खाली सूचना देखिन्छ।"
|
||||||
|
},
|
||||||
|
"frontendConfig": "फ्रन्ट-एन्ड कन्फिग",
|
||||||
|
"hints": {
|
||||||
|
"applyRebateToPayout": "सक्रिय हुँदा पेआउट = gross win × (1 - rebate_rate_snapshot)। पूर्वनिर्धारित बन्द (रिबेट actual deduct मा पहिले नै समायोजित)।",
|
||||||
|
"autoApprove": "कूलडाउन सकिएर सेटलमेन्ट पूरा भएपछि ब्याच स्वतः अनुमोदित हुने हो कि होइन।",
|
||||||
|
"autoPayout": "ब्याच अनुमोदित भएपछि tick ले जित रकम खेलाडीको वालेटमा स्वतः जम्मा गर्ने हो कि होइन।",
|
||||||
|
"autoSettlement": "बन्द हुँदा tick ले सेटलमेन्ट स्वतः चलाउँदैन र एडमिनले म्यानुअल रूपमा ट्रिगर गर्नुपर्छ।",
|
||||||
|
"cooldownMinutes": "प्रकाशनपछि settling मा जानुअघि कति समय पर्खने। 0 राखे तुरुन्त सेटलमेन्ट सुरु हुन्छ।",
|
||||||
|
"manualReview": "सक्रिय हुँदा RNG ड्रअ परिणाम pending review मा जान्छ र एडमिनबाट म्यानुअल रूपमा प्रकाशित गर्नुपर्छ।"
|
||||||
|
},
|
||||||
|
"loadFailed": "प्रणाली सेटिङ लोड असफल भयो",
|
||||||
|
"placeholders": {
|
||||||
|
"cooldownMinutes": "कूलडाउन मिनेट प्रविष्ट गर्नुहोस्",
|
||||||
|
"currencyDecimalSeparator": "दशमलव विभाजक प्रविष्ट गर्नुहोस्, जस्तै .",
|
||||||
|
"currencyDisplayDecimals": "प्रदर्शन दशमलव स्थान प्रविष्ट गर्नुहोस्, जस्तै 2",
|
||||||
|
"currencyThousandsSeparator": "हजार विभाजक प्रविष्ट गर्नुहोस्, जस्तै ,",
|
||||||
|
"defaultCurrency": "पूर्वनिर्धारित मुद्रा कोड प्रविष्ट गर्नुहोस्, जस्तै NPR",
|
||||||
|
"drawBettingWindowSeconds": "बेटिङ विन्डो सेकेन्ड प्रविष्ट गर्नुहोस्",
|
||||||
|
"drawBufferDrawsAhead": "अग्रिम सिर्जना गरिने ड्रअ संख्या प्रविष्ट गर्नुहोस्",
|
||||||
|
"drawCloseBeforeDrawSeconds": "ड्रअ अघि बन्द हुने सेकेन्ड प्रविष्ट गर्नुहोस्",
|
||||||
|
"drawIntervalMinutes": "ड्रअ अन्तराल मिनेट प्रविष्ट गर्नुहोस्"
|
||||||
|
},
|
||||||
|
"runtimeIntro1": "यहाँ खेल प्रकार, अड्स वा जोखिम संस्करणमा नपर्ने ग्लोबल प्रणाली प्यारामिटर राखिन्छ। यसले वालेट ट्रान्सफर, कार्य स्विच र प्रणाली सञ्चालन नीतिमा सीधा असर गर्छ।",
|
||||||
|
"runtimeIntro2": "खेल प्रकार, अड्स, रिबेट र क्याप अझै पनि सञ्चालन कन्फिगरेसनमै रहन्छन्। प्रणाली सेटिङले मात्र क्रस-मोड्युल रनटाइम प्यारामिटर सम्हाल्छ ताकि प्रशासनिक जिम्मेवारी नदोहोरोस्।",
|
||||||
|
"runtimeTitle": "ग्लोबल रनटाइम प्यारामिटर",
|
||||||
|
"saveCurrencyFormatSuccess": "मुद्रा प्रदर्शन ढाँचा बचत भयो",
|
||||||
|
"saveDrawSuccess": "ड्र प्यारामिटर बचत भयो",
|
||||||
|
"saveFailed": "प्रणाली सेटिङ सुरक्षित गर्न असफल",
|
||||||
|
"saveFrontendSuccess": "फ्रन्ट-एन्ड प्रदर्शन सेटिङ सुरक्षित भयो",
|
||||||
|
"saveRuntimeSuccess": "ड्रअ र सेटलमेन्ट प्यारामिटर सुरक्षित भयो",
|
||||||
|
"saveSettlementSuccess": "सेटलमेन्ट स्वचालन बचत भयो",
|
||||||
|
"saveSuccess": "प्रणाली सेटिङ सुरक्षित भयो",
|
||||||
|
"sections": {
|
||||||
|
"currencyFormat": "मुद्रा प्रदर्शन ढाँचा",
|
||||||
|
"currencyFormatDescription": "साइटभरि रकमका दशमलव र विभाजक (मुद्रा मास्टर डाटाबाट अलग)।",
|
||||||
|
"draw": "ड्र तालिका र समीक्षा",
|
||||||
|
"drawDescription": "ड्र समय, बन्द सञ्झ्याल, म्यानुअल समीक्षा र कूलडाउन नियन्त्रण। यो ब्लकमा परिवर्तित फिल्ड मात्र पेश हुन्छ।",
|
||||||
|
"settlement": "सेटलमेन्ट स्वचालन",
|
||||||
|
"settlementDescription": "टिक स्वतः सेटलमेन्ट, अनुमोदन र भुक्तानी चलाउने नियन्त्रण। यो ब्लकमा परिवर्तित फिल्ड मात्र पेश हुन्छ।"
|
||||||
|
},
|
||||||
|
"states": {
|
||||||
|
"disabled": "बन्द",
|
||||||
|
"enabled": "सक्रिय"
|
||||||
|
},
|
||||||
|
"title": "ड्रअ र सेटलमेन्ट रनटाइम सेटिङ",
|
||||||
|
"unsavedChanges": "नसुरक्षित परिवर्तन छ"
|
||||||
|
},
|
||||||
|
"title": "कन्फिगरेसन केन्द्र",
|
||||||
|
"versionActions": {
|
||||||
|
"newDraft": "नयाँ ड्राफ्ट",
|
||||||
|
"publishCurrent": "प्रकाशित गर्नुहोस्",
|
||||||
|
"refresh": "संस्करण रिफ्रेस",
|
||||||
|
"refreshing": "रिफ्रेस हुँदैछ",
|
||||||
|
"rollbackDialog": {
|
||||||
|
"confirm": "रोलब्याक पुष्टि",
|
||||||
|
"description": "संस्करण v{{version}} बाट नयाँ ड्राफ्ट क्लोन हुनेछ। सक्रिय संस्करण सिधै अधिलेखन हुँदैन।",
|
||||||
|
"title": "रोलब्याक पुष्टि गर्ने?"
|
||||||
|
},
|
||||||
|
"rollbackFailed": "रोलब्याक असफल भयो",
|
||||||
|
"rollbackSuccess": "v{{fromVersion}} बाट नयाँ ड्राफ्ट v{{version}} क्लोन गरियो",
|
||||||
|
"saveDraft": "ड्राफ्ट सेभ गर्नुहोस्",
|
||||||
|
"saveFailed": "कन्फिगरेसन सुरक्षित गर्न असफल"
|
||||||
|
},
|
||||||
|
"versionStatus": {
|
||||||
|
"active": "सक्रिय",
|
||||||
|
"archived": "अभिलेख",
|
||||||
|
"draft": "ड्राफ्ट"
|
||||||
|
},
|
||||||
|
"versionSwitcher": {
|
||||||
|
"count": "{{count}} वटा",
|
||||||
|
"current": "हाल हेर्दै",
|
||||||
|
"delete": "मेटाउनुहोस्",
|
||||||
|
"deleteConfirmDescription": "संस्करण ID {{id}} (version_no {{version}}) स्थायी रूपमा मेटाइनेछ। सक्रिय संस्करण मेटाउन मिल्दैन।",
|
||||||
|
"deleteConfirmTitle": "यो संस्करण मेटाउने?",
|
||||||
|
"effectiveAt": "लागू समय: {{value}}",
|
||||||
|
"empty": "संस्करण रेकर्ड छैन।",
|
||||||
|
"loading": "लोड हुँदैछ…",
|
||||||
|
"moreActions": "v{{version}} थप कार्य",
|
||||||
|
"noneSelected": "कुनै संस्करण छानिएको छैन",
|
||||||
|
"note": "टिप्पणी: {{value}}",
|
||||||
|
"rollback": "रोलब्याक",
|
||||||
|
"selected": "छानिएको",
|
||||||
|
"sheetDescription": "यस पृष्ठमा हेर्न एउटा संस्करण छान्नुहोस्। ड्राफ्ट सम्पादनयोग्य छ; सक्रिय र अभिलेख संस्करण केवल पढ्न मिल्ने छन्।",
|
||||||
|
"sheetTitle": "कन्फिगरेसन संस्करण बदल्नुहोस्",
|
||||||
|
"switch": "संस्करण बदल्नुहोस्",
|
||||||
|
"view": "हेर्नुहोस्"
|
||||||
|
},
|
||||||
|
"versionToolbar": {
|
||||||
|
"draftEditing": "ड्राफ्ट सम्पादन — सेभ र प्रकाशित गरेपछि लाइभ हुन्छ"
|
||||||
|
},
|
||||||
|
"wallet": {
|
||||||
|
"confirmSaveDescription": "ट्रान्सफर-इन/आउटको प्रति अर्डर सीमा अद्यावधिक हुन्छ र खेलाडीको वालेट ट्रान्सफरमा तुरुन्त असर पर्छ।",
|
||||||
|
"confirmSaveTitle": "वालेट सीमा सुरक्षित गर्ने?",
|
||||||
|
"description": "रकम खेलको सानो मुद्रा एकाइमा हुन्छ (उदाहरण, NPR मा 100 = 1.00 NPR)। न्यूनतम रकम कम्तीमा 1 सानो एकाइ हुनुपर्छ।",
|
||||||
|
"discard": "परिवर्तन त्याग्नुहोस्",
|
||||||
|
"fields": {
|
||||||
|
"inMax": "अधिकतम ट्रान्सफर-इन रकम",
|
||||||
|
"inMin": "न्यूनतम ट्रान्सफर-इन रकम",
|
||||||
|
"outMax": "अधिकतम ट्रान्सफर-आउट रकम",
|
||||||
|
"outMin": "न्यूनतम ट्रान्सफर-आउट रकम"
|
||||||
|
},
|
||||||
|
"hints": {
|
||||||
|
"inMax": "मुख्य वालेटबाट लटरी वालेटमा प्रति अर्डर अधिकतम",
|
||||||
|
"inMin": "मुख्य वालेटबाट लटरी वालेटमा प्रति अर्डर न्यूनतम",
|
||||||
|
"outMax": "लटरी वालेटबाट मुख्य वालेटमा प्रति अर्डर अधिकतम",
|
||||||
|
"outMin": "लटरी वालेटबाट मुख्य वालेटमा प्रति अर्डर न्यूनतम"
|
||||||
|
},
|
||||||
|
"loadFailed": "लोड असफल भयो",
|
||||||
|
"placeholders": {
|
||||||
|
"max": "उदाहरण: 10000.00",
|
||||||
|
"min": "उदाहरण: 1.00"
|
||||||
|
},
|
||||||
|
"saveFailed": "सेभ असफल भयो",
|
||||||
|
"saveSuccess": "सफलतापूर्वक सेभ भयो",
|
||||||
|
"title": "वालेट ट्रान्सफर सीमा सेटिङ",
|
||||||
|
"validation": {
|
||||||
|
"amountAtLeastMinorUnit": "{{field}} मान्य रकम हुनुपर्छ र कम्तीमा 0.01 हुनुपर्छ।",
|
||||||
|
"inRangeInvalid": "अधिकतम ट्रान्सफर-इन रकम न्यूनतम ट्रान्सफर-इन रकमभन्दा कम हुन सक्दैन।",
|
||||||
|
"outRangeInvalid": "अधिकतम ट्रान्सफर-आउट रकम न्यूनतम ट्रान्सफर-आउट रकमभन्दा कम हुन सक्दैन।"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,227 +1,305 @@
|
|||||||
{
|
{
|
||||||
"title": "ड्यासबोर्ड",
|
"abnormalTransferAction": "समाधान गर्न ट्रान्सफर सूची खोल्नुहोस्",
|
||||||
"refresh": "रिफ्रेस",
|
"abnormalTransferAllClear": "मिलान ठीक, असामान्य छैन",
|
||||||
"notice": "सूचना",
|
"abnormalTransferOrders": "असामान्य ट्रान्सफर अर्डर",
|
||||||
"sections": {
|
"abnormalTransferPending": "{{count}} समीक्षा बाँकी",
|
||||||
"today": "आजको सारांश",
|
"abnormalTransferScope": "वालेट मिलानबाट चिनिएको",
|
||||||
"lifetime": "ऐतिहासिक कुल",
|
"agent": {
|
||||||
"currentDraw": "हालको ड्रअ",
|
"activePlayersToday": "आज सक्रिय खेलाडी",
|
||||||
"currentDrawDetail": "हालको ड्रअ · {{drawNo}}",
|
"betOrdersToday": "आजका बाजी अर्डर",
|
||||||
"operations": "सञ्चालन (साइटव्यापी)",
|
"betOrdersTodayHint": "आज {{count}} अर्डर",
|
||||||
"snapshot": "हालको ड्रअ स्न्यापसट"
|
"canCreateChildAgent": "सन्तान एजेन्ट सिर्जना गर्न सक्छ",
|
||||||
|
"canCreatePlayer": "खेलाडी सिर्जना गर्न सक्छ",
|
||||||
|
"creditAllocated": "बाँडिएको {{amount}}",
|
||||||
|
"creditAllocatedLabel": "बाँडिएको क्रेडिट",
|
||||||
|
"creditAvailable": "उपलब्ध {{amount}}",
|
||||||
|
"creditTitle": "क्रेडिट सीमा",
|
||||||
|
"creditUsed": "प्रयोग {{amount}}",
|
||||||
|
"creditUsedLabel": "प्रयोग भएको क्रेडिट",
|
||||||
|
"directChildren": "प्रत्यक्ष सन्तान एजेन्ट",
|
||||||
|
"directPlayers": "प्रत्यक्ष खेलाडी",
|
||||||
|
"focusBet": "आजको बाजी मात्रा निगरानी",
|
||||||
|
"focusBills": "पछ्याउन बाँकी बिल",
|
||||||
|
"focusPlayers": "आजका सक्रिय खेलाडी",
|
||||||
|
"heroEyebrow": "आजको लाइन ककपिट",
|
||||||
|
"heroTitle": "{{name}} प्रत्यक्ष सञ्चालन",
|
||||||
|
"latestBetAt": "पछिल्लो बाजी {{time}}",
|
||||||
|
"lineDepth": "लाइन गहिराइ",
|
||||||
|
"lineMeta": "गहिराइ {{depth}} · सन्तान एजेन्ट {{childAgent}} · खेलाडी {{player}}",
|
||||||
|
"managementFocus": "व्यवस्थापन केन्द्र",
|
||||||
|
"no": "होइन",
|
||||||
|
"noBetToday": "आज अहिलेसम्म बाजी छैन",
|
||||||
|
"overviewEmpty": "लाइन सञ्चालन डाटा छैन। एजेन्ट बाइन्डिङ जाँच गर्नुहोस्।",
|
||||||
|
"pendingBills": "बाँकी बिल",
|
||||||
|
"pendingUnpaid": "नतिरेको {{amount}}",
|
||||||
|
"quickLinks": {
|
||||||
|
"agents": "अधीनस्थ एजेन्ट",
|
||||||
|
"bills": "एजेन्ट बिल",
|
||||||
|
"players": "खेलाडी",
|
||||||
|
"reports": "रिपोर्ट",
|
||||||
|
"tickets": "टिकट"
|
||||||
|
},
|
||||||
|
"quickStatsTitle": "लाइन अनुमति झलक",
|
||||||
|
"settlementCycle": "चक्र {{cycle}}",
|
||||||
|
"sevenDayBet": "७-दिने बाजी",
|
||||||
|
"sevenDayPayout": "भुक्तानी {{amount}}",
|
||||||
|
"sevenDayPayoutLabel": "७-दिने भुक्तानी",
|
||||||
|
"sevenDayProfit": "नाफा {{amount}}",
|
||||||
|
"sevenDayShareProfit": "शेयर नाफा {{amount}}",
|
||||||
|
"sevenDayShareProfitLabel": "७-दिने शेयर नाफा",
|
||||||
|
"sevenDayTitle": "पछिल्लो ७ दिन",
|
||||||
|
"shareProfitScopeHint": "यस नोडको शेयर नाफा (share_snapshot)",
|
||||||
|
"shareRate": "कुल शेयर {{rate}}%",
|
||||||
|
"subtitle": "{{name}} · यो लाइन",
|
||||||
|
"subtreeAgents": "लाइन एजेन्ट",
|
||||||
|
"teamPlayers": "लाइन खेलाडी",
|
||||||
|
"teamTitle": "टोली परिमाण",
|
||||||
|
"title": "सञ्चालन सारांश",
|
||||||
|
"todayBet": "आजको बाजी",
|
||||||
|
"todayPayout": "आजको भुक्तानी",
|
||||||
|
"todayProfit": "आजको नाफा",
|
||||||
|
"todayShareProfit": "आजको शेयर नाफा",
|
||||||
|
"topMomentum": "आजको बाजी केन्द्र",
|
||||||
|
"topMomentumHint": "नाफा {{profit}}",
|
||||||
|
"topMomentumPayout": "भुक्तानी {{amount}}",
|
||||||
|
"viewBills": "बिल हेर्नुहोस्",
|
||||||
|
"viewLine": "एजेन्ट लाइन",
|
||||||
|
"yes": "हो"
|
||||||
},
|
},
|
||||||
"countdownToClose": "बन्द हुन बाँकी",
|
|
||||||
"scheduledDrawTime": "ड्रअ {{time}}",
|
|
||||||
"analytics": {
|
"analytics": {
|
||||||
"title": "वित्त सारांश",
|
"agentRanking": "शीर्ष ५ एजेन्ट",
|
||||||
"periodLabel": "अवधि",
|
|
||||||
"metricLabel": "मेट्रिक",
|
|
||||||
"playLabel": "प्ले फिल्टर",
|
|
||||||
"allPlays": "सबै प्ले",
|
"allPlays": "सबै प्ले",
|
||||||
"customRange": "मिति दायरा",
|
|
||||||
"rangeHint": "अवधि {{range}}",
|
|
||||||
"selectPeriod": "अवधि छान्नुहोस्",
|
|
||||||
"chartTruncated": "ट्रेन्ड {{from}} — {{to}} मात्र (कुल {{days}} दिन)",
|
"chartTruncated": "ट्रेन्ड {{from}} — {{to}} मात्र (कुल {{days}} दिन)",
|
||||||
"summaryBet": "अवधि बेट",
|
"customRange": "मिति दायरा",
|
||||||
"summaryPayout": "अवधि भुक्तानी",
|
|
||||||
"summaryProfit": "अवधि नाफा",
|
|
||||||
"dailyTrend": "अवधि ट्रेन्ड",
|
"dailyTrend": "अवधि ट्रेन्ड",
|
||||||
"granularityDay": "दैनिक",
|
"granularityDay": "दैनिक",
|
||||||
|
"metricLabel": "मेट्रिक",
|
||||||
|
"metrics": {
|
||||||
|
"bet": "बेट",
|
||||||
|
"overview": "सिंहावलोकन",
|
||||||
|
"payout": "भुक्तानी",
|
||||||
|
"profit": "नाफा"
|
||||||
|
},
|
||||||
|
"noAgentData": "यस अवधिमा एजेन्ट डाटा छैन",
|
||||||
|
"noPlayData": "यस अवधिमा प्ले डाटा छैन",
|
||||||
|
"periodDistribution": "अवधि संरचना",
|
||||||
|
"periodLabel": "अवधि",
|
||||||
|
"periods": {
|
||||||
|
"custom": "अनुकूल",
|
||||||
|
"last_30_days": "पछिल्लो ३० दिन",
|
||||||
|
"last_7_days": "पछिल्लो ७ दिन",
|
||||||
|
"lifetime": "सबै",
|
||||||
|
"this_month": "यो महिना",
|
||||||
|
"today": "आज"
|
||||||
|
},
|
||||||
"playBreakdown": "प्ले विभाजन",
|
"playBreakdown": "प्ले विभाजन",
|
||||||
|
"playLabel": "प्ले फिल्टर",
|
||||||
"playRanking": "शीर्ष ५ प्ले",
|
"playRanking": "शीर्ष ५ प्ले",
|
||||||
"agentRanking": "शीर्ष ५ एजेन्ट",
|
"rangeHint": "अवधि {{range}}",
|
||||||
"rankingMetricLabel": "रैंकिङ मेट्रिक",
|
"rankingMetricLabel": "रैंकिङ मेट्रिक",
|
||||||
"rankingMetrics": {
|
"rankingMetrics": {
|
||||||
"bet": "बेट रकम",
|
"bet": "बेट रकम",
|
||||||
"payout": "भुक्तानी",
|
"payout": "भुक्तानी",
|
||||||
"profit": "नाफा"
|
"profit": "नाफा"
|
||||||
},
|
},
|
||||||
"periodDistribution": "अवधि संरचना",
|
"selectPeriod": "अवधि छान्नुहोस्",
|
||||||
"noPlayData": "यस अवधिमा प्ले डाटा छैन",
|
"shareProfitHint": "विभाजन पछि तपाईंको शेयर — प्लेटफर्म वा सम्पूर्ण टोलीको कुल नाफा/नोक्सान होइन",
|
||||||
"noAgentData": "यस अवधिमा एजेन्ट डाटा छैन",
|
"summaryBet": "अवधि बेट",
|
||||||
"periods": {
|
"summaryPayout": "अवधि भुक्तानी",
|
||||||
"today": "आज",
|
"summaryProfit": "अवधि नाफा",
|
||||||
"last_7_days": "पछिल्लो ७ दिन",
|
"summaryShareProfit": "आफ्नो शेयर नाफा",
|
||||||
"last_30_days": "पछिल्लो ३० दिन",
|
"title": "वित्त सारांश"
|
||||||
"this_month": "यो महिना",
|
|
||||||
"lifetime": "सबै",
|
|
||||||
"custom": "अनुकूल"
|
|
||||||
},
|
|
||||||
"metrics": {
|
|
||||||
"overview": "सिंहावलोकन",
|
|
||||||
"bet": "बेट",
|
|
||||||
"payout": "भुक्तानी",
|
|
||||||
"profit": "नाफा"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
"batchOther": "अन्य स्थिति",
|
||||||
|
"batchPending": "समीक्षा बाँकी",
|
||||||
|
"batchPendingDraws": "सम्बन्धित ड्रअ",
|
||||||
|
"batchPendingDrawsCount": "{{count}} ड्रअ पेन्डिङ",
|
||||||
|
"batchPublished": "प्रकाशित",
|
||||||
|
"batchTotal": "कुल ब्याच",
|
||||||
|
"capUsage": "क्याप प्रयोग",
|
||||||
"chartLegend": {
|
"chartLegend": {
|
||||||
"bet": "बेट",
|
"bet": "बेट",
|
||||||
"payout": "भुक्तानी",
|
"payout": "भुक्तानी",
|
||||||
"profit": "नाफा"
|
"profit": "नाफा"
|
||||||
},
|
},
|
||||||
"playBreakdownHint": "भुक्तानी {{payout}} · नाफा {{profit}}",
|
"countdownToClose": "बन्द हुन बाँकी",
|
||||||
"viewReports": "प्रतिवेदन",
|
"cs": {
|
||||||
"lifetimeBetTotal": "जम्मा बेट",
|
"activePlayersHint": "आज बाजी गर्ने खेलाडी",
|
||||||
"lifetimePayout": "जम्मा भुक्तानी",
|
"activePlayersToday": "आज सक्रिय खेलाडी",
|
||||||
"lifetimeProfit": "जम्मा प्लेटफर्म नाफा",
|
"latestTicketAt": "पछिल्लो टिकट {{time}}",
|
||||||
"lifetimeActivityHint": "{{draws}} ड्रअमा बेट · {{days}} व्यापार दिन",
|
"noTicketToday": "आज टिकट छैन",
|
||||||
"lifetimeDateRangeHint": "अवधि {{range}}",
|
"openModule": "मोड्युल खोल्नुहोस्",
|
||||||
|
"overviewEmpty": "सपोर्ट सारांश छैन। साइट बाइन्डिङ जाँच गर्नुहोस्।",
|
||||||
|
"playerCount": "साइट खेलाडी",
|
||||||
|
"playerCountHint": "यो साइटका दर्ता खेलाडी",
|
||||||
|
"quickLinks": {
|
||||||
|
"players": "खेलाडी",
|
||||||
|
"tickets": "टिकट",
|
||||||
|
"wallet": "वालेट लेजर"
|
||||||
|
},
|
||||||
|
"scopeTitle": "आजको झलक",
|
||||||
|
"subtitle": "{{name}} · खेलाडी र टिकट",
|
||||||
|
"subtitleFallback": "साइट सपोर्ट · खेलाडी र टिकट",
|
||||||
|
"ticketsToday": "आजका टिकट",
|
||||||
|
"title": "सपोर्ट कार्यस्थल",
|
||||||
|
"workspaceTitle": "छिटो पहुँच"
|
||||||
|
},
|
||||||
|
"currentDraw": "हालको ड्रअ",
|
||||||
"currentDrawBetTotal": "हालको ड्रअ बेट",
|
"currentDrawBetTotal": "हालको ड्रअ बेट",
|
||||||
|
"currentDrawFinanceHint": "तलका चार्ट ड्र {{drawNo}} का लागि",
|
||||||
"currentDrawPayout": "हालको भुक्तानी",
|
"currentDrawPayout": "हालको भुक्तानी",
|
||||||
"currentDrawProfit": "हालको नाफा/नोक्सान",
|
"currentDrawProfit": "हालको नाफा/नोक्सान",
|
||||||
"drawFinanceDetails": "ड्रअ वित्त विवरण",
|
|
||||||
"detailsShort": "विवरण",
|
|
||||||
"todayBetTotal": "आजको कुल बेट",
|
|
||||||
"todayPayout": "आजको भुक्तानी",
|
|
||||||
"todayProfit": "आजको नाफा/नोक्सान",
|
|
||||||
"todayBusinessDateHint": "व्यापार मिति {{date}}",
|
|
||||||
"todayPayoutHint": "भुक्तानी {{amount}}",
|
|
||||||
"drawNoHint": "ड्रअ {{drawNo}}",
|
|
||||||
"orderAndTicket": "{{orders}} अर्डर · {{tickets}} वस्तु",
|
|
||||||
"marginRate": "सकल मार्जिन ~{{rate}}%",
|
|
||||||
"financeStructure": "बेट कोष संरचना",
|
|
||||||
"payoutComposition": "भुक्तानी संरचना",
|
|
||||||
"winPayout": "जित भुक्तानी",
|
|
||||||
"jackpotPayout": "Jackpot भुक्तानी",
|
|
||||||
"houseGross": "प्लेटफर्म बाँकी",
|
|
||||||
"payoutRateOfBet": "भुक्तानी/बेट {{rate}}%",
|
|
||||||
"noFinanceActivity": "यस ड्रअमा बेट छैन",
|
|
||||||
"noPayoutYet": "यस ड्रअमा भुक्तानी छैन",
|
|
||||||
"resultBatches": "परिणाम ब्याच प्रगति",
|
|
||||||
"resultBatchQueueScope": "साइटव्यापी नतिजा ब्याच",
|
|
||||||
"batchPending": "समीक्षा बाँकी",
|
|
||||||
"batchPendingDraws": "सम्बन्धित ड्रअ",
|
|
||||||
"batchPendingDrawsCount": "{{count}} ड्रअ पेन्डिङ",
|
|
||||||
"platformLockedAndCap": "साइट लक {{locked}} / क्याप {{cap}}",
|
|
||||||
"platformLockedLabel": "लक",
|
|
||||||
"platformCapLabel": "क्याप",
|
|
||||||
"platformCapUnset": "सेट छैन",
|
|
||||||
"platformCapNotConfigured": "साइट लक {{locked}} · क्याप कन्फिगर गरिएको छैन",
|
|
||||||
"platformOrderAndTicket": "साइटव्यापी {{orders}} अर्डर · {{tickets}} लाइन",
|
|
||||||
"platformBetTotal": "जम्मा बेट",
|
|
||||||
"platformNoFinanceActivity": "साइटव्यापी अहिले बेट छैन",
|
|
||||||
"platformNoPayoutYet": "साइटव्यापी पेआउट छैन",
|
|
||||||
"batchPublished": "प्रकाशित",
|
|
||||||
"batchTotal": "कुल ब्याच",
|
|
||||||
"batchOther": "अन्य स्थिति",
|
|
||||||
"settlementOverview": "सेटलमेन्ट ब्याच",
|
|
||||||
"noSettlementBatches": "सेटलमेन्ट ब्याच छैन",
|
|
||||||
"quickLinksTitle": "छिटो लिङ्क",
|
|
||||||
"currentPayout": "हालको भुक्तानी",
|
"currentPayout": "हालको भुक्तानी",
|
||||||
"currentProfit": "हालको प्लेटफर्म नाफा",
|
"currentProfit": "हालको प्लेटफर्म नाफा",
|
||||||
"currentDraw": "हालको ड्रअ",
|
"detailsShort": "विवरण",
|
||||||
"drawSequence": "राउन्ड {{sequence}}",
|
|
||||||
"drawDetails": "ड्रअ विवरण",
|
"drawDetails": "ड्रअ विवरण",
|
||||||
"ticketCount": "टिकट वस्तु संख्या",
|
"drawFinanceDetails": "ड्रअ वित्त विवरण",
|
||||||
"relatedBetAmount": "सम्बन्धित बेट रकम",
|
"drawNoHint": "ड्रअ {{drawNo}}",
|
||||||
"riskCapUsage": "जोखिम क्याप प्रयोग",
|
"drawSequence": "राउन्ड {{sequence}}",
|
||||||
"lockedAndCap": "लक {{locked}} / क्याप {{cap}}",
|
"finance": {
|
||||||
"occupancyDetails": "अकुपेन्सी विवरण",
|
"abnormalTransfers": "असामान्य स्थानान्तरण",
|
||||||
"hotNumbersTop10": "शीर्ष 10 हट नम्बर",
|
"creditPlayersHint": "क्रेडिट {{count}} जना",
|
||||||
"playDimension": "प्ले डाइमेन्सन",
|
"overviewEmpty": "वित्त सारांश छैन। साइट बाइन्डिङ जाँच गर्नुहोस्।",
|
||||||
"soldOutDistribution": "बिक्री समाप्त वितरण",
|
"payableBills": "भुक्तानी बाँकी बिल",
|
||||||
"soldOutTotal": "कुल बिक्री समाप्त",
|
"payableUnpaid": "नतिरेको {{amount}}",
|
||||||
"pendingReviewResults": "समीक्षा बाँकी परिणाम",
|
"payableUnpaidLabel": "कुल बाँकी",
|
||||||
"abnormalTransferOrders": "असामान्य ट्रान्सफर अर्डर",
|
"pendingConfirmBills": "पुष्टि बाँकी बिल",
|
||||||
"abnormalTransferScope": "वालेट मिलानबाट चिनिएको",
|
"pendingConfirmHint": "अवधि बन्द पछि वित्त पुष्टि बाँकी",
|
||||||
"abnormalTransferPending": "{{count}} समीक्षा बाँकी",
|
|
||||||
"abnormalTransferAllClear": "मिलान ठीक, असामान्य छैन",
|
|
||||||
"abnormalTransferAction": "समाधान गर्न ट्रान्सफर सूची खोल्नुहोस्",
|
|
||||||
"viewTransferOrders": "ट्रान्सफर अर्डर हेर्नुहोस्",
|
|
||||||
"noSoldOutNumbers": "बिक्री समाप्त नम्बर छैन",
|
|
||||||
"noPoolData": "यस डाइमेन्सनमा पूल डाटा छैन",
|
|
||||||
"numbersByUsage": "प्रयोग अनुसार नम्बर",
|
|
||||||
"capUsage": "क्याप प्रयोग",
|
|
||||||
"tabs": {
|
|
||||||
"4d": "4D",
|
|
||||||
"3d": "3D",
|
|
||||||
"2d": "2D",
|
|
||||||
"special": "विशेष"
|
|
||||||
},
|
|
||||||
"soldOutBuckets": {
|
|
||||||
"d4": "4D",
|
|
||||||
"d3": "3D",
|
|
||||||
"d2": "2D",
|
|
||||||
"special": "विशेष",
|
|
||||||
"other": "अन्य"
|
|
||||||
},
|
|
||||||
"quickLinks": {
|
"quickLinks": {
|
||||||
|
"bills": "सेटलमेन्ट केन्द्र",
|
||||||
|
"reconcile": "मिलान केन्द्र",
|
||||||
|
"reports": "रिपोर्ट",
|
||||||
|
"transfers": "स्थानान्तरण"
|
||||||
|
},
|
||||||
|
"reconcileTitle": "वालेट मिलान",
|
||||||
|
"settlementTitle": "क्रेडिट सेटलमेन्ट",
|
||||||
|
"subtitle": "{{name}} · मिलान र सेटलमेन्ट",
|
||||||
|
"subtitleFallback": "साइट वित्त · मिलान र सेटलमेन्ट",
|
||||||
|
"title": "वित्त कार्यस्थल",
|
||||||
|
"walletPlayers": "वालेट खेलाडी"
|
||||||
|
},
|
||||||
|
"financeStructure": "बेट कोष संरचना",
|
||||||
|
"hotNumbersTop10": "शीर्ष 10 हट नम्बर",
|
||||||
|
"houseGross": "प्लेटफर्म बाँकी",
|
||||||
|
"jackpotPayout": "Jackpot भुक्तानी",
|
||||||
|
"lifetimeActivityHint": "{{draws}} ड्रअमा बेट · {{days}} व्यापार दिन",
|
||||||
|
"lifetimeBetTotal": "जम्मा बेट",
|
||||||
|
"lifetimeDateRangeHint": "अवधि {{range}}",
|
||||||
|
"lifetimePayout": "जम्मा भुक्तानी",
|
||||||
|
"lifetimeProfit": "जम्मा प्लेटफर्म नाफा",
|
||||||
|
"lockedAndCap": "लक {{locked}} / क्याप {{cap}}",
|
||||||
|
"marginRate": "सकल मार्जिन ~{{rate}}%",
|
||||||
|
"noFinanceActivity": "यस ड्रअमा बेट छैन",
|
||||||
|
"noPayoutYet": "यस ड्रअमा भुक्तानी छैन",
|
||||||
|
"noPoolData": "यस डाइमेन्सनमा पूल डाटा छैन",
|
||||||
|
"noSettlementBatches": "सेटलमेन्ट ब्याच छैन",
|
||||||
|
"noSoldOutNumbers": "बिक्री समाप्त नम्बर छैन",
|
||||||
|
"notice": "सूचना",
|
||||||
|
"numbersByUsage": "प्रयोग अनुसार नम्बर",
|
||||||
|
"occupancyDetails": "अकुपेन्सी विवरण",
|
||||||
|
"orderAndTicket": "{{orders}} अर्डर · {{tickets}} वस्तु",
|
||||||
|
"payoutComposition": "भुक्तानी संरचना",
|
||||||
|
"payoutRateOfBet": "भुक्तानी/बेट {{rate}}%",
|
||||||
|
"pendingReviewResults": "समीक्षा बाँकी परिणाम",
|
||||||
|
"platformBetTotal": "जम्मा बेट",
|
||||||
|
"platformCapLabel": "क्याप",
|
||||||
|
"platformCapNotConfigured": "साइट लक {{locked}} · क्याप कन्फिगर गरिएको छैन",
|
||||||
|
"platformCapUnset": "सेट छैन",
|
||||||
|
"platformLockedAndCap": "साइट लक {{locked}} / क्याप {{cap}}",
|
||||||
|
"platformLockedLabel": "लक",
|
||||||
|
"platformNoFinanceActivity": "साइटव्यापी अहिले बेट छैन",
|
||||||
|
"platformNoPayoutYet": "साइटव्यापी पेआउट छैन",
|
||||||
|
"platformOrderAndTicket": "साइटव्यापी {{orders}} अर्डर · {{tickets}} लाइन",
|
||||||
|
"playBreakdownHint": "भुक्तानी {{payout}} · नाफा {{profit}}",
|
||||||
|
"playDimension": "प्ले डाइमेन्सन",
|
||||||
|
"quickLinks": {
|
||||||
|
"auditLogs": "अडिट लग",
|
||||||
"createDrawPlan": "ड्रअ योजना सिर्जना",
|
"createDrawPlan": "ड्रअ योजना सिर्जना",
|
||||||
"drawSchedule": "खुला बिक्री / ड्रअ",
|
"drawSchedule": "खुला बिक्री / ड्रअ",
|
||||||
"results": "परिणाम",
|
|
||||||
"tickets": "टिकट व्यवस्थापन",
|
|
||||||
"walletTransactions": "वालेट कारोबार",
|
|
||||||
"auditLogs": "अडिट लग",
|
|
||||||
"reports": "रिपोर्ट केन्द्र",
|
|
||||||
"payoutRules": "बाधा र रिबेट",
|
"payoutRules": "बाधा र रिबेट",
|
||||||
|
"reports": "रिपोर्ट केन्द्र",
|
||||||
|
"results": "परिणाम",
|
||||||
"riskMonitor": "जोखिम निगरानी",
|
"riskMonitor": "जोखिम निगरानी",
|
||||||
"systemSettings": "प्रणाली सेटिङ"
|
"systemSettings": "प्रणाली सेटिङ",
|
||||||
|
"tickets": "टिकट व्यवस्थापन",
|
||||||
|
"walletTransactions": "वालेट कारोबार"
|
||||||
},
|
},
|
||||||
|
"quickLinksTitle": "छिटो लिङ्क",
|
||||||
|
"refresh": "रिफ्रेस",
|
||||||
|
"relatedBetAmount": "सम्बन्धित बेट रकम",
|
||||||
|
"resultBatchQueueScope": "साइटव्यापी नतिजा ब्याच",
|
||||||
|
"resultBatches": "परिणाम ब्याच प्रगति",
|
||||||
|
"riskCapUsage": "जोखिम क्याप प्रयोग",
|
||||||
|
"scheduledDrawTime": "ड्रअ {{time}}",
|
||||||
|
"sections": {
|
||||||
|
"currentDraw": "हालको ड्रअ",
|
||||||
|
"currentDrawDetail": "हालको ड्रअ · {{drawNo}}",
|
||||||
|
"lifetime": "ऐतिहासिक कुल",
|
||||||
|
"operations": "सञ्चालन (साइटव्यापी)",
|
||||||
|
"snapshot": "हालको ड्रअ स्न्यापसट",
|
||||||
|
"today": "आजको सारांश"
|
||||||
|
},
|
||||||
|
"settlementOverview": "सेटलमेन्ट ब्याच",
|
||||||
"site": {
|
"site": {
|
||||||
"title": "साइट सारांश",
|
"activePlayersToday": "आज सक्रिय खेलाडी",
|
||||||
"subtitle": "{{name}} · यो साइट",
|
"agentCount": "एजेन्ट नोड",
|
||||||
"todayBet": "आजको बाजी",
|
"betOrdersTodayHint": "आज {{count}} अर्डर",
|
||||||
"todayProfit": "आजको नाफा/नोक्सान",
|
"latestBetAt": "पछिल्लो बाजी {{time}}",
|
||||||
"sevenDayTitle": "पछिल्लो ७ दिन",
|
"noBetToday": "आज अहिलेसम्म बाजी छैन",
|
||||||
|
"overviewEmpty": "साइट सञ्चालन डाटा छैन। कृपया साइट बाइन्डिङ जाँच गर्नुहोस्।",
|
||||||
|
"pendingBills": "बाँकी बिल",
|
||||||
|
"pendingUnpaid": "नतिरेको {{amount}}",
|
||||||
|
"playerCount": "खेलाडी संख्या",
|
||||||
|
"profitScopeHint": "साइट दायरा: बाजी माइनस भुक्तानी",
|
||||||
|
"quickLinks": {
|
||||||
|
"agents": "एजेन्ट",
|
||||||
|
"bills": "सेटलमेन्ट",
|
||||||
|
"players": "खेलाडी",
|
||||||
|
"reports": "रिपोर्ट",
|
||||||
|
"tickets": "टिकट"
|
||||||
|
},
|
||||||
|
"scaleTitle": "साइट परिमाण",
|
||||||
"sevenDayBet": "७-दिने बाजी",
|
"sevenDayBet": "७-दिने बाजी",
|
||||||
"sevenDayPayout": "७-दिने भुक्तानी",
|
"sevenDayPayout": "७-दिने भुक्तानी",
|
||||||
"sevenDayProfit": "७-दिने नाफा/नोक्सान",
|
"sevenDayProfit": "७-दिने नाफा/नोक्सान",
|
||||||
"profitScopeHint": "साइट दायरा: बाजी माइनस भुक्तानी",
|
|
||||||
"activePlayersToday": "आज सक्रिय खेलाडी",
|
|
||||||
"betOrdersTodayHint": "आज {{count}} अर्डर",
|
|
||||||
"pendingBills": "बाँकी बिल",
|
|
||||||
"pendingUnpaid": "नतिरेको {{amount}}",
|
|
||||||
"latestBetAt": "पछिल्लो बाजी {{time}}",
|
|
||||||
"noBetToday": "आज अहिलेसम्म बाजी छैन",
|
|
||||||
"scaleTitle": "साइट परिमाण",
|
|
||||||
"agentCount": "एजेन्ट नोड",
|
|
||||||
"playerCount": "खेलाडी संख्या",
|
|
||||||
"topAgentToday": "आजको शीर्ष एजेन्ट: {{name}} ({{amount}})",
|
|
||||||
"topAgentTodayLabel": "आजको शीर्ष एजेन्ट",
|
|
||||||
"overviewEmpty": "साइट सञ्चालन डाटा छैन। कृपया साइट बाइन्डिङ जाँच गर्नुहोस्।",
|
|
||||||
"quickLinks": {
|
|
||||||
"tickets": "टिकट",
|
|
||||||
"players": "खेलाडी",
|
|
||||||
"reports": "रिपोर्ट",
|
|
||||||
"agents": "एजेन्ट",
|
|
||||||
"bills": "सेटलमेन्ट"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"agent": {
|
|
||||||
"title": "सञ्चालन सारांश",
|
|
||||||
"subtitle": "{{name}} · यो लाइन",
|
|
||||||
"creditTitle": "क्रेडिट सीमा",
|
|
||||||
"creditAvailable": "उपलब्ध {{amount}}",
|
|
||||||
"creditAllocatedLabel": "बाँडिएको क्रेडिट",
|
|
||||||
"creditUsedLabel": "प्रयोग भएको क्रेडिट",
|
|
||||||
"shareRate": "कुल शेयर {{rate}}%",
|
|
||||||
"shareProfitScopeHint": "यस नोडको शेयर नाफा (share_snapshot)",
|
|
||||||
"teamTitle": "टोली परिमाण",
|
|
||||||
"directChildren": "प्रत्यक्ष सन्तान एजेन्ट",
|
|
||||||
"directPlayers": "प्रत्यक्ष खेलाडी",
|
|
||||||
"subtreeAgents": "लाइन एजेन्ट",
|
|
||||||
"teamPlayers": "लाइन खेलाडी",
|
|
||||||
"activePlayersToday": "आज सक्रिय खेलाडी",
|
|
||||||
"betOrdersTodayHint": "आज {{count}} अर्डर",
|
|
||||||
"todayBet": "आजको बाजी",
|
|
||||||
"todayShareProfit": "आजको शेयर नाफा",
|
|
||||||
"sevenDayTitle": "पछिल्लो ७ दिन",
|
"sevenDayTitle": "पछिल्लो ७ दिन",
|
||||||
"sevenDayBet": "७-दिने बाजी",
|
"subtitle": "{{name}} · यो साइट",
|
||||||
"sevenDayPayoutLabel": "७-दिने भुक्तानी",
|
"title": "साइट सारांश",
|
||||||
"sevenDayShareProfitLabel": "७-दिने शेयर नाफा",
|
"todayBet": "आजको बाजी",
|
||||||
"pendingBills": "बाँकी बिल",
|
"todayProfit": "आजको नाफा/नोक्सान",
|
||||||
"pendingUnpaid": "नतिरेको {{amount}}",
|
"topAgentToday": "आजको शीर्ष एजेन्ट: {{name}} ({{amount}})",
|
||||||
"latestBetAt": "पछिल्लो बाजी {{time}}",
|
"topAgentTodayLabel": "आजको शीर्ष एजेन्ट"
|
||||||
"noBetToday": "आज अहिलेसम्म बाजी छैन",
|
|
||||||
"yes": "हो",
|
|
||||||
"no": "होइन",
|
|
||||||
"lineMeta": "गहिराइ {{depth}} · सन्तान एजेन्ट {{childAgent}} · खेलाडी {{player}}",
|
|
||||||
"overviewEmpty": "लाइन सञ्चालन डाटा छैन। एजेन्ट बाइन्डिङ जाँच गर्नुहोस्।"
|
|
||||||
},
|
},
|
||||||
|
"soldOutBuckets": {
|
||||||
|
"d2": "2D",
|
||||||
|
"d3": "3D",
|
||||||
|
"d4": "4D",
|
||||||
|
"other": "अन्य",
|
||||||
|
"special": "विशेष"
|
||||||
|
},
|
||||||
|
"soldOutDistribution": "बिक्री समाप्त वितरण",
|
||||||
|
"soldOutTotal": "कुल बिक्री समाप्त",
|
||||||
|
"tabs": {
|
||||||
|
"2d": "2D",
|
||||||
|
"3d": "3D",
|
||||||
|
"4d": "4D",
|
||||||
|
"special": "विशेष"
|
||||||
|
},
|
||||||
|
"ticketCount": "टिकट वस्तु संख्या",
|
||||||
|
"title": "ड्यासबोर्ड",
|
||||||
|
"todayBetTotal": "आजको कुल बेट",
|
||||||
|
"todayBusinessDateHint": "व्यापार मिति {{date}}",
|
||||||
|
"todayPayout": "आजको भुक्तानी",
|
||||||
|
"todayPayoutHint": "भुक्तानी {{amount}}",
|
||||||
|
"todayProfit": "आजको नाफा/नोक्सान",
|
||||||
|
"viewReports": "प्रतिवेदन",
|
||||||
|
"viewTransferOrders": "ट्रान्सफर अर्डर हेर्नुहोस्",
|
||||||
"warnings": {
|
"warnings": {
|
||||||
"drawPermission": "यो खातासँग ड्रअ/ड्यासबोर्ड हेर्ने अनुमति छैन। वित्तीय र जोखिम डाटा फिर्ता आएन।",
|
|
||||||
"walletPermission": "यो खातासँग वालेट मिलान हेर्ने अनुमति छैन। असामान्य ट्रान्सफर संख्या फिर्ता आएन।",
|
|
||||||
"analyticsUnavailable": "ट्रेन्ड/र्याङ्किङ विश्लेषण उपलब्ध छैन। माथिको KPI हेर्न सकिन्छ।",
|
"analyticsUnavailable": "ट्रेन्ड/र्याङ्किङ विश्लेषण उपलब्ध छैन। माथिको KPI हेर्न सकिन्छ।",
|
||||||
"loadFailed": "लोड असफल भयो। API र लगइन अवस्था जाँच गर्नुहोस्।"
|
"apiResourceMissing": "ड्यासबोर्ड विश्लेषण API दर्ता छैन। चलाउनुहोस्: php artisan lottery:admin-auth-sync (वा पछिल्लो माइग्रेसन), त्यसपछि रिफ्रेस।",
|
||||||
}
|
"drawPermission": "यो खातासँग ड्रअ/ड्यासबोर्ड हेर्ने अनुमति छैन। वित्तीय र जोखिम डाटा फिर्ता आएन।",
|
||||||
|
"loadFailed": "लोड असफल भयो। API र लगइन अवस्था जाँच गर्नुहोस्।",
|
||||||
|
"walletPermission": "यो खातासँग वालेट मिलान हेर्ने अनुमति छैन। असामान्य ट्रान्सफर संख्या फिर्ता आएन।"
|
||||||
|
},
|
||||||
|
"winPayout": "जित भुक्तानी"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,229 +1,235 @@
|
|||||||
{
|
{
|
||||||
"title": "ड्रअ",
|
"actionFailed": "{{name}} असफल भयो",
|
||||||
"statusListTitle": "ड्रअ सूची",
|
"actionSuccess": "{{name}} सफल भयो",
|
||||||
"pageGuide": "ड्र जीवनचक्र व्यवस्थापन: योजना, बन्द, नतिजा समीक्षा र सेटलमेन्ट।",
|
|
||||||
"generatePlan": "ड्रअ योजना सिर्जना",
|
|
||||||
"generating": "सिर्जना हुँदैछ…",
|
|
||||||
"generateSuccess": "{{created}} ड्रअ सिर्जना भयो, बफर {{upcoming}}/{{target}}",
|
|
||||||
"generateFailed": "सिर्जना असफल भयो",
|
|
||||||
"scheduleTimezoneHint": "सूची समय स्थानीय समयक्षेत्र {{tz}} मा; सर्भर UTC मा भण्डारण। ड्र अन्तराल {{interval}} मिनेट।",
|
|
||||||
"createDraw": {
|
|
||||||
"open": "नयाँ ड्रअ",
|
|
||||||
"title": "म्यानुअल ड्रअ सिर्जना",
|
|
||||||
"description": "स्थानीय समयक्षेत्र {{tz}} मा मिति र समय प्रविष्ट गर्नुहोस्।",
|
|
||||||
"hint": "सुरु < बन्द < ड्रअ। ड्रअ नम्बर वैकल्पिक।",
|
|
||||||
"drawNoPlaceholder": "ड्रअ नम्बर प्रविष्ट गर्नुहोस्, जस्तै 20260526-008",
|
|
||||||
"drawTimeRequired": "ड्रअ समय आवश्यक छ",
|
|
||||||
"submit": "सिर्जना",
|
|
||||||
"saving": "सिर्जना हुँदैछ…",
|
|
||||||
"success": "ड्रअ सिर्जना भयो",
|
|
||||||
"failed": "सिर्जना असफल"
|
|
||||||
},
|
|
||||||
"drawNo": "ड्रअ नं.",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"startTime": "सुरु समय",
|
|
||||||
"closeTime": "बन्द समय",
|
|
||||||
"drawTime": "ड्रअ समय",
|
|
||||||
"betTotal": "कुल बेट",
|
|
||||||
"payoutTotal": "कुल भुक्तानी",
|
|
||||||
"profitLoss": "नाफा/नोक्सानी",
|
|
||||||
"actions": "कार्य",
|
"actions": "कार्य",
|
||||||
"queryDraw": "ड्रअ खोज्नुहोस्",
|
"actualBet": "वास्तविक कटौती बेट",
|
||||||
"reset": "रिसेट",
|
"backToList": "ड्र सूचीमा फर्कनुहोस्",
|
||||||
"fuzzyDrawNo": "फजी ड्रअ नं.",
|
"backToReviewQueue": "समीक्षा सूचीमा फर्कनुहोस्",
|
||||||
"viewDetails": "विवरण हेर्नुहोस्",
|
"batchDelete": {
|
||||||
"editDraw": {
|
"action": "{{count}} ड्रअ मेटाउनुहोस्",
|
||||||
"action": "सम्पादन",
|
"confirmDescription": "{{count}} विना दांवका ड्रअहरू मेटाउनेछ। यो पूर्ववत गर्न सकिँदैन।",
|
||||||
"title": "ड्रअ सम्पादन",
|
"confirmTitle": "ब्याच मेटाउने पुष्टि?",
|
||||||
"description": "ड्रअ {{drawNo}} · स्थानीय समयक्षेत्र {{tz}} मा सम्पादन",
|
"deleting": "मेटाउँदै…",
|
||||||
"drawNoPlaceholder": "ड्रअ नम्बर प्रविष्ट गर्नुहोस्, जस्तै 20260526-008",
|
"failed": "ब्याच मेटाउन असफल",
|
||||||
"submit": "सेभ",
|
"partialFailed": "आंशिक असफल: {{success}} सफल, {{failed}} असफल",
|
||||||
"saving": "सेभ हुँदैछ…",
|
"success": "सफलतापूर्वक {{count}} ड्रअ मेटाइयो"
|
||||||
"success": "ड्रअ अद्यावधिक भयो",
|
|
||||||
"failed": "अद्यावधिक असफल"
|
|
||||||
},
|
|
||||||
"deleteDraw": {
|
|
||||||
"action": "मेटाउनुहोस्",
|
|
||||||
"title": "ड्रअ मेटाउनुहोस्",
|
|
||||||
"description": "ड्रअ {{drawNo}} मेटाउने? केवल pending र बेट नभएको।",
|
|
||||||
"success": "ड्रअ मेटाइयो",
|
|
||||||
"failed": "मेटाउन असफल"
|
|
||||||
},
|
|
||||||
"cancelFromList": {
|
|
||||||
"action": "रद्द",
|
|
||||||
"title": "ड्रअ रद्द",
|
|
||||||
"description": "ड्रअ {{drawNo}} रद्द गर्ने?"
|
|
||||||
},
|
|
||||||
"listActionsHint": "बेट नभएको pending: सम्पादन/मेटाउन; अन्य: विवरण पृष्ठ।",
|
|
||||||
"invalidDrawId": "अवैध ड्रअ ID",
|
|
||||||
"loadFailed": "लोड असफल भयो। लगइन र API कन्फिग जाँच गर्नुहोस्।",
|
|
||||||
"drawDetail": "ड्रअ विवरण",
|
|
||||||
"detailSubtitle": "{{date}} · राउन्ड {{seq}}",
|
|
||||||
"scheduleTitle": "तालिका",
|
|
||||||
"resultBatchesTitle": "नतिजा ब्याच",
|
|
||||||
"batchSummaryTotal": "जम्मा {{count}}",
|
|
||||||
"batchSummaryPending": "समीक्षा {{count}}",
|
|
||||||
"batchSummaryPublished": "प्रकाशित {{count}}",
|
|
||||||
"noResultBatchesYet": "अहिलेसम्म कुनै नतिजा ब्याच छैन।",
|
|
||||||
"goToReviewTab": "समीक्षा र प्रकाशन",
|
|
||||||
"businessDate": "व्यवसाय मिति",
|
|
||||||
"sequenceNo": "क्रम संख्या",
|
|
||||||
"plannedDraw": "योजनाबद्ध ड्रअ",
|
|
||||||
"coolingEndTime": "कुलिङ समाप्ति",
|
|
||||||
"resultSource": "नतिजा स्रोत",
|
|
||||||
"resultSourceOptions": {
|
|
||||||
"rng": "RNG स्वचालित",
|
|
||||||
"manual": "म्यानुअल प्रविष्टि"
|
|
||||||
},
|
},
|
||||||
|
"batchId": "ब्याच ID",
|
||||||
|
"batchNotFound": "ब्याच भेटिएन",
|
||||||
|
"batchNotFoundDesc": "समीक्षा सूचीमा फर्केर batch ID जाँच गर्नुहोस्।",
|
||||||
|
"batchStats": "ब्याच तथ्यांक",
|
||||||
"batchStatusOptions": {
|
"batchStatusOptions": {
|
||||||
"pending_review": "समीक्षा बाँकी",
|
"pending_review": "समीक्षा बाँकी",
|
||||||
"published": "प्रकाशित"
|
"published": "प्रकाशित"
|
||||||
},
|
},
|
||||||
"currentResultVersion": "हालको नतिजा संस्करण",
|
"batchSummaryPending": "समीक्षा {{count}}",
|
||||||
"settleVersion": "सेटलमेन्ट संस्करण",
|
"batchSummaryPublished": "प्रकाशित {{count}}",
|
||||||
"isReopened": "फेरि खोलिएको",
|
"batchSummaryTotal": "जम्मा {{count}}",
|
||||||
"yes": "हो",
|
|
||||||
"no": "होइन",
|
|
||||||
"batchStats": "ब्याच तथ्यांक",
|
|
||||||
"batchTotal": "कुल ब्याच",
|
"batchTotal": "कुल ब्याच",
|
||||||
"pendingReview": "समीक्षा बाँकी",
|
"betTotal": "कुल बेट",
|
||||||
"published": "प्रकाशित",
|
"businessDate": "व्यवसाय मिति",
|
||||||
"viewFinance": "ड्रअ वित्त हेर्नुहोस्",
|
|
||||||
"drawActions": "ड्रअ कार्य",
|
|
||||||
"drawActionsDesc": "म्यानुअल बन्द / रद्द / RNG / पुनःखोलाइ / सेटलमेन्ट सबै सीधै ब्याकएन्ड API मा जान्छ।",
|
|
||||||
"manualClose": "म्यानुअल बन्द",
|
|
||||||
"cancelDraw": "ड्रअ रद्द",
|
|
||||||
"cancelBeforeDraw": "ड्रअ अघि रद्द",
|
"cancelBeforeDraw": "ड्रअ अघि रद्द",
|
||||||
"rngDraw": "RNG ड्रअ",
|
"cancelDraw": "ड्रअ रद्द",
|
||||||
"rngAutoGenerate": "RNG स्वचालित सिर्जना",
|
"cancelFromList": {
|
||||||
"reopen": "पुनःखोल्नुहोस्",
|
"action": "रद्द",
|
||||||
"cooldownReopen": "कुलिङमा पुनःखोल्नुहोस्",
|
"description": "ड्रअ {{drawNo}} रद्द गर्ने?",
|
||||||
"runSettlement": "सेटलमेन्ट चलाउनुहोस्",
|
"title": "ड्रअ रद्द"
|
||||||
"processing": "प्रक्रियामा…",
|
},
|
||||||
"actionSuccess": "{{name}} सफल भयो",
|
|
||||||
"actionFailed": "{{name}} असफल भयो",
|
|
||||||
"hallPreviewStatus": "हल पूर्वावलोकन {{status}}",
|
|
||||||
"financeOverview": "ड्रअ वित्तीय सारांश",
|
|
||||||
"orderAndItemCount": "अर्डर / टिकट आइटम",
|
|
||||||
"actualBet": "वास्तविक कटौती बेट",
|
|
||||||
"currentPayout": "हालको कुल भुक्तानी",
|
|
||||||
"grossProfit": "अनुमानित कुल नाफा",
|
|
||||||
"settlementBatchList": "सेटलमेन्ट ब्याच सूची (ड्रअ अनुसार)",
|
|
||||||
"relatedSettlementBatches": "सम्बन्धित सेटलमेन्ट ब्याच",
|
|
||||||
"noSettlementBatches": "सेटलमेन्ट ब्याच अभिलेख छैन।",
|
|
||||||
"ticketCount": "टिकट",
|
|
||||||
"winCount": "जित",
|
|
||||||
"finishedAt": "समाप्त समय",
|
|
||||||
"jackpotPayout": "ज्याकपट भुक्तानी",
|
|
||||||
"resultsTitle": "परिणाम",
|
|
||||||
"reviewAndPublish": "समीक्षा / प्रकाशित",
|
|
||||||
"viewReviewQueue": "समीक्षा सूची हेर्नुहोस्",
|
|
||||||
"noPublishedBatch": "प्रकाशित ब्याच छैन।",
|
|
||||||
"version": "संस्करण v{{version}}",
|
|
||||||
"sourceType": "स्रोत {{source}}",
|
|
||||||
"manualEntry": "म्यानुअल",
|
|
||||||
"rng": "RNG",
|
|
||||||
"rngSummary": "RNG ह्यास {{hash}}",
|
|
||||||
"confirmedAt": "पुष्टि समय {{time}}",
|
|
||||||
"prize": "पुरस्कार",
|
|
||||||
"tail3": "अन्तिम 3",
|
|
||||||
"tail2": "अन्तिम 2",
|
|
||||||
"headTail": "हेड/टेल",
|
|
||||||
"manualResultEntry": "म्यानुअल परिणाम प्रविष्टि",
|
|
||||||
"currentStatusAndDraft": "हालको स्थिति {{status}} · सेभ गरेपछि pending batch बन्छ, सिधै प्रकाशित हुँदैन",
|
|
||||||
"currentStatusLabel": "हालको स्थिति",
|
|
||||||
"currentStatusDraftHint": "सेभ गरेपछि समीक्षा बाँकी ब्याच बन्छ, सिधै प्रकाशित हुँदैन",
|
|
||||||
"hallPreviewStatusLabel": "हल पूर्वावलोकन",
|
|
||||||
"enter23Numbers": "कृपया 23 वटा 4-अङ्क समूह पूरा भर्नुहोस्",
|
|
||||||
"draftSaved": "ड्राफ्ट v{{version}} सुरक्षित भयो, प्रकाशनको प्रतिक्षामा",
|
|
||||||
"saveFailed": "सेभ असफल भयो",
|
|
||||||
"fillRandomNumbers": "अनियमित भर्नुहोस्",
|
|
||||||
"clear": "खाली गर्नुहोस्",
|
|
||||||
"saveDraft": "ड्राफ्ट सुरक्षित गर्नुहोस्",
|
|
||||||
"saving": "सेभ हुँदैछ…",
|
|
||||||
"pendingBatches": "बाँकी ब्याच",
|
|
||||||
"noPendingBatches": "समीक्षा बाँकी ब्याच छैन।",
|
|
||||||
"batchId": "ब्याच ID",
|
|
||||||
"numberCount": "नम्बर संख्या",
|
|
||||||
"reviewAndPublishAction": "जाँचेर प्रकाशित गर्नुहोस्",
|
|
||||||
"discardPendingBatch": "ड्राफ्ट मेटाउनुहोस्",
|
|
||||||
"discardingPendingBatch": "मेटाउँदै…",
|
|
||||||
"discardPendingBatchSuccess": "पेन्डिङ ब्याच मेटियो। पुनः नम्बर राख्न वा RNG चलाउन सकिन्छ।",
|
|
||||||
"discardPendingBatchFailed": "मेटाउन असफल",
|
|
||||||
"publishReadOnlyHint": "यो पृष्ठ केवल जाँचका लागि हो। नम्बर बदल्न पहिले यो ब्याच मेटाउनुहोस् र म्यानुअल प्रविष्टिबाट नयाँ ड्राफ्ट सुरक्षित गर्नुहोस्।",
|
|
||||||
"noPublishPermission": "प्रकाशन अनुमति छैन",
|
|
||||||
"batchNotFound": "ब्याच भेटिएन",
|
|
||||||
"batchNotFoundDesc": "समीक्षा सूचीमा फर्केर batch ID जाँच गर्नुहोस्।",
|
|
||||||
"backToReviewQueue": "समीक्षा सूचीमा फर्कनुहोस्",
|
|
||||||
"publishTitle": "प्रकाशित",
|
|
||||||
"cannotPublish": "प्रकाशित गर्न मिल्दैन",
|
"cannotPublish": "प्रकाशित गर्न मिल्दैन",
|
||||||
"cannotPublishDesc": "हालको ब्याच स्थिति '{{status}}' हो।",
|
"cannotPublishDesc": "हालको ब्याच स्थिति '{{status}}' हो।",
|
||||||
"checkBeforePublish": "प्रकाशन अघि नम्बर जाँच गर्नुहोस्",
|
"checkBeforePublish": "प्रकाशन अघि नम्बर जाँच गर्नुहोस्",
|
||||||
"checkBeforePublishDesc": "सही भएपछि मात्र प्रकाशित गर्नुहोस्।",
|
"checkBeforePublishDesc": "सही भएपछि मात्र प्रकाशित गर्नुहोस्।",
|
||||||
"publishedView": "प्रकाशित नतिजा हेर्नुहोस्",
|
"clear": "खाली गर्नुहोस्",
|
||||||
|
"closeTime": "बन्द समय",
|
||||||
|
"confirm": {
|
||||||
|
"cancelDrawDescription": "यो ड्रअ खुल्ने छैन।",
|
||||||
|
"cancelDrawTitle": "ड्रअ रद्द पुष्टि?",
|
||||||
|
"discardPendingBatchDescription": "२३ नम्बरको ड्राफ्ट मेटिन्छ र ड्रअ «बन्द — नतिजा पर्खँदै» मा फर्किन्छ। पुनः प्रविष्टि वा RNG गर्न सकिन्छ।",
|
||||||
|
"discardPendingBatchTitle": "पेन्डिङ नतिजा ब्याच मेटाउने?",
|
||||||
|
"generatePlanDescription": "भविष्यका ड्रअहरू सिर्जना हुनेछन्।",
|
||||||
|
"generatePlanTitle": "ड्रअ योजना सिर्जना पुष्टि?",
|
||||||
|
"manualCloseDescription": "खेलाडीहरूले यो ड्रअमा थप दांव लगाउन सक्ने छैनन्।",
|
||||||
|
"manualCloseTitle": "म्यानुअल बन्द पुष्टि?",
|
||||||
|
"publishDescription": "खेलाडीहरूले नतिजा देख्नेछन्।",
|
||||||
|
"publishTitle": "नतिजा प्रकाशन पुष्टि?",
|
||||||
|
"reopenDescription": "नतिजा पुनः समीक्षा हुन सक्छ।",
|
||||||
|
"reopenTitle": "कुलडाउन पुनः खोल्ने पुष्टि?",
|
||||||
|
"rngDrawDescription": "प्रणालीले नतिजा सिर्जना गर्नेछ।",
|
||||||
|
"rngDrawTitle": "RNG ड्रअ पुष्टि?",
|
||||||
|
"runSettlementDescription": "प्रकाशित नतिजाबाट सेटलमेन्ट ब्याच बन्नेछ।",
|
||||||
|
"runSettlementTitle": "सेटलमेन्ट सुरु पुष्टि?",
|
||||||
|
"saveManualDraftDescription": "२३ नम्बर समीक्षाका लागि सुरक्षित हुनेछ।",
|
||||||
|
"saveManualDraftTitle": "म्यानुअल ड्राफ्ट सुरक्षित पुष्टि?"
|
||||||
|
},
|
||||||
"confirmPublish": "प्रकाशन पुष्टि गर्नुहोस्",
|
"confirmPublish": "प्रकाशन पुष्टि गर्नुहोस्",
|
||||||
"submitting": "पेश हुँदैछ…",
|
"confirmedAt": "पुष्टि समय {{time}}",
|
||||||
"publishSuccess": "प्रकाशित भयो · {{drawNo}} · स्थिति {{status}}",
|
"cooldownReopen": "कुलिङमा पुनःखोल्नुहोस्",
|
||||||
|
"coolingEndTime": "कुलिङ समाप्ति",
|
||||||
|
"createDraw": {
|
||||||
|
"description": "स्थानीय समयक्षेत्र {{tz}} मा मिति र समय प्रविष्ट गर्नुहोस्।",
|
||||||
|
"drawNoPlaceholder": "ड्रअ नम्बर प्रविष्ट गर्नुहोस्, जस्तै 20260526-008",
|
||||||
|
"drawTimeRequired": "ड्रअ समय आवश्यक छ",
|
||||||
|
"failed": "सिर्जना असफल",
|
||||||
|
"hint": "सुरु < बन्द < ड्रअ। ड्रअ नम्बर वैकल्पिक।",
|
||||||
|
"open": "नयाँ ड्रअ",
|
||||||
|
"saving": "सिर्जना हुँदैछ…",
|
||||||
|
"submit": "सिर्जना",
|
||||||
|
"success": "ड्रअ सिर्जना भयो",
|
||||||
|
"title": "म्यानुअल ड्रअ सिर्जना"
|
||||||
|
},
|
||||||
|
"currentPayout": "हालको कुल भुक्तानी",
|
||||||
|
"currentResultVersion": "हालको नतिजा संस्करण",
|
||||||
|
"currentStatusAndDraft": "हालको स्थिति {{status}} · सेभ गरेपछि pending batch बन्छ, सिधै प्रकाशित हुँदैन",
|
||||||
|
"currentStatusDraftHint": "सेभ गरेपछि समीक्षा बाँकी ब्याच बन्छ, सिधै प्रकाशित हुँदैन",
|
||||||
|
"currentStatusLabel": "हालको स्थिति",
|
||||||
|
"deleteDraw": {
|
||||||
|
"action": "मेटाउनुहोस्",
|
||||||
|
"description": "ड्रअ {{drawNo}} मेटाउने? केवल pending र बेट नभएको।",
|
||||||
|
"failed": "मेटाउन असफल",
|
||||||
|
"success": "ड्रअ मेटाइयो",
|
||||||
|
"title": "ड्रअ मेटाउनुहोस्"
|
||||||
|
},
|
||||||
|
"detailSubtitle": "{{date}} · राउन्ड {{seq}}",
|
||||||
|
"discardPendingBatch": "ड्राफ्ट मेटाउनुहोस्",
|
||||||
|
"discardPendingBatchFailed": "मेटाउन असफल",
|
||||||
|
"discardPendingBatchSuccess": "पेन्डिङ ब्याच मेटियो। पुनः नम्बर राख्न वा RNG चलाउन सकिन्छ।",
|
||||||
|
"discardingPendingBatch": "मेटाउँदै…",
|
||||||
|
"draftSaved": "ड्राफ्ट v{{version}} सुरक्षित भयो, प्रकाशनको प्रतिक्षामा",
|
||||||
|
"drawActions": "ड्रअ कार्य",
|
||||||
|
"drawActionsDesc": "म्यानुअल बन्द / रद्द / RNG / पुनःखोलाइ / सेटलमेन्ट सबै सीधै ब्याकएन्ड API मा जान्छ।",
|
||||||
|
"drawDetail": "ड्रअ विवरण",
|
||||||
|
"drawNo": "ड्रअ नं.",
|
||||||
|
"drawTime": "ड्रअ समय",
|
||||||
|
"editDraw": {
|
||||||
|
"action": "सम्पादन",
|
||||||
|
"description": "ड्रअ {{drawNo}} · स्थानीय समयक्षेत्र {{tz}} मा सम्पादन",
|
||||||
|
"drawNoPlaceholder": "ड्रअ नम्बर प्रविष्ट गर्नुहोस्, जस्तै 20260526-008",
|
||||||
|
"failed": "अद्यावधिक असफल",
|
||||||
|
"saving": "सेभ हुँदैछ…",
|
||||||
|
"submit": "सेभ",
|
||||||
|
"success": "ड्रअ अद्यावधिक भयो",
|
||||||
|
"title": "ड्रअ सम्पादन"
|
||||||
|
},
|
||||||
|
"enter23Numbers": "कृपया 23 वटा 4-अङ्क समूह पूरा भर्नुहोस्",
|
||||||
|
"fillRandomNumbers": "अनियमित भर्नुहोस्",
|
||||||
|
"financeOverview": "ड्रअ वित्तीय सारांश",
|
||||||
|
"finishedAt": "समाप्त समय",
|
||||||
|
"fuzzyDrawNo": "फजी ड्रअ नं.",
|
||||||
|
"generateFailed": "सिर्जना असफल भयो",
|
||||||
|
"generatePlan": "ड्रअ योजना सिर्जना",
|
||||||
|
"generateSuccess": "{{created}} ड्रअ सिर्जना भयो, बफर {{upcoming}}/{{target}}",
|
||||||
|
"generating": "सिर्जना हुँदैछ…",
|
||||||
|
"goToReviewTab": "समीक्षा र प्रकाशन",
|
||||||
|
"grossProfit": "अनुमानित कुल नाफा",
|
||||||
|
"hallPreviewStatus": "हल पूर्वावलोकन {{status}}",
|
||||||
|
"hallPreviewStatusLabel": "हल पूर्वावलोकन",
|
||||||
|
"headTail": "हेड/टेल",
|
||||||
|
"invalidDrawId": "अवैध ड्रअ ID",
|
||||||
|
"isReopened": "फेरि खोलिएको",
|
||||||
|
"jackpotPayout": "ज्याकपट भुक्तानी",
|
||||||
|
"listActionsHint": "बेट नभएको pending: सम्पादन/मेटाउन; अन्य: विवरण पृष्ठ।",
|
||||||
|
"loadFailed": "लोड असफल भयो। लगइन र API कन्फिग जाँच गर्नुहोस्।",
|
||||||
|
"manualClose": "म्यानुअल बन्द",
|
||||||
|
"manualEntry": "म्यानुअल",
|
||||||
|
"manualResultEntry": "म्यानुअल परिणाम प्रविष्टि",
|
||||||
|
"no": "होइन",
|
||||||
|
"noPendingBatches": "समीक्षा बाँकी ब्याच छैन।",
|
||||||
|
"noPublishPermission": "प्रकाशन अनुमति छैन",
|
||||||
|
"noPublishedBatch": "प्रकाशित ब्याच छैन।",
|
||||||
|
"noResultBatchesYet": "अहिलेसम्म कुनै नतिजा ब्याच छैन।",
|
||||||
|
"noSettlementBatches": "सेटलमेन्ट ब्याच अभिलेख छैन।",
|
||||||
|
"numberCount": "नम्बर संख्या",
|
||||||
|
"orderAndItemCount": "अर्डर / टिकट आइटम",
|
||||||
|
"overviewBetTotal": "कुल बाजी",
|
||||||
|
"overviewPayoutTotal": "कुल भुक्तानी",
|
||||||
|
"overviewProfitLoss": "नाफा/नोक्सान",
|
||||||
|
"overviewTitle": "ड्र अवलोकन",
|
||||||
|
"pageGuide": "ड्र जीवनचक्र व्यवस्थापन: योजना, बन्द, नतिजा समीक्षा र सेटलमेन्ट।",
|
||||||
|
"payoutTotal": "कुल भुक्तानी",
|
||||||
|
"pendingBatches": "बाँकी ब्याच",
|
||||||
|
"pendingReview": "समीक्षा बाँकी",
|
||||||
|
"plannedDraw": "योजनाबद्ध ड्रअ",
|
||||||
|
"prize": "पुरस्कार",
|
||||||
|
"processing": "प्रक्रियामा…",
|
||||||
|
"profitLoss": "नाफा/नोक्सानी",
|
||||||
"publishFailed": "प्रकाशन असफल भयो",
|
"publishFailed": "प्रकाशन असफल भयो",
|
||||||
"sourceTypeFull": "स्रोत: {{source}} · संख्या: {{count}}/23 · RNG ह्यास: {{hash}}",
|
"publishReadOnlyHint": "यो पृष्ठ केवल जाँचका लागि हो। नम्बर बदल्न पहिले यो ब्याच मेटाउनुहोस् र म्यानुअल प्रविष्टिबाट नयाँ ड्राफ्ट सुरक्षित गर्नुहोस्।",
|
||||||
"subnav": {
|
"publishSuccess": "प्रकाशित भयो · {{drawNo}} · स्थिति {{status}}",
|
||||||
"status": "ड्रअ स्थिति",
|
"publishTitle": "प्रकाशित",
|
||||||
"results": "परिणाम",
|
"published": "प्रकाशित",
|
||||||
"finance": "ड्रअ वित्त",
|
"publishedView": "प्रकाशित नतिजा हेर्नुहोस्",
|
||||||
"review": "समीक्षा र प्रकाशन",
|
"queryDraw": "ड्रअ खोज्नुहोस्",
|
||||||
"riskOccupancy": "जोखिम अकुपेन्सी",
|
"relatedSettlementBatches": "सम्बन्धित सेटलमेन्ट ब्याच",
|
||||||
"riskLockLogs": "लक लग",
|
"reopen": "पुनःखोल्नुहोस्",
|
||||||
"riskHot": "हट नम्बर",
|
"reset": "रिसेट",
|
||||||
"riskSoldOut": "बिक्री समाप्त नम्बर",
|
"resultBatchesTitle": "नतिजा ब्याच",
|
||||||
"riskPools": "जोखिम पूल"
|
|
||||||
},
|
|
||||||
"statusOptions": {
|
|
||||||
"all": "सबै",
|
|
||||||
"pending": "सुरु नभएको",
|
|
||||||
"open": "बेट खुला",
|
|
||||||
"closing": "बन्द हुँदै",
|
|
||||||
"closed": "बन्द",
|
|
||||||
"drawing": "ड्रअ हुँदै",
|
|
||||||
"review": "समीक्षा",
|
|
||||||
"cooldown": "कुलडाउन",
|
|
||||||
"settling": "सेटल हुँदै",
|
|
||||||
"settled": "सेटल भयो",
|
|
||||||
"cancelled": "रद्द"
|
|
||||||
},
|
|
||||||
"resultSlots": {
|
"resultSlots": {
|
||||||
|
"consolation": "सान्त्वना {{index}}",
|
||||||
"first": "पहिलो पुरस्कार",
|
"first": "पहिलो पुरस्कार",
|
||||||
"second": "दोस्रो पुरस्कार",
|
"second": "दोस्रो पुरस्कार",
|
||||||
"third": "तेस्रो पुरस्कार",
|
|
||||||
"starter": "विशेष {{index}}",
|
"starter": "विशेष {{index}}",
|
||||||
"consolation": "सान्त्वना {{index}}"
|
"third": "तेस्रो पुरस्कार"
|
||||||
},
|
},
|
||||||
"confirm": {
|
"resultSource": "नतिजा स्रोत",
|
||||||
"manualCloseTitle": "म्यानुअल बन्द पुष्टि?",
|
"resultSourceOptions": {
|
||||||
"manualCloseDescription": "खेलाडीहरूले यो ड्रअमा थप दांव लगाउन सक्ने छैनन्।",
|
"manual": "म्यानुअल प्रविष्टि",
|
||||||
"cancelDrawTitle": "ड्रअ रद्द पुष्टि?",
|
"rng": "RNG स्वचालित"
|
||||||
"cancelDrawDescription": "यो ड्रअ खुल्ने छैन।",
|
|
||||||
"rngDrawTitle": "RNG ड्रअ पुष्टि?",
|
|
||||||
"rngDrawDescription": "प्रणालीले नतिजा सिर्जना गर्नेछ।",
|
|
||||||
"reopenTitle": "कुलडाउन पुनः खोल्ने पुष्टि?",
|
|
||||||
"reopenDescription": "नतिजा पुनः समीक्षा हुन सक्छ।",
|
|
||||||
"runSettlementTitle": "सेटलमेन्ट सुरु पुष्टि?",
|
|
||||||
"runSettlementDescription": "प्रकाशित नतिजाबाट सेटलमेन्ट ब्याच बन्नेछ।",
|
|
||||||
"saveManualDraftTitle": "म्यानुअल ड्राफ्ट सुरक्षित पुष्टि?",
|
|
||||||
"saveManualDraftDescription": "२३ नम्बर समीक्षाका लागि सुरक्षित हुनेछ।",
|
|
||||||
"publishTitle": "नतिजा प्रकाशन पुष्टि?",
|
|
||||||
"publishDescription": "खेलाडीहरूले नतिजा देख्नेछन्।",
|
|
||||||
"discardPendingBatchTitle": "पेन्डिङ नतिजा ब्याच मेटाउने?",
|
|
||||||
"discardPendingBatchDescription": "२३ नम्बरको ड्राफ्ट मेटिन्छ र ड्रअ «बन्द — नतिजा पर्खँदै» मा फर्किन्छ। पुनः प्रविष्टि वा RNG गर्न सकिन्छ।",
|
|
||||||
"generatePlanTitle": "ड्रअ योजना सिर्जना पुष्टि?",
|
|
||||||
"generatePlanDescription": "भविष्यका ड्रअहरू सिर्जना हुनेछन्।"
|
|
||||||
},
|
},
|
||||||
"batchDelete": {
|
"resultsTitle": "परिणाम",
|
||||||
"action": "{{count}} ड्रअ मेटाउनुहोस्",
|
"reviewAndPublish": "समीक्षा / प्रकाशित",
|
||||||
"deleting": "मेटाउँदै…",
|
"reviewAndPublishAction": "जाँचेर प्रकाशित गर्नुहोस्",
|
||||||
"confirmTitle": "ब्याच मेटाउने पुष्टि?",
|
"reviewQueueHint": "नतिजा सिर्जना पछि समीक्षा र प्रकाशनमा जारी राख्नुहोस्।",
|
||||||
"confirmDescription": "{{count}} विना दांवका ड्रअहरू मेटाउनेछ। यो पूर्ववत गर्न सकिँदैन।",
|
"rng": "RNG",
|
||||||
"success": "सफलतापूर्वक {{count}} ड्रअ मेटाइयो",
|
"rngAutoGenerate": "RNG स्वचालित सिर्जना",
|
||||||
"failed": "ब्याच मेटाउन असफल",
|
"rngDraw": "RNG ड्रअ",
|
||||||
"partialFailed": "आंशिक असफल: {{success}} सफल, {{failed}} असफल"
|
"rngSummary": "RNG ह्यास {{hash}}",
|
||||||
}
|
"runSettlement": "सेटलमेन्ट चलाउनुहोस्",
|
||||||
|
"saveDraft": "ड्राफ्ट सुरक्षित गर्नुहोस्",
|
||||||
|
"saveFailed": "सेभ असफल भयो",
|
||||||
|
"saving": "सेभ हुँदैछ…",
|
||||||
|
"scheduleTimezoneHint": "सूची समय स्थानीय समयक्षेत्र {{tz}} मा; सर्भर UTC मा भण्डारण। ड्र अन्तराल {{interval}} मिनेट।",
|
||||||
|
"scheduleTitle": "तालिका",
|
||||||
|
"sequenceNo": "क्रम संख्या",
|
||||||
|
"settleVersion": "सेटलमेन्ट संस्करण",
|
||||||
|
"settlementBatchList": "सेटलमेन्ट ब्याच सूची (ड्रअ अनुसार)",
|
||||||
|
"sourceType": "स्रोत {{source}}",
|
||||||
|
"sourceTypeFull": "स्रोत: {{source}} · संख्या: {{count}}/23 · RNG ह्यास: {{hash}}",
|
||||||
|
"startTime": "सुरु समय",
|
||||||
|
"status": "स्थिति",
|
||||||
|
"statusListTitle": "ड्रअ सूची",
|
||||||
|
"statusOptions": {
|
||||||
|
"all": "सबै",
|
||||||
|
"cancelled": "रद्द",
|
||||||
|
"closed": "बन्द",
|
||||||
|
"closing": "बन्द हुँदै",
|
||||||
|
"cooldown": "कुलडाउन",
|
||||||
|
"drawing": "ड्रअ हुँदै",
|
||||||
|
"open": "बेट खुला",
|
||||||
|
"pending": "सुरु नभएको",
|
||||||
|
"review": "समीक्षा",
|
||||||
|
"settled": "सेटल भयो",
|
||||||
|
"settling": "सेटल हुँदै"
|
||||||
|
},
|
||||||
|
"submitting": "पेश हुँदैछ…",
|
||||||
|
"subnav": {
|
||||||
|
"finance": "ड्रअ वित्त",
|
||||||
|
"results": "परिणाम",
|
||||||
|
"review": "समीक्षा र प्रकाशन",
|
||||||
|
"riskHot": "हट नम्बर",
|
||||||
|
"riskLockLogs": "लक लग",
|
||||||
|
"riskOccupancy": "जोखिम अकुपेन्सी",
|
||||||
|
"riskPools": "जोखिम पूल",
|
||||||
|
"riskSoldOut": "बिक्री समाप्त नम्बर",
|
||||||
|
"status": "ड्रअ स्थिति"
|
||||||
|
},
|
||||||
|
"tail2": "अन्तिम 2",
|
||||||
|
"tail3": "अन्तिम 3",
|
||||||
|
"ticketCount": "टिकट",
|
||||||
|
"title": "ड्रअ",
|
||||||
|
"version": "संस्करण v{{version}}",
|
||||||
|
"viewDetails": "विवरण हेर्नुहोस्",
|
||||||
|
"viewFinance": "ड्रअ वित्त हेर्नुहोस्",
|
||||||
|
"viewReviewQueue": "समीक्षा सूची हेर्नुहोस्",
|
||||||
|
"winCount": "जित",
|
||||||
|
"yes": "हो"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,76 +1,99 @@
|
|||||||
{
|
{
|
||||||
"title": "खेलाडी",
|
"actions": "कार्य",
|
||||||
"pageGuide": "वालेट र क्रेडिट खेलाडी एकै सूची; विवरण funding_mode अनुसार।",
|
|
||||||
"detailTitle": "खेलाडी विवरण",
|
|
||||||
"listTitle": "खेलाडी सूची",
|
|
||||||
"viewDetail": "विवरण हेर्नुहोस्",
|
|
||||||
"backToList": "खेलाडी सूचीमा फर्कनुहोस्",
|
|
||||||
"detailSubtitle": "{{site}} · {{sitePlayerId}} · ID {{playerId}}",
|
|
||||||
"tabOverview": "सारांश",
|
|
||||||
"tabTickets": "टिकट",
|
|
||||||
"tabWalletTxns": "वालेट लेनदेन",
|
|
||||||
"tabTransferOrders": "ट्रान्सफर अर्डर",
|
|
||||||
"profileSection": "प्रोफाइल",
|
|
||||||
"walletsSection": "वालेट",
|
|
||||||
"createdAt": "दर्ता समय",
|
|
||||||
"agent": "एजेन्ट",
|
"agent": "एजेन्ट",
|
||||||
"frozen": "फ्रोजन",
|
"authMainSite": "मुख्य साइट SSO",
|
||||||
"txnAmount": "रकम",
|
"authNative": "लटरी नेटिभ",
|
||||||
|
"authSource": "प्रमाणीकरण स्रोत",
|
||||||
|
"available": "उपलब्ध",
|
||||||
|
"availableCredit": "उपलब्ध क्रेडिट",
|
||||||
|
"backToList": "खेलाडी सूचीमा फर्कनुहोस्",
|
||||||
|
"balance": "ब्यालेन्स",
|
||||||
"balanceAfterTxn": "पछिको ब्यालेन्स",
|
"balanceAfterTxn": "पछिको ब्यालेन्स",
|
||||||
"invalidPlayerId": "अवैध खेलाडी ID",
|
"cancel": "रद्द गर्नुहोस्",
|
||||||
"createPlayer": "खेलाडी सिर्जना",
|
"confirmDelete": "मेटाउने पुष्टि",
|
||||||
"searchPlaceholder": "खेलाडी ID / प्रयोगकर्ता नाम / उपनामबाट खोज्नुहोस्",
|
"confirmDeleteDesc": "खेलाडी {{name}} मेटाउने? यो कार्य फिर्ता गर्न मिल्दैन।",
|
||||||
"search": "खोज",
|
"confirmFreezeDescription": "खेलाडी {{name}} ले बाजी लगाउन सक्ने छैन।",
|
||||||
"refresh": "रिफ्रेस",
|
"confirmFreezeTitle": "खेलाडी फ्रिज गर्ने?",
|
||||||
"loadFailed": "खेलाडी सूची लोड असफल भयो",
|
"confirmUnfreezeDescription": "खेलाडी {{name}} सामान्य स्थितिमा फर्किनेछ।",
|
||||||
"siteCodeRequired": "साइट कोड लेख्नुहोस्",
|
"confirmUnfreezeTitle": "खेलाडी अनफ्रिज गर्ने?",
|
||||||
"sitePlayerIdRequired": "साइट खेलाडी ID लेख्नुहोस्",
|
"createAgentAutoHint": "खेलाडी तपाईंको एजेन्टमा तोकिनेछ: {{name}} ({{code}})",
|
||||||
"createFailed": "खेलाडी सिर्जना असफल भयो",
|
|
||||||
"createAgentRequired": "तपाईंको खाता एजेन्ट नोडसँग जोडिएको छैन। एजेन्ट खाताबाट लगइन गर्नुहोस्, वा सुपर एडमिनले मान्य साइट र एजेन्ट छान्नुहोस्।",
|
|
||||||
"createAgentNode": "एजेन्ट नोड",
|
"createAgentNode": "एजेन्ट नोड",
|
||||||
"createAgentNodePlaceholder": "एजेन्ट नोड छान्नुहोस्",
|
"createAgentNodePlaceholder": "एजेन्ट नोड छान्नुहोस्",
|
||||||
"createAgentAutoHint": "खेलाडी तपाईंको एजेन्टमा तोकिनेछ: {{name}} ({{code}})",
|
"createAgentRequired": "तपाईंको खाता एजेन्ट नोडसँग जोडिएको छैन। एजेन्ट खाताबाट लगइन गर्नुहोस्, वा सुपर एडमिनले मान्य साइट र एजेन्ट छान्नुहोस्।",
|
||||||
|
"createDialogDesc": "मुख्य साइटको खेलाडीलाई लटरी प्लेटफर्ममा म्यानुअल दर्ता गर्नुहोस्। प्रायः SSO लगइनबाट स्वतः सिर्जना हुन्छ।",
|
||||||
|
"createDialogTitle": "खेलाडी सिर्जना",
|
||||||
|
"createFailed": "खेलाडी सिर्जना असफल भयो",
|
||||||
|
"createPlayer": "खेलाडी सिर्जना",
|
||||||
"createSuccess": "खेलाडी {{name}} सिर्जना भयो",
|
"createSuccess": "खेलाडी {{name}} सिर्जना भयो",
|
||||||
"noChanges": "कुनै परिवर्तन छैन",
|
"createdAt": "दर्ता समय",
|
||||||
"updateFailed": "खेलाडी अपडेट असफल भयो",
|
"creditLimit": "क्रेडिट सीमा",
|
||||||
"updateSuccess": "{{name}} अपडेट भयो",
|
"creditSection": "क्रेडिट लाइन",
|
||||||
|
"currency": "मुद्रा",
|
||||||
|
"defaultCurrency": "पूर्वनिर्धारित मुद्रा",
|
||||||
|
"delete": "मेटाउनुहोस्",
|
||||||
"deleteFailed": "मेटाउन असफल",
|
"deleteFailed": "मेटाउन असफल",
|
||||||
"deleteSuccess": "खेलाडी {{name}} मेटाइयो",
|
"deleteSuccess": "खेलाडी {{name}} मेटाइयो",
|
||||||
"statusNormal": "सामान्य",
|
"detailSubtitle": "{{site}} · {{sitePlayerId}} · ID {{playerId}}",
|
||||||
"statusFrozen": "फ्रिज",
|
"detailTitle": "खेलाडी विवरण",
|
||||||
"statusBanned": "प्रतिबन्धित",
|
|
||||||
"site": "साइट",
|
|
||||||
"sitePlayerId": "साइट खेलाडी ID",
|
|
||||||
"username": "प्रयोगकर्ता नाम",
|
|
||||||
"nickname": "उपनाम",
|
|
||||||
"currency": "मुद्रा",
|
|
||||||
"balance": "ब्यालेन्स",
|
|
||||||
"available": "उपलब्ध",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"lastLogin": "अन्तिम लगइन",
|
|
||||||
"actions": "कार्य",
|
|
||||||
"edit": "सम्पादन",
|
"edit": "सम्पादन",
|
||||||
"freeze": "रोक्नुहोस्",
|
|
||||||
"unfreeze": "फुकाउनुहोस्",
|
|
||||||
"freezeSuccess": "खेलाडी {{name}} रोकियो",
|
|
||||||
"unfreezeSuccess": "खेलाडी {{name}} फुकाइयो",
|
|
||||||
"freezeFailed": "रोक्न सकिएन",
|
|
||||||
"unfreezeFailed": "फुकाउन सकिएन",
|
|
||||||
"delete": "मेटाउनुहोस्",
|
|
||||||
"createDialogTitle": "खेलाडी सिर्जना",
|
|
||||||
"editDialogTitle": "खेलाडी सम्पादन",
|
|
||||||
"createDialogDesc": "मुख्य साइटको खेलाडीलाई लटरी प्लेटफर्ममा म्यानुअल दर्ता गर्नुहोस्। प्रायः SSO लगइनबाट स्वतः सिर्जना हुन्छ।",
|
|
||||||
"editDialogDesc": "खेलाडी जानकारी सम्पादन गर्नुहोस्।",
|
"editDialogDesc": "खेलाडी जानकारी सम्पादन गर्नुहोस्।",
|
||||||
"siteCode": "साइट कोड",
|
"editDialogTitle": "खेलाडी सम्पादन",
|
||||||
"siteCodePlaceholder": "जस्तै main_site",
|
"filterAllSites": "सबै साइट",
|
||||||
"sitePlayerIdLabel": "साइट खेलाडी ID",
|
"filterSite": "साइट",
|
||||||
"sitePlayerIdPlaceholder": "मुख्य साइटले फिर्ता गरेको अद्वितीय चिन्ह",
|
"freeze": "रोक्नुहोस्",
|
||||||
"usernamePlaceholderOptional": "वैकल्पिक",
|
"freezeFailed": "रोक्न सकिएन",
|
||||||
|
"freezeSuccess": "खेलाडी {{name}} रोकियो",
|
||||||
|
"frozen": "फ्रोजन",
|
||||||
|
"fundingCredit": "क्रेडिट लाइन",
|
||||||
|
"fundingMode": "फन्डिङ मोड",
|
||||||
|
"fundingWallet": "मुख्य साइट वालेट",
|
||||||
|
"invalidPlayerId": "अवैध खेलाडी ID",
|
||||||
|
"lastLogin": "अन्तिम लगइन",
|
||||||
|
"listTitle": "खेलाडी सूची",
|
||||||
|
"loadFailed": "खेलाडी सूची लोड असफल भयो",
|
||||||
|
"nickname": "उपनाम",
|
||||||
"nicknamePlaceholderOptional": "वैकल्पिक",
|
"nicknamePlaceholderOptional": "वैकल्पिक",
|
||||||
"defaultCurrency": "पूर्वनिर्धारित मुद्रा",
|
"noChanges": "कुनै परिवर्तन छैन",
|
||||||
"cancel": "रद्द गर्नुहोस्",
|
"pageGuide": "वालेट र क्रेडिट खेलाडी एकै सूची; विवरण funding_mode अनुसार।",
|
||||||
|
"profileSection": "प्रोफाइल",
|
||||||
|
"refresh": "रिफ्रेस",
|
||||||
"save": "सुरक्षित गर्नुहोस्",
|
"save": "सुरक्षित गर्नुहोस्",
|
||||||
"saving": "सुरक्षित हुँदैछ…",
|
"saving": "सुरक्षित हुँदैछ…",
|
||||||
"confirmDelete": "मेटाउने पुष्टि",
|
"scopeAgentLine": "स्कोप: {{site}} · एजेन्ट लाइन “{{name}}” र अधीनस्थ खेलाडी",
|
||||||
"confirmDeleteDesc": "खेलाडी {{name}} मेटाउने? यो कार्य फिर्ता गर्न मिल्दैन।"
|
"scopeAllSites": "स्कोप: सबै साइटका सबै खेलाडी (सुपर एडमिन)",
|
||||||
|
"scopeFilteredSite": "स्कोप: साइट {{site}}",
|
||||||
|
"scopeMultiSite": "स्कोप: {{count}} बाँधिएका साइट; संकुचित गर्न फिल्टर प्रयोग गर्नुहोस्",
|
||||||
|
"scopeSingleSite": "स्कोप: साइट {{site}}",
|
||||||
|
"search": "खोज",
|
||||||
|
"searchPlaceholder": "खेलाडी ID / प्रयोगकर्ता नाम / उपनामबाट खोज्नुहोस्",
|
||||||
|
"site": "साइट",
|
||||||
|
"siteCode": "साइट कोड",
|
||||||
|
"siteCodePlaceholder": "जस्तै main_site",
|
||||||
|
"siteCodeRequired": "साइट कोड लेख्नुहोस्",
|
||||||
|
"sitePlayerId": "साइट खेलाडी ID",
|
||||||
|
"sitePlayerIdLabel": "साइट खेलाडी ID",
|
||||||
|
"sitePlayerIdPlaceholder": "मुख्य साइटले फिर्ता गरेको अद्वितीय चिन्ह",
|
||||||
|
"sitePlayerIdRequired": "साइट खेलाडी ID लेख्नुहोस्",
|
||||||
|
"status": "स्थिति",
|
||||||
|
"statusBanned": "प्रतिबन्धित",
|
||||||
|
"statusFrozen": "फ्रिज",
|
||||||
|
"statusNormal": "सामान्य",
|
||||||
|
"tabCreditLedger": "क्रेडिट लेजर",
|
||||||
|
"tabOverview": "सारांश",
|
||||||
|
"tabTickets": "टिकट",
|
||||||
|
"tabTransferOrders": "ट्रान्सफर अर्डर",
|
||||||
|
"tabWalletTxns": "वालेट लेनदेन",
|
||||||
|
"ticketTableHint": "यो तालिकाले खेलाडीका हालैका टिकट देखाउँछ। पूर्ण सन्दर्भ र समस्या समाधानका लागि पङ्क्ति कार्यबाट मुख्य टिकट सूचीमा जानुहोस्।",
|
||||||
|
"title": "खेलाडी",
|
||||||
|
"txnAmount": "रकम",
|
||||||
|
"unfreeze": "फुकाउनुहोस्",
|
||||||
|
"unfreezeFailed": "फुकाउन सकिएन",
|
||||||
|
"unfreezeSuccess": "खेलाडी {{name}} फुकाइयो",
|
||||||
|
"updateFailed": "खेलाडी अपडेट असफल भयो",
|
||||||
|
"updateSuccess": "{{name}} अपडेट भयो",
|
||||||
|
"usedCredit": "प्रयोग भएको क्रेडिट",
|
||||||
|
"username": "प्रयोगकर्ता नाम",
|
||||||
|
"usernamePlaceholderOptional": "वैकल्पिक",
|
||||||
|
"viewDetail": "विवरण हेर्नुहोस्",
|
||||||
|
"walletsSection": "वालेट"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,61 +1,75 @@
|
|||||||
{
|
{
|
||||||
"title": "मिलान",
|
"actions": "कार्य",
|
||||||
"createTitle": "म्यानुअल मिलान कार्य",
|
"confirmCreateAllPlayers": " (सबै खेलाडी)",
|
||||||
"reconcileType": "मिलान प्रकार",
|
|
||||||
"reconcileTypeFixed": "वालेट ट्रान्सफर (मुख्य साइट ⇄ लटरी)",
|
|
||||||
"dateRange": "मिलान मिति दायरा",
|
|
||||||
"createTask": "मिलान कार्य सिर्जना",
|
|
||||||
"submitting": "पेश हुँदैछ…",
|
|
||||||
"loadFailed": "लोड असफल भयो",
|
|
||||||
"loadItemsFailed": "विवरण लोड असफल भयो",
|
|
||||||
"periodRequired": "सुरु र अन्त्य मिति दुवै लेख्नुहोस्",
|
|
||||||
"periodOrderInvalid": "अन्त्य समय सुरु समयभन्दा पछाडि वा बराबर हुनुपर्छ",
|
|
||||||
"confirmCreateTitle": "मिलान कार्य सिर्जना गर्ने?",
|
|
||||||
"confirmCreateDescription": "छनोट गरिएको मिति दायरामा{{playerHint}} म्यानुअल मिलान सुरु हुनेछ।",
|
"confirmCreateDescription": "छनोट गरिएको मिति दायरामा{{playerHint}} म्यानुअल मिलान सुरु हुनेछ।",
|
||||||
"confirmCreatePlayer": " र छानिएको खेलाडीका लागि",
|
"confirmCreatePlayer": " र छानिएको खेलाडीका लागि",
|
||||||
"confirmCreateAllPlayers": " (सबै खेलाडी)",
|
"confirmCreateTitle": "मिलान कार्य सिर्जना गर्ने?",
|
||||||
"createSuccess": "मिलान कार्य सिर्जना भयो",
|
|
||||||
"createFailed": "कार्य सिर्जना असफल भयो",
|
"createFailed": "कार्य सिर्जना असफल भयो",
|
||||||
"noCreatePermission": "हालको खातासँग मिलान कार्य सिर्जना गर्ने अनुमति छैन।",
|
"createHint": "छानिएको अवधिमा ट्रान्सफर अर्डर स्क्यान गर्छ, लटरी वालेट लेजर तुलना गर्छ, र वालेट API कन्फिग भएमा मुख्य साइट idempotent रेकर्ड जाँच गर्छ।",
|
||||||
"jobsTitle": "मिलान कार्यहरू",
|
"createSuccess": "मिलान कार्य सिर्जना भयो",
|
||||||
"refresh": "रिफ्रेस",
|
"createSuccessEmpty": "स्क्यान सम्पन्न: कुनै समस्या फेला परेन",
|
||||||
"jobNo": "कार्य नं.",
|
"createTask": "मिलान कार्य सिर्जना",
|
||||||
"type": "प्रकार",
|
"createTitle": "म्यानुअल मिलान कार्य",
|
||||||
"status": "स्थिति",
|
|
||||||
"itemCount": "विवरण संख्या",
|
|
||||||
"mismatchCount": "असंगति",
|
|
||||||
"matchedCount": "मेल खाएका",
|
|
||||||
"period": "अवधि",
|
|
||||||
"finishedAt": "समाप्त समय",
|
|
||||||
"createdAt": "सिर्जना समय",
|
"createdAt": "सिर्जना समय",
|
||||||
"operate": "कार्य",
|
"dateRange": "मिलान मिति दायरा",
|
||||||
"viewDetails": "असंगति विवरण हेर्नुहोस्",
|
|
||||||
"detailsTitle": "असंगति विवरण",
|
"detailsTitle": "असंगति विवरण",
|
||||||
"sideARef": "लटरी साइड सन्दर्भ",
|
|
||||||
"sideBRef": "मुख्य साइट सन्दर्भ",
|
|
||||||
"differenceAmount": "अन्तर (cent)",
|
|
||||||
"itemResult": "जाँच नतिजा",
|
|
||||||
"processingStatus": "प्रक्रिया स्थिति",
|
|
||||||
"quickAccess": "छिटो पहुँच",
|
|
||||||
"openTransferOrder": "ट्रान्सफर अर्डर खोल्नुहोस्",
|
|
||||||
"openWalletTxn": "वालेट लेजर खोल्नुहोस्",
|
|
||||||
"detectedAt": "फेला परेको समय",
|
"detectedAt": "फेला परेको समय",
|
||||||
"playerSearch": "खेलाडी (वैकल्पिक)",
|
"differenceAmount": "अन्तर (cent)",
|
||||||
"playerSearchPlaceholder": "player ID / username / nickname बाट खोज्नुहोस्",
|
"finishedAt": "समाप्त समय",
|
||||||
"playerClear": "खाली गर्नुहोस्",
|
"itemCount": "विवरण संख्या",
|
||||||
"loadingPlayers": "खेलाडी खोजिँदै…",
|
"itemMainSiteFailed": "मुख्य साइटमा असफल",
|
||||||
"statusCompleted": "सम्पन्न",
|
"itemMainSiteRecordMissing": "मुख्य साइटमा छैन",
|
||||||
"statusRunning": "चलिरहेको",
|
|
||||||
"statusFailed": "असफल",
|
|
||||||
"itemMismatch": "मेल खाएन",
|
|
||||||
"itemMatched": "मेल खायो",
|
"itemMatched": "मेल खायो",
|
||||||
"itemPendingCheck": "जाँच बाँकी",
|
"itemMismatch": "मेल खाएन",
|
||||||
"itemStaleProcessing": "लामो समय प्रक्रियामा",
|
|
||||||
"itemPendingReconcile": "म्यानुअल मिलान बाँकी",
|
|
||||||
"itemMissingWalletTxn": "वालेट लेजर छुट्यो",
|
|
||||||
"itemUnexpectedWalletTxn": "अनपेक्षित वालेट लेजर",
|
|
||||||
"itemMissingRefund": "फिर्ता लेजर छुट्यो",
|
"itemMissingRefund": "फिर्ता लेजर छुट्यो",
|
||||||
"itemMissingReversal": "रिभर्सल लेजर छुट्यो",
|
"itemMissingReversal": "रिभर्सल लेजर छुट्यो",
|
||||||
|
"itemMissingWalletTxn": "वालेट लेजर छुट्यो",
|
||||||
|
"itemPendingCheck": "जाँच बाँकी",
|
||||||
|
"itemPendingReconcile": "म्यानुअल मिलान बाँकी",
|
||||||
"itemResolved": "समाधान भयो",
|
"itemResolved": "समाधान भयो",
|
||||||
"itemUnresolved": "समाधान बाँकी"
|
"itemResult": "जाँच नतिजा",
|
||||||
|
"itemStaleProcessing": "लामो समय प्रक्रियामा",
|
||||||
|
"itemUnexpectedWalletTxn": "अनपेक्षित वालेट लेजर",
|
||||||
|
"itemUnresolved": "समाधान बाँकी",
|
||||||
|
"jobNo": "कार्य नं.",
|
||||||
|
"jobsTitle": "मिलान कार्यहरू",
|
||||||
|
"loadFailed": "लोड असफल भयो",
|
||||||
|
"loadItemsFailed": "विवरण लोड असफल भयो",
|
||||||
|
"loadingPlayers": "खेलाडी खोजिँदै…",
|
||||||
|
"mainSiteCheck": "मुख्य साइट जाँच",
|
||||||
|
"mainSiteFailed": "मुख्य साइट असफल",
|
||||||
|
"mainSiteMatched": "मुख्य साइट ठीक",
|
||||||
|
"mainSiteNotFound": "मुख्य साइटमा छैन",
|
||||||
|
"mainSiteRef": "मुख्य साइट सन्दर्भ",
|
||||||
|
"mainSiteSkipped": "जाँच गरिएको छैन",
|
||||||
|
"mainSiteUnavailable": "मुख्य साइट उपलब्ध छैन",
|
||||||
|
"matchedCount": "मेल खाएका",
|
||||||
|
"mismatchCount": "असंगति",
|
||||||
|
"noCreatePermission": "हालको खातासँग मिलान कार्य सिर्जना गर्ने अनुमति छैन।",
|
||||||
|
"openTransferOrder": "ट्रान्सफर अर्डर खोल्नुहोस्",
|
||||||
|
"openWalletTxn": "वालेट लेजर खोल्नुहोस्",
|
||||||
|
"operate": "कार्य",
|
||||||
|
"period": "अवधि",
|
||||||
|
"periodOrderInvalid": "अन्त्य समय सुरु समयभन्दा पछाडि वा बराबर हुनुपर्छ",
|
||||||
|
"periodRequired": "सुरु र अन्त्य मिति दुवै लेख्नुहोस्",
|
||||||
|
"playerClear": "खाली गर्नुहोस्",
|
||||||
|
"playerSearch": "खेलाडी (वैकल्पिक)",
|
||||||
|
"playerSearchPlaceholder": "player ID / username / nickname बाट खोज्नुहोस्",
|
||||||
|
"processingStatus": "प्रक्रिया स्थिति",
|
||||||
|
"quickAccess": "छिटो पहुँच",
|
||||||
|
"reconcileType": "मिलान प्रकार",
|
||||||
|
"reconcileTypeFixed": "वालेट ट्रान्सफर (मुख्य साइट ⇄ लटरी)",
|
||||||
|
"refresh": "रिफ्रेस",
|
||||||
|
"sideARef": "लटरी साइड सन्दर्भ",
|
||||||
|
"sideBRef": "मुख्य साइट सन्दर्भ",
|
||||||
|
"status": "स्थिति",
|
||||||
|
"statusCompleted": "सम्पन्न",
|
||||||
|
"statusFailed": "असफल",
|
||||||
|
"statusRunning": "चलिरहेको",
|
||||||
|
"submitting": "पेश हुँदैछ…",
|
||||||
|
"title": "मिलान",
|
||||||
|
"transferNo": "ट्रान्सफर नं.",
|
||||||
|
"type": "प्रकार",
|
||||||
|
"viewDetails": "असंगति विवरण हेर्नुहोस्",
|
||||||
|
"walletTxnNo": "लटरी वालेट लेनदेन"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,312 +1,300 @@
|
|||||||
{
|
{
|
||||||
"title": "रिपोर्ट",
|
"backendPending": "यो रिपोर्ट अस्थायी रूपमा उपलब्ध छैन",
|
||||||
"subtitle": "सञ्चालन, वित्त, जोखिम र अडिट रिपोर्टहरू एउटै ठाउँबाट फिल्टर गरी निर्यात गर्नुहोस्।",
|
"categories": {
|
||||||
"pageGuide": "ड्र, खेलाडी, प्ले अनुसार P&L र जोखिम; निर्यात अनुमति चाहिन्छ।",
|
"all": "सबै",
|
||||||
"exportPanel": "निर्यात सेटअप",
|
"audit": "अडिट",
|
||||||
|
"profit": "नाफा/घाटा",
|
||||||
|
"risk": "जोखिम",
|
||||||
|
"wallet": "कोष"
|
||||||
|
},
|
||||||
"chooseReport": "निर्यात गर्ने रिपोर्ट छान्नुहोस्",
|
"chooseReport": "निर्यात गर्ने रिपोर्ट छान्नुहोस्",
|
||||||
"libraryTitle": "रिपोर्ट प्रकार",
|
|
||||||
"exportConfig": "निर्यात फिल्टर",
|
|
||||||
"recentTasks": "हालका निर्यात कार्यहरू",
|
|
||||||
"taskEmpty": "निर्यात कार्य छैन",
|
|
||||||
"dimension": "आयाम",
|
"dimension": "आयाम",
|
||||||
"exportPending": "{{report}} {{format}} निर्यात API अझै जोडिएको छैन",
|
"empty": "मिल्ने रिपोर्ट छैन",
|
||||||
"exportSuccess": "{{report}} ({{format}}) निर्यात भयो",
|
"exportClientHint": "हालको पूर्वावलोकन पृष्ठ निर्यात (पहिले क्वेरी चलाउनुहोस्)",
|
||||||
"exportServerSuccess": "कार्य {{jobNo}} सिर्जना भई {{report}} ({{format}}) डाउनलोड भयो",
|
"exportConfig": "निर्यात फिल्टर",
|
||||||
"exportFailed": "निर्यात असफल भयो",
|
"exportFailed": "निर्यात असफल भयो",
|
||||||
"exportHint": "हालका फिल्टरअनुसार पूर्ण डाटा निर्यात; पूर्वावलोकन क्वेरी अनिवार्य छैन।",
|
"exportHint": "हालका फिल्टरअनुसार पूर्ण डाटा निर्यात; पूर्वावलोकन क्वेरी अनिवार्य छैन।",
|
||||||
|
"exportPanel": "निर्यात सेटअप",
|
||||||
|
"exportPending": "{{report}} {{format}} निर्यात API अझै जोडिएको छैन",
|
||||||
|
"exportPreviewHint": "हालको पूर्वावलोकन पृष्ठका पङ्क्तिहरू मात्र (पेजिनेसन लागू)",
|
||||||
"exportServerHint": "पूर्ण निर्यात सर्भर कार्यबाट (पूर्वावलोकन क्वेरी अनिवार्य छैन)",
|
"exportServerHint": "पूर्ण निर्यात सर्भर कार्यबाट (पूर्वावलोकन क्वेरी अनिवार्य छैन)",
|
||||||
"exportClientHint": "हालको पूर्वावलोकन पृष्ठ निर्यात (पहिले क्वेरी चलाउनुहोस्)",
|
"exportServerSuccess": "कार्य {{jobNo}} सिर्जना भई {{report}} ({{format}}) डाउनलोड भयो",
|
||||||
"validation": {
|
"exportSuccess": "{{report}} ({{format}}) निर्यात भयो",
|
||||||
"drawNoRequired": "कृपया ड्र नं. प्रविष्ट गर्नुहोस्",
|
"fields": {
|
||||||
"drawNoNotFound": "ड्र नं. «{{drawNo}}» फेला परेन",
|
"drawNo": "ड्र नं.",
|
||||||
"drawNoNumberRequired": "कृपया ड्र नं. र नम्बर दुवै प्रविष्ट गर्नुहोस्"
|
"number": "नम्बर",
|
||||||
|
"operator": "अपरेटर",
|
||||||
|
"period": "अवधि",
|
||||||
|
"play": "खेल",
|
||||||
|
"player": "खेलाडी"
|
||||||
|
},
|
||||||
|
"filterAll": "सबै प्ले",
|
||||||
|
"filterPanel": "फिल्टर",
|
||||||
|
"filters": {
|
||||||
|
"date": "मिति",
|
||||||
|
"draw": "ड्र",
|
||||||
|
"draw_number": "ड्र + नम्बर",
|
||||||
|
"operator_period": "अपरेटर + अवधि",
|
||||||
|
"play": "खेल",
|
||||||
|
"play_period": "खेल + अवधि",
|
||||||
|
"player_period": "खेलाडी + अवधि"
|
||||||
},
|
},
|
||||||
"formats": {
|
"formats": {
|
||||||
"csv": "CSV",
|
"csv": "CSV",
|
||||||
"excel": "Excel",
|
|
||||||
"csvServer": "CSV निर्यात (पूर्ण)",
|
|
||||||
"excelServer": "Excel निर्यात (पूर्ण)",
|
|
||||||
"csvPreview": "पूर्वावलोकन CSV",
|
"csvPreview": "पूर्वावलोकन CSV",
|
||||||
"excelPreview": "पूर्वावलोकन Excel"
|
"csvServer": "CSV निर्यात (पूर्ण)",
|
||||||
|
"excel": "Excel",
|
||||||
|
"excelPreview": "पूर्वावलोकन Excel",
|
||||||
|
"excelServer": "Excel निर्यात (पूर्ण)"
|
||||||
},
|
},
|
||||||
"exportPreviewHint": "हालको पूर्वावलोकन पृष्ठका पङ्क्तिहरू मात्र (पेजिनेसन लागू)",
|
"items": {
|
||||||
"tasks": {
|
"admin_audit": {
|
||||||
"refresh": "रिफ्रेस",
|
"summary": "अपरेटर र रेकर्ड समय अनुसार; मिति नचयेमा पछिल्लो ३० दिन।",
|
||||||
"download": "डाउनलोड",
|
"title": "एडमिन अपरेशन अडिट रिपोर्ट"
|
||||||
"loadFailed": "कार्य सूची लोड असफल",
|
|
||||||
"downloadSuccess": "{{jobNo}} डाउनलोड भयो",
|
|
||||||
"downloadFailed": "डाउनलोड असफल",
|
|
||||||
"columns": {
|
|
||||||
"jobNo": "कार्य नं.",
|
|
||||||
"report": "रिपोर्ट",
|
|
||||||
"format": "ढाँचा",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"createdAt": "सिर्जना",
|
|
||||||
"actions": "कार्य"
|
|
||||||
},
|
},
|
||||||
"status": {
|
"daily_profit": {
|
||||||
"pending": "पर्खाइ",
|
"summary": "व्यावसायिक मितिअनुसार बेट P&L; मिति नचयेमा पछिल्लो ३० दिन। टिकट रकम — क्रेडिट-लाइन सेटलमेन्ट होइन।",
|
||||||
"processing": "प्रक्रियामा",
|
"title": "दैनिक P&L सारांश"
|
||||||
"completed": "सम्पन्न",
|
},
|
||||||
"failed": "असफल"
|
"draw_profit": {
|
||||||
|
"summary": "ड्र अनुसार बेट रकम, पेआउट, प्लेटफर्म P&L र सेटलमेन्ट स्थिति हेर्नुहोस्।",
|
||||||
|
"title": "ड्र बेट / पेआउट / P&L"
|
||||||
|
},
|
||||||
|
"hot_number_risk": {
|
||||||
|
"summary": "ड्र र नम्बर अनुसार बेटिङ हिट, जोखिम प्रयोग र क्याप नजिकिएको अवस्था हेर्नुहोस्।",
|
||||||
|
"title": "हट नम्बर जोखिम रिपोर्ट"
|
||||||
|
},
|
||||||
|
"play_dimension": {
|
||||||
|
"summary": "खेल र व्यावसायिक मितिअनुसार P&L; मिति नचयेमा पछिल्लो ३० दिन।",
|
||||||
|
"title": "खेल आयाम रिपोर्ट"
|
||||||
|
},
|
||||||
|
"player_transfer": {
|
||||||
|
"summary": "वालेट-मोड मुख्य साइट ट्रान्सफर, रेकर्ड समय अनुसार; मिति नचयेमा पछिल्लो ३० दिन।",
|
||||||
|
"title": "खेलाडी ट्रान्सफर रिपोर्ट"
|
||||||
|
},
|
||||||
|
"player_win_loss": {
|
||||||
|
"summary": "खेलाडी र व्यावसायिक मितिअनुसार जित/हार; मिति नचयेमा पछिल्लो ३० दिन।",
|
||||||
|
"title": "खेलाडी जित/हार रिपोर्ट"
|
||||||
|
},
|
||||||
|
"sold_out_number": {
|
||||||
|
"summary": "ड्र अनुसार सोल्ड-आउट नम्बर, समय र जोखिम लक अवस्था हेर्नुहोस्।",
|
||||||
|
"title": "सोल्ड-आउट नम्बर रिपोर्ट"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jobTypes": {
|
"jobTypes": {
|
||||||
"draw_profit_summary": "ड्र P&L",
|
"audit_operation_report": "प्रशासक अडिट",
|
||||||
"daily_profit_summary": "दैनिक P&L",
|
"daily_profit_summary": "दैनिक P&L",
|
||||||
"player_win_loss": "खेलाडी जित/हार",
|
"draw_profit_summary": "ड्र P&L",
|
||||||
"wallet_transfer_report": "वालेट ट्रान्सफर",
|
|
||||||
"wallet_txns_daily": "वालेट लेनदेन (दैनिक)",
|
|
||||||
"transfer_orders_daily": "ट्रान्सफर अर्डर (दैनिक)",
|
|
||||||
"hot_number_risk_report": "लोकप्रिय नम्बर जोखिम",
|
"hot_number_risk_report": "लोकप्रिय नम्बर जोखिम",
|
||||||
"play_dimension_report": "प्ले आयाम",
|
"play_dimension_report": "प्ले आयाम",
|
||||||
|
"player_win_loss": "खेलाडी जित/हार",
|
||||||
"sold_out_number_report": "बिक्री समाप्त नम्बर",
|
"sold_out_number_report": "बिक्री समाप्त नम्बर",
|
||||||
"rebate_commission_report": "रिबेट / कमिसन",
|
"transfer_orders_daily": "ट्रान्सफर अर्डर (दैनिक)",
|
||||||
"audit_operation_report": "प्रशासक अडिट"
|
"wallet_transfer_report": "वालेट ट्रान्सफर",
|
||||||
|
"wallet_txns_daily": "वालेट लेनदेन (दैनिक)"
|
||||||
},
|
},
|
||||||
"empty": "मिल्ने रिपोर्ट छैन",
|
"libraryTitle": "रिपोर्ट प्रकार",
|
||||||
"backendPending": "यो रिपोर्ट अस्थायी रूपमा उपलब्ध छैन",
|
"loadFailed": "लोड असफल",
|
||||||
"filterPanel": "फिल्टर",
|
"no": "होइन",
|
||||||
|
"pageGuide": "ड्र, खेलाडी, प्ले अनुसार P&L र जोखिम; निर्यात अनुमति चाहिन्छ।",
|
||||||
|
"placeholders": {
|
||||||
|
"drawNo": "जस्तै 20260522-001",
|
||||||
|
"keyword": "रिपोर्ट नाम / विवरण खोज्नुहोस्",
|
||||||
|
"number": "नम्बर लेख्नुहोस्",
|
||||||
|
"operator": "एडमिन खाता वा नाम",
|
||||||
|
"play": "खेल नाम वा कोड",
|
||||||
|
"player": "खेलाडी ID / नाम / फोन"
|
||||||
|
},
|
||||||
|
"preview": {
|
||||||
|
"columns": {
|
||||||
|
"adminAudit": {
|
||||||
|
"extra": "IP",
|
||||||
|
"metricA": "अपरेटर ID",
|
||||||
|
"metricB": "मोड्युल",
|
||||||
|
"metricC": "कार्य",
|
||||||
|
"primary": "लग ID",
|
||||||
|
"secondary": "अपरेटर प्रकार",
|
||||||
|
"status": "लक्ष्य प्रकार",
|
||||||
|
"time": "समय"
|
||||||
|
},
|
||||||
|
"dailyProfit": {
|
||||||
|
"extra": "नेट",
|
||||||
|
"metricA": "बेट",
|
||||||
|
"metricB": "पेआउट",
|
||||||
|
"metricC": "हाउस P&L",
|
||||||
|
"primary": "व्यावसायिक मिति",
|
||||||
|
"secondary": "टिप्पणी",
|
||||||
|
"status": "रिफन्ड",
|
||||||
|
"time": "अपडेट"
|
||||||
|
},
|
||||||
|
"drawProfit": {
|
||||||
|
"extra": "ब्याच संख्या",
|
||||||
|
"metricA": "अर्डर / टिकट",
|
||||||
|
"metricB": "टिकट / विजेता",
|
||||||
|
"metricC": "बेट / हाउस P&L",
|
||||||
|
"primary": "ड्र / ब्याच",
|
||||||
|
"secondary": "ड्र / सेटलमेन्ट स्थिति",
|
||||||
|
"status": "पेआउट / ज्याकपोट",
|
||||||
|
"time": "समाप्त"
|
||||||
|
},
|
||||||
|
"extra": "थप",
|
||||||
|
"hotNumberRisk": {
|
||||||
|
"extra": "प्रयोग / कारण",
|
||||||
|
"metricA": "क्याप / रकम",
|
||||||
|
"metricB": "लक / खेल",
|
||||||
|
"metricC": "बाँकी / टिकट",
|
||||||
|
"primary": "नम्बर / लग",
|
||||||
|
"secondary": "ड्र / कार्य",
|
||||||
|
"status": "सोल्ड आउट / खेलाडी",
|
||||||
|
"time": "संस्करण / समय"
|
||||||
|
},
|
||||||
|
"metricA": "सूचक A",
|
||||||
|
"metricB": "सूचक B",
|
||||||
|
"metricC": "सूचक C",
|
||||||
|
"playDimension": {
|
||||||
|
"extra": "टिप्पणी",
|
||||||
|
"metricA": "बेट",
|
||||||
|
"metricB": "पेआउट",
|
||||||
|
"metricC": "हाउस P&L",
|
||||||
|
"primary": "खेल",
|
||||||
|
"secondary": "आयाम",
|
||||||
|
"status": "अनुपात",
|
||||||
|
"time": "समय"
|
||||||
|
},
|
||||||
|
"playerTransfer": {
|
||||||
|
"extra": "असफल कारण",
|
||||||
|
"metricA": "दिशा",
|
||||||
|
"metricB": "स्थिति",
|
||||||
|
"metricC": "रकम",
|
||||||
|
"primary": "ट्रान्सफर नं.",
|
||||||
|
"secondary": "खेलाडी",
|
||||||
|
"status": "बाह्य सन्दर्भ",
|
||||||
|
"time": "सिर्जना"
|
||||||
|
},
|
||||||
|
"playerWinLoss": {
|
||||||
|
"extra": "टिप्पणी",
|
||||||
|
"metricA": "बेट",
|
||||||
|
"metricB": "पेआउट",
|
||||||
|
"metricC": "नेट जित/हार",
|
||||||
|
"primary": "खेलाडी",
|
||||||
|
"secondary": "खेलाडी ID",
|
||||||
|
"status": "स्तर",
|
||||||
|
"time": "समय"
|
||||||
|
},
|
||||||
|
"primary": "मुख्य",
|
||||||
|
"secondary": "सहायक",
|
||||||
|
"soldOut": {
|
||||||
|
"extra": "प्रयोग",
|
||||||
|
"metricA": "क्याप",
|
||||||
|
"metricB": "लक",
|
||||||
|
"metricC": "बाँकी",
|
||||||
|
"primary": "नम्बर",
|
||||||
|
"secondary": "ड्र",
|
||||||
|
"status": "सोल्ड आउट",
|
||||||
|
"time": "संस्करण"
|
||||||
|
},
|
||||||
|
"status": "स्थिति",
|
||||||
|
"time": "समय"
|
||||||
|
},
|
||||||
|
"empty": "डाटा छैन।",
|
||||||
|
"exportableRows": "पङ्क्ति निर्यात योग्य",
|
||||||
|
"scope": {
|
||||||
|
"currentPage": "हालको पृष्ठ"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"bet": "बेट",
|
||||||
|
"currency": "मुद्रा",
|
||||||
|
"currentPage": "यो पृष्ठ",
|
||||||
|
"drawNo": "ड्र नं.",
|
||||||
|
"exportRows": "निर्यात पङ्क्ति",
|
||||||
|
"houseGross": "हाउस P&L",
|
||||||
|
"locked": "लक",
|
||||||
|
"logs": "लग",
|
||||||
|
"modules": "मोड्युल",
|
||||||
|
"notQueried": "क्वेरी गरिएको छैन",
|
||||||
|
"notSet": "सेट गरिएको छैन",
|
||||||
|
"operators": "अपरेटर",
|
||||||
|
"orders": "अर्डर",
|
||||||
|
"payout": "भुक्तानी",
|
||||||
|
"players": "खेलाडी",
|
||||||
|
"rebate": "रिबेट",
|
||||||
|
"records": "रेकर्ड",
|
||||||
|
"remaining": "बाँकी",
|
||||||
|
"transferIn": "भित्र",
|
||||||
|
"transferOut": "बाहिर",
|
||||||
|
"usage": "उपयोग"
|
||||||
|
},
|
||||||
|
"subtitle": "तल तालिकामा नतिजा देखिन्छ।",
|
||||||
|
"summaryScopeHint": "कुल रेकर्ड बाहेक माथिका कार्डहरू हालको पूर्वावलोकन पृष्ठको योग हुन्। पूर्ण दायराको संख्या चाहिँ पूर्ण CSV/Excel निर्यात प्रयोग गर्नुहोस्।",
|
||||||
|
"title": "पूर्वावलोकन"
|
||||||
|
},
|
||||||
|
"query": "क्वेरी",
|
||||||
"queryHint": "फिल्टर सेट गरी क्वेरी चलाउनुहोस्। समय चयन नगरेमा पछिल्लो ३० दिन प्रयोग हुन्छ।",
|
"queryHint": "फिल्टर सेट गरी क्वेरी चलाउनुहोस्। समय चयन नगरेमा पछिल्लो ३० दिन प्रयोग हुन्छ।",
|
||||||
|
"querying": "क्वेरी हुँदै…",
|
||||||
|
"recentTasks": "हालका निर्यात कार्यहरू",
|
||||||
|
"reset": "रिसेट",
|
||||||
|
"scopes": {
|
||||||
|
"date": "मिति",
|
||||||
|
"drawNo": "ड्र",
|
||||||
|
"drawNumber": "ड्र + नम्बर",
|
||||||
|
"operatorPeriod": "अपरेटर + अवधि",
|
||||||
|
"play": "खेल",
|
||||||
|
"playPeriod": "खेल + अवधि",
|
||||||
|
"playerPeriod": "खेलाडी + अवधि"
|
||||||
|
},
|
||||||
|
"searchPicker": {
|
||||||
|
"keyword": "खोज शब्द",
|
||||||
|
"open": "छनोट खोल्नुहोस्",
|
||||||
|
"select": "छान्नुहोस्"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"current": "हालको सूची",
|
||||||
|
"formats": "निर्यात ढाँचा",
|
||||||
|
"total": "कुल रिपोर्ट"
|
||||||
|
},
|
||||||
|
"subtitle": "सञ्चालन, वित्त, जोखिम र अडिट रिपोर्टहरू एउटै ठाउँबाट फिल्टर गरी निर्यात गर्नुहोस्।",
|
||||||
|
"table": {
|
||||||
|
"actions": "कार्य",
|
||||||
|
"category": "वर्ग",
|
||||||
|
"createdAt": "सिर्जना समय",
|
||||||
|
"description": "विवरण",
|
||||||
|
"dimension": "आयाम",
|
||||||
|
"formats": "ढाँचा",
|
||||||
|
"report": "रिपोर्ट",
|
||||||
|
"status": "स्थिति"
|
||||||
|
},
|
||||||
|
"taskEmpty": "निर्यात कार्य छैन",
|
||||||
|
"tasks": {
|
||||||
|
"columns": {
|
||||||
|
"actions": "कार्य",
|
||||||
|
"createdAt": "सिर्जना",
|
||||||
|
"format": "ढाँचा",
|
||||||
|
"jobNo": "कार्य नं.",
|
||||||
|
"report": "रिपोर्ट",
|
||||||
|
"status": "स्थिति"
|
||||||
|
},
|
||||||
|
"currentReportHint": "यहाँ हाल छानिएको रिपोर्टका निर्यात कार्य मात्र देखिन्छ।",
|
||||||
|
"download": "डाउनलोड",
|
||||||
|
"downloadFailed": "डाउनलोड असफल",
|
||||||
|
"downloadSuccess": "{{jobNo}} डाउनलोड भयो",
|
||||||
|
"loadFailed": "कार्य सूची लोड असफल",
|
||||||
|
"refresh": "रिफ्रेस",
|
||||||
|
"status": {
|
||||||
|
"completed": "सम्पन्न",
|
||||||
|
"failed": "असफल",
|
||||||
|
"pending": "पर्खाइ",
|
||||||
|
"processing": "प्रक्रियामा"
|
||||||
|
}
|
||||||
|
},
|
||||||
"timeAxis": {
|
"timeAxis": {
|
||||||
"businessDate": "समय अक्ष: लटरी व्यावसायिक मिति (ड्रको business date)।",
|
"businessDate": "समय अक्ष: लटरी व्यावसायिक मिति (ड्रको business date)।",
|
||||||
"recordCreatedAt": "समय अक्ष: रेकर्ड सिर्जना समय।"
|
"recordCreatedAt": "समय अक्ष: रेकर्ड सिर्जना समय।"
|
||||||
},
|
},
|
||||||
"query": "क्वेरी",
|
"title": "रिपोर्ट",
|
||||||
"querying": "क्वेरी हुँदै…",
|
"validation": {
|
||||||
"reset": "रिसेट",
|
"drawNoNotFound": "ड्र नं. «{{drawNo}}» फेला परेन",
|
||||||
"loadFailed": "लोड असफल",
|
"drawNoNumberRequired": "कृपया ड्र नं. र नम्बर दुवै प्रविष्ट गर्नुहोस्",
|
||||||
"yes": "हो",
|
"drawNoRequired": "कृपया ड्र नं. प्रविष्ट गर्नुहोस्"
|
||||||
"no": "होइन",
|
|
||||||
"filterAll": "सबै प्ले",
|
|
||||||
"searchPicker": {
|
|
||||||
"open": "छनोट खोल्नुहोस्",
|
|
||||||
"select": "छान्नुहोस्",
|
|
||||||
"keyword": "खोज शब्द"
|
|
||||||
},
|
},
|
||||||
"preview": {
|
"yes": "हो"
|
||||||
"title": "पूर्वावलोकन",
|
|
||||||
"subtitle": "तल तालिकामा नतिजा देखिन्छ।",
|
|
||||||
"empty": "डाटा छैन।",
|
|
||||||
"exportableRows": "पङ्क्ति निर्यात योग्य",
|
|
||||||
"summaryScopeHint": "कुल रेकर्ड बाहेक माथिका कार्डहरू हालको पूर्वावलोकन पृष्ठको योग हुन्। पूर्ण दायराको संख्या चाहिँ पूर्ण CSV/Excel निर्यात प्रयोग गर्नुहोस्।",
|
|
||||||
"scope": {
|
|
||||||
"currentPage": "हालको पृष्ठ"
|
|
||||||
},
|
|
||||||
"columns": {
|
|
||||||
"primary": "मुख्य",
|
|
||||||
"secondary": "सहायक",
|
|
||||||
"metricA": "सूचक A",
|
|
||||||
"metricB": "सूचक B",
|
|
||||||
"metricC": "सूचक C",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"extra": "थप",
|
|
||||||
"time": "समय",
|
|
||||||
"drawProfit": {
|
|
||||||
"primary": "ड्र / ब्याच",
|
|
||||||
"secondary": "ड्र / सेटलमेन्ट स्थिति",
|
|
||||||
"metricA": "अर्डर / टिकट",
|
|
||||||
"metricB": "टिकट / विजेता",
|
|
||||||
"metricC": "बेट / हाउस P&L",
|
|
||||||
"status": "पेआउट / ज्याकपोट",
|
|
||||||
"extra": "ब्याच संख्या",
|
|
||||||
"time": "समाप्त"
|
|
||||||
},
|
|
||||||
"dailyProfit": {
|
|
||||||
"primary": "व्यावसायिक मिति",
|
|
||||||
"secondary": "टिप्पणी",
|
|
||||||
"metricA": "बेट",
|
|
||||||
"metricB": "पेआउट",
|
|
||||||
"metricC": "हाउस P&L",
|
|
||||||
"status": "रिफन्ड",
|
|
||||||
"extra": "नेट",
|
|
||||||
"time": "अपडेट"
|
|
||||||
},
|
|
||||||
"playerWinLoss": {
|
|
||||||
"primary": "खेलाडी",
|
|
||||||
"secondary": "खेलाडी ID",
|
|
||||||
"metricA": "बेट",
|
|
||||||
"metricB": "पेआउट",
|
|
||||||
"metricC": "नेट जित/हार",
|
|
||||||
"status": "स्तर",
|
|
||||||
"extra": "टिप्पणी",
|
|
||||||
"time": "समय"
|
|
||||||
},
|
|
||||||
"playerTransfer": {
|
|
||||||
"primary": "ट्रान्सफर नं.",
|
|
||||||
"secondary": "खेलाडी",
|
|
||||||
"metricA": "दिशा",
|
|
||||||
"metricB": "स्थिति",
|
|
||||||
"metricC": "रकम",
|
|
||||||
"status": "बाह्य सन्दर्भ",
|
|
||||||
"extra": "असफल कारण",
|
|
||||||
"time": "सिर्जना"
|
|
||||||
},
|
|
||||||
"hotNumberRisk": {
|
|
||||||
"primary": "नम्बर / लग",
|
|
||||||
"secondary": "ड्र / कार्य",
|
|
||||||
"metricA": "क्याप / रकम",
|
|
||||||
"metricB": "लक / खेल",
|
|
||||||
"metricC": "बाँकी / टिकट",
|
|
||||||
"status": "सोल्ड आउट / खेलाडी",
|
|
||||||
"extra": "प्रयोग / कारण",
|
|
||||||
"time": "संस्करण / समय"
|
|
||||||
},
|
|
||||||
"playDimension": {
|
|
||||||
"primary": "खेल",
|
|
||||||
"secondary": "आयाम",
|
|
||||||
"metricA": "बेट",
|
|
||||||
"metricB": "पेआउट",
|
|
||||||
"metricC": "हाउस P&L",
|
|
||||||
"status": "अनुपात",
|
|
||||||
"extra": "टिप्पणी",
|
|
||||||
"time": "समय"
|
|
||||||
},
|
|
||||||
"soldOut": {
|
|
||||||
"primary": "नम्बर",
|
|
||||||
"secondary": "ड्र",
|
|
||||||
"metricA": "क्याप",
|
|
||||||
"metricB": "लक",
|
|
||||||
"metricC": "बाँकी",
|
|
||||||
"status": "सोल्ड आउट",
|
|
||||||
"extra": "प्रयोग",
|
|
||||||
"time": "संस्करण"
|
|
||||||
},
|
|
||||||
"rebateCommission": {
|
|
||||||
"primary": "खेल",
|
|
||||||
"secondary": "अर्डर",
|
|
||||||
"metricA": "रिबेट",
|
|
||||||
"metricB": "टिकट आइटम",
|
|
||||||
"metricC": "कमिसन",
|
|
||||||
"status": "नियम मिलान",
|
|
||||||
"extra": "टिप्पणी",
|
|
||||||
"time": "समय"
|
|
||||||
},
|
|
||||||
"adminAudit": {
|
|
||||||
"primary": "लग ID",
|
|
||||||
"secondary": "अपरेटर प्रकार",
|
|
||||||
"metricA": "अपरेटर ID",
|
|
||||||
"metricB": "मोड्युल",
|
|
||||||
"metricC": "कार्य",
|
|
||||||
"status": "लक्ष्य प्रकार",
|
|
||||||
"extra": "IP",
|
|
||||||
"time": "समय"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"stats": {
|
|
||||||
"records": "रेकर्ड",
|
|
||||||
"currentPage": "यो पृष्ठ",
|
|
||||||
"drawNo": "ड्र नं.",
|
|
||||||
"currency": "मुद्रा",
|
|
||||||
"exportRows": "निर्यात पङ्क्ति",
|
|
||||||
"bet": "बेट",
|
|
||||||
"payout": "भुक्तानी",
|
|
||||||
"houseGross": "हाउस P&L",
|
|
||||||
"orders": "अर्डर",
|
|
||||||
"locked": "लक",
|
|
||||||
"remaining": "बाँकी",
|
|
||||||
"usage": "उपयोग",
|
|
||||||
"logs": "लग",
|
|
||||||
"modules": "मोड्युल",
|
|
||||||
"operators": "अपरेटर",
|
|
||||||
"players": "खेलाडी",
|
|
||||||
"transferIn": "भित्र",
|
|
||||||
"transferOut": "बाहिर",
|
|
||||||
"rebate": "रिबेट"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"stats": {
|
|
||||||
"total": "कुल रिपोर्ट",
|
|
||||||
"current": "हालको सूची",
|
|
||||||
"formats": "निर्यात ढाँचा"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"report": "रिपोर्ट",
|
|
||||||
"category": "वर्ग",
|
|
||||||
"dimension": "आयाम",
|
|
||||||
"description": "विवरण",
|
|
||||||
"formats": "ढाँचा",
|
|
||||||
"actions": "कार्य",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"createdAt": "सिर्जना समय"
|
|
||||||
},
|
|
||||||
"categories": {
|
|
||||||
"all": "सबै",
|
|
||||||
"profit": "नाफा/घाटा",
|
|
||||||
"wallet": "कोष",
|
|
||||||
"risk": "जोखिम",
|
|
||||||
"audit": "अडिट"
|
|
||||||
},
|
|
||||||
"filters": {
|
|
||||||
"draw": "ड्र",
|
|
||||||
"date": "मिति",
|
|
||||||
"player_period": "खेलाडी + अवधि",
|
|
||||||
"draw_number": "ड्र + नम्बर",
|
|
||||||
"play": "खेल",
|
|
||||||
"play_period": "खेल + अवधि",
|
|
||||||
"operator_period": "अपरेटर + अवधि"
|
|
||||||
},
|
|
||||||
"scopes": {
|
|
||||||
"drawNo": "ड्र",
|
|
||||||
"date": "मिति",
|
|
||||||
"playerPeriod": "खेलाडी + अवधि",
|
|
||||||
"drawNumber": "ड्र + नम्बर",
|
|
||||||
"play": "खेल",
|
|
||||||
"playPeriod": "खेल + अवधि",
|
|
||||||
"operatorPeriod": "अपरेटर + अवधि"
|
|
||||||
},
|
|
||||||
"fields": {
|
|
||||||
"drawNo": "ड्र नं.",
|
|
||||||
"number": "नम्बर",
|
|
||||||
"period": "अवधि",
|
|
||||||
"player": "खेलाडी",
|
|
||||||
"play": "खेल",
|
|
||||||
"operator": "अपरेटर"
|
|
||||||
},
|
|
||||||
"placeholders": {
|
|
||||||
"drawNo": "जस्तै 20260522-001",
|
|
||||||
"number": "नम्बर लेख्नुहोस्",
|
|
||||||
"keyword": "रिपोर्ट नाम / विवरण खोज्नुहोस्",
|
|
||||||
"player": "खेलाडी ID / नाम / फोन",
|
|
||||||
"play": "खेल नाम वा कोड",
|
|
||||||
"operator": "एडमिन खाता वा नाम"
|
|
||||||
},
|
|
||||||
"items": {
|
|
||||||
"draw_profit": {
|
|
||||||
"title": "ड्र बेट / पेआउट / P&L",
|
|
||||||
"summary": "ड्र अनुसार बेट रकम, पेआउट, प्लेटफर्म P&L र सेटलमेन्ट स्थिति हेर्नुहोस्।"
|
|
||||||
},
|
|
||||||
"daily_profit": {
|
|
||||||
"title": "दैनिक P&L सारांश",
|
|
||||||
"summary": "व्यावसायिक मितिअनुसार बेट P&L; मिति नचयेमा पछिल्लो ३० दिन। टिकट रकम — क्रेडिट-लाइन सेटलमेन्ट होइन।"
|
|
||||||
},
|
|
||||||
"player_win_loss": {
|
|
||||||
"title": "खेलाडी जित/हार रिपोर्ट",
|
|
||||||
"summary": "खेलाडी र व्यावसायिक मितिअनुसार जित/हार; मिति नचयेमा पछिल्लो ३० दिन।"
|
|
||||||
},
|
|
||||||
"player_transfer": {
|
|
||||||
"title": "खेलाडी ट्रान्सफर रिपोर्ट",
|
|
||||||
"summary": "वालेट-मोड मुख्य साइट ट्रान्सफर, रेकर्ड समय अनुसार; मिति नचयेमा पछिल्लो ३० दिन।"
|
|
||||||
},
|
|
||||||
"hot_number_risk": {
|
|
||||||
"title": "हट नम्बर जोखिम रिपोर्ट",
|
|
||||||
"summary": "ड्र र नम्बर अनुसार बेटिङ हिट, जोखिम प्रयोग र क्याप नजिकिएको अवस्था हेर्नुहोस्।"
|
|
||||||
},
|
|
||||||
"play_dimension": {
|
|
||||||
"title": "खेल आयाम रिपोर्ट",
|
|
||||||
"summary": "खेल र व्यावसायिक मितिअनुसार P&L; मिति नचयेमा पछिल्लो ३० दिन।"
|
|
||||||
},
|
|
||||||
"sold_out_number": {
|
|
||||||
"title": "सोल्ड-आउट नम्बर रिपोर्ट",
|
|
||||||
"summary": "ड्र अनुसार सोल्ड-आउट नम्बर, समय र जोखिम लक अवस्था हेर्नुहोस्।"
|
|
||||||
},
|
|
||||||
"rebate_commission": {
|
|
||||||
"title": "कमिसन / रिबेट रिपोर्ट",
|
|
||||||
"summary": "वालेट-मोड तत्काल रिबेट, व्यावसायिक मितिअनुसार; मिति नचयेमा पछिल्लो ३० दिन।"
|
|
||||||
},
|
|
||||||
"admin_audit": {
|
|
||||||
"title": "एडमिन अपरेशन अडिट रिपोर्ट",
|
|
||||||
"summary": "अपरेटर र रेकर्ड समय अनुसार; मिति नचयेमा पछिल्लो ३० दिन।"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,111 +1,117 @@
|
|||||||
{
|
{
|
||||||
"title": "जोखिम",
|
"action": "कार्य",
|
||||||
"center": "जोखिम केन्द्र",
|
"actionFailed": "कार्य असफल भयो",
|
||||||
"drawNo": "ड्रअ नं.",
|
"actionFilter": "कार्य",
|
||||||
"status": "स्थिति",
|
|
||||||
"closeTime": "बन्द समय",
|
|
||||||
"actions": "कार्य",
|
"actions": "कार्य",
|
||||||
"all": "सबै",
|
"all": "सबै",
|
||||||
"search": "खोज",
|
|
||||||
"refresh": "रिफ्रेस",
|
|
||||||
"fuzzyDrawNo": "फजी ड्रअ नं.",
|
|
||||||
"loadDrawListFailed": "ड्रअ सूची लोड असफल भयो",
|
|
||||||
"enterRisk": "जोखिममा जानुहोस्",
|
|
||||||
"poolsTitle": "जोखिम पूल",
|
|
||||||
"hotPageTitle": "हट नम्बर निगरानी",
|
|
||||||
"soldOutPageTitle": "बिक्री समाप्त नम्बर सूची",
|
|
||||||
"allPoolsPageTitle": "सबै जोखिम पूल",
|
"allPoolsPageTitle": "सबै जोखिम पूल",
|
||||||
"sourceReasonOptions": {
|
"amount": "रकम",
|
||||||
"ticket_place": "बेट अकुपेन्सी",
|
"applyFilter": "फिल्टर लागू गर्नुहोस्",
|
||||||
"ticket_rollback": "टिकट रोलब्याक",
|
"backToAllPools": "सबै जोखिम पूलमा फर्कनुहोस्",
|
||||||
"ticket_failed_line": "असफल बेट रिलिज",
|
"backToList": "सूचीमा फर्कनुहोस्",
|
||||||
"admin_manual_close": "म्यानुअल बन्द",
|
"capAmount": "क्याप",
|
||||||
"admin_manual_recover": "म्यानुअल पुनर्स्थापना"
|
"center": "जोखिम केन्द्र",
|
||||||
|
"changeDraw": "ड्रअ परिवर्तन गर्नुहोस्",
|
||||||
|
"close": "बन्द",
|
||||||
|
"closeTime": "बन्द समय",
|
||||||
|
"combinationCount": "संयोजन",
|
||||||
|
"confirm": {
|
||||||
|
"closeDescription": "नम्बर {{number}} यो ड्रका लागि ब्लक हुनेछ।",
|
||||||
|
"closeTitle": "नम्बर बन्द गर्ने?",
|
||||||
|
"recoverDescription": "नम्बर {{number}} फेरि बाजीका लागि खुल्नेछ।",
|
||||||
|
"recoverTitle": "नम्बर पुन: खोल्ने?"
|
||||||
},
|
},
|
||||||
|
"databaseStatus": "डेटाबेस स्थिति",
|
||||||
|
"detailTitle": "जोखिम पूल विवरण",
|
||||||
|
"drawInfoLoadFailed": "ड्रअ जानकारी लोड असफल भयो",
|
||||||
|
"drawMeta": "ड्रअ {{drawNo}}",
|
||||||
|
"drawNo": "ड्रअ नं.",
|
||||||
|
"enterRisk": "जोखिममा जानुहोस्",
|
||||||
|
"filterActive": "लक / उच्च जोखिम",
|
||||||
|
"filterAll": "सबै",
|
||||||
|
"filterHighRisk": ">80%",
|
||||||
|
"filterSoldOut": "बिक्री समाप्त",
|
||||||
|
"fuzzyDrawNo": "फजी ड्रअ नं.",
|
||||||
|
"groupBy": "दृश्य",
|
||||||
|
"groupByEntry": "नम्बर अनुसार",
|
||||||
|
"groupByTicket": "टिकट अनुसार",
|
||||||
|
"hallPreviewStatus": "(हल पूर्वावलोकन: {{status}})",
|
||||||
|
"headerTitle": "जोखिम · ड्रअ {{drawNo}}",
|
||||||
|
"hotPageTitle": "हट नम्बर निगरानी",
|
||||||
|
"isSoldOut": "बिक्री समाप्त",
|
||||||
|
"loadDetailFailed": "जोखिम पूल विवरण लोड असफल भयो",
|
||||||
|
"loadDrawListFailed": "ड्रअ सूची लोड असफल भयो",
|
||||||
|
"loadLogsFailed": "लक लग लोड असफल भयो",
|
||||||
|
"loadPoolsFailed": "जोखिम पूल लोड असफल भयो",
|
||||||
|
"loadingDraw": "ड्रअ लोड हुँदैछ…",
|
||||||
|
"lock": "लक",
|
||||||
|
"lockLogsGroupedHint": "पूर्वनिर्धारित रूपमा टिकट अनुसार समूह। विस्तारित प्लेको संयोजन टिकट विवरणमा हेर्नुहोस्।",
|
||||||
|
"lockLogsTitle": "जोखिम लक लग",
|
||||||
|
"lockReleaseSummary": "लक / रिलिज पङ्क्ति",
|
||||||
|
"lockedAmount": "लक गरिएको",
|
||||||
|
"lockedWorstCase": "लक गरिएको (अधिकतम भुक्तानी सुरक्षित)",
|
||||||
|
"manualCloseSuccess": "नम्बर बेटिङ म्यानुअल रूपमा बन्द गरियो",
|
||||||
|
"no": "होइन",
|
||||||
|
"noLimit": "सीमा छैन",
|
||||||
|
"normal": "सामान्य",
|
||||||
|
"number": "बेट नम्बर",
|
||||||
|
"number4d": "नम्बर (4 अङ्क)",
|
||||||
|
"numberTitle": "नम्बर {{number}}",
|
||||||
|
"occupationLogs": "यो नम्बरको लक / रिलिज लग",
|
||||||
|
"optional": "वैकल्पिक",
|
||||||
|
"playCode": "प्ले",
|
||||||
|
"poolStatus": "स्थिति",
|
||||||
|
"poolsTitle": "जोखिम पूल",
|
||||||
|
"recover": "पुनर्स्थापना",
|
||||||
|
"recoverSuccess": "नम्बर बेटिङ पुनर्स्थापित गरियो",
|
||||||
|
"refresh": "रिफ्रेस",
|
||||||
|
"release": "रिलिज",
|
||||||
|
"remainingAmount": "बाँकी",
|
||||||
|
"remainingSellable": "बाँकी बिक्रीयोग्य",
|
||||||
|
"riskFilter": "जोखिम फिल्टर",
|
||||||
|
"search": "खोज",
|
||||||
"searchNumber": "नम्बर खोज्नुहोस्",
|
"searchNumber": "नम्बर खोज्नुहोस्",
|
||||||
"searchNumberPlaceholder": "जस्तै 8888",
|
"searchNumberPlaceholder": "जस्तै 8888",
|
||||||
"riskFilter": "जोखिम फिल्टर",
|
|
||||||
"sort": "क्रमबद्ध",
|
|
||||||
"filterAll": "सबै",
|
|
||||||
"filterActive": "लक / उच्च जोखिम",
|
|
||||||
"filterSoldOut": "बिक्री समाप्त",
|
|
||||||
"filterHighRisk": ">80%",
|
|
||||||
"sortUsageDesc": "प्रयोग अनुपात ↓",
|
|
||||||
"sortLockedDesc": "लक रकम ↓",
|
|
||||||
"sortRemainingAsc": "बाँकी ↑",
|
|
||||||
"sortNumberAsc": "नम्बर ↑",
|
|
||||||
"loadPoolsFailed": "जोखिम पूल लोड असफल भयो",
|
|
||||||
"capAmount": "क्याप",
|
|
||||||
"lockedAmount": "लक गरिएको",
|
|
||||||
"remainingAmount": "बाँकी",
|
|
||||||
"usageRatio": "प्रयोग अनुपात",
|
|
||||||
"poolStatus": "स्थिति",
|
|
||||||
"soldOut": "बिक्री समाप्त",
|
"soldOut": "बिक्री समाप्त",
|
||||||
"warning": "चेतावनी",
|
"soldOutPageTitle": "बिक्री समाप्त नम्बर सूची",
|
||||||
"normal": "सामान्य",
|
"sort": "क्रमबद्ध",
|
||||||
"recover": "पुनर्स्थापना",
|
"sortLockedDesc": "लक रकम ↓",
|
||||||
"close": "बन्द",
|
"sortNumberAsc": "नम्बर ↑",
|
||||||
"view": "हेर्नुहोस्",
|
"sortRemainingAsc": "बाँकी ↑",
|
||||||
"manualCloseSuccess": "नम्बर बेटिङ म्यानुअल रूपमा बन्द गरियो",
|
"sortUsageDesc": "प्रयोग अनुपात ↓",
|
||||||
"recoverSuccess": "नम्बर बेटिङ पुनर्स्थापित गरियो",
|
|
||||||
"actionFailed": "कार्य असफल भयो",
|
|
||||||
"detailTitle": "जोखिम पूल विवरण",
|
|
||||||
"loadDetailFailed": "जोखिम पूल विवरण लोड असफल भयो",
|
|
||||||
"backToList": "सूचीमा फर्कनुहोस्",
|
|
||||||
"backToAllPools": "सबै जोखिम पूलमा फर्कनुहोस्",
|
|
||||||
"numberTitle": "नम्बर {{number}}",
|
|
||||||
"drawMeta": "ड्रअ {{drawNo}}",
|
|
||||||
"totalCap": "क्याप रकम",
|
|
||||||
"lockedWorstCase": "लक गरिएको (अधिकतम भुक्तानी सुरक्षित)",
|
|
||||||
"remainingSellable": "बाँकी बिक्रीयोग्य",
|
|
||||||
"isSoldOut": "बिक्री समाप्त",
|
|
||||||
"yes": "हो",
|
|
||||||
"no": "होइन",
|
|
||||||
"occupationLogs": "यो नम्बरको लक / रिलिज लग",
|
|
||||||
"time": "समय",
|
|
||||||
"action": "कार्य",
|
|
||||||
"amount": "रकम",
|
|
||||||
"source": "स्रोत",
|
"source": "स्रोत",
|
||||||
|
"sourceReasonOptions": {
|
||||||
|
"admin_manual_close": "म्यानुअल बन्द",
|
||||||
|
"admin_manual_recover": "म्यानुअल पुनर्स्थापना",
|
||||||
|
"ticket_failed_line": "असफल बेट रिलिज",
|
||||||
|
"ticket_place": "बेट अकुपेन्सी",
|
||||||
|
"ticket_rollback": "टिकट रोलब्याक"
|
||||||
|
},
|
||||||
|
"status": "स्थिति",
|
||||||
|
"statusOptions": {
|
||||||
|
"cancelled": "रद्द",
|
||||||
|
"closed": "बन्द",
|
||||||
|
"closing": "बन्द हुँदै",
|
||||||
|
"cooldown": "कुलडाउन",
|
||||||
|
"drawing": "ड्रअ हुँदै",
|
||||||
|
"open": "खुला",
|
||||||
|
"pending": "सुरु नभएको",
|
||||||
|
"review": "समीक्षा",
|
||||||
|
"settled": "सेटल भयो",
|
||||||
|
"settling": "सेटल हुँदै"
|
||||||
|
},
|
||||||
|
"subnavHot": "हट नम्बर",
|
||||||
|
"subnavOccupancy": "अकुपेन्सी",
|
||||||
|
"subnavPools": "सबै जोखिम पूल",
|
||||||
|
"subnavSoldOut": "बिक्री समाप्त सूची",
|
||||||
"ticketNo": "टिकट नं.",
|
"ticketNo": "टिकट नं.",
|
||||||
"playCode": "प्ले",
|
"time": "समय",
|
||||||
"loadLogsFailed": "लक लग लोड असफल भयो",
|
"title": "जोखिम",
|
||||||
"lockLogsTitle": "जोखिम लक लग",
|
"totalCap": "क्याप रकम",
|
||||||
"lockLogsGroupedHint": "पूर्वनिर्धारित रूपमा टिकट अनुसार समूह। विस्तारित प्लेको संयोजन टिकट विवरणमा हेर्नुहोस्।",
|
"usageRatio": "प्रयोग अनुपात",
|
||||||
"groupBy": "दृश्य",
|
"view": "हेर्नुहोस्",
|
||||||
"groupByTicket": "टिकट अनुसार",
|
|
||||||
"groupByEntry": "नम्बर अनुसार",
|
|
||||||
"combinationCount": "संयोजन",
|
|
||||||
"lockReleaseSummary": "लक / रिलिज पङ्क्ति",
|
|
||||||
"viewDetail": "विवरण",
|
"viewDetail": "विवरण",
|
||||||
"viewTicket": "टिकट",
|
"viewTicket": "टिकट",
|
||||||
"number": "बेट नम्बर",
|
"warning": "चेतावनी",
|
||||||
"drawInfoLoadFailed": "ड्रअ जानकारी लोड असफल भयो",
|
"yes": "हो"
|
||||||
"loadingDraw": "ड्रअ लोड हुँदैछ…",
|
|
||||||
"headerTitle": "जोखिम · ड्रअ {{drawNo}}",
|
|
||||||
"databaseStatus": "डेटाबेस स्थिति",
|
|
||||||
"hallPreviewStatus": "(हल पूर्वावलोकन: {{status}})",
|
|
||||||
"subnavOccupancy": "अकुपेन्सी",
|
|
||||||
"subnavHot": "हट नम्बर",
|
|
||||||
"subnavSoldOut": "बिक्री समाप्त सूची",
|
|
||||||
"subnavPools": "सबै जोखिम पूल",
|
|
||||||
"changeDraw": "ड्रअ परिवर्तन गर्नुहोस्",
|
|
||||||
"number4d": "नम्बर (4 अङ्क)",
|
|
||||||
"optional": "वैकल्पिक",
|
|
||||||
"actionFilter": "कार्य",
|
|
||||||
"noLimit": "सीमा छैन",
|
|
||||||
"lock": "लक",
|
|
||||||
"release": "रिलिज",
|
|
||||||
"applyFilter": "फिल्टर लागू गर्नुहोस्",
|
|
||||||
"statusOptions": {
|
|
||||||
"pending": "सुरु नभएको",
|
|
||||||
"open": "खुला",
|
|
||||||
"closing": "बन्द हुँदै",
|
|
||||||
"closed": "बन्द",
|
|
||||||
"drawing": "ड्रअ हुँदै",
|
|
||||||
"review": "समीक्षा",
|
|
||||||
"cooldown": "कुलडाउन",
|
|
||||||
"settling": "सेटल हुँदै",
|
|
||||||
"settled": "सेटल भयो",
|
|
||||||
"cancelled": "रद्द"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,58 +1,62 @@
|
|||||||
{
|
{
|
||||||
"title": "टिकट सूची",
|
"actions": "कार्य",
|
||||||
"playerTicketQuery": "टिकट खोज",
|
"actualDeduct": "कटौती",
|
||||||
"playerId": "खेलाडी ID / खाता",
|
"allTickets": "सबै टिकट",
|
||||||
"invalidPlayerId": "मान्य खेलाडी ID वा खाता लेख्नुहोस्",
|
"backToList": "टिकट सूचीमा फर्कनुहोस्",
|
||||||
"playerIdPlaceholder": "सबै देखाउन खाली छोड्नुहोस्; ID वा खाता लेख्नुहोस्",
|
"betAmount": "बेट रकम",
|
||||||
|
"combinationCount": "विस्तारित संयोजन",
|
||||||
|
"combinationsHint": "एक बेट लाइन धेरै 4D नम्बरमा विस्तार हुन सक्छ।",
|
||||||
|
"combinationsTitle": "संयोजन विवरण",
|
||||||
|
"comboBetAmount": "संयोजन बेट",
|
||||||
|
"comboEstimatedPayout": "अनुमानित भुक्तानी रिजर्भ",
|
||||||
|
"detailLoadFailed": "टिकट विवरण लोड असफल",
|
||||||
|
"detailTitle": "टिकट विवरण",
|
||||||
|
"drawNo": "ड्रअ नं.",
|
||||||
"drawNoOptional": "ड्रअ नम्बर (वैकल्पिक)",
|
"drawNoOptional": "ड्रअ नम्बर (वैकल्पिक)",
|
||||||
"drawNoPlaceholder": "जस्तै 20260520-001",
|
"drawNoPlaceholder": "जस्तै 20260520-001",
|
||||||
|
"failReason": "असफल कारण",
|
||||||
|
"filterAllSites": "सबै साइट",
|
||||||
|
"filterSite": "साइट",
|
||||||
|
"invalidPlayerId": "मान्य खेलाडी ID वा खाता लेख्नुहोस्",
|
||||||
|
"loadFailed": "लोड असफल भयो",
|
||||||
|
"loadingDetail": "लोड हुँदै…",
|
||||||
|
"number": "नम्बर",
|
||||||
|
"number4d": "4D नम्बर",
|
||||||
"numberKeyword": "नम्बर / टिकट / अर्डर",
|
"numberKeyword": "नम्बर / टिकट / अर्डर",
|
||||||
"numberKeywordPlaceholder": "नम्बर, टिकट नं. वा अर्डर नं. बाट खोज्नुहोस्",
|
"numberKeywordPlaceholder": "नम्बर, टिकट नं. वा अर्डर नं. बाट खोज्नुहोस्",
|
||||||
"placedDateRange": "बेट गरिएको मिति दायरा",
|
|
||||||
"query": "खोज",
|
|
||||||
"resetFilters": "फिल्टर रिसेट",
|
|
||||||
"refreshCurrentPage": "हालको पृष्ठ रिफ्रेस",
|
|
||||||
"loadFailed": "लोड असफल भयो",
|
|
||||||
"ticketNo": "टिकट नं.",
|
|
||||||
"player": "खेलाडी",
|
|
||||||
"orderNo": "अर्डर नं.",
|
"orderNo": "अर्डर नं.",
|
||||||
"drawNo": "ड्रअ नं.",
|
|
||||||
"playCode": "प्ले",
|
|
||||||
"number": "नम्बर",
|
|
||||||
"betAmount": "बेट रकम",
|
|
||||||
"actualDeduct": "कटौती",
|
|
||||||
"status": "स्थिति",
|
|
||||||
"actions": "कार्य",
|
|
||||||
"viewPlayer": "खेलाडी हेर्नुहोस्",
|
|
||||||
"failReason": "असफल कारण",
|
|
||||||
"winAmount": "जित रकम",
|
|
||||||
"placedAt": "बेट समय",
|
"placedAt": "बेट समय",
|
||||||
"updatedAt": "अपडेट समय",
|
"placedDateRange": "बेट गरिएको मिति दायरा",
|
||||||
|
"playCode": "प्ले",
|
||||||
|
"player": "खेलाडी",
|
||||||
|
"playerId": "खेलाडी ID / खाता",
|
||||||
|
"playerIdPlaceholder": "सबै देखाउन खाली छोड्नुहोस्; ID वा खाता लेख्नुहोस्",
|
||||||
|
"playerTicketQuery": "टिकट खोज",
|
||||||
|
"query": "खोज",
|
||||||
|
"refreshCurrentPage": "हालको पृष्ठ रिफ्रेस",
|
||||||
|
"resetFilters": "फिल्टर रिसेट",
|
||||||
|
"status": "स्थिति",
|
||||||
"statusFilterLabel": "स्थिति फिल्टर",
|
"statusFilterLabel": "स्थिति फिल्टर",
|
||||||
"statusHint": "धेरै चयन गर्न सकिन्छ। खाली छोडे सबै स्थिति देखिन्छ।",
|
"statusHint": "धेरै चयन गर्न सकिन्छ। खाली छोडे सबै स्थिति देखिन्छ।",
|
||||||
"statusOptions": {
|
"statusOptions": {
|
||||||
"all": "सबै",
|
"all": "सबै",
|
||||||
"pending_confirm": "पुष्टि बाँकी",
|
|
||||||
"partial_pending_confirm": "आंशिक पुष्टि बाँकी",
|
|
||||||
"placed": "बेट राखियो",
|
|
||||||
"pending_draw": "ड्र पर्खँदै",
|
|
||||||
"partial_failed": "आंशिक असफल",
|
|
||||||
"failed": "बेट असफल",
|
"failed": "बेट असफल",
|
||||||
|
"partial_failed": "आंशिक असफल",
|
||||||
|
"partial_pending_confirm": "आंशिक पुष्टि बाँकी",
|
||||||
|
"pending_confirm": "पुष्टि बाँकी",
|
||||||
|
"pending_draw": "ड्र पर्खँदै",
|
||||||
"pending_payout": "भुक्तानी बाँकी",
|
"pending_payout": "भुक्तानी बाँकी",
|
||||||
"settled_win": "जित सेटल भयो",
|
"placed": "बेट राखियो",
|
||||||
|
"refunded": "फिर्ता भयो",
|
||||||
"settled_lose": "हार सेटल भयो",
|
"settled_lose": "हार सेटल भयो",
|
||||||
"refunded": "फिर्ता भयो"
|
"settled_win": "जित सेटल भयो"
|
||||||
},
|
},
|
||||||
"allTickets": "सबै टिकट",
|
"statusSelectedCount": "{{count}} छानिएको",
|
||||||
"detailTitle": "टिकट विवरण",
|
"ticketNo": "टिकट नं.",
|
||||||
"detailLoadFailed": "टिकट विवरण लोड असफल",
|
"title": "टिकट सूची",
|
||||||
"loadingDetail": "लोड हुँदै…",
|
"updatedAt": "अपडेट समय",
|
||||||
"backToList": "टिकट सूचीमा फर्कनुहोस्",
|
"viewPlayer": "खेलाडी हेर्नुहोस्",
|
||||||
"viewTicketDetail": "टिकट विवरण हेर्नुहोस्",
|
"viewTicketDetail": "टिकट विवरण हेर्नुहोस्",
|
||||||
"combinationCount": "विस्तारित संयोजन",
|
"viewTicketInList": "यो टिकट हेर्नुहोस्",
|
||||||
"combinationsTitle": "संयोजन विवरण",
|
"winAmount": "जित रकम"
|
||||||
"combinationsHint": "एक बेट लाइन धेरै 4D नम्बरमा विस्तार हुन सक्छ।",
|
|
||||||
"number4d": "4D नम्बर",
|
|
||||||
"comboBetAmount": "संयोजन बेट",
|
|
||||||
"comboEstimatedPayout": "अनुमानित भुक्तानी रिजर्भ"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,86 +1,92 @@
|
|||||||
{
|
{
|
||||||
"title": "वालेट",
|
"abnormalOnly": "असामान्य मात्र",
|
||||||
"subnavLabel": "वालेट उपपृष्ठहरू",
|
"abnormalOnlyPending": "असामान्य मात्र (मिलान बाँकी)",
|
||||||
"subnavTransactions": "वालेट कारोबार",
|
"actionFailed": "कार्य असफल भयो",
|
||||||
"subnavTransferOrders": "ट्रान्सफर अर्डर",
|
"actions": "कार्य",
|
||||||
"subnavPlayerWallet": "खेलाडी वालेट",
|
"actionsMenuAriaLabel": "ट्रान्सफर अर्डर कार्य मेनु",
|
||||||
"noPermission": "हालको खातासँग यो पृष्ठमा पहुँच अनुमति छैन",
|
"amount": "रकम",
|
||||||
"copySuccess": "{{label}} क्लिपबोर्डमा प्रतिलिपि भयो",
|
"availableBalance": "उपलब्ध (अनुमानित)",
|
||||||
"copyFailed": "प्रतिलिपि असफल भयो। ब्राउजर अनुमति जाँच गर्नुहोस् वा म्यानुअल रूपमा कपी गर्नुहोस्।",
|
"balanceMinor": "ब्यालेन्स (सानो एकाइ)",
|
||||||
"statusProcessing": "प्रक्रियामा",
|
|
||||||
"statusSuccess": "सफल",
|
|
||||||
"statusFailed": "असफल",
|
|
||||||
"statusPendingReconcile": "मिलान बाँकी",
|
|
||||||
"statusReversed": "रिभर्स भयो",
|
|
||||||
"statusCaseClosed": "केस बन्द भयो",
|
|
||||||
"statusPosted": "पोस्ट गरियो",
|
|
||||||
"filterAll": "सबै",
|
|
||||||
"transferIn": "मुख्य साइटबाट भित्र",
|
|
||||||
"transferOut": "मुख्य साइटतर्फ बाहिर",
|
|
||||||
"transferOutRefund": "ट्रान्सफर-आउट फिर्ता",
|
|
||||||
"bizBetDeduct": "बेट कटौती",
|
"bizBetDeduct": "बेट कटौती",
|
||||||
"bizBetReverse": "बेट उल्टाउने",
|
"bizBetReverse": "बेट उल्टाउने",
|
||||||
"bizSettlePayout": "बन्दोबस्त भुक्तानी",
|
|
||||||
"bizJackpotPayout": "ज्याकपट भुक्तानी",
|
"bizJackpotPayout": "ज्याकपट भुक्तानी",
|
||||||
|
"bizSettlePayout": "बन्दोबस्त भुक्तानी",
|
||||||
"bizSettlementAdjustment": "बन्दोबस्त समायोजन",
|
"bizSettlementAdjustment": "बन्दोबस्त समायोजन",
|
||||||
"transferOrders": "ट्रान्सफर अर्डर",
|
"bizType": "व्यवसाय प्रकार",
|
||||||
"walletTransactions": "वालेट कारोबार",
|
"completeCredit": "क्रेडिट पूरा गर्नुहोस्",
|
||||||
"playerWalletQuery": "खेलाडी वालेट खोज",
|
"completeCreditSuccess": "ट्रान्सफर-इन क्रेडिट सफल भयो",
|
||||||
"localTransferNo": "स्थानीय ट्रान्सफर नं.",
|
"confirm": {
|
||||||
|
"completeCreditDescription": "मुख्य साइटले पहिले नै कटौती गरेको छ भने, अर्डर {{transferNo}} को लागि लटरी वालेटमा क्रेडिट गरी सफल चिन्ह लगाउँछ।",
|
||||||
|
"completeCreditTitle": "ट्रान्सफर-इन क्रेडिट पूरा गर्ने?",
|
||||||
|
"markCaseClosedDescription": "अर्डर {{transferNo}} मात्र बन्द भएको चिन्ह लगाउँछ; वालेट मिलाउँदैन। बाहिरै समाधान भइसकेको पुष्टि गर्नुहोस्।",
|
||||||
|
"markCaseClosedTitle": "केस बन्द चिन्ह पुष्टि?",
|
||||||
|
"reverseDescription": "अर्डर {{transferNo}} रिभर्स गर्नेछ, खेलाडी वालेट प्रभावित हुन सक्छ।",
|
||||||
|
"reverseTitle": "ट्रान्सफर रिभर्स पुष्टि गर्ने?"
|
||||||
|
},
|
||||||
|
"copyExternalRefNo": "मुख्य साइट सन्दर्भ नं.",
|
||||||
|
"copyExternalTxnRefNo": "मुख्य साइट सन्दर्भ नं.",
|
||||||
|
"copyFailed": "प्रतिलिपि असफल भयो। ब्राउजर अनुमति जाँच गर्नुहोस् वा म्यानुअल रूपमा कपी गर्नुहोस्।",
|
||||||
|
"copySuccess": "{{label}} क्लिपबोर्डमा प्रतिलिपि भयो",
|
||||||
|
"copyTransferNo": "स्थानीय ट्रान्सफर नं.",
|
||||||
|
"copyTxnNo": "कारोबार नं.",
|
||||||
|
"currency": "मुद्रा",
|
||||||
|
"direction": "दिशा",
|
||||||
"externalRefNo": "मुख्य साइट सन्दर्भ नं.",
|
"externalRefNo": "मुख्य साइट सन्दर्भ नं.",
|
||||||
|
"failReason": "असफल कारण",
|
||||||
|
"filterAll": "सबै",
|
||||||
|
"finishedTime": "समाप्त समय",
|
||||||
|
"in": "भित्र",
|
||||||
|
"invalidPlayerId": "मान्य खेलाडी ID लेख्नुहोस्",
|
||||||
|
"ledgerChannel": "लेजर",
|
||||||
|
"ledgerCredit": "क्रेडिट लेजर",
|
||||||
|
"ledgerWallet": "वालेट लेनदेन",
|
||||||
|
"loadFailed": "लोड असफल भयो",
|
||||||
|
"localTransferNo": "स्थानीय ट्रान्सफर नं.",
|
||||||
|
"markCaseClosed": "केस बन्द चिन्ह",
|
||||||
|
"markCaseClosedSuccess": "केस बन्द चिन्ह लाग्यो",
|
||||||
|
"noPermission": "हालको खातासँग यो पृष्ठमा पहुँच अनुमति छैन",
|
||||||
|
"noWalletRows": "वालेट रेकर्ड छैन। बेट वा ट्रान्सफर नगरेका खेलाडीमा रेकर्ड नहुन सक्छ।",
|
||||||
|
"options": "विकल्प",
|
||||||
|
"out": "बाहिर",
|
||||||
"playerAccount": "खेलाडी खाता",
|
"playerAccount": "खेलाडी खाता",
|
||||||
"playerAccountPlaceholder": "मुख्य साइट खेलाडी ID वा प्रयोगकर्ता नाम (fuzzy)",
|
"playerAccountPlaceholder": "मुख्य साइट खेलाडी ID वा प्रयोगकर्ता नाम (fuzzy)",
|
||||||
"playerId": "खेलाडी ID",
|
"playerId": "खेलाडी ID",
|
||||||
"playerIdOptional": "वैकल्पिक, खाताभन्दा प्राथमिक",
|
"playerIdOptional": "वैकल्पिक, खाताभन्दा प्राथमिक",
|
||||||
"requestDateRange": "अनुरोध मिति दायरा",
|
"playerWalletQuery": "खेलाडी वालेट खोज",
|
||||||
"status": "स्थिति",
|
|
||||||
"options": "विकल्प",
|
|
||||||
"abnormalOnly": "असामान्य मात्र",
|
|
||||||
"abnormalOnlyPending": "असामान्य मात्र (मिलान बाँकी)",
|
|
||||||
"search": "खोज",
|
|
||||||
"resetFilters": "फिल्टर रिसेट",
|
|
||||||
"refreshCurrentPage": "हालको पृष्ठ रिफ्रेस",
|
|
||||||
"loadFailed": "लोड असफल भयो",
|
|
||||||
"direction": "दिशा",
|
|
||||||
"amount": "रकम",
|
|
||||||
"failReason": "असफल कारण",
|
|
||||||
"requestTime": "अनुरोध समय",
|
|
||||||
"finishedTime": "समाप्त समय",
|
|
||||||
"actions": "कार्य",
|
|
||||||
"actionsMenuAriaLabel": "ट्रान्सफर अर्डर कार्य मेनु",
|
|
||||||
"reverse": "रिभर्स",
|
|
||||||
"completeCredit": "क्रेडिट पूरा गर्नुहोस्",
|
|
||||||
"markCaseClosed": "केस बन्द चिन्ह",
|
|
||||||
"processing": "प्रक्रियामा…",
|
"processing": "प्रक्रियामा…",
|
||||||
"reverseSuccess": "रिभर्स सफल भयो",
|
|
||||||
"completeCreditSuccess": "ट्रान्सफर-इन क्रेडिट सफल भयो",
|
|
||||||
"markCaseClosedSuccess": "केस बन्द चिन्ह लाग्यो",
|
|
||||||
"actionFailed": "कार्य असफल भयो",
|
|
||||||
"confirm": {
|
|
||||||
"reverseTitle": "ट्रान्सफर रिभर्स पुष्टि गर्ने?",
|
|
||||||
"reverseDescription": "अर्डर {{transferNo}} रिभर्स गर्नेछ, खेलाडी वालेट प्रभावित हुन सक्छ।",
|
|
||||||
"completeCreditTitle": "ट्रान्सफर-इन क्रेडिट पूरा गर्ने?",
|
|
||||||
"completeCreditDescription": "मुख्य साइटले पहिले नै कटौती गरेको छ भने, अर्डर {{transferNo}} को लागि लटरी वालेटमा क्रेडिट गरी सफल चिन्ह लगाउँछ।",
|
|
||||||
"markCaseClosedTitle": "केस बन्द चिन्ह पुष्टि?",
|
|
||||||
"markCaseClosedDescription": "अर्डर {{transferNo}} मात्र बन्द भएको चिन्ह लगाउँछ; वालेट मिलाउँदैन। बाहिरै समाधान भइसकेको पुष्टि गर्नुहोस्।"
|
|
||||||
},
|
|
||||||
"txnNo": "कारोबार नं.",
|
|
||||||
"bizType": "व्यवसाय प्रकार",
|
|
||||||
"type": "प्रकार",
|
|
||||||
"queryFailed": "खोज असफल भयो",
|
|
||||||
"invalidPlayerId": "मान्य खेलाडी ID लेख्नुहोस्",
|
|
||||||
"querying": "खोजिँदैछ…",
|
|
||||||
"query": "खोज",
|
"query": "खोज",
|
||||||
|
"queryFailed": "खोज असफल भयो",
|
||||||
|
"querying": "खोजिँदैछ…",
|
||||||
|
"refreshCurrentPage": "हालको पृष्ठ रिफ्रेस",
|
||||||
|
"requestDateRange": "अनुरोध मिति दायरा",
|
||||||
|
"requestTime": "अनुरोध समय",
|
||||||
|
"resetFilters": "फिल्टर रिसेट",
|
||||||
|
"reverse": "रिभर्स",
|
||||||
|
"reverseSuccess": "रिभर्स सफल भयो",
|
||||||
|
"scopeHint": "यो क्षेत्र मुख्य साइट वालेट मोड (वालेट लेनदेन र ट्रान्सफर) का लागि हो। क्रेडिट लाइन अवधि सेटलमेन्टका लागि हेर्नुहोस्",
|
||||||
|
"scopeHintSettlement": "सेटलमेन्ट केन्द्र",
|
||||||
|
"scopeHintSettlementLink": "सेटलमेन्ट केन्द्र",
|
||||||
|
"search": "खोज",
|
||||||
"sitePlayer": "साइट खेलाडी",
|
"sitePlayer": "साइट खेलाडी",
|
||||||
"walletType": "प्रकार",
|
"status": "स्थिति",
|
||||||
"currency": "मुद्रा",
|
"statusCaseClosed": "केस बन्द भयो",
|
||||||
"balanceMinor": "ब्यालेन्स (सानो एकाइ)",
|
"statusFailed": "असफल",
|
||||||
"availableBalance": "उपलब्ध (अनुमानित)",
|
"statusPendingReconcile": "मिलान बाँकी",
|
||||||
"noWalletRows": "वालेट रेकर्ड छैन। बेट वा ट्रान्सफर नगरेका खेलाडीमा रेकर्ड नहुन सक्छ।",
|
"statusPosted": "पोस्ट गरियो",
|
||||||
"copyTransferNo": "स्थानीय ट्रान्सफर नं.",
|
"statusProcessing": "प्रक्रियामा",
|
||||||
"copyExternalRefNo": "मुख्य साइट सन्दर्भ नं.",
|
"statusReversed": "रिभर्स भयो",
|
||||||
"copyTxnNo": "कारोबार नं.",
|
"statusSuccess": "सफल",
|
||||||
"copyExternalTxnRefNo": "मुख्य साइट सन्दर्भ नं.",
|
"subnavLabel": "वालेट उपपृष्ठहरू",
|
||||||
"in": "भित्र",
|
"subnavPlayerWallet": "खेलाडी वालेट",
|
||||||
"out": "बाहिर"
|
"subnavTransactions": "वालेट कारोबार",
|
||||||
|
"subnavTransferOrders": "ट्रान्सफर अर्डर",
|
||||||
|
"title": "वालेट",
|
||||||
|
"transferIn": "मुख्य साइटबाट भित्र",
|
||||||
|
"transferOrders": "ट्रान्सफर अर्डर",
|
||||||
|
"transferOut": "मुख्य साइटतर्फ बाहिर",
|
||||||
|
"transferOutRefund": "ट्रान्सफर-आउट फिर्ता",
|
||||||
|
"txnNo": "कारोबार नं.",
|
||||||
|
"type": "प्रकार",
|
||||||
|
"walletTransactions": "वालेट कारोबार",
|
||||||
|
"walletType": "प्रकार"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"deleteSuccess": "已删除 {{name}}",
|
"deleteSuccess": "已删除 {{name}}",
|
||||||
"deleteFailed": "删除失败",
|
"deleteFailed": "删除失败",
|
||||||
"roleListTitle": "平台角色管理",
|
"roleListTitle": "平台角色管理",
|
||||||
"roleListHint": "可新增自定义角色并配置权限;内置角色(超级管理员、站点管理员、代理)不可删除。",
|
"roleListHint": "可新增自定义角色并配置权限;内置角色(超级管理员、站点管理员、站点财务、站点客服、代理)不可删除。",
|
||||||
"createRole": "新增平台角色",
|
"createRole": "新增平台角色",
|
||||||
"roleCreateSuccess": "已创建角色 {{name}}",
|
"roleCreateSuccess": "已创建角色 {{name}}",
|
||||||
"roleUpdateSuccess": "已更新角色 {{name}}",
|
"roleUpdateSuccess": "已更新角色 {{name}}",
|
||||||
|
|||||||
@@ -190,6 +190,49 @@
|
|||||||
"bills": "结算中心"
|
"bills": "结算中心"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"finance": {
|
||||||
|
"title": "财务工作台",
|
||||||
|
"subtitle": "{{name}} · 对账与结算",
|
||||||
|
"subtitleFallback": "站点财务 · 对账与结算",
|
||||||
|
"abnormalTransfers": "异常转账单",
|
||||||
|
"pendingConfirmBills": "待确认账单",
|
||||||
|
"pendingConfirmHint": "账期关账后待财务确认",
|
||||||
|
"payableBills": "待收付账单",
|
||||||
|
"payableUnpaid": "未收付 {{amount}}",
|
||||||
|
"payableUnpaidLabel": "待收付合计",
|
||||||
|
"walletPlayers": "钱包盘玩家",
|
||||||
|
"creditPlayersHint": "信用盘 {{count}} 人",
|
||||||
|
"settlementTitle": "信用结算",
|
||||||
|
"reconcileTitle": "钱包对账",
|
||||||
|
"overviewEmpty": "暂无财务摘要,请确认已绑定接入站点。",
|
||||||
|
"quickLinks": {
|
||||||
|
"reconcile": "对账中心",
|
||||||
|
"transfers": "转账单",
|
||||||
|
"bills": "结算中心",
|
||||||
|
"reports": "报表中心"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cs": {
|
||||||
|
"title": "客服工作台",
|
||||||
|
"subtitle": "{{name}} · 玩家与注单查询",
|
||||||
|
"subtitleFallback": "站点客服 · 玩家与注单查询",
|
||||||
|
"playerCount": "站点玩家",
|
||||||
|
"playerCountHint": "本站点注册玩家总数",
|
||||||
|
"ticketsToday": "今日注单",
|
||||||
|
"activePlayersToday": "今日活跃玩家",
|
||||||
|
"activePlayersHint": "今日有下注的玩家数",
|
||||||
|
"latestTicketAt": "最近注单 {{time}}",
|
||||||
|
"noTicketToday": "今日暂无注单",
|
||||||
|
"workspaceTitle": "常用入口",
|
||||||
|
"scopeTitle": "今日概况",
|
||||||
|
"openModule": "进入模块",
|
||||||
|
"overviewEmpty": "暂无客服摘要,请确认已绑定接入站点。",
|
||||||
|
"quickLinks": {
|
||||||
|
"players": "玩家查询",
|
||||||
|
"tickets": "注单查询",
|
||||||
|
"wallet": "钱包流水"
|
||||||
|
}
|
||||||
|
},
|
||||||
"agent": {
|
"agent": {
|
||||||
"title": "经营概览",
|
"title": "经营概览",
|
||||||
"subtitle": "{{name}} · 本线路",
|
"subtitle": "{{name}} · 本线路",
|
||||||
|
|||||||
@@ -62,7 +62,6 @@
|
|||||||
"hot_number_risk_report": "热门号码风险",
|
"hot_number_risk_report": "热门号码风险",
|
||||||
"play_dimension_report": "玩法维度",
|
"play_dimension_report": "玩法维度",
|
||||||
"sold_out_number_report": "售罄号码",
|
"sold_out_number_report": "售罄号码",
|
||||||
"rebate_commission_report": "佣金/回水",
|
|
||||||
"audit_operation_report": "后台操作审计"
|
"audit_operation_report": "后台操作审计"
|
||||||
},
|
},
|
||||||
"empty": "没有匹配的报表",
|
"empty": "没有匹配的报表",
|
||||||
@@ -173,16 +172,6 @@
|
|||||||
"extra": "使用率",
|
"extra": "使用率",
|
||||||
"time": "版本"
|
"time": "版本"
|
||||||
},
|
},
|
||||||
"rebateCommission": {
|
|
||||||
"primary": "玩法",
|
|
||||||
"secondary": "订单数",
|
|
||||||
"metricA": "回水",
|
|
||||||
"metricB": "注单数",
|
|
||||||
"metricC": "佣金",
|
|
||||||
"status": "配置命中",
|
|
||||||
"extra": "备注",
|
|
||||||
"time": "时间"
|
|
||||||
},
|
|
||||||
"adminAudit": {
|
"adminAudit": {
|
||||||
"primary": "日志 ID",
|
"primary": "日志 ID",
|
||||||
"secondary": "操作者类型",
|
"secondary": "操作者类型",
|
||||||
@@ -303,10 +292,6 @@
|
|||||||
"title": "售罄号码报表",
|
"title": "售罄号码报表",
|
||||||
"summary": "查看单期已售罄号码、售罄时间和风险封锁情况。"
|
"summary": "查看单期已售罄号码、售罄时间和风险封锁情况。"
|
||||||
},
|
},
|
||||||
"rebate_commission": {
|
|
||||||
"title": "佣金/回水报表",
|
|
||||||
"summary": "钱包盘下注立减回水,按业务日汇总;未选日期默认近 30 天。非信用占成账期。"
|
|
||||||
},
|
|
||||||
"admin_audit": {
|
"admin_audit": {
|
||||||
"title": "后台操作审计报表",
|
"title": "后台操作审计报表",
|
||||||
"summary": "按操作人与记录创建时间筛选;未选日期默认近 30 天。"
|
"summary": "按操作人与记录创建时间筛选;未选日期默认近 30 天。"
|
||||||
|
|||||||
@@ -28,6 +28,15 @@ adminHttp.interceptors.response.use(
|
|||||||
if (isAdminAuthRejected(error)) {
|
if (isAdminAuthRejected(error)) {
|
||||||
handleAdminAuthRejected();
|
handleAdminAuthRejected();
|
||||||
}
|
}
|
||||||
|
if (isAxiosError(error) && typeof window !== "undefined") {
|
||||||
|
const status = error.response?.status;
|
||||||
|
if (status === 500 || status === 502 || status === 503) {
|
||||||
|
console.error("[admin-http] upstream unavailable", status);
|
||||||
|
}
|
||||||
|
if (!error.response && error.message?.includes("Network Error")) {
|
||||||
|
console.error("[admin-http] network offline or upstream unreachable");
|
||||||
|
}
|
||||||
|
}
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
65
src/lib/admin-money-display.ts
Normal file
65
src/lib/admin-money-display.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
|
export type AdminMoneyDisplaySize = "sm" | "md" | "lg" | "xl";
|
||||||
|
|
||||||
|
const SIZE_TIERS: Record<AdminMoneyDisplaySize, readonly string[]> = {
|
||||||
|
sm: ["text-sm", "text-xs", "text-[11px]", "text-[10px]", "text-[9px]"],
|
||||||
|
md: ["text-base", "text-sm", "text-xs", "text-[11px]", "text-[10px]"],
|
||||||
|
lg: ["text-lg sm:text-xl", "text-base sm:text-lg", "text-sm sm:text-base", "text-xs sm:text-sm", "text-[11px] sm:text-xs"],
|
||||||
|
xl: ["text-2xl", "text-xl", "text-lg", "text-base sm:text-lg", "text-sm sm:text-base"],
|
||||||
|
};
|
||||||
|
|
||||||
|
function tierForLength(len: number): number {
|
||||||
|
if (len > 20) {
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
if (len > 16) {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if (len > 12) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (len > 8) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 按字符长度分档缩小字号,避免卡片/栅格/表格内大额被裁切 */
|
||||||
|
export function adminMoneyDisplaySizeClass(
|
||||||
|
value: string,
|
||||||
|
size: AdminMoneyDisplaySize = "lg",
|
||||||
|
): string {
|
||||||
|
const len = value.replace(/\s/g, "").length;
|
||||||
|
const tier = tierForLength(len);
|
||||||
|
return SIZE_TIERS[size][tier] ?? SIZE_TIERS[size][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function adminMoneyDisplayClass(
|
||||||
|
value: string,
|
||||||
|
{
|
||||||
|
size = "lg",
|
||||||
|
emphasize = true,
|
||||||
|
className,
|
||||||
|
}: {
|
||||||
|
size?: AdminMoneyDisplaySize;
|
||||||
|
emphasize?: boolean;
|
||||||
|
className?: string;
|
||||||
|
} = {},
|
||||||
|
): string {
|
||||||
|
return cn(
|
||||||
|
"min-w-0 whitespace-normal break-words [overflow-wrap:anywhere] tabular-nums leading-tight tracking-tight",
|
||||||
|
emphasize ? "font-semibold" : "font-medium",
|
||||||
|
adminMoneyDisplaySizeClass(value, size),
|
||||||
|
className,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function adminMoneyDisplayTitle(value: string | number | null | undefined): string | undefined {
|
||||||
|
if (value == null) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const text = String(value).trim();
|
||||||
|
return text === "" || text === "…" || text === "—" ? undefined : text;
|
||||||
|
}
|
||||||
19
src/lib/admin-permission-codes.ts
Normal file
19
src/lib/admin-permission-codes.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/** 与 Laravel `admin_menu_actions.permission_code` / API 鉴权对齐 */
|
||||||
|
|
||||||
|
export const PERM_DASHBOARD_VIEW = "dashboard.view" as const;
|
||||||
|
export const PERM_SERVICE_REPORT_VIEW = "service.report.view" as const;
|
||||||
|
export const PERM_SERVICE_REPORT_EXPORT = "service.report.export" as const;
|
||||||
|
export const PERM_SERVICE_PLAYERS_VIEW = "service.players.view" as const;
|
||||||
|
export const PERM_SERVICE_PLAYERS_MANAGE = "service.players.manage" as const;
|
||||||
|
export const PERM_SERVICE_PLAYERS_FREEZE = "service.players.freeze" as const;
|
||||||
|
export const PERM_SERVICE_TICKETS_VIEW = "service.tickets.view" as const;
|
||||||
|
export const PERM_SERVICE_WALLET_VIEW = "service.wallet.view" as const;
|
||||||
|
export const PERM_SERVICE_WALLET_MANAGE = "service.wallet.manage" as const;
|
||||||
|
export const PERM_SERVICE_WALLET_ADJUST = "service.wallet.adjust" as const;
|
||||||
|
export const PERM_SERVICE_RECONCILE_VIEW = "service.reconcile.view" as const;
|
||||||
|
export const PERM_SERVICE_RECONCILE_MANAGE = "service.reconcile.manage" as const;
|
||||||
|
export const PERM_SERVICE_AUDIT_VIEW = "service.audit.view" as const;
|
||||||
|
export const PERM_AGENT_NODE_VIEW = "agent.node.view" as const;
|
||||||
|
export const PERM_AGENT_NODE_MANAGE = "agent.node.manage" as const;
|
||||||
|
export const PERM_SETTLEMENT_AGENT_VIEW = "settlement.agent.view" as const;
|
||||||
|
export const PERM_SETTLEMENT_AGENT_MANAGE = "settlement.agent.manage" as const;
|
||||||
@@ -9,3 +9,25 @@ export function adminHasAnyPermission(
|
|||||||
}
|
}
|
||||||
return required.some((slug) => set.includes(slug));
|
return required.some((slug) => set.includes(slug));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 当前登录管理员是否拥有 `required` 中任一 action code(与 API 鉴权 / `operational_permissions` 对齐)。 */
|
||||||
|
export function adminHasAnyPermissionCode(
|
||||||
|
permissionCodes: readonly string[] | null | undefined,
|
||||||
|
required: readonly string[],
|
||||||
|
): boolean {
|
||||||
|
const set = permissionCodes ?? [];
|
||||||
|
if (set.length === 0 || required.length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return required.some((code) => set.includes(code));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 读取会话中的 operational_permissions;旧缓存无该字段时回退到 permissions(兼容发版前 localStorage)。 */
|
||||||
|
export function adminOperationalPermissionCodes(
|
||||||
|
profile: { operational_permissions?: string[]; permissions?: string[] } | null | undefined,
|
||||||
|
): readonly string[] {
|
||||||
|
if (Array.isArray(profile?.operational_permissions) && profile.operational_permissions.length > 0) {
|
||||||
|
return profile.operational_permissions;
|
||||||
|
}
|
||||||
|
return profile?.permissions ?? [];
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,7 +5,29 @@ export function isAgentOperator(profile: AdminProfile | null | undefined): boole
|
|||||||
return profile?.agent != null && profile.is_super_admin !== true;
|
return profile?.agent != null && profile.is_super_admin !== true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 平台站点管理员(绑定 site_admin 角色、无代理节点)。 */
|
/** 任意接入站点平台账号(site_admin / site_finance / site_cs)。 */
|
||||||
export function isSiteAdminOperator(profile: AdminProfile | null | undefined): boolean {
|
export function isSiteOperator(profile: AdminProfile | null | undefined): boolean {
|
||||||
return profile?.site != null && profile.is_super_admin !== true;
|
if (profile?.is_super_admin === true || profile?.agent != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const kind = profile?.account_kind;
|
||||||
|
return kind === "site_admin" || kind === "site_finance" || kind === "site_cs" || profile?.site != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 站点主运营(满配 site_admin);代理页站点方门控仅对此角色放宽。 */
|
||||||
|
export function isSiteAdminOperator(profile: AdminProfile | null | undefined): boolean {
|
||||||
|
return profile?.account_kind === "site_admin" || (
|
||||||
|
profile?.site != null
|
||||||
|
&& profile?.account_kind == null
|
||||||
|
&& profile?.is_super_admin !== true
|
||||||
|
&& profile?.agent == null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isSiteFinanceOperator(profile: AdminProfile | null | undefined): boolean {
|
||||||
|
return profile?.account_kind === "site_finance";
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isSiteCsOperator(profile: AdminProfile | null | undefined): boolean {
|
||||||
|
return profile?.account_kind === "site_cs";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import type { ReactElement, ReactNode } from "react";
|
import type { ReactElement, ReactNode } from "react";
|
||||||
|
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
/** 盈亏 / 输赢:负红、正绿、零灰 */
|
/** 盈亏 / 输赢:负红、正绿、零灰 */
|
||||||
@@ -49,8 +50,25 @@ export function SignedMoney({
|
|||||||
emphasize?: boolean;
|
emphasize?: boolean;
|
||||||
className?: string;
|
className?: string;
|
||||||
}): ReactElement {
|
}): ReactElement {
|
||||||
|
const colorClass = signedMoneyClass(amount, emphasize);
|
||||||
|
|
||||||
|
if (typeof children === "string" || typeof children === "number") {
|
||||||
|
const text = String(children);
|
||||||
return (
|
return (
|
||||||
<span className={cn(signedMoneyClass(amount, emphasize), "tabular-nums", className)}>
|
<AdminMoneyDisplay
|
||||||
|
as="span"
|
||||||
|
value={text}
|
||||||
|
size="sm"
|
||||||
|
emphasize={emphasize}
|
||||||
|
className={cn(colorClass, className)}
|
||||||
|
>
|
||||||
|
{text}
|
||||||
|
</AdminMoneyDisplay>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<span className={cn(colorClass, "tabular-nums", className)}>
|
||||||
{children}
|
{children}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,12 +2,16 @@ import type { AdminRoleRow } from "@/types/api/index";
|
|||||||
|
|
||||||
export const PLATFORM_SUPER_ADMIN_SLUG = "super_admin";
|
export const PLATFORM_SUPER_ADMIN_SLUG = "super_admin";
|
||||||
export const PLATFORM_SITE_ADMIN_SLUG = "site_admin";
|
export const PLATFORM_SITE_ADMIN_SLUG = "site_admin";
|
||||||
|
export const PLATFORM_SITE_FINANCE_SLUG = "site_finance";
|
||||||
|
export const PLATFORM_SITE_CS_SLUG = "site_cs";
|
||||||
export const PLATFORM_AGENT_SLUG = "agent";
|
export const PLATFORM_AGENT_SLUG = "agent";
|
||||||
|
|
||||||
export function isPlatformFixedRole(role: Pick<AdminRoleRow, "slug">): boolean {
|
export function isPlatformFixedRole(role: Pick<AdminRoleRow, "slug">): boolean {
|
||||||
return (
|
return (
|
||||||
role.slug === PLATFORM_SUPER_ADMIN_SLUG
|
role.slug === PLATFORM_SUPER_ADMIN_SLUG
|
||||||
|| role.slug === PLATFORM_SITE_ADMIN_SLUG
|
|| role.slug === PLATFORM_SITE_ADMIN_SLUG
|
||||||
|
|| role.slug === PLATFORM_SITE_FINANCE_SLUG
|
||||||
|
|| role.slug === PLATFORM_SITE_CS_SLUG
|
||||||
|| role.slug === PLATFORM_AGENT_SLUG
|
|| role.slug === PLATFORM_AGENT_SLUG
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ export type ReportUiKey =
|
|||||||
| "hot_number_risk"
|
| "hot_number_risk"
|
||||||
| "play_dimension"
|
| "play_dimension"
|
||||||
| "sold_out_number"
|
| "sold_out_number"
|
||||||
| "rebate_commission"
|
|
||||||
| "admin_audit";
|
| "admin_audit";
|
||||||
|
|
||||||
/** Maps UI keys to POST /admin/report-jobs `report_type` */
|
/** Maps UI keys to POST /admin/report-jobs `report_type` */
|
||||||
@@ -30,7 +29,6 @@ export const REPORT_UI_TO_JOB_TYPE: Record<ReportUiKey, string> = {
|
|||||||
hot_number_risk: "hot_number_risk_report",
|
hot_number_risk: "hot_number_risk_report",
|
||||||
play_dimension: "play_dimension_report",
|
play_dimension: "play_dimension_report",
|
||||||
sold_out_number: "sold_out_number_report",
|
sold_out_number: "sold_out_number_report",
|
||||||
rebate_commission: "rebate_commission_report",
|
|
||||||
admin_audit: "audit_operation_report",
|
admin_audit: "audit_operation_report",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import { Button } from "@/components/ui/button";
|
|||||||
import { percentValueToUi } from "@/lib/admin-rate-percent";
|
import { percentValueToUi } from "@/lib/admin-rate-percent";
|
||||||
import { isLineRootAgentNode } from "@/lib/agent-profile-caps";
|
import { isLineRootAgentNode } from "@/lib/agent-profile-caps";
|
||||||
import { resolveRoleStatusTone } from "@/lib/admin-status-tone";
|
import { resolveRoleStatusTone } from "@/lib/admin-status-tone";
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
|
import { AdminTableMoney, adminMoneyCellClassName } from "@/components/admin/admin-table-money";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import type { AgentNodeRow, AgentProfileRow } from "@/types/api/admin-agent";
|
import type { AgentNodeRow, AgentProfileRow } from "@/types/api/admin-agent";
|
||||||
|
|
||||||
@@ -369,10 +371,11 @@ function OverviewTab({
|
|||||||
</p>
|
</p>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
<div className="grid grid-cols-2 gap-3 lg:grid-cols-4">
|
<div className="grid min-w-0 grid-cols-2 gap-3 lg:grid-cols-4">
|
||||||
<MetricCard
|
<MetricCard
|
||||||
label={t("profile.totalShareRate", { defaultValue: "占成比例" })}
|
label={t("profile.totalShareRate", { defaultValue: "占成比例" })}
|
||||||
value={profileLoading ? "…" : `${profile?.total_share_rate ?? 0}%`}
|
value={profileLoading ? "…" : `${profile?.total_share_rate ?? 0}%`}
|
||||||
|
money={false}
|
||||||
subtitle={
|
subtitle={
|
||||||
parentRelativeShare
|
parentRelativeShare
|
||||||
? t("profile.relativeShareRateValue", {
|
? t("profile.relativeShareRateValue", {
|
||||||
@@ -398,16 +401,18 @@ function OverviewTab({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid grid-cols-2 gap-3 lg:grid-cols-4">
|
<div className="grid min-w-0 grid-cols-2 gap-3 lg:grid-cols-4">
|
||||||
<MetricCard
|
<MetricCard
|
||||||
label={t("profile.rebateLimit", { defaultValue: "回水上限 (%)" })}
|
label={t("profile.rebateLimit", { defaultValue: "回水上限 (%)" })}
|
||||||
value={profileLoading ? "…" : `${rebateCap ?? "0"}%`}
|
value={profileLoading ? "…" : `${rebateCap ?? "0"}%`}
|
||||||
|
money={false}
|
||||||
/>
|
/>
|
||||||
<MetricCard
|
<MetricCard
|
||||||
label={t("profile.defaultPlayerRebate", { defaultValue: "默认玩家回水 (%)" })}
|
label={t("profile.defaultPlayerRebate", { defaultValue: "默认玩家回水 (%)" })}
|
||||||
value={
|
value={
|
||||||
profileLoading ? "…" : `${percentValueToUi(profile?.default_player_rebate ?? 0)}%`
|
profileLoading ? "…" : `${percentValueToUi(profile?.default_player_rebate ?? 0)}%`
|
||||||
}
|
}
|
||||||
|
money={false}
|
||||||
/>
|
/>
|
||||||
<MetricCard
|
<MetricCard
|
||||||
label={t("profile.riskTags", { defaultValue: "风控标签" })}
|
label={t("profile.riskTags", { defaultValue: "风控标签" })}
|
||||||
@@ -418,6 +423,7 @@ function OverviewTab({
|
|||||||
? profile!.risk_tags!.join(", ")
|
? profile!.risk_tags!.join(", ")
|
||||||
: t("common:states.none", { defaultValue: "无" })
|
: t("common:states.none", { defaultValue: "无" })
|
||||||
}
|
}
|
||||||
|
money={false}
|
||||||
/>
|
/>
|
||||||
<CapabilityMetric
|
<CapabilityMetric
|
||||||
label={t("profile.canGrantExtraRebate", { defaultValue: "允许额外回水" })}
|
label={t("profile.canGrantExtraRebate", { defaultValue: "允许额外回水" })}
|
||||||
@@ -567,11 +573,11 @@ function DownlineTable({
|
|||||||
</div>
|
</div>
|
||||||
) : "—"}
|
) : "—"}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="text-right tabular-nums text-xs">
|
<TableCell className={adminMoneyCellClassName("text-right text-xs")}>
|
||||||
{summary ? formatCredit(summary.credit_limit) : "—"}
|
{summary ? <AdminTableMoney>{formatCredit(summary.credit_limit)}</AdminTableMoney> : "—"}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="text-right tabular-nums text-xs">
|
<TableCell className={adminMoneyCellClassName("text-right text-xs")}>
|
||||||
{summary ? formatCredit(summary.allocated_credit) : "—"}
|
{summary ? <AdminTableMoney>{formatCredit(summary.allocated_credit)}</AdminTableMoney> : "—"}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="text-center tabular-nums text-xs">
|
<TableCell className="text-center tabular-nums text-xs">
|
||||||
{childCountById.get(child.id) ?? 0}
|
{childCountById.get(child.id) ?? 0}
|
||||||
@@ -625,23 +631,36 @@ function MetricCard({
|
|||||||
subtitle,
|
subtitle,
|
||||||
accent = false,
|
accent = false,
|
||||||
highlight = false,
|
highlight = false,
|
||||||
|
money = true,
|
||||||
}: {
|
}: {
|
||||||
label: string;
|
label: string;
|
||||||
value: string;
|
value: string;
|
||||||
subtitle?: string;
|
subtitle?: string;
|
||||||
accent?: boolean;
|
accent?: boolean;
|
||||||
highlight?: boolean;
|
highlight?: boolean;
|
||||||
|
/** 金额类指标:自适应字号 + 换行 */
|
||||||
|
money?: boolean;
|
||||||
}): React.ReactElement {
|
}): React.ReactElement {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
"rounded-xl border bg-card px-4 py-4 shadow-sm transition-colors",
|
"min-w-0 overflow-visible rounded-xl border bg-card px-4 py-4 shadow-sm transition-colors",
|
||||||
highlight && "border-primary/25 bg-primary/[0.04]",
|
highlight && "border-primary/25 bg-primary/[0.04]",
|
||||||
accent && !highlight && "border-border/70",
|
accent && !highlight && "border-border/70",
|
||||||
!accent && !highlight && "border-border/70",
|
!accent && !highlight && "border-border/70",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<p className="text-xs font-medium text-muted-foreground">{label}</p>
|
<p className="text-xs font-medium text-muted-foreground">{label}</p>
|
||||||
|
{money ? (
|
||||||
|
<AdminMoneyDisplay
|
||||||
|
as="p"
|
||||||
|
value={value}
|
||||||
|
size="lg"
|
||||||
|
className={cn("mt-1.5", highlight ? "text-primary" : "text-foreground")}
|
||||||
|
>
|
||||||
|
{value}
|
||||||
|
</AdminMoneyDisplay>
|
||||||
|
) : (
|
||||||
<p
|
<p
|
||||||
className={cn(
|
className={cn(
|
||||||
"mt-1.5 text-2xl font-semibold tabular-nums tracking-tight",
|
"mt-1.5 text-2xl font-semibold tabular-nums tracking-tight",
|
||||||
@@ -650,6 +669,7 @@ function MetricCard({
|
|||||||
>
|
>
|
||||||
{value}
|
{value}
|
||||||
</p>
|
</p>
|
||||||
|
)}
|
||||||
{subtitle ? <p className="mt-1 text-xs text-muted-foreground">{subtitle}</p> : null}
|
{subtitle ? <p className="mt-1 text-xs text-muted-foreground">{subtitle}</p> : null}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import type { AgentParentCaps } from "@/types/api/admin-agent";
|
|||||||
import { Info } from "lucide-react";
|
import { Info } from "lucide-react";
|
||||||
|
|
||||||
import { AdminNumericStepper } from "@/components/admin/admin-numeric-stepper";
|
import { AdminNumericStepper } from "@/components/admin/admin-numeric-stepper";
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
|
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
|
||||||
import {
|
import {
|
||||||
AGENT_PERCENT_HARD_MAX,
|
AGENT_PERCENT_HARD_MAX,
|
||||||
@@ -411,14 +412,14 @@ function ReadOnlyScalar({
|
|||||||
<div
|
<div
|
||||||
id={id}
|
id={id}
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex h-10 items-center justify-center rounded-md border border-border/80 bg-muted/35 px-3 text-sm font-semibold tabular-nums text-foreground shadow-xs",
|
"flex min-h-10 min-w-0 items-center justify-center rounded-md border border-border/80 bg-muted/35 px-3 py-2 text-center shadow-xs",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<span>
|
<AdminMoneyDisplay as="span" value={value} size="sm" emphasize className="text-foreground">
|
||||||
{value}
|
{value}
|
||||||
{suffix ? <span className="ml-0.5 font-medium text-foreground/80">{suffix}</span> : null}
|
{suffix ? <span className="ml-0.5 font-medium text-foreground/80">{suffix}</span> : null}
|
||||||
</span>
|
</AdminMoneyDisplay>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import { adminWeekdayKeyForDate, formatAdminBusinessDateIso, formatAdminCalendar
|
|||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { useAdminProfile } from "@/stores/admin-session";
|
import { useAdminProfile } from "@/stores/admin-session";
|
||||||
import { AdminNoResourceState } from "@/components/admin/admin-no-resource-state";
|
import { AdminNoResourceState } from "@/components/admin/admin-no-resource-state";
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
|
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
@@ -207,9 +208,14 @@ export function AgentDashboardConsole(): ReactElement {
|
|||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent className="space-y-3">
|
<CardContent className="space-y-3">
|
||||||
<div>
|
<div>
|
||||||
<p className="break-all text-2xl font-semibold tabular-nums leading-tight">
|
<AdminMoneyDisplay
|
||||||
|
as="p"
|
||||||
|
value={formatDashboardCreditMajor(overview.credit_limit, displayCurrency)}
|
||||||
|
size="xl"
|
||||||
|
className="text-foreground"
|
||||||
|
>
|
||||||
{formatDashboardCreditMajor(overview.credit_limit, displayCurrency)}
|
{formatDashboardCreditMajor(overview.credit_limit, displayCurrency)}
|
||||||
</p>
|
</AdminMoneyDisplay>
|
||||||
<p className="mt-1 text-xs text-muted-foreground">
|
<p className="mt-1 text-xs text-muted-foreground">
|
||||||
{t("agent.creditAvailable", {
|
{t("agent.creditAvailable", {
|
||||||
amount: formatDashboardCreditMajor(overview.available_credit, displayCurrency),
|
amount: formatDashboardCreditMajor(overview.available_credit, displayCurrency),
|
||||||
|
|||||||
@@ -2,13 +2,15 @@
|
|||||||
|
|
||||||
import type { ReactElement } from "react";
|
import type { ReactElement } from "react";
|
||||||
|
|
||||||
import { isAgentOperator, isSiteAdminOperator } from "@/lib/admin-session-variants";
|
import { isAgentOperator, isSiteFinanceOperator, isSiteCsOperator, isSiteOperator } from "@/lib/admin-session-variants";
|
||||||
import { AgentDashboardConsole } from "@/modules/dashboard/agent-dashboard-console";
|
import { AgentDashboardConsole } from "@/modules/dashboard/agent-dashboard-console";
|
||||||
import { DashboardConsole } from "@/modules/dashboard/dashboard-console";
|
import { DashboardConsole } from "@/modules/dashboard/dashboard-console";
|
||||||
|
import { SiteCsDashboardConsole } from "@/modules/dashboard/site-cs-dashboard-console";
|
||||||
|
import { SiteFinanceDashboardConsole } from "@/modules/dashboard/site-finance-dashboard-console";
|
||||||
import { SiteDashboardConsole } from "@/modules/dashboard/site-dashboard-console";
|
import { SiteDashboardConsole } from "@/modules/dashboard/site-dashboard-console";
|
||||||
import { useAdminProfile } from "@/stores/admin-session";
|
import { useAdminProfile } from "@/stores/admin-session";
|
||||||
|
|
||||||
/** 超管/平台账号走全站仪表盘;站点管理员走站点仪表盘;代理经营账号走代理仪表盘。 */
|
/** 超管/平台账号走全站仪表盘;站点运营账号走站点仪表盘;代理经营账号走代理仪表盘。 */
|
||||||
export function DashboardPageClient(): ReactElement {
|
export function DashboardPageClient(): ReactElement {
|
||||||
const profile = useAdminProfile();
|
const profile = useAdminProfile();
|
||||||
|
|
||||||
@@ -16,7 +18,15 @@ export function DashboardPageClient(): ReactElement {
|
|||||||
return <AgentDashboardConsole />;
|
return <AgentDashboardConsole />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSiteAdminOperator(profile)) {
|
if (isSiteFinanceOperator(profile)) {
|
||||||
|
return <SiteFinanceDashboardConsole />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSiteCsOperator(profile)) {
|
||||||
|
return <SiteCsDashboardConsole />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSiteOperator(profile)) {
|
||||||
return <SiteDashboardConsole />;
|
return <SiteDashboardConsole />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
|
|
||||||
import { Card, CardContent } from "@/components/ui/card";
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
import { AdminNoResourceState, AdminTableNoResourceRow } from "@/components/admin/admin-no-resource-state";
|
import { AdminNoResourceState, AdminTableNoResourceRow } from "@/components/admin/admin-no-resource-state";
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
import { Skeleton } from "@/components/ui/skeleton";
|
import { Skeleton } from "@/components/ui/skeleton";
|
||||||
import {
|
import {
|
||||||
ChartContainer,
|
ChartContainer,
|
||||||
@@ -37,6 +38,7 @@ import {
|
|||||||
} from "@/lib/money";
|
} from "@/lib/money";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { SignedMoney, signedMoneyClass } from "@/lib/admin-signed-money";
|
import { SignedMoney, signedMoneyClass } from "@/lib/admin-signed-money";
|
||||||
|
import { adminMoneyDisplayClass } from "@/lib/admin-money-display";
|
||||||
import {
|
import {
|
||||||
buildBatchProgressConfig,
|
buildBatchProgressConfig,
|
||||||
buildFinanceStructureConfig,
|
buildFinanceStructureConfig,
|
||||||
@@ -68,7 +70,7 @@ type DashboardFinanceMetricCell = {
|
|||||||
emphasize: boolean;
|
emphasize: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** KPI 卡片底部三列:仅数字(币种见卡片主值),过长时省略号 + hover 看全称 */
|
/** KPI 卡片底部三列:仅数字(币种见卡片主值),过长时缩小字号 + 换行 */
|
||||||
function formatDashboardMetricAmount(
|
function formatDashboardMetricAmount(
|
||||||
minor: number,
|
minor: number,
|
||||||
currencyCode: string | null,
|
currencyCode: string | null,
|
||||||
@@ -115,7 +117,8 @@ function DashboardFinanceMetricCells({
|
|||||||
</p>
|
</p>
|
||||||
<p
|
<p
|
||||||
className={cn(
|
className={cn(
|
||||||
"mt-1 truncate text-center text-[10px] font-bold tabular-nums leading-tight",
|
"mt-1 text-center font-bold tabular-nums leading-tight break-all",
|
||||||
|
adminMoneyDisplayClass(display, { size: "sm", emphasize: true }),
|
||||||
cell.emphasize ? "text-foreground" : "text-muted-foreground",
|
cell.emphasize ? "text-foreground" : "text-muted-foreground",
|
||||||
)}
|
)}
|
||||||
title={title}
|
title={title}
|
||||||
@@ -241,9 +244,14 @@ export function DashboardScopeMetric({
|
|||||||
return (
|
return (
|
||||||
<div className="rounded-lg border bg-muted/30 px-3 py-2.5">
|
<div className="rounded-lg border bg-muted/30 px-3 py-2.5">
|
||||||
<p className="text-xs text-muted-foreground">{label}</p>
|
<p className="text-xs text-muted-foreground">{label}</p>
|
||||||
<p className="mt-1 break-all text-base font-semibold tabular-nums leading-tight text-foreground">
|
<AdminMoneyDisplay
|
||||||
|
as="p"
|
||||||
|
value={value}
|
||||||
|
size="md"
|
||||||
|
className="mt-1 text-foreground"
|
||||||
|
>
|
||||||
{value}
|
{value}
|
||||||
</p>
|
</AdminMoneyDisplay>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -303,8 +311,11 @@ export function DashboardKpiCard({
|
|||||||
<p
|
<p
|
||||||
title={valueTitle}
|
title={valueTitle}
|
||||||
className={cn(
|
className={cn(
|
||||||
"mt-2 break-words text-base font-bold tabular-nums leading-tight tracking-tight sm:text-lg",
|
"mt-2 text-foreground",
|
||||||
resolvedValueClassName ?? "text-foreground",
|
resolvedValueClassName,
|
||||||
|
typeof resolvedValue === "string"
|
||||||
|
? adminMoneyDisplayClass(resolvedValue, { size: "lg", emphasize: true })
|
||||||
|
: "min-w-0 break-all text-base font-bold tabular-nums leading-tight tracking-tight sm:text-lg",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{resolvedValue}
|
{resolvedValue}
|
||||||
@@ -418,9 +429,21 @@ export function StatCard({
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex min-h-0 min-w-0 flex-1 flex-col">
|
<div className="flex min-h-0 min-w-0 flex-1 flex-col">
|
||||||
<p className="text-sm font-medium text-muted-foreground">{label}</p>
|
<p className="text-sm font-medium text-muted-foreground">{label}</p>
|
||||||
|
{typeof value === "string" || typeof value === "number" ? (
|
||||||
|
<AdminMoneyDisplay
|
||||||
|
as="p"
|
||||||
|
value={String(value)}
|
||||||
|
size="xl"
|
||||||
|
emphasize
|
||||||
|
className="mt-1 text-foreground"
|
||||||
|
>
|
||||||
|
{value}
|
||||||
|
</AdminMoneyDisplay>
|
||||||
|
) : (
|
||||||
<p className="mt-1 text-2xl font-bold tabular-nums tracking-tight text-foreground">
|
<p className="mt-1 text-2xl font-bold tabular-nums tracking-tight text-foreground">
|
||||||
{value}
|
{value}
|
||||||
</p>
|
</p>
|
||||||
|
)}
|
||||||
{deltaLabel ? (
|
{deltaLabel ? (
|
||||||
<p className="mt-1 text-xs font-medium tabular-nums">{deltaLabel}</p>
|
<p className="mt-1 text-xs font-medium tabular-nums">{deltaLabel}</p>
|
||||||
) : null}
|
) : null}
|
||||||
@@ -557,6 +580,16 @@ export function DashboardPanelCard({
|
|||||||
<p className="text-xs font-medium text-muted-foreground">{title}</p>
|
<p className="text-xs font-medium text-muted-foreground">{title}</p>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<Skeleton className="mt-2 h-8 w-24 rounded-md" />
|
<Skeleton className="mt-2 h-8 w-24 rounded-md" />
|
||||||
|
) : typeof value === "string" || typeof value === "number" ? (
|
||||||
|
<AdminMoneyDisplay
|
||||||
|
as="p"
|
||||||
|
value={String(value)}
|
||||||
|
size="xl"
|
||||||
|
emphasize
|
||||||
|
className="mt-1 text-foreground"
|
||||||
|
>
|
||||||
|
{value}
|
||||||
|
</AdminMoneyDisplay>
|
||||||
) : (
|
) : (
|
||||||
<p className="mt-1 text-2xl font-bold tabular-nums leading-none tracking-tight text-foreground">
|
<p className="mt-1 text-2xl font-bold tabular-nums leading-none tracking-tight text-foreground">
|
||||||
{value}
|
{value}
|
||||||
|
|||||||
196
src/modules/dashboard/site-cs-dashboard-console.tsx
Normal file
196
src/modules/dashboard/site-cs-dashboard-console.tsx
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import { useCallback, useMemo, useState, type ReactElement } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { ClipboardList, RefreshCw, Search, Users } from "lucide-react";
|
||||||
|
|
||||||
|
import { getAdminDashboard } from "@/api/admin-dashboard";
|
||||||
|
import { useAsyncEffect } from "@/hooks/use-async-effect";
|
||||||
|
import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter";
|
||||||
|
import { useTranslationRef } from "@/hooks/use-translation-ref";
|
||||||
|
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
|
||||||
|
import { Button, buttonVariants } from "@/components/ui/button";
|
||||||
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
|
import { Skeleton } from "@/components/ui/skeleton";
|
||||||
|
import { AdminNoResourceState } from "@/components/admin/admin-no-resource-state";
|
||||||
|
import {
|
||||||
|
DashboardKpiCard,
|
||||||
|
DashboardScopeMetric,
|
||||||
|
} from "@/modules/dashboard/dashboard-visuals";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
import { useAdminProfile } from "@/stores/admin-session";
|
||||||
|
import type {
|
||||||
|
AdminDashboardSiteCsOverview,
|
||||||
|
AdminDashboardWarning,
|
||||||
|
} from "@/types/api/admin-dashboard";
|
||||||
|
import { LotteryApiBizError } from "@/types/api/errors";
|
||||||
|
|
||||||
|
export function SiteCsDashboardConsole(): ReactElement {
|
||||||
|
const { t } = useTranslation(["dashboard", "common"]);
|
||||||
|
const tRef = useTranslationRef(["dashboard", "common"]);
|
||||||
|
const formatDt = useAdminDateTimeFormatter();
|
||||||
|
const profile = useAdminProfile();
|
||||||
|
const site = profile?.site ?? null;
|
||||||
|
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [refreshing, setRefreshing] = useState(false);
|
||||||
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
const [apiWarnings, setApiWarnings] = useState<AdminDashboardWarning[]>([]);
|
||||||
|
const [overview, setOverview] = useState<AdminDashboardSiteCsOverview | null>(null);
|
||||||
|
|
||||||
|
const load = useCallback(async (isRefresh = false) => {
|
||||||
|
if (isRefresh) {
|
||||||
|
setRefreshing(true);
|
||||||
|
} else {
|
||||||
|
setLoading(true);
|
||||||
|
}
|
||||||
|
setError(null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const d = await getAdminDashboard();
|
||||||
|
setOverview(d.site_cs_overview);
|
||||||
|
setApiWarnings(d.warnings ?? []);
|
||||||
|
} catch (e) {
|
||||||
|
const msg =
|
||||||
|
e instanceof LotteryApiBizError ? e.message : tRef.current("warnings.loadFailed");
|
||||||
|
setError(msg);
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
setRefreshing(false);
|
||||||
|
}
|
||||||
|
}, [tRef]);
|
||||||
|
|
||||||
|
useAsyncEffect(() => {
|
||||||
|
void load(false);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const activityHint = useMemo(() => {
|
||||||
|
if (!overview) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (overview.latest_ticket_at) {
|
||||||
|
return t("cs.latestTicketAt", { time: formatDt(overview.latest_ticket_at) });
|
||||||
|
}
|
||||||
|
return t("cs.noTicketToday");
|
||||||
|
}, [formatDt, overview, t]);
|
||||||
|
|
||||||
|
const quickLinks = useMemo(
|
||||||
|
() => [
|
||||||
|
{ href: "/admin/players", label: t("cs.quickLinks.players"), icon: Users },
|
||||||
|
{ href: "/admin/tickets", label: t("cs.quickLinks.tickets"), icon: ClipboardList },
|
||||||
|
{ href: "/admin/wallet/transactions", label: t("cs.quickLinks.wallet"), icon: Search },
|
||||||
|
],
|
||||||
|
[t],
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex min-w-0 w-full max-w-none flex-col gap-5">
|
||||||
|
<div className="flex flex-wrap items-center justify-between gap-2">
|
||||||
|
<div className="min-w-0">
|
||||||
|
<h1 className="admin-list-title">{t("cs.title")}</h1>
|
||||||
|
<p className="mt-0.5 text-xs text-muted-foreground">
|
||||||
|
{site
|
||||||
|
? t("cs.subtitle", { name: site.name || site.code })
|
||||||
|
: t("cs.subtitleFallback")}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<Button
|
||||||
|
type="button"
|
||||||
|
variant="outline"
|
||||||
|
size="sm"
|
||||||
|
className="h-8"
|
||||||
|
disabled={loading || refreshing}
|
||||||
|
onClick={() => void load(true)}
|
||||||
|
>
|
||||||
|
<RefreshCw className={cn("size-3.5", refreshing && "animate-spin")} />
|
||||||
|
{t("actions.refresh", { ns: "common" })}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{error ? (
|
||||||
|
<Alert className="border-amber-200 bg-amber-50 dark:border-amber-900/60 dark:bg-amber-950/30">
|
||||||
|
<AlertTitle>{t("notice")}</AlertTitle>
|
||||||
|
<AlertDescription>{error}</AlertDescription>
|
||||||
|
</Alert>
|
||||||
|
) : null}
|
||||||
|
|
||||||
|
{!loading && apiWarnings.length > 0 ? (
|
||||||
|
<Alert className="border-amber-200 bg-amber-50 dark:border-amber-900/60 dark:bg-amber-950/30">
|
||||||
|
<AlertTitle>{t("notice")}</AlertTitle>
|
||||||
|
<AlertDescription>{apiWarnings.map((w) => w.message).join(" ")}</AlertDescription>
|
||||||
|
</Alert>
|
||||||
|
) : null}
|
||||||
|
|
||||||
|
{loading ? (
|
||||||
|
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
|
||||||
|
{Array.from({ length: 3 }).map((_, i) => (
|
||||||
|
<Skeleton key={i} className="h-24 rounded-xl" />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : overview ? (
|
||||||
|
<section className="space-y-4">
|
||||||
|
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
|
||||||
|
<DashboardKpiCard
|
||||||
|
label={t("cs.playerCount")}
|
||||||
|
value={overview.player_count}
|
||||||
|
icon={<Users className="size-4" />}
|
||||||
|
hint={t("cs.playerCountHint")}
|
||||||
|
/>
|
||||||
|
<DashboardKpiCard
|
||||||
|
label={t("cs.ticketsToday")}
|
||||||
|
value={overview.ticket_order_count_today}
|
||||||
|
icon={<ClipboardList className="size-4" />}
|
||||||
|
hint={activityHint}
|
||||||
|
/>
|
||||||
|
<DashboardKpiCard
|
||||||
|
label={t("cs.activePlayersToday")}
|
||||||
|
value={overview.active_player_count_today}
|
||||||
|
icon={<Search className="size-4" />}
|
||||||
|
hint={t("cs.activePlayersHint")}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Card>
|
||||||
|
<CardHeader className="pb-2">
|
||||||
|
<CardTitle className="text-sm font-semibold">{t("cs.workspaceTitle")}</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent className="grid gap-3 sm:grid-cols-3">
|
||||||
|
{quickLinks.map((link) => {
|
||||||
|
const Icon = link.icon;
|
||||||
|
return (
|
||||||
|
<Link
|
||||||
|
key={link.href}
|
||||||
|
href={link.href}
|
||||||
|
className="flex flex-col gap-2 rounded-xl border bg-muted/20 px-4 py-4 transition-colors hover:bg-muted/40"
|
||||||
|
>
|
||||||
|
<Icon className="size-5 text-primary" aria-hidden />
|
||||||
|
<span className="text-sm font-medium">{link.label}</span>
|
||||||
|
<span className="text-xs text-muted-foreground">{t("cs.openModule")}</span>
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<Card>
|
||||||
|
<CardHeader className="pb-2">
|
||||||
|
<CardTitle className="text-sm font-semibold">{t("cs.scopeTitle")}</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent className="grid grid-cols-2 gap-3 text-sm">
|
||||||
|
<DashboardScopeMetric label={t("cs.playerCount")} value={String(overview.player_count)} />
|
||||||
|
<DashboardScopeMetric
|
||||||
|
label={t("cs.ticketsToday")}
|
||||||
|
value={String(overview.ticket_order_count_today)}
|
||||||
|
/>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
</section>
|
||||||
|
) : (
|
||||||
|
<AdminNoResourceState className="py-12 text-sm text-muted-foreground">
|
||||||
|
{t("cs.overviewEmpty")}
|
||||||
|
</AdminNoResourceState>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
244
src/modules/dashboard/site-finance-dashboard-console.tsx
Normal file
244
src/modules/dashboard/site-finance-dashboard-console.tsx
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import Link from "next/link";
|
||||||
|
import { useCallback, useMemo, useState, type ReactElement } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { AlertTriangle, ClipboardList, RefreshCw, Scale, Users, Wallet } from "lucide-react";
|
||||||
|
|
||||||
|
import { getAdminDashboard } from "@/api/admin-dashboard";
|
||||||
|
import { useAsyncEffect } from "@/hooks/use-async-effect";
|
||||||
|
import { useTranslationRef } from "@/hooks/use-translation-ref";
|
||||||
|
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
|
||||||
|
import { Button, buttonVariants } from "@/components/ui/button";
|
||||||
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
|
import { Skeleton } from "@/components/ui/skeleton";
|
||||||
|
import { AdminNoResourceState } from "@/components/admin/admin-no-resource-state";
|
||||||
|
import { DashboardCurrentDrawCard } from "@/modules/dashboard/dashboard-current-draw-card";
|
||||||
|
import {
|
||||||
|
AbnormalTransferPanelFooter,
|
||||||
|
DashboardKpiCard,
|
||||||
|
DashboardScopeMetric,
|
||||||
|
DashboardStatRow,
|
||||||
|
} from "@/modules/dashboard/dashboard-visuals";
|
||||||
|
import { formatDashboardMoneyMinor } from "@/modules/dashboard/use-dashboard-analytics";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
import { useAdminProfile } from "@/stores/admin-session";
|
||||||
|
import type {
|
||||||
|
AdminDashboardSiteFinanceOverview,
|
||||||
|
AdminDashboardWarning,
|
||||||
|
} from "@/types/api/admin-dashboard";
|
||||||
|
import type { DrawCurrentSnapshot } from "@/types/api/public-draw";
|
||||||
|
import { LotteryApiBizError } from "@/types/api/errors";
|
||||||
|
|
||||||
|
export function SiteFinanceDashboardConsole(): ReactElement {
|
||||||
|
const { t } = useTranslation(["dashboard", "common"]);
|
||||||
|
const tRef = useTranslationRef(["dashboard", "common"]);
|
||||||
|
const profile = useAdminProfile();
|
||||||
|
const site = profile?.site ?? null;
|
||||||
|
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [refreshing, setRefreshing] = useState(false);
|
||||||
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
const [apiWarnings, setApiWarnings] = useState<AdminDashboardWarning[]>([]);
|
||||||
|
const [hall, setHall] = useState<DrawCurrentSnapshot | null>(null);
|
||||||
|
const [drawId, setDrawId] = useState<number | null>(null);
|
||||||
|
const [overview, setOverview] = useState<AdminDashboardSiteFinanceOverview | null>(null);
|
||||||
|
const [walletPermission, setWalletPermission] = useState(false);
|
||||||
|
|
||||||
|
const load = useCallback(async (isRefresh = false) => {
|
||||||
|
if (isRefresh) {
|
||||||
|
setRefreshing(true);
|
||||||
|
} else {
|
||||||
|
setLoading(true);
|
||||||
|
}
|
||||||
|
setError(null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const d = await getAdminDashboard();
|
||||||
|
setHall(d.hall);
|
||||||
|
setOverview(d.site_finance_overview);
|
||||||
|
setApiWarnings(d.warnings ?? []);
|
||||||
|
setWalletPermission(d.capabilities?.wallet_transfer_view ?? false);
|
||||||
|
if (d.resolved_draw != null) {
|
||||||
|
setDrawId(d.resolved_draw.id);
|
||||||
|
} else {
|
||||||
|
setDrawId(null);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
const msg =
|
||||||
|
e instanceof LotteryApiBizError ? e.message : tRef.current("warnings.loadFailed");
|
||||||
|
setError(msg);
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
setRefreshing(false);
|
||||||
|
}
|
||||||
|
}, [tRef]);
|
||||||
|
|
||||||
|
useAsyncEffect(() => {
|
||||||
|
void load(false);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const displayCurrency = overview?.currency_code ?? "NPR";
|
||||||
|
const abnormalCount = overview?.abnormal_transfer_count ?? null;
|
||||||
|
|
||||||
|
const quickLinks = useMemo(
|
||||||
|
() => [
|
||||||
|
{ href: "/admin/reconcile", label: t("finance.quickLinks.reconcile") },
|
||||||
|
{ href: "/admin/wallet/transfer-orders", label: t("finance.quickLinks.transfers") },
|
||||||
|
{ href: "/admin/settlement-center", label: t("finance.quickLinks.bills") },
|
||||||
|
{ href: "/admin/reports", label: t("finance.quickLinks.reports") },
|
||||||
|
],
|
||||||
|
[t],
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex min-w-0 w-full max-w-none flex-col gap-5">
|
||||||
|
<div className="flex flex-wrap items-center justify-between gap-2">
|
||||||
|
<div className="min-w-0">
|
||||||
|
<h1 className="admin-list-title">{t("finance.title")}</h1>
|
||||||
|
<p className="mt-0.5 text-xs text-muted-foreground">
|
||||||
|
{site
|
||||||
|
? t("finance.subtitle", { name: site.name || site.code })
|
||||||
|
: t("finance.subtitleFallback")}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<Button
|
||||||
|
type="button"
|
||||||
|
variant="outline"
|
||||||
|
size="sm"
|
||||||
|
className="h-8"
|
||||||
|
disabled={loading || refreshing}
|
||||||
|
onClick={() => void load(true)}
|
||||||
|
>
|
||||||
|
<RefreshCw className={cn("size-3.5", refreshing && "animate-spin")} />
|
||||||
|
{t("actions.refresh", { ns: "common" })}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{error ? (
|
||||||
|
<Alert className="border-amber-200 bg-amber-50 dark:border-amber-900/60 dark:bg-amber-950/30">
|
||||||
|
<AlertTitle>{t("notice")}</AlertTitle>
|
||||||
|
<AlertDescription>{error}</AlertDescription>
|
||||||
|
</Alert>
|
||||||
|
) : null}
|
||||||
|
|
||||||
|
{!loading && apiWarnings.length > 0 ? (
|
||||||
|
<Alert className="border-amber-200 bg-amber-50 dark:border-amber-900/60 dark:bg-amber-950/30">
|
||||||
|
<AlertTitle>{t("notice")}</AlertTitle>
|
||||||
|
<AlertDescription>{apiWarnings.map((w) => w.message).join(" ")}</AlertDescription>
|
||||||
|
</Alert>
|
||||||
|
) : null}
|
||||||
|
|
||||||
|
{loading ? (
|
||||||
|
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-4">
|
||||||
|
{Array.from({ length: 4 }).map((_, i) => (
|
||||||
|
<Skeleton key={i} className="h-24 rounded-xl" />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : overview ? (
|
||||||
|
<section className="space-y-4">
|
||||||
|
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-4">
|
||||||
|
<DashboardKpiCard
|
||||||
|
label={t("finance.abnormalTransfers")}
|
||||||
|
value={abnormalCount ?? "—"}
|
||||||
|
icon={<AlertTriangle className="size-4" />}
|
||||||
|
hint={t("abnormalTransferScope")}
|
||||||
|
accent={(abnormalCount ?? 0) > 0 ? "destructive" : "muted"}
|
||||||
|
/>
|
||||||
|
<DashboardKpiCard
|
||||||
|
label={t("finance.pendingConfirmBills")}
|
||||||
|
value={overview.pending_confirm_bill_count}
|
||||||
|
icon={<ClipboardList className="size-4" />}
|
||||||
|
hint={t("finance.pendingConfirmHint")}
|
||||||
|
accent={overview.pending_confirm_bill_count > 0 ? "primary" : "muted"}
|
||||||
|
/>
|
||||||
|
<DashboardKpiCard
|
||||||
|
label={t("finance.payableBills")}
|
||||||
|
value={overview.payable_bill_count}
|
||||||
|
icon={<Scale className="size-4" />}
|
||||||
|
hint={t("finance.payableUnpaid", {
|
||||||
|
amount: formatDashboardMoneyMinor(overview.payable_unpaid_minor, displayCurrency),
|
||||||
|
})}
|
||||||
|
accent={overview.payable_bill_count > 0 ? "destructive" : "muted"}
|
||||||
|
/>
|
||||||
|
<DashboardKpiCard
|
||||||
|
label={t("finance.walletPlayers")}
|
||||||
|
value={overview.wallet_player_count}
|
||||||
|
icon={<Users className="size-4" />}
|
||||||
|
hint={t("finance.creditPlayersHint", { count: overview.credit_player_count })}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="grid gap-3 md:grid-cols-2">
|
||||||
|
<Card>
|
||||||
|
<CardHeader className="pb-2">
|
||||||
|
<CardTitle className="text-sm font-semibold">{t("finance.settlementTitle")}</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent className="space-y-2">
|
||||||
|
<DashboardStatRow
|
||||||
|
label={t("finance.pendingConfirmBills")}
|
||||||
|
value={String(overview.pending_confirm_bill_count)}
|
||||||
|
/>
|
||||||
|
<DashboardStatRow
|
||||||
|
label={t("finance.payableBills")}
|
||||||
|
value={String(overview.payable_bill_count)}
|
||||||
|
/>
|
||||||
|
<DashboardStatRow
|
||||||
|
label={t("finance.payableUnpaidLabel")}
|
||||||
|
value={formatDashboardMoneyMinor(overview.payable_unpaid_minor, displayCurrency)}
|
||||||
|
/>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<Card>
|
||||||
|
<CardHeader className="pb-2">
|
||||||
|
<CardTitle className="text-sm font-semibold">{t("finance.reconcileTitle")}</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent className="space-y-3">
|
||||||
|
<AbnormalTransferPanelFooter
|
||||||
|
total={abnormalCount}
|
||||||
|
walletPermission={walletPermission}
|
||||||
|
/>
|
||||||
|
<Link
|
||||||
|
href="/admin/wallet/transfer-orders?abnormal=1"
|
||||||
|
className={buttonVariants({ variant: "outline", size: "sm", className: "w-full" })}
|
||||||
|
>
|
||||||
|
<Wallet className="size-3.5" />
|
||||||
|
{t("viewTransferOrders")}
|
||||||
|
</Link>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Card>
|
||||||
|
<CardHeader className="pb-2">
|
||||||
|
<CardTitle className="text-sm font-semibold">{t("quickLinksTitle")}</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<CardContent className="flex flex-wrap gap-2">
|
||||||
|
{quickLinks.map((link) => (
|
||||||
|
<Link
|
||||||
|
key={link.href}
|
||||||
|
href={link.href}
|
||||||
|
className={buttonVariants({ variant: "outline", size: "sm" })}
|
||||||
|
>
|
||||||
|
{link.label}
|
||||||
|
</Link>
|
||||||
|
))}
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
</section>
|
||||||
|
) : (
|
||||||
|
<AdminNoResourceState className="py-12 text-sm text-muted-foreground">
|
||||||
|
{t("finance.overviewEmpty")}
|
||||||
|
</AdminNoResourceState>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<DashboardCurrentDrawCard
|
||||||
|
key={`${hall?.draw_no ?? "empty"}:${loading ? "loading" : "ready"}`}
|
||||||
|
hall={hall}
|
||||||
|
drawId={drawId}
|
||||||
|
loading={loading}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -49,6 +49,7 @@ import {
|
|||||||
canDeleteDrawRow,
|
canDeleteDrawRow,
|
||||||
canEditDrawRow,
|
canEditDrawRow,
|
||||||
} from "./draw-list-actions";
|
} from "./draw-list-actions";
|
||||||
|
import { AdminTableMoney, adminMoneyCellClassName } from "@/components/admin/admin-table-money";
|
||||||
import { formatAdminMinorUnits } from "@/lib/money";
|
import { formatAdminMinorUnits } from "@/lib/money";
|
||||||
import { useConfirmAction } from "@/hooks/use-confirm-action";
|
import { useConfirmAction } from "@/hooks/use-confirm-action";
|
||||||
import { useExportLabels } from "@/hooks/use-export-labels";
|
import { useExportLabels } from "@/hooks/use-export-labels";
|
||||||
@@ -429,25 +430,30 @@ export function DrawsIndexConsole() {
|
|||||||
</TableCell>
|
</TableCell>
|
||||||
{canViewFinance ? (
|
{canViewFinance ? (
|
||||||
<>
|
<>
|
||||||
<TableCell className="text-center text-xs tabular-nums">
|
<TableCell className={adminMoneyCellClassName("text-center text-xs")}>
|
||||||
{row.total_bet_minor != null
|
{row.total_bet_minor != null ? (
|
||||||
? formatAdminMinorUnits(row.total_bet_minor, defaultCurrency)
|
<AdminTableMoney>
|
||||||
: "—"}
|
{formatAdminMinorUnits(row.total_bet_minor, defaultCurrency)}
|
||||||
|
</AdminTableMoney>
|
||||||
|
) : "—"}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="text-center text-xs tabular-nums">
|
<TableCell className={adminMoneyCellClassName("text-center text-xs")}>
|
||||||
{row.total_payout_minor != null
|
{row.total_payout_minor != null ? (
|
||||||
? formatAdminMinorUnits(row.total_payout_minor, defaultCurrency)
|
<AdminTableMoney>
|
||||||
: "—"}
|
{formatAdminMinorUnits(row.total_payout_minor, defaultCurrency)}
|
||||||
|
</AdminTableMoney>
|
||||||
|
) : "—"}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell
|
<TableCell
|
||||||
className={cn(
|
className={adminMoneyCellClassName(
|
||||||
"text-center text-xs tabular-nums",
|
cn("text-center text-xs", signedMoneyClass(row.profit_loss_minor ?? 0, true)),
|
||||||
signedMoneyClass(row.profit_loss_minor ?? 0, true),
|
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{row.profit_loss_minor != null
|
{row.profit_loss_minor != null ? (
|
||||||
? formatAdminMinorUnits(row.profit_loss_minor, defaultCurrency)
|
<AdminTableMoney>
|
||||||
: "—"}
|
{formatAdminMinorUnits(row.profit_loss_minor, defaultCurrency)}
|
||||||
|
</AdminTableMoney>
|
||||||
|
) : "—"}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
|
|||||||
@@ -343,17 +343,21 @@ export function ReconcileConsole(): React.ReactElement {
|
|||||||
<CardTitle className="admin-list-title">{t("createTitle")}</CardTitle>
|
<CardTitle className="admin-list-title">{t("createTitle")}</CardTitle>
|
||||||
<p className="text-sm text-muted-foreground">{t("createHint")}</p>
|
<p className="text-sm text-muted-foreground">{t("createHint")}</p>
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent className="admin-list-content pt-4">
|
<CardContent className="admin-list-content">
|
||||||
<div className="grid gap-4 xl:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]">
|
<div className="admin-list-toolbar">
|
||||||
<div className="grid gap-4">
|
<div className="admin-list-field">
|
||||||
<div className="grid gap-1.5">
|
<span className="text-sm font-medium leading-none sm:shrink-0">{t("reconcileType")}</span>
|
||||||
<Label htmlFor="rc-type">{t("reconcileType")}</Label>
|
<span className="inline-flex h-8 min-h-8 min-w-0 items-center rounded-md border border-border/60 bg-muted/30 px-2.5 text-sm text-foreground">
|
||||||
<Input id="rc-type" value={t("reconcileTypeFixed")} readOnly className="bg-muted/30" />
|
{t("reconcileTypeFixed")}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-1.5">
|
<div className="admin-list-field">
|
||||||
|
<Label htmlFor="rc-date-range" className="sm:shrink-0">
|
||||||
|
{t("dateRange")}
|
||||||
|
</Label>
|
||||||
|
<div className="min-w-0 w-full sm:w-60">
|
||||||
<AdminDateRangeField
|
<AdminDateRangeField
|
||||||
id="rc-date-range"
|
id="rc-date-range"
|
||||||
label={t("dateRange")}
|
|
||||||
from={dateFrom}
|
from={dateFrom}
|
||||||
to={dateTo}
|
to={dateTo}
|
||||||
onRangeChange={({ from, to }) => {
|
onRangeChange={({ from, to }) => {
|
||||||
@@ -363,17 +367,39 @@ export function ReconcileConsole(): React.ReactElement {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="admin-list-field min-w-0 flex-1">
|
||||||
<div className="grid gap-4">
|
<Label htmlFor="rc-player-search" className="sm:shrink-0">
|
||||||
<div className="grid gap-1.5">
|
{t("playerSearch")}
|
||||||
<Label htmlFor="rc-player-search">{t("playerSearch")}</Label>
|
</Label>
|
||||||
<Input
|
<Input
|
||||||
id="rc-player-search"
|
id="rc-player-search"
|
||||||
|
className="w-full sm:w-52"
|
||||||
value={playerSearch}
|
value={playerSearch}
|
||||||
onChange={(e) => setPlayerSearch(e.target.value)}
|
onChange={(e) => setPlayerSearch(e.target.value)}
|
||||||
placeholder={t("playerSearchPlaceholder")}
|
placeholder={t("playerSearchPlaceholder")}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="admin-list-actions">
|
||||||
|
<Button
|
||||||
|
type="button"
|
||||||
|
className="w-full sm:w-auto"
|
||||||
|
disabled={submitting}
|
||||||
|
onClick={() =>
|
||||||
|
requestConfirm({
|
||||||
|
title: t("confirmCreateTitle"),
|
||||||
|
description: t("confirmCreateDescription", {
|
||||||
|
playerHint: selectedPlayer
|
||||||
|
? t("confirmCreatePlayer")
|
||||||
|
: t("confirmCreateAllPlayers"),
|
||||||
|
}),
|
||||||
|
onConfirm: () => onCreate(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{submitting ? t("submitting") : t("createTask")}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{selectedPlayer ? (
|
{selectedPlayer ? (
|
||||||
<div className="flex items-center justify-between gap-3 rounded-lg border bg-muted/20 px-3 py-2 text-sm">
|
<div className="flex items-center justify-between gap-3 rounded-lg border bg-muted/20 px-3 py-2 text-sm">
|
||||||
@@ -436,29 +462,6 @@ export function ReconcileConsole(): React.ReactElement {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="mt-4 flex justify-end">
|
|
||||||
<Button
|
|
||||||
type="button"
|
|
||||||
className="w-full sm:w-auto"
|
|
||||||
disabled={submitting}
|
|
||||||
onClick={() =>
|
|
||||||
requestConfirm({
|
|
||||||
title: t("confirmCreateTitle"),
|
|
||||||
description: t("confirmCreateDescription", {
|
|
||||||
playerHint: selectedPlayer
|
|
||||||
? t("confirmCreatePlayer")
|
|
||||||
: t("confirmCreateAllPlayers"),
|
|
||||||
}),
|
|
||||||
onConfirm: () => onCreate(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{submitting ? t("submitting") : t("createTask")}
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import {
|
import {
|
||||||
CalendarDays,
|
CalendarDays,
|
||||||
CircleDollarSign,
|
|
||||||
Database,
|
Database,
|
||||||
FileDown,
|
FileDown,
|
||||||
FileSpreadsheet,
|
FileSpreadsheet,
|
||||||
@@ -31,7 +30,6 @@ import {
|
|||||||
getAdminReportDailyProfit,
|
getAdminReportDailyProfit,
|
||||||
getAdminReportPlayDimension,
|
getAdminReportPlayDimension,
|
||||||
getAdminReportPlayerWinLoss,
|
getAdminReportPlayerWinLoss,
|
||||||
getAdminReportRebateCommission,
|
|
||||||
} from "@/api/admin-reports";
|
} from "@/api/admin-reports";
|
||||||
import {
|
import {
|
||||||
buildReportJobParameters,
|
buildReportJobParameters,
|
||||||
@@ -42,7 +40,13 @@ import { getAdminRiskPoolDetail, getAdminRiskPools } from "@/api/admin-risk";
|
|||||||
import { getAdminUsers } from "@/api/admin-users";
|
import { getAdminUsers } from "@/api/admin-users";
|
||||||
import { getAdminTransferOrders } from "@/api/admin-wallet";
|
import { getAdminTransferOrders } from "@/api/admin-wallet";
|
||||||
import { adminHasAnyPermission } from "@/lib/admin-permissions";
|
import { adminHasAnyPermission } from "@/lib/admin-permissions";
|
||||||
import { PRD_REPORT_EXPORT, PRD_REPORT_VIEW } from "@/lib/admin-prd";
|
import {
|
||||||
|
PRD_AUDIT_VIEW,
|
||||||
|
PRD_REPORT_EXPORT,
|
||||||
|
PRD_REPORT_VIEW,
|
||||||
|
PRD_RISK_ACCESS_ANY,
|
||||||
|
PRD_WALLET_TRANSFER_ACCESS_ANY,
|
||||||
|
} from "@/lib/admin-prd";
|
||||||
import { useAdminProfile } from "@/stores/admin-session";
|
import { useAdminProfile } from "@/stores/admin-session";
|
||||||
import { adminAgentDisplayLabel } from "@/components/admin/admin-agent-columns";
|
import { adminAgentDisplayLabel } from "@/components/admin/admin-agent-columns";
|
||||||
import { AdminNoResourceState, AdminTableNoResourceRow } from "@/components/admin/admin-no-resource-state";
|
import { AdminNoResourceState, AdminTableNoResourceRow } from "@/components/admin/admin-no-resource-state";
|
||||||
@@ -73,6 +77,7 @@ import { useAdminCurrencyCatalog, getCachedAdminCurrencies } from "@/hooks/use-a
|
|||||||
import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter";
|
import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter";
|
||||||
import { formatAdminInstant } from "@/lib/admin-datetime";
|
import { formatAdminInstant } from "@/lib/admin-datetime";
|
||||||
import { getAdminRequestLocale } from "@/lib/admin-locale";
|
import { getAdminRequestLocale } from "@/lib/admin-locale";
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
import { signedMoneyClass } from "@/lib/admin-signed-money";
|
import { signedMoneyClass } from "@/lib/admin-signed-money";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { formatAdminMinorUnits } from "@/lib/money";
|
import { formatAdminMinorUnits } from "@/lib/money";
|
||||||
@@ -88,7 +93,6 @@ import type {
|
|||||||
AdminReportDailyProfitRow,
|
AdminReportDailyProfitRow,
|
||||||
AdminReportPlayDimensionRow,
|
AdminReportPlayDimensionRow,
|
||||||
AdminReportPlayerWinLossRow,
|
AdminReportPlayerWinLossRow,
|
||||||
AdminReportRebateCommissionRow,
|
|
||||||
} from "@/types/api/admin-reports";
|
} from "@/types/api/admin-reports";
|
||||||
|
|
||||||
export type ReportCategory = "profit" | "wallet" | "risk" | "audit";
|
export type ReportCategory = "profit" | "wallet" | "risk" | "audit";
|
||||||
@@ -107,7 +111,6 @@ type ReportKey =
|
|||||||
| "hot_number_risk"
|
| "hot_number_risk"
|
||||||
| "play_dimension"
|
| "play_dimension"
|
||||||
| "sold_out_number"
|
| "sold_out_number"
|
||||||
| "rebate_commission"
|
|
||||||
| "admin_audit";
|
| "admin_audit";
|
||||||
|
|
||||||
type ReportDefinition = {
|
type ReportDefinition = {
|
||||||
@@ -118,8 +121,22 @@ type ReportDefinition = {
|
|||||||
scope: string;
|
scope: string;
|
||||||
fields: FieldKey[];
|
fields: FieldKey[];
|
||||||
connected: boolean;
|
connected: boolean;
|
||||||
|
requiredAny: readonly string[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const PRD_REPORTS_VIEW_ACCESS_ANY = [PRD_REPORT_VIEW] as const;
|
||||||
|
|
||||||
|
const REPORTS: ReportDefinition[] = [
|
||||||
|
{ key: "draw_profit", category: "profit", icon: Ticket, filterKind: "draw", scope: "drawNo", fields: ["drawNo"], connected: true, requiredAny: PRD_REPORTS_VIEW_ACCESS_ANY },
|
||||||
|
{ key: "daily_profit", category: "profit", icon: CalendarDays, filterKind: "date", scope: "date", fields: ["period"], connected: true, requiredAny: PRD_REPORTS_VIEW_ACCESS_ANY },
|
||||||
|
{ key: "player_win_loss", category: "profit", icon: Users, filterKind: "player_period", scope: "playerPeriod", fields: ["player", "period"], connected: true, requiredAny: PRD_REPORTS_VIEW_ACCESS_ANY },
|
||||||
|
{ key: "player_transfer", category: "wallet", icon: WalletCards, filterKind: "player_period", scope: "playerPeriod", fields: ["player", "period"], connected: true, requiredAny: PRD_WALLET_TRANSFER_ACCESS_ANY },
|
||||||
|
{ key: "hot_number_risk", category: "risk", icon: ShieldAlert, filterKind: "draw_number", scope: "drawNumber", fields: ["drawNo", "number"], connected: true, requiredAny: PRD_RISK_ACCESS_ANY },
|
||||||
|
{ key: "play_dimension", category: "profit", icon: ListFilter, filterKind: "play_period", scope: "playPeriod", fields: ["play", "period"], connected: true, requiredAny: PRD_REPORTS_VIEW_ACCESS_ANY },
|
||||||
|
{ key: "sold_out_number", category: "risk", icon: ShieldCheck, filterKind: "draw", scope: "drawNo", fields: ["drawNo"], connected: true, requiredAny: PRD_RISK_ACCESS_ANY },
|
||||||
|
{ key: "admin_audit", category: "audit", icon: FileSpreadsheet, filterKind: "operator_period", scope: "operatorPeriod", fields: ["operator", "period"], connected: true, requiredAny: [PRD_AUDIT_VIEW] },
|
||||||
|
];
|
||||||
|
|
||||||
type PreviewColumns = {
|
type PreviewColumns = {
|
||||||
primary: string;
|
primary: string;
|
||||||
secondary: string;
|
secondary: string;
|
||||||
@@ -159,7 +176,6 @@ type ReportResult =
|
|||||||
| { key: "hot_number_risk"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta | null; raw: AdminRiskPoolShowData }
|
| { key: "hot_number_risk"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta | null; raw: AdminRiskPoolShowData }
|
||||||
| { key: "play_dimension"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta; raw: AdminReportPlayDimensionRow[] }
|
| { key: "play_dimension"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta; raw: AdminReportPlayDimensionRow[] }
|
||||||
| { key: "sold_out_number"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta; raw: AdminRiskPoolRow[] }
|
| { key: "sold_out_number"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta; raw: AdminRiskPoolRow[] }
|
||||||
| { key: "rebate_commission"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta; raw: AdminReportRebateCommissionRow[] }
|
|
||||||
| { key: "admin_audit"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta; raw: AdminAuditLogRow[] };
|
| { key: "admin_audit"; rows: ExportRow[]; summary: StatCard[]; meta: ReportMeta; raw: AdminAuditLogRow[] };
|
||||||
|
|
||||||
type StatCard = {
|
type StatCard = {
|
||||||
@@ -182,18 +198,6 @@ type PlayOption = {
|
|||||||
label: string;
|
label: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const REPORTS: ReportDefinition[] = [
|
|
||||||
{ key: "draw_profit", category: "profit", icon: Ticket, filterKind: "draw", scope: "drawNo", fields: ["drawNo"], connected: true },
|
|
||||||
{ key: "daily_profit", category: "profit", icon: CalendarDays, filterKind: "date", scope: "date", fields: ["period"], connected: true },
|
|
||||||
{ key: "player_win_loss", category: "profit", icon: Users, filterKind: "player_period", scope: "playerPeriod", fields: ["player", "period"], connected: true },
|
|
||||||
{ key: "player_transfer", category: "wallet", icon: WalletCards, filterKind: "player_period", scope: "playerPeriod", fields: ["player", "period"], connected: true },
|
|
||||||
{ key: "hot_number_risk", category: "risk", icon: ShieldAlert, filterKind: "draw_number", scope: "drawNumber", fields: ["drawNo", "number"], connected: true },
|
|
||||||
{ key: "play_dimension", category: "profit", icon: ListFilter, filterKind: "play_period", scope: "playPeriod", fields: ["play", "period"], connected: true },
|
|
||||||
{ key: "sold_out_number", category: "risk", icon: ShieldCheck, filterKind: "draw", scope: "drawNo", fields: ["drawNo"], connected: true },
|
|
||||||
{ key: "rebate_commission", category: "profit", icon: CircleDollarSign, filterKind: "play_period", scope: "playPeriod", fields: ["play", "period"], connected: true },
|
|
||||||
{ key: "admin_audit", category: "audit", icon: FileSpreadsheet, filterKind: "operator_period", scope: "operatorPeriod", fields: ["operator", "period"], connected: true },
|
|
||||||
];
|
|
||||||
|
|
||||||
const emptyFilters: ReportFilters = {
|
const emptyFilters: ReportFilters = {
|
||||||
drawNo: "",
|
drawNo: "",
|
||||||
drawId: null,
|
drawId: null,
|
||||||
@@ -414,38 +418,6 @@ function buildPlayDimensionRowsAndSummary(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildRebateCommissionRowsAndSummary(
|
|
||||||
items: AdminReportRebateCommissionRow[],
|
|
||||||
total: number,
|
|
||||||
t: (key: string) => string,
|
|
||||||
pageScopedLabel: (statKey: string) => string,
|
|
||||||
currencyCode: string,
|
|
||||||
): Pick<Extract<ReportResult, { key: "rebate_commission" }>, "rows" | "summary"> {
|
|
||||||
let totalRebate = 0;
|
|
||||||
let totalOrders = 0;
|
|
||||||
|
|
||||||
const rows = items.map((item) => {
|
|
||||||
totalRebate += item.total_rebate_minor;
|
|
||||||
totalOrders += item.order_count;
|
|
||||||
return {
|
|
||||||
play_code: item.play_code,
|
|
||||||
total_rebate_minor: item.total_rebate_minor,
|
|
||||||
order_count: item.order_count,
|
|
||||||
ticket_item_count: item.ticket_item_count,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
rows,
|
|
||||||
summary: [
|
|
||||||
{ label: t("preview.stats.records"), value: String(total) },
|
|
||||||
{ label: t("preview.stats.currentPage"), value: String(items.length) },
|
|
||||||
{ label: pageScopedLabel("rebate"), value: formatPlainMoney(totalRebate, currencyCode) },
|
|
||||||
{ label: pageScopedLabel("orders"), value: String(totalOrders) },
|
|
||||||
],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function metaFromList(meta: { current_page: number; per_page: number; total: number; last_page: number }): ReportMeta {
|
function metaFromList(meta: { current_page: number; per_page: number; total: number; last_page: number }): ReportMeta {
|
||||||
return {
|
return {
|
||||||
total: meta.total,
|
total: meta.total,
|
||||||
@@ -612,13 +584,6 @@ function defaultSummaryCards(
|
|||||||
{ label: t("preview.stats.currency"), value: t("preview.stats.notQueried") },
|
{ label: t("preview.stats.currency"), value: t("preview.stats.notQueried") },
|
||||||
{ label: t("preview.stats.usage"), value: t("preview.stats.notQueried") },
|
{ label: t("preview.stats.usage"), value: t("preview.stats.notQueried") },
|
||||||
];
|
];
|
||||||
case "rebate_commission":
|
|
||||||
return [
|
|
||||||
{ label: t("preview.stats.records"), value: t("preview.stats.notQueried") },
|
|
||||||
{ label: t("fields.play"), value: filters.play || t("filterAll") },
|
|
||||||
{ label: t("preview.stats.rebate"), value: t("preview.stats.notQueried") },
|
|
||||||
{ label: t("preview.stats.orders"), value: t("preview.stats.notQueried") },
|
|
||||||
];
|
|
||||||
case "admin_audit":
|
case "admin_audit":
|
||||||
return [
|
return [
|
||||||
{ label: t("preview.stats.records"), value: t("preview.stats.notQueried") },
|
{ label: t("preview.stats.records"), value: t("preview.stats.notQueried") },
|
||||||
@@ -641,14 +606,15 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
const profile = useAdminProfile();
|
const profile = useAdminProfile();
|
||||||
const canViewReports = adminHasAnyPermission(profile?.permissions, [PRD_REPORT_VIEW]);
|
const canViewReports = adminHasAnyPermission(profile?.permissions, [PRD_REPORT_VIEW]);
|
||||||
const canExportReports = adminHasAnyPermission(profile?.permissions, [PRD_REPORT_EXPORT]);
|
const canExportReports = adminHasAnyPermission(profile?.permissions, [PRD_REPORT_EXPORT]);
|
||||||
|
const permissionSlugs = useMemo(() => profile?.permissions ?? [], [profile?.permissions]);
|
||||||
useAdminCurrencyCatalog();
|
useAdminCurrencyCatalog();
|
||||||
useAdminPlayTypeCatalog();
|
useAdminPlayTypeCatalog();
|
||||||
const playCodeLabel = useAdminPlayCodeLabel();
|
const playCodeLabel = useAdminPlayCodeLabel();
|
||||||
const formatTs = useAdminDateTimeFormatter();
|
const formatTs = useAdminDateTimeFormatter();
|
||||||
const filteredReports = useMemo(
|
const filteredReports = useMemo(() => {
|
||||||
() => (initialCategory ? REPORTS.filter((report) => report.category === initialCategory) : REPORTS),
|
const visible = REPORTS.filter((report) => adminHasAnyPermission(permissionSlugs, report.requiredAny));
|
||||||
[initialCategory],
|
return initialCategory ? visible.filter((report) => report.category === initialCategory) : visible;
|
||||||
);
|
}, [initialCategory, permissionSlugs]);
|
||||||
const [selectedKey, setSelectedKey] = useState<ReportKey>(
|
const [selectedKey, setSelectedKey] = useState<ReportKey>(
|
||||||
filteredReports[0]?.key ?? REPORTS[0].key,
|
filteredReports[0]?.key ?? REPORTS[0].key,
|
||||||
);
|
);
|
||||||
@@ -758,17 +724,6 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
extra: t("preview.columns.soldOut.extra"),
|
extra: t("preview.columns.soldOut.extra"),
|
||||||
time: t("preview.columns.soldOut.time"),
|
time: t("preview.columns.soldOut.time"),
|
||||||
};
|
};
|
||||||
case "rebate_commission":
|
|
||||||
return {
|
|
||||||
primary: t("preview.columns.rebateCommission.primary"),
|
|
||||||
secondary: t("preview.columns.rebateCommission.secondary"),
|
|
||||||
metricA: t("preview.columns.rebateCommission.metricA"),
|
|
||||||
metricB: t("preview.columns.rebateCommission.metricB"),
|
|
||||||
metricC: t("preview.columns.rebateCommission.metricC"),
|
|
||||||
status: t("preview.columns.rebateCommission.status"),
|
|
||||||
extra: t("preview.columns.rebateCommission.extra"),
|
|
||||||
time: t("preview.columns.rebateCommission.time"),
|
|
||||||
};
|
|
||||||
case "admin_audit":
|
case "admin_audit":
|
||||||
return {
|
return {
|
||||||
primary: t("preview.columns.adminAudit.primary"),
|
primary: t("preview.columns.adminAudit.primary"),
|
||||||
@@ -1057,22 +1012,6 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "rebate_commission": {
|
|
||||||
const payload = await getAdminReportRebateCommission(
|
|
||||||
reportListParams(filters, page, perPage),
|
|
||||||
);
|
|
||||||
const currencyCode = resolveDisplayCurrency(payload.currency_code);
|
|
||||||
setDisplayCurrency(currencyCode);
|
|
||||||
const next = buildRebateCommissionRowsAndSummary(payload.items, payload.meta.total, t, pageScopedLabel, currencyCode);
|
|
||||||
setResult({
|
|
||||||
key: "rebate_commission",
|
|
||||||
raw: payload.items,
|
|
||||||
rows: next.rows,
|
|
||||||
meta: metaFromList(payload.meta),
|
|
||||||
summary: next.summary,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "admin_audit": {
|
case "admin_audit": {
|
||||||
const operatorId = filters.operatorId ?? parsePositiveInteger(filters.operator);
|
const operatorId = filters.operatorId ?? parsePositiveInteger(filters.operator);
|
||||||
const payload = await getAdminAuditLogs({
|
const payload = await getAdminAuditLogs({
|
||||||
@@ -1134,10 +1073,10 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
...prev,
|
...prev,
|
||||||
drawNo: drawNoFromUrl || prev.drawNo,
|
drawNo: drawNoFromUrl || prev.drawNo,
|
||||||
}));
|
}));
|
||||||
if (drawNoFromUrl) {
|
if (drawNoFromUrl && filteredReports.some((report) => report.key === "draw_profit")) {
|
||||||
setSelectedKey("draw_profit");
|
setSelectedKey("draw_profit");
|
||||||
}
|
}
|
||||||
}, [drawNoFromUrl]);
|
}, [drawNoFromUrl, filteredReports]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
queueMicrotask(() => {
|
queueMicrotask(() => {
|
||||||
@@ -1563,21 +1502,6 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.key === "rebate_commission") {
|
|
||||||
return result.raw.map((item) => (
|
|
||||||
<TableRow key={item.play_code}>
|
|
||||||
<TableCell className="font-medium">{playCodeLabel(item.play_code)}</TableCell>
|
|
||||||
<TableCell>{item.order_count}</TableCell>
|
|
||||||
<TableCell className="text-center">{formatPlainMoney(item.total_rebate_minor, displayCurrency)}</TableCell>
|
|
||||||
<TableCell className="text-center">{item.ticket_item_count}</TableCell>
|
|
||||||
<TableCell>-</TableCell>
|
|
||||||
<TableCell>-</TableCell>
|
|
||||||
<TableCell>-</TableCell>
|
|
||||||
<TableCell>-</TableCell>
|
|
||||||
</TableRow>
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.key === "admin_audit") {
|
if (result.key === "admin_audit") {
|
||||||
return result.raw.map((item) => (
|
return result.raw.map((item) => (
|
||||||
<TableRow key={item.id}>
|
<TableRow key={item.id}>
|
||||||
@@ -1598,6 +1522,10 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx-auto flex w-full max-w-7xl flex-col gap-4">
|
<div className="mx-auto flex w-full max-w-7xl flex-col gap-4">
|
||||||
|
{filteredReports.length === 0 ? (
|
||||||
|
<AdminNoResourceState message={t("empty")} />
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
<Card className="admin-list-card">
|
<Card className="admin-list-card">
|
||||||
<CardHeader className="admin-list-header pb-3">
|
<CardHeader className="admin-list-header pb-3">
|
||||||
<div className="flex flex-col gap-3">
|
<div className="flex flex-col gap-3">
|
||||||
@@ -1652,11 +1580,13 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<div className="grid gap-2 md:grid-cols-4">
|
<div className="grid min-w-0 gap-2 md:grid-cols-4">
|
||||||
{(result?.summary ?? defaultSummaryCards(selectedReport.key, filters, t)).map((item) => (
|
{(result?.summary ?? defaultSummaryCards(selectedReport.key, filters, t)).map((item) => (
|
||||||
<div key={item.label} className={cn("rounded-md border px-3 py-2.5", statTone(item.tone))}>
|
<div key={item.label} className={cn("min-w-0 rounded-md border px-3 py-2.5", statTone(item.tone))}>
|
||||||
<div className="text-xs text-muted-foreground">{item.label}</div>
|
<div className="text-xs text-muted-foreground">{item.label}</div>
|
||||||
<div className="mt-0.5 truncate text-base font-semibold tabular-nums">{item.value}</div>
|
<AdminMoneyDisplay as="div" value={item.value} size="md" className="mt-0.5">
|
||||||
|
{item.value}
|
||||||
|
</AdminMoneyDisplay>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
@@ -1722,6 +1652,8 @@ export function ReportsConsole({ initialCategory }: { initialCategory?: ReportCa
|
|||||||
) : null}
|
) : null}
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { ArrowRight } from "lucide-react";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import type { SettlementBillRow } from "@/api/admin-agent-settlement";
|
import type { SettlementBillRow } from "@/api/admin-agent-settlement";
|
||||||
|
import { AdminMoneyDisplay } from "@/components/admin/admin-money-display";
|
||||||
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
|
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { formatDashboardMoneyMinor } from "@/modules/dashboard/use-dashboard-analytics";
|
import { formatDashboardMoneyMinor } from "@/modules/dashboard/use-dashboard-analytics";
|
||||||
@@ -64,9 +65,15 @@ export function SettlementBillSummaryHeader({
|
|||||||
<p className="text-xs text-muted-foreground">
|
<p className="text-xs text-muted-foreground">
|
||||||
{t("settlementCenter:billDisplay.settlementAmount", { defaultValue: "结算金额" })}
|
{t("settlementCenter:billDisplay.settlementAmount", { defaultValue: "结算金额" })}
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-0.5 text-2xl font-bold tabular-nums tracking-tight text-foreground">
|
<AdminMoneyDisplay
|
||||||
|
as="p"
|
||||||
|
value={formatDashboardMoneyMinor(direction.amount, currencyCode)}
|
||||||
|
size="xl"
|
||||||
|
emphasize
|
||||||
|
className="mt-0.5 text-foreground"
|
||||||
|
>
|
||||||
{formatDashboardMoneyMinor(direction.amount, currencyCode)}
|
{formatDashboardMoneyMinor(direction.amount, currencyCode)}
|
||||||
</p>
|
</AdminMoneyDisplay>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -75,9 +82,15 @@ export function SettlementBillSummaryHeader({
|
|||||||
<p className="text-xs text-muted-foreground">
|
<p className="text-xs text-muted-foreground">
|
||||||
{t("settlementCenter:columns.paid", { defaultValue: "已收付" })}
|
{t("settlementCenter:columns.paid", { defaultValue: "已收付" })}
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-0.5 font-medium tabular-nums">
|
<AdminMoneyDisplay
|
||||||
|
as="p"
|
||||||
|
value={formatDashboardMoneyMinor(bill.paid_amount ?? 0, currencyCode)}
|
||||||
|
size="md"
|
||||||
|
emphasize={false}
|
||||||
|
className="mt-0.5"
|
||||||
|
>
|
||||||
{formatDashboardMoneyMinor(bill.paid_amount ?? 0, currencyCode)}
|
{formatDashboardMoneyMinor(bill.paid_amount ?? 0, currencyCode)}
|
||||||
</p>
|
</AdminMoneyDisplay>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
@@ -90,14 +103,14 @@ export function SettlementBillSummaryHeader({
|
|||||||
<p className="text-xs text-muted-foreground">
|
<p className="text-xs text-muted-foreground">
|
||||||
{t("settlementCenter:columns.unpaid", { defaultValue: "未结" })}
|
{t("settlementCenter:columns.unpaid", { defaultValue: "未结" })}
|
||||||
</p>
|
</p>
|
||||||
<p
|
<AdminMoneyDisplay
|
||||||
className={cn(
|
as="p"
|
||||||
"mt-0.5 font-semibold tabular-nums",
|
value={formatDashboardMoneyMinor(bill.unpaid_amount, currencyCode)}
|
||||||
unpaid && "text-amber-900 dark:text-amber-200",
|
size="md"
|
||||||
)}
|
className={cn("mt-0.5", unpaid && "text-amber-900 dark:text-amber-200")}
|
||||||
>
|
>
|
||||||
{formatDashboardMoneyMinor(bill.unpaid_amount, currencyCode)}
|
{formatDashboardMoneyMinor(bill.unpaid_amount, currencyCode)}
|
||||||
</p>
|
</AdminMoneyDisplay>
|
||||||
{unpaid ? (
|
{unpaid ? (
|
||||||
<p className="mt-1 text-xs text-muted-foreground">
|
<p className="mt-1 text-xs text-muted-foreground">
|
||||||
{bill.status === "pending_confirm"
|
{bill.status === "pending_confirm"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { AdminNoResourceState } from "@/components/admin/admin-no-resource-state
|
|||||||
import { AdminLoadingState } from "@/components/admin/admin-loading-state";
|
import { AdminLoadingState } from "@/components/admin/admin-loading-state";
|
||||||
import { AdminRowActionsMenu } from "@/components/admin/admin-row-actions-menu";
|
import { AdminRowActionsMenu } from "@/components/admin/admin-row-actions-menu";
|
||||||
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
|
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
|
||||||
|
import { AdminTableMoney, adminMoneyCellClassName } from "@/components/admin/admin-table-money";
|
||||||
import { signedMoneyClass } from "@/lib/admin-signed-money";
|
import { signedMoneyClass } from "@/lib/admin-signed-money";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { formatSettlementPeriodSpan } from "@/lib/agent-settlement-period-range";
|
import { formatSettlementPeriodSpan } from "@/lib/agent-settlement-period-range";
|
||||||
@@ -243,16 +244,20 @@ export function SettlementBillsTable({
|
|||||||
)}
|
)}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
) : null}
|
) : null}
|
||||||
<TableCell className="text-right tabular-nums">
|
<TableCell className={adminMoneyCellClassName(cn("text-right", signedMoneyClass(row.net_amount, true)))}>
|
||||||
<div className={cn("font-semibold", signedMoneyClass(row.net_amount, true))}>
|
<AdminTableMoney>
|
||||||
{formatDashboardMoneyMinor(direction.amount, currencyCode)}
|
{formatDashboardMoneyMinor(direction.amount, currencyCode)}
|
||||||
</div>
|
</AdminTableMoney>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className={cn("text-right tabular-nums", paidMoneyClass(row))}>
|
<TableCell className={adminMoneyCellClassName(cn("text-right", paidMoneyClass(row)))}>
|
||||||
|
<AdminTableMoney>
|
||||||
{formatDashboardMoneyMinor(row.paid_amount ?? 0, currencyCode)}
|
{formatDashboardMoneyMinor(row.paid_amount ?? 0, currencyCode)}
|
||||||
|
</AdminTableMoney>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className={cn("text-right tabular-nums", unpaidMoneyClass(row))}>
|
<TableCell className={adminMoneyCellClassName(cn("text-right", unpaidMoneyClass(row)))}>
|
||||||
|
<AdminTableMoney>
|
||||||
{formatDashboardMoneyMinor(row.unpaid_amount, currencyCode)}
|
{formatDashboardMoneyMinor(row.unpaid_amount, currencyCode)}
|
||||||
|
</AdminTableMoney>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<AdminStatusBadge status={row.status}>
|
<AdminStatusBadge status={row.status}>
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import {
|
|||||||
TableRow,
|
TableRow,
|
||||||
} from "@/components/ui/table";
|
} from "@/components/ui/table";
|
||||||
import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter";
|
import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter";
|
||||||
|
import { AdminTableMoney, adminMoneyCellClassName } from "@/components/admin/admin-table-money";
|
||||||
import { formatDashboardMoneyMinor } from "@/modules/dashboard/use-dashboard-analytics";
|
import { formatDashboardMoneyMinor } from "@/modules/dashboard/use-dashboard-analytics";
|
||||||
import { LotteryApiBizError } from "@/types/api/errors";
|
import { LotteryApiBizError } from "@/types/api/errors";
|
||||||
import { settlementAdjustmentTypeLabel } from "@/modules/settlement/settlement-status-label";
|
import { settlementAdjustmentTypeLabel } from "@/modules/settlement/settlement-status-label";
|
||||||
@@ -368,8 +369,10 @@ export function SettlementOperationsPanel({
|
|||||||
<TableCell className="tabular-nums">
|
<TableCell className="tabular-nums">
|
||||||
{row.billId > 0 ? `#${row.billId}` : "—"}
|
{row.billId > 0 ? `#${row.billId}` : "—"}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="text-right tabular-nums font-medium">
|
<TableCell className={adminMoneyCellClassName("text-right font-medium")}>
|
||||||
|
<AdminTableMoney>
|
||||||
{formatDashboardMoneyMinor(row.amount, currencyCode)}
|
{formatDashboardMoneyMinor(row.amount, currencyCode)}
|
||||||
|
</AdminTableMoney>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="max-w-[160px] truncate text-sm">{row.summary}</TableCell>
|
<TableCell className="max-w-[160px] truncate text-sm">{row.summary}</TableCell>
|
||||||
<TableCell className="max-w-[240px] truncate text-sm text-muted-foreground">
|
<TableCell className="max-w-[240px] truncate text-sm text-muted-foreground">
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const files = [
|
|
||||||
"risk/risk-pools-console.tsx",
|
|
||||||
"risk/risk-index-console.tsx",
|
|
||||||
"admin-roles/admin-roles-console.tsx",
|
|
||||||
"admin-users/admin-users-console.tsx",
|
|
||||||
"wallet/wallet-console.tsx",
|
|
||||||
"integration/integration-sites-console.tsx",
|
|
||||||
"players/players-console.tsx",
|
|
||||||
"config/doc/risk-cap-doc-screen.tsx",
|
|
||||||
"draws/draw-review-console.tsx",
|
|
||||||
"draws/draws-index-console.tsx",
|
|
||||||
"tickets/player-tickets-console.tsx",
|
|
||||||
"settings/currency-settings-panel.tsx",
|
|
||||||
"agents/agents-console.tsx",
|
|
||||||
"settlement/settlement-batches-console.tsx"
|
|
||||||
];
|
|
||||||
|
|
||||||
const STICKY_HEAD_CLASSES = "sticky right-0 z-20 bg-muted shadow-[-1px_0_0_rgba(203,213,225,0.7)] ";
|
|
||||||
const STICKY_CELL_CLASSES = "sticky right-0 z-10 bg-card shadow-[-1px_0_0_rgba(203,213,225,0.7)] ";
|
|
||||||
|
|
||||||
files.forEach(file => {
|
|
||||||
const fullPath = path.join("/Users/kang/Work/lotterySystem/lotteryadmin/src/modules", file);
|
|
||||||
if (!fs.existsSync(fullPath)) {
|
|
||||||
console.log("Not found:", file);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let content = fs.readFileSync(fullPath, 'utf8');
|
|
||||||
let changed = false;
|
|
||||||
|
|
||||||
// Replace TableHead
|
|
||||||
const newContent1 = content.replace(
|
|
||||||
/<TableHead className="([^"]*text-center[^"]*)"([^>]*)>(.*?t\([^)]*(?:action|操作)[^)]*\).*?)<\/TableHead>/g,
|
|
||||||
(match, p1, p2, p3) => {
|
|
||||||
if (p1.includes("sticky")) return match;
|
|
||||||
changed = true;
|
|
||||||
return `<TableHead className="${STICKY_HEAD_CLASSES}${p1}"${p2}>${p3}</TableHead>`;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
content = newContent1;
|
|
||||||
|
|
||||||
// Replace TableCell wrapping AdminRowActionsMenu
|
|
||||||
const newContent2 = content.replace(
|
|
||||||
/<TableCell([^>]*)>\s*<AdminRowActionsMenu/g,
|
|
||||||
(match, p1) => {
|
|
||||||
if (match.includes("sticky")) return match;
|
|
||||||
changed = true;
|
|
||||||
if (p1.includes('className="')) {
|
|
||||||
return match.replace(/className="([^"]*)"/, `className="${STICKY_CELL_CLASSES}$1"`);
|
|
||||||
} else {
|
|
||||||
return `<TableCell className="${STICKY_CELL_CLASSES}"${p1}>\n<AdminRowActionsMenu`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
content = newContent2;
|
|
||||||
|
|
||||||
if (changed) {
|
|
||||||
fs.writeFileSync(fullPath, content, 'utf8');
|
|
||||||
console.log("Updated", file);
|
|
||||||
} else {
|
|
||||||
console.log("Skipped", file);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -59,6 +59,7 @@ import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter"
|
|||||||
import { useConfirmAction } from "@/hooks/use-confirm-action";
|
import { useConfirmAction } from "@/hooks/use-confirm-action";
|
||||||
import { useExportLabels } from "@/hooks/use-export-labels";
|
import { useExportLabels } from "@/hooks/use-export-labels";
|
||||||
import { PlayerLedgerSourceBadge } from "@/components/admin/player-funding-badges";
|
import { PlayerLedgerSourceBadge } from "@/components/admin/player-funding-badges";
|
||||||
|
import { AdminTableMoney, adminMoneyCellClassName } from "@/components/admin/admin-table-money";
|
||||||
import { formatAdminMinorUnits } from "@/lib/money";
|
import { formatAdminMinorUnits } from "@/lib/money";
|
||||||
import { creditLedgerReasonLabel } from "@/modules/settlement/settlement-status-label";
|
import { creditLedgerReasonLabel } from "@/modules/settlement/settlement-status-label";
|
||||||
import { LotteryApiBizError } from "@/types/api/errors";
|
import { LotteryApiBizError } from "@/types/api/errors";
|
||||||
@@ -578,8 +579,10 @@ export function TransferOrdersPanel(): React.ReactElement {
|
|||||||
<AdminAgentIdentityCells row={row} />
|
<AdminAgentIdentityCells row={row} />
|
||||||
<AdminPlayerIdentityCells row={row} />
|
<AdminPlayerIdentityCells row={row} />
|
||||||
<TableCell>{row.direction}</TableCell>
|
<TableCell>{row.direction}</TableCell>
|
||||||
<TableCell className="tabular-nums">
|
<TableCell className={adminMoneyCellClassName("text-right")}>
|
||||||
|
<AdminTableMoney>
|
||||||
{formatAdminMinorUnits(row.amount, row.currency_code)}
|
{formatAdminMinorUnits(row.amount, row.currency_code)}
|
||||||
|
</AdminTableMoney>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<AdminStatusBadge status={row.status}>{statusLabelT(row.status, t)}</AdminStatusBadge>
|
<AdminStatusBadge status={row.status}>{statusLabelT(row.status, t)}</AdminStatusBadge>
|
||||||
@@ -907,8 +910,10 @@ export function WalletTxnsPanel(): React.ReactElement {
|
|||||||
{walletTxnBizTypeLabel(row.biz_type, row.ledger_source, t, tSettlement)}
|
{walletTxnBizTypeLabel(row.biz_type, row.ledger_source, t, tSettlement)}
|
||||||
</span>
|
</span>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="min-w-[6.5rem] align-top whitespace-nowrap tabular-nums text-xs">
|
<TableCell className={adminMoneyCellClassName("min-w-[6.5rem] text-right text-xs")}>
|
||||||
|
<AdminTableMoney>
|
||||||
{row.amount_formatted ?? formatAdminMinorUnits(row.amount)}
|
{row.amount_formatted ?? formatAdminMinorUnits(row.amount)}
|
||||||
|
</AdminTableMoney>
|
||||||
<span className="ml-1 text-muted-foreground">
|
<span className="ml-1 text-muted-foreground">
|
||||||
({row.direction === 1 ? t("in") : t("out")})
|
({row.direction === 1 ? t("in") : t("out")})
|
||||||
</span>
|
</span>
|
||||||
@@ -1031,9 +1036,13 @@ export function PlayerWalletPanel(): React.ReactElement {
|
|||||||
<TableRow key={w.id}>
|
<TableRow key={w.id}>
|
||||||
<TableCell>{w.wallet_type}</TableCell>
|
<TableCell>{w.wallet_type}</TableCell>
|
||||||
<TableCell>{w.currency_code}</TableCell>
|
<TableCell>{w.currency_code}</TableCell>
|
||||||
<TableCell className="font-mono tabular-nums">{w.balance}</TableCell>
|
<TableCell className={adminMoneyCellClassName("font-mono text-right")}>
|
||||||
<TableCell className="tabular-nums">
|
<AdminTableMoney>{w.balance}</AdminTableMoney>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className={adminMoneyCellClassName("text-right")}>
|
||||||
|
<AdminTableMoney>
|
||||||
{formatAdminMinorUnits(w.available_balance, w.currency_code)}
|
{formatAdminMinorUnits(w.available_balance, w.currency_code)}
|
||||||
|
</AdminTableMoney>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ export function readProfile(): AdminProfile | null {
|
|||||||
const permissions = Array.isArray(v.permissions)
|
const permissions = Array.isArray(v.permissions)
|
||||||
? v.permissions.filter((s): s is string => typeof s === "string")
|
? v.permissions.filter((s): s is string => typeof s === "string")
|
||||||
: [];
|
: [];
|
||||||
|
const operationalPermissions = Array.isArray(v.operational_permissions)
|
||||||
|
? v.operational_permissions.filter((s): s is string => typeof s === "string")
|
||||||
|
: [];
|
||||||
const navigation = Array.isArray(v.navigation)
|
const navigation = Array.isArray(v.navigation)
|
||||||
? v.navigation.filter((item): item is AdminNavItem => {
|
? v.navigation.filter((item): item is AdminNavItem => {
|
||||||
return (
|
return (
|
||||||
@@ -32,13 +35,26 @@ export function readProfile(): AdminProfile | null {
|
|||||||
);
|
);
|
||||||
})
|
})
|
||||||
: [];
|
: [];
|
||||||
|
const accountKind =
|
||||||
|
v.account_kind === "super_admin"
|
||||||
|
|| v.account_kind === "site_admin"
|
||||||
|
|| v.account_kind === "site_finance"
|
||||||
|
|| v.account_kind === "site_cs"
|
||||||
|
|| v.account_kind === "site_operator"
|
||||||
|
|| v.account_kind === "agent_operator"
|
||||||
|
|| v.account_kind === "platform_account"
|
||||||
|
? (v.account_kind === "site_operator" ? "site_admin" : v.account_kind)
|
||||||
|
: undefined;
|
||||||
return {
|
return {
|
||||||
id: v.id,
|
id: v.id,
|
||||||
username: v.username,
|
username: v.username,
|
||||||
nickname: v.nickname,
|
nickname: v.nickname,
|
||||||
email: typeof v.email === "string" || v.email === null ? v.email : null,
|
email: typeof v.email === "string" || v.email === null ? v.email : null,
|
||||||
permissions,
|
permissions,
|
||||||
|
operational_permissions: operationalPermissions,
|
||||||
navigation,
|
navigation,
|
||||||
|
is_super_admin: v.is_super_admin === true ? true : undefined,
|
||||||
|
account_kind: accountKind,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -16,20 +16,31 @@ export type AdminAuthLoginRequest = {
|
|||||||
|
|
||||||
import type { AdminAgentContext } from "@/types/api/admin-agent";
|
import type { AdminAgentContext } from "@/types/api/admin-agent";
|
||||||
|
|
||||||
|
/** 登录态账号形态(与 Laravel `auth/me.account_kind` 对齐) */
|
||||||
|
export type AdminAccountKind =
|
||||||
|
| "super_admin"
|
||||||
|
| "site_admin"
|
||||||
|
| "site_finance"
|
||||||
|
| "site_cs"
|
||||||
|
| "agent_operator"
|
||||||
|
| "platform_account";
|
||||||
|
|
||||||
/** 登录成功后缓存于会话(localStorage)的管理员摘要 */
|
/** 登录成功后缓存于会话(localStorage)的管理员摘要 */
|
||||||
export type AdminProfile = {
|
export type AdminProfile = {
|
||||||
id: number;
|
id: number;
|
||||||
username: string;
|
username: string;
|
||||||
nickname: string;
|
nickname: string;
|
||||||
email: string | null;
|
email: string | null;
|
||||||
/** 与 Laravel `admin_permissions.slug` 一致(如 `prd.*`);超管为全量列表 */
|
/** Legacy 产品权限 slug(如 `prd.*`);侧栏与旧页面门控 */
|
||||||
permissions?: string[];
|
permissions?: string[];
|
||||||
/** 当前管理员可见的后台菜单,由 Laravel 注册表统一下发。 */
|
/** 当前管理员可见的后台菜单,由 Laravel 注册表统一下发。 */
|
||||||
navigation?: AdminNavItem[];
|
navigation?: AdminNavItem[];
|
||||||
/** 代理账号绑定节点;超管为 null */
|
/** 代理账号绑定节点;超管为 null */
|
||||||
agent?: AdminAgentContext | null;
|
agent?: AdminAgentContext | null;
|
||||||
is_super_admin?: boolean;
|
is_super_admin?: boolean;
|
||||||
/** 与 permissions 同值,语义上强调“可操作权限” */
|
/** 账号形态:超管 / 站点运营 / 代理经营 / 其他平台账号 */
|
||||||
|
account_kind?: AdminAccountKind;
|
||||||
|
/** API 鉴权 action code(如 `service.report.view`);与后端 `effectiveMenuActionPermissionCodes` 一致 */
|
||||||
operational_permissions?: string[];
|
operational_permissions?: string[];
|
||||||
/** 当前代理可下放给下级的 prd.* 上限(未配置 grants 时与操作权限一致) */
|
/** 当前代理可下放给下级的 prd.* 上限(未配置 grants 时与操作权限一致) */
|
||||||
delegation_ceiling?: string[];
|
delegation_ceiling?: string[];
|
||||||
|
|||||||
@@ -49,6 +49,31 @@ export type AdminDashboardCapabilities = {
|
|||||||
wallet_transfer_view: boolean;
|
wallet_transfer_view: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type AdminDashboardSiteFinanceOverview = {
|
||||||
|
admin_site_id: number;
|
||||||
|
site_code: string;
|
||||||
|
site_name: string;
|
||||||
|
wallet_player_count: number;
|
||||||
|
credit_player_count: number;
|
||||||
|
pending_confirm_bill_count: number;
|
||||||
|
payable_bill_count: number;
|
||||||
|
payable_unpaid_minor: number;
|
||||||
|
pending_bill_count: number;
|
||||||
|
pending_unpaid_minor: number;
|
||||||
|
abnormal_transfer_count: number;
|
||||||
|
currency_code: string | null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type AdminDashboardSiteCsOverview = {
|
||||||
|
admin_site_id: number;
|
||||||
|
site_code: string;
|
||||||
|
site_name: string;
|
||||||
|
player_count: number;
|
||||||
|
ticket_order_count_today: number;
|
||||||
|
active_player_count_today: number;
|
||||||
|
latest_ticket_at: string | null;
|
||||||
|
};
|
||||||
|
|
||||||
/** 站点管理员首页摘要(`GET /api/v1/admin/dashboard` → `site_overview`) */
|
/** 站点管理员首页摘要(`GET /api/v1/admin/dashboard` → `site_overview`) */
|
||||||
export type AdminDashboardSiteOverview = {
|
export type AdminDashboardSiteOverview = {
|
||||||
admin_site_id: number;
|
admin_site_id: number;
|
||||||
@@ -178,4 +203,6 @@ export type AdminDashboardData = {
|
|||||||
capabilities: AdminDashboardCapabilities;
|
capabilities: AdminDashboardCapabilities;
|
||||||
agent_overview: AdminDashboardAgentOverview | null;
|
agent_overview: AdminDashboardAgentOverview | null;
|
||||||
site_overview: AdminDashboardSiteOverview | null;
|
site_overview: AdminDashboardSiteOverview | null;
|
||||||
|
site_finance_overview: AdminDashboardSiteFinanceOverview | null;
|
||||||
|
site_cs_overview: AdminDashboardSiteCsOverview | null;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,13 +24,6 @@ export type AdminReportPlayDimensionRow = {
|
|||||||
approx_house_gross_minor: number;
|
approx_house_gross_minor: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type AdminReportRebateCommissionRow = {
|
|
||||||
play_code: string;
|
|
||||||
total_rebate_minor: number;
|
|
||||||
order_count: number;
|
|
||||||
ticket_item_count: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AdminReportListData<T> = {
|
export type AdminReportListData<T> = {
|
||||||
items: T[];
|
items: T[];
|
||||||
meta: {
|
meta: {
|
||||||
|
|||||||
Reference in New Issue
Block a user