169 lines
4.8 KiB
JavaScript
169 lines
4.8 KiB
JavaScript
import fs from "fs"
|
|
import path from "path"
|
|
import { fileURLToPath } from "url"
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
const root = path.resolve(__dirname, "..")
|
|
|
|
// 从 service-enum.ts 解析枚举(简单正则)
|
|
const enumSrc = fs.readFileSync(path.join(root, "src/sheep/constant/service-enum.ts"), "utf8")
|
|
const enumBlocks = {}
|
|
const blockRe = /const (\w+) = \{([^}]+)\}/gs
|
|
let m
|
|
while ((m = blockRe.exec(enumSrc))) {
|
|
const name = m[1]
|
|
const body = m[2]
|
|
const values = {}
|
|
for (const line of body.split("\n")) {
|
|
const kv = line.match(/["']?(\w+)["']?\s*:\s*"([^"]+)"/)
|
|
if (kv) values[kv[1]] = kv[2]
|
|
}
|
|
enumBlocks[name] = values
|
|
}
|
|
|
|
/** 英文翻译表:整句优先,否则逐字替换 */
|
|
const EN_MAP = {
|
|
创建订单: "Order created",
|
|
未支付: "Unpaid",
|
|
已经支付: "Paid",
|
|
退款: "Refund",
|
|
已核销: "Verified",
|
|
线下购买: "In-store",
|
|
线上订餐: "Online order",
|
|
外来人员: "Visitor",
|
|
跨单位: "Cross-unit",
|
|
正元公务餐: "Official meal",
|
|
"宁波银行(美好生活)": "Ningbo Bank",
|
|
"共富商城(助农)": "Prosperity shop",
|
|
"toc访客购买(不记名用户)": "Guest purchase",
|
|
消费机支付: "POS payment",
|
|
外卖: "Takeaway",
|
|
钱包支付: "Wallet",
|
|
钱包二维码支付: "Wallet QR",
|
|
钱包扫一扫支付: "Wallet scan",
|
|
钱包饭卡支付: "Meal card",
|
|
人脸识别支付: "Face pay",
|
|
跨单位二维码支付: "Cross-unit QR",
|
|
外来人员二维码支付: "Visitor QR",
|
|
线上二维码支付: "Online QR",
|
|
现金支付: "Cash",
|
|
智能柜免密支付: "Locker auto-pay",
|
|
微信付款码支付: "WeChat code",
|
|
微信App支付: "WeChat App",
|
|
支付宝付款码支付: "Alipay code",
|
|
支付宝App支付: "Alipay App",
|
|
中医院: "TCM hospital",
|
|
人民医院: "People's hospital",
|
|
超市消费卡: "Supermarket card",
|
|
活动核销: "Event redemption",
|
|
会员申请退款: "Member refund request",
|
|
商家确认退款: "Merchant approved",
|
|
会员取消退款: "Member cancelled",
|
|
商家拒绝退款: "Merchant rejected",
|
|
未售后: "No after-sales",
|
|
售后中: "In progress",
|
|
售后成功: "Refunded",
|
|
售后失败: "Failed",
|
|
售后完成: "Completed",
|
|
买家取消: "Buyer cancelled",
|
|
卖家拒绝: "Seller rejected",
|
|
昨天: "Yesterday",
|
|
今天: "Today",
|
|
明天: "Tomorrow",
|
|
后天: "Day after tomorrow",
|
|
私家车: "Private car",
|
|
公车: "Official car",
|
|
军车: "Military car",
|
|
警车: "Police car",
|
|
今日空闲: "Available today",
|
|
今日部分空闲: "Partially available",
|
|
今日已满: "Full today",
|
|
未核销: "Not verified",
|
|
已过期: "Expired",
|
|
满减券: "Amount-off coupon",
|
|
折扣券: "Discount coupon",
|
|
立减券: "Instant discount",
|
|
兑换券: "Redemption coupon",
|
|
支付成功: "Payment success",
|
|
支付失败: "Payment failed",
|
|
退款中: "Refunding",
|
|
退款成功: "Refund success",
|
|
退款失败: "Refund failed",
|
|
小程序用户钱包充值: "Mini-program wallet top-up",
|
|
微信: "WeChat",
|
|
支付宝: "Alipay",
|
|
家: "Home",
|
|
公司: "Company",
|
|
学校: "School",
|
|
父母家: "Parents' home",
|
|
}
|
|
|
|
const HK_MAP = {
|
|
...EN_MAP,
|
|
创建订单: "創建訂單",
|
|
未支付: "未支付",
|
|
已经支付: "已經支付",
|
|
退款: "退款",
|
|
已核销: "已核銷",
|
|
线下购买: "線下購買",
|
|
线上订餐: "線上訂餐",
|
|
外卖: "外賣",
|
|
钱包支付: "錢包支付",
|
|
售后中: "售後中",
|
|
售后成功: "售後成功",
|
|
售后失败: "售後失敗",
|
|
售后完成: "售後完成",
|
|
未售后: "未售後",
|
|
昨天: "昨天",
|
|
今天: "今天",
|
|
明天: "明天",
|
|
后天: "後天",
|
|
未核销: "未核銷",
|
|
已过期: "已過期",
|
|
支付成功: "支付成功",
|
|
支付失败: "支付失敗",
|
|
退款中: "退款中",
|
|
退款成功: "退款成功",
|
|
退款失败: "退款失敗",
|
|
微信: "微信",
|
|
支付宝: "支付寶",
|
|
家: "家",
|
|
公司: "公司",
|
|
学校: "學校",
|
|
父母家: "父母家",
|
|
}
|
|
|
|
function toEn(zh) {
|
|
if (EN_MAP[zh]) return EN_MAP[zh]
|
|
return zh
|
|
}
|
|
|
|
function toHk(zh) {
|
|
if (HK_MAP[zh]) return HK_MAP[zh]
|
|
return zh
|
|
.replace(/订单/g, "訂單")
|
|
.replace(/售后/g, "售後")
|
|
.replace(/核销/g, "核銷")
|
|
.replace(/支付/g, "支付")
|
|
.replace(/钱包/g, "錢包")
|
|
.replace(/单位/g, "單位")
|
|
}
|
|
|
|
function emitLocale(locale, mapper) {
|
|
const enumObj = {}
|
|
for (const [name, values] of Object.entries(enumBlocks)) {
|
|
enumObj[name] = {}
|
|
for (const [k, v] of Object.entries(values)) {
|
|
enumObj[name][k] = locale === "zh-cn" ? v : mapper(v)
|
|
}
|
|
}
|
|
return `export default {\n\tenum: ${JSON.stringify(enumObj, null, "\t").replace(/"(\d+)":/g, "$1:")},\n}\n`
|
|
}
|
|
|
|
const outDir = path.join(root, "src/i18n/enum")
|
|
fs.mkdirSync(outDir, { recursive: true })
|
|
fs.writeFileSync(path.join(outDir, "zh-cn.ts"), emitLocale("zh-cn", (v) => v))
|
|
fs.writeFileSync(path.join(outDir, "en.ts"), emitLocale("en", toEn))
|
|
fs.writeFileSync(path.join(outDir, "zh-hk.ts"), emitLocale("zh-hk", toHk))
|
|
console.log("generated enum i18n:", Object.keys(enumBlocks).length, "enums")
|