Handy_Cao vor 1 Jahr
Ursprung
Commit
7e99316a1a
36 geänderte Dateien mit 691 neuen und 300 gelöschten Zeilen
  1. 204 32
      public/locales/en-US.json
  2. 184 11
      public/locales/zh-CN.json
  3. 9 9
      src/packages/mobile/views/account/authresult/Index.vue
  4. 19 17
      src/packages/mobile/views/account/certification/Index.vue
  5. 10 10
      src/packages/mobile/views/ballot/detail/Index.vue
  6. 12 10
      src/packages/mobile/views/ballot/detail/components/delisting/index.vue
  7. 12 10
      src/packages/mobile/views/ballot/list/Index.vue
  8. 6 3
      src/packages/mobile/views/bank/capital/index.vue
  9. 5 3
      src/packages/mobile/views/bank/capital/statement/history/index.vue
  10. 5 3
      src/packages/mobile/views/bank/capital/statement/index.vue
  11. 14 13
      src/packages/mobile/views/bank/sign/components/edit/Index.vue
  12. 20 19
      src/packages/mobile/views/bank/wallet/components/deposit/Index.vue
  13. 5 5
      src/packages/mobile/views/bank/wallet/components/inoutapply/Index.vue
  14. 20 19
      src/packages/mobile/views/bank/wallet/components/withdraw/Index.vue
  15. 4 2
      src/packages/mobile/views/boot/Index.vue
  16. 1 1
      src/packages/mobile/views/goods/detail/Index.vue
  17. 19 16
      src/packages/mobile/views/goods/detail/components/listing/Index.vue
  18. 17 15
      src/packages/mobile/views/goods/list/Index.vue
  19. 18 15
      src/packages/mobile/views/goods/trade/components/delisting/index.vue
  20. 6 4
      src/packages/mobile/views/goods/trade/index.vue
  21. 6 3
      src/packages/mobile/views/home/Index.vue
  22. 1 1
      src/packages/mobile/views/market/detail/Index.vue
  23. 12 9
      src/packages/mobile/views/market/list/Index.vue
  24. 10 8
      src/packages/mobile/views/mine/Index.vue
  25. 9 6
      src/packages/mobile/views/mine/address/components/edit/Index.vue
  26. 3 3
      src/packages/mobile/views/mine/invoice/Index.vue
  27. 22 19
      src/packages/mobile/views/mine/invoice/components/edit/Index.vue
  28. 1 1
      src/packages/mobile/views/mine/profile/Index.vue
  29. 3 2
      src/packages/mobile/views/mine/wechat/Index.vue
  30. 5 5
      src/packages/mobile/views/news/detail/Index.vue
  31. 1 1
      src/packages/mobile/views/notice/list/components/detail/index.vue
  32. 9 6
      src/packages/mobile/views/order/position/Index.vue
  33. 8 8
      src/packages/mobile/views/order/position/components/goods/detail/Index.vue
  34. 6 6
      src/packages/mobile/views/order/position/components/goods/list/Index.vue
  35. 4 4
      src/packages/mobile/views/user/forget/Index.vue
  36. 1 1
      src/stores/modules/language.ts

+ 204 - 32
public/locales/en-US.json

@@ -3,6 +3,7 @@
         "name": "Muchinfo"
     },
     "common": {
+        "nodatas": "No Datas",
         "more": "More",
         "details": "Details",
         "placeholder": "Please enter",
@@ -11,11 +12,18 @@
         "optional": "Optional",
         "logout": "Log out",
         "save": "Save",
-        "tips": "Tips"
+        "tips": "Tips",
+        "submitsuccess": "Submit Successful",
+        "pleaseenter": "Please enter",
+        "ikonw": "I Konw",
+        "exit": "exit",
+        "tryagain": "try again",
+        "loading": "loading..."
     },
     "tabbar": {
         "home": "Home",
-        "mine": "Mine"
+        "mine": "Mine",
+        "trade": "Trade"
     },
     "routes": {
         "news": "News",
@@ -110,6 +118,14 @@
         "buyhall": "Buy Hall",
         "sellhall": "Sell Hall",
         "buysellhall": "Buy Sell Hall",
+        "listinghall": "Listing Hall",
+        "enableQty": "Estimate Buy Qty",
+        "deposit": "Deposit",
+        "avaiableMoney": "Avaiable Funds",
+        "orderbuy": "Order Buy",
+        "transferbuy": "Transfer Buy",
+        "ordersell": "Order Sell",
+        "transfersell": "Transfer Sell",
         "buy": "Buy",
         "selll": "Sell",
         "bid1": "Bid1",
@@ -121,7 +137,47 @@
         "ask2": "Ask2",
         "ask3": "Ask3",
         "ask4": "Ask4",
-        "ask5": "Ask5"
+        "ask5": "Ask5",
+        "ballot": {
+            "title": "Subscribe",
+            "refprice": "RefPrice",
+            "starttime": "StartTime:",
+            "endtime": "EndTime:",
+            "historypresale": "History Presale",
+            "presalewin": "Presale Win",
+            "issueprice": "IssuePrice",
+            "goodsdetail": "Goods Detail",
+            "winningthelottery": "Winning The Lottery",
+            "totalqty": "Total Qty:",
+            "earnest": "Earnest",
+            "transferdepositratio": "Transfer Deposit Ratio",
+            "subscribe": "I Want Subscribe",
+            "orderQty": "OrderQty",
+            "maxbuyqty": "MaxBuyQty",
+            "deposit": "Deposit",
+            "avaiablefunds": "Avaiable Funds",
+            "ordercannotbegreaterthan": "orderqty can not begreater than",
+            "pleaseenterthesubscriptionquantity": "Please enter the subscription quantity"
+        },
+        "goods": {
+            "title": "delisting",
+            "orderprice": "price",
+            "orderqty": "qty",
+            "username": "listinger",
+            "nodeal": "You can't make a deal with yourself",
+            "buyorsell": "buyorsell",
+            "pleaseenterorderprice": "pleaseenterorderprice",
+            "pleaseenterorderqty": "pleaseenterorderqty",
+            "tips1": "Are you sure to submit it?",
+            "tips2": "*If there is a reverse order with a price match, the system will automatically cancel it",
+            "tips3": "The submission was successful.",
+            "tips4": "Please enter the delisting qty",
+            "delistingqty": "Delisting Qty",
+            "delistingbuyorsell": "Buyorsell",
+            "remainqty": "RemainQty",
+            "listingprice": "ListingPrice",
+            "taaccount": "TaAccount"
+        }
     },
     "order": {
         "title": "My Orders",
@@ -259,7 +315,7 @@
     "position": {
         "title": "My Position",
         "holddetail": "Hold Detail",
-        "order": {
+        "goods": {
             "title": "Order Position",
             "subtitle": "Position Info",
             "subtitle2": "Delivery Info",
@@ -280,7 +336,16 @@
             "deliveryqty": "DeliveryQty",
             "address": "Address",
             "transferprice": "Price",
-            "qty": "Qty"
+            "qty": "Qty",
+            "holddetail": {
+                "title": "Hold Detail",
+                "tradetime": "TradeTime",
+                "buyorsell": "BuyOrSell",
+                "holderqty": "HolderQty",
+                "freezeqty": "FreezeQty",
+                "holderprice": "HolderPrice",
+                "holderamount": "HolderAmount"
+            }
         },
         "spot": {
             "title": "Spot Position",
@@ -294,29 +359,29 @@
             "orderqty": "OrderQty",
             "fixedprice": "OrderPrice",
             "performancetemplate": "Performance Template",
-            "orderqty2": "提货数量",
-            "appointmentmodel": "提货方式",
-            "contactname": "联系人",
-            "contactnum": "联系方式",
-            "district": "收货地区",
-            "address": "收货地址",
-            "remark": "发票信息"
+            "orderqty2": "PickUpQty",
+            "appointmentmodel": "PickUpWay",
+            "contactname": "ContractName",
+            "contactnum": "Mobile",
+            "district": "District",
+            "address": "Address",
+            "remark": "InvoiceInfo"
         },
         "presale": {
-            "title": "预售持仓",
-            "subtitle": "预售持仓信息",
-            "goodsname": "name/code",
-            "sellname": "发售方",
-            "starttime": "开始日期",
-            "endtime": "结束日期",
-            "tradeqty": "认购量",
-            "openprice": "预售价",
-            "tradeamount": "总货款",
-            "transferdepositratio": "转让定金比例",
-            "transferdeposit": "转让定金",
-            "depositremain": "未付定金",
-            "paystatus": "支付状态",
-            "tradeid": "orderid"
+            "title": "PreSale Position",
+            "subtitle": "PreSale Position Info",
+            "goodsname": "Name/Code",
+            "sellname": "SellName",
+            "starttime": "StartTime",
+            "endtime": "EndTime:",
+            "tradeqty": "TradeQty",
+            "openprice": "OpenPrice",
+            "tradeamount": "TradeAmount",
+            "transferdepositratio": "TransferDepositRatio",
+            "transferdeposit": "TransferDeposit",
+            "depositremain": "DepositRemain",
+            "paystatus": "PayStatus",
+            "tradeid": "OrderId"
         },
         "transfer": {
             "title": "Transfer Position",
@@ -522,7 +587,8 @@
             "invoiceinfo": "Invoice Information",
             "addressinfo": "Address Information",
             "wechat": "Wechat",
-            "email": "Email"
+            "email": "Email",
+            "tips1": "Please enter Wechat"
         },
         "address": {
             "title": "Address Management",
@@ -533,7 +599,30 @@
             "receiverName": "UserName",
             "region": "Region",
             "modifyaddressinfo": "Modify",
-            "addaddressinfo": "Add Address"
+            "addaddressinfo": "Add Address",
+            "tips1": "Please enter the consignee",
+            "tips2": "Please enter your contact number",
+            "tips3": "Please select the delivery area",
+            "tips4": "Please enter the address details",
+            "tips5": "Delete the shipping address?"
+        },
+        "invoice": {
+            "title": "Invoice",
+            "title1": "Update Invoice Info",
+            "title2": "Add Invoice Info",
+            "default": "Default",
+            "receipttype": "ReceiptType",
+            "UserName": "UserName",
+            "TaxpayerID": "TaxpayerID",
+            "ReceiptBank": "ReceiptBank",
+            "ReceiptAccount": "ReceiptAccount",
+            "Address": "Address",
+            "ContactInfo": "ContactInfo",
+            "Email": "Email",
+            "tips1": "Please enter the username",
+            "tips2": "Please enter the taxpayerid",
+            "tips3": "Do you want to delete the invoice?",
+            "addinvoice": "Add Invoice"
         }
     },
     "banksign": {
@@ -560,6 +649,18 @@
         "operatetype": "operatetype",
         "amount": "amount",
         "bankaccountno": "BankAccountNo",
+        "verificationcode": "verify code",
+        "sendagain": "send again",
+        "sendfailure": "send failure",
+        "Pleaseenterbranchbankname": "Please enter branch bankname",
+        "Pleaseenterbranchbankno": "Please enter branch bankno",
+        "submitsuccess1": "Modification and submission of signing information was successful.",
+        "submitsuccess2": "The signing was successfully submitted, please confirm the result later.",
+        "tips1": "'Please add the signing account information first!",
+        "tips2": "Go Bank Sign",
+        "tips3": "Please authenticate your real name first, and then proceed with this operation!",
+        "tips4": "Go Authentication",
+        "tips5": "Do you want to quit the current account?",
         "search": {
             "title": "Search BranchBank",
             "Pleaseenterbranchbankname": "Please enter branch bank name",
@@ -569,13 +670,59 @@
         },
         "capital": {
             "title": "Funds",
+            "title2": "FundsInfo",
+            "title3": "FundLists",
+            "title4": "Settlement",
+            "createtime": "createtime",
+            "operatetypename": "operatetypename",
+            "amount": "amount",
             "hisamountlogs": "Historys"
         },
         "wallet": {
             "title": "Cash In Out",
             "applys": "Applys",
             "cashin": "Cash In",
-            "cashout": "Cash Out"
+            "cashout": "Cash Out",
+            "deposit": {
+                "inamount": "InAmount",
+                "pleaseenterinamount": "Please enter in amount",
+                "credit": "Certificate",
+                "time": "Payment time: trading day ",
+                "notice": "Holidays to the notice, announcement shall prevail, non-trading days do not operate!",
+                "platformdepositbankname": "PlatformDepositBankName",
+                "platformdepositaccountno": "PlatformDepositAccountNo",
+                "platformdepositaccount": "PlatformDepositAccount",
+                "platformdepositsub-branch": "PlatformDepositSub-Branch",
+                "goldisnotwithinthetimeframe": "Gold is not within the time frame",
+                "failedtogetservertime": "Failed to get server time",
+                "paste": "Copy, go to paste ~",
+                "pastefailure": "Paste failure",
+                "submitfailure": "Failure:",
+                "whetherthedeposittransferhasbeenmadeatthebankend": "is golden on bank account transfer?"
+            },
+            "withdraw": {
+                "outamount": "OutAmount",
+                "bankname": "BankName",
+                "bankaccountno": "BankAccountNo",
+                "bankaccountname": "BankAccountName",
+                "pleaseenteroutamount": "Please enter out amount",
+                "time": "Payment time: trading day ",
+                "notice": "Holidays to the notice, announcement shall prevail, non-trading days do not operate!",
+                "theamountavailableis0": "The amount available is 0",
+                "exceedingthepayableamount": "Exceeding the payable amount",
+                "goldisnotwithinthetimeframe": "Gold is not within the time frame",
+                "failedtogetservertime": "Failed to get server time",
+                "submitsuccess": "Submit successfully. Please do not submit again. Confirm the result later",
+                "submitfailure": "Commit failure:",
+                "availableoutmoney": "Available "
+            },
+            "inoutapply": {
+                "title": "Application List",
+                "charge": "Charge",
+                "executetype": "ExecuteType",
+                "extoperateid": "ExtoperateID",
+                "updatetime": "Time"
+            }
         }
     },
     "user": {
@@ -621,8 +768,7 @@
             "getsmscode": "Get SMS Code",
             "newpwd": "New Pwd",
             "confirmpwd": "Conform Pwd",
-            "resetpwd": "Reset Pwd",
-            "pleaseenter": "Please enter"
+            "resetpwd": "Reset Pwd"
         },
         "cancel": {
             "title": "Cancel Service",
@@ -634,6 +780,25 @@
             "tips_4": "2. The account is secure",
             "tips_5": "The account is in normal use and there is no risk of theft.",
             "tips_6": "3. There is no dispute over the account number"
+        },
+        "authentication": {
+            "title": "Authentication",
+            "customername": "Customer Name",
+            "cardtype": "Card Type",
+            "cardnum": "Card Num",
+            "cardfrontphoto": "Card Front photo",
+            "cardbackphoto": "Card Back photo",
+            "halfbodyphoto": "HalfBody photo",
+            "modifyremark": "Modify Remark",
+            "authstatus": "Status",
+            "submit": "Submit Authentication",
+            "pleaseentertheusername": "Please enter the customer name",
+            "pleaseenterthecardnum": "Please enter the card num",
+            "pleaseuploadthecardbackphoto": "Please upload the card back photo",
+            "pleaseuploadthecardfrontphoto": "Please upload the card front photo",
+            "pleaseselectthecardtype": "Please select the card type",
+            "openfailure": "Account opening failed, your age does not meet the account opening requirements",
+            "opensuccess": "The real-name authentication submission request was successful"
         }
     },
     "report": {
@@ -661,6 +826,13 @@
     "notices": {
         "title": "Notice Announcement",
         "notice": "Notice", 
-        "announcement": "Announcement"
+        "announcement": "Announcement",
+        "details": "Details"
+    },
+    "news": {
+        "source": "source:",
+        "numbers": "numbers:",
+        "hotnews": "Hot News",
+        "author": "author:"
     }
 }

+ 184 - 11
public/locales/zh-CN.json

@@ -3,6 +3,7 @@
         "name": "多元世纪"
     },
     "common": {
+        "nodatas": "暂无数据",
         "more": "更多",
         "details": "明细",
         "placeholder": "请输入",
@@ -11,11 +12,18 @@
         "optional": "选填",
         "logout": "退出登录",
         "save": "保存",
-        "tips": "提示"
+        "tips": "提示",
+        "submitsuccess": "提交成功",
+        "pleaseenter": "请输入",
+        "ikonw": "我知道了",
+        "exit": "退出",
+        "tryagain": "重试",
+        "loading": "正在加载..."
     },
     "tabbar": {
         "home": "首页",
-        "mine": "我的"
+        "mine": "我的",
+        "trade": "交易"
     },
     "routes": {
         "news": "市场资讯",
@@ -110,6 +118,14 @@
         "buyhall": "买大厅",
         "sellhall": "卖大厅",
         "buysellhall": "买卖大厅",
+        "listinghall": "挂牌大厅",
+        "enableQty": "预估可订立量",
+        "deposit": "预扣保证金",
+        "avaiableMoney": "可用资金",
+        "orderbuy": "订立买入",
+        "transferbuy": "转让买入",
+        "ordersell": "订立卖出",
+        "transfersell": "转让卖出",
         "buy": "买入",
         "selll": "卖出",
         "bid1": "买一",
@@ -121,7 +137,47 @@
         "ask2": "卖二",
         "ask3": "卖三",
         "ask4": "卖四",
-        "ask5": "卖五"
+        "ask5": "卖五",
+        "ballot": {
+            "title": "认购",
+            "refprice": "预售价",
+            "starttime": "开始:",
+            "endtime": "结束:",
+            "historypresale": "发售历史",
+            "presalewin": "预售中签",
+            "issueprice": "发行价",
+            "goodsdetail": "商品详情",
+            "winningthelottery": "摇号中签",
+            "totalqty": "总量:",
+            "earnest": "预售定金",
+            "transferdepositratio": "转让定金",
+            "subscribe": "我要认购",
+            "orderQty": "认购量",
+            "maxbuyqty": "最大申购量",
+            "deposit": "预售定金",
+            "avaiablefunds": "可用资金",
+            "ordercannotbegreaterthan": "委托量不能大于",
+            "pleaseenterthesubscriptionquantity": "请输入认购量"
+        },
+        "goods": {
+            "title": "摘牌",
+            "orderprice": "价格",
+            "orderqty": "数量",
+            "username": "挂牌方",
+            "nodeal": "不能与自己成交",
+            "buyorsell": "方向",
+            "pleaseenterorderprice": "请输入价格",
+            "pleaseenterorderqty": "请输入数量",
+            "tips1": "确认要提交吗?",
+            "tips2": "*若存在价格匹配的反方向委托订单,系统将会自动撤销",
+            "tips3": "*提交成功。",
+            "tips4": "请输入摘牌量",
+            "delistingqty": "摘牌量",
+            "delistingbuyorsell": "摘牌方向",
+            "remainqty": "剩余量",
+            "listingprice": "挂牌价格",
+            "taaccount": "交易账户"
+        }
     },
     "order": {
         "title": "我的订单",
@@ -259,7 +315,7 @@
     "position": {
         "title": "我的持仓",
         "holddetail": "明细",
-        "order": {
+        "goods": {
             "title": "订单持仓",
             "subtitle": "持仓信息",
             "subtitle2": "交收信息",
@@ -280,7 +336,16 @@
             "deliveryqty": "交收数量",
             "address": "收货地址",
             "transferprice": "转让价格",
-            "qty": "转让量"
+            "qty": "转让量",
+            "holddetail": {
+                "title": "订单明细",
+                "tradetime": "交易时间",
+                "buyorsell": "类型",
+                "holderqty": "持仓量",
+                "freezeqty": "冻结量",
+                "holderprice": "持仓价格",
+                "holderamount": "持仓金额"
+            }
         },
         "spot": {
             "title": "现货持仓",
@@ -522,7 +587,8 @@
             "invoiceinfo": "发票信息",
             "addressinfo": "收货地址",
             "wechat": "微信",
-            "email": "邮箱"
+            "email": "邮箱",
+            "tips1": "请输入微信号"
         },
         "address": {
             "title": "收货地址管理",
@@ -533,7 +599,30 @@
             "receiverName": "收货人",
             "region": "收货地区",
             "modifyaddressinfo": "修改收货地址",
-            "addaddressinfo": "新增收货地址"
+            "addaddressinfo": "新增收货地址",
+            "tips1": "请输入收货人",
+            "tips2": "请输入联系电话",
+            "tips3": "请选择收货地区",
+            "tips4": "请输入详细地址",
+            "tips5": "是否删除该收货地址?"
+        },
+        "invoice": {
+            "title": "发票信息",
+            "title1": "修改发票信息",
+            "title2": "新增发票信息",
+            "default": "默认",
+            "receipttype": "发票类型",
+            "UserName": "发票抬头",
+            "TaxpayerID": "税号",
+            "ReceiptBank": "开户银行",
+            "ReceiptAccount": "银行账号",
+            "Address": "企业地址",
+            "ContactInfo": "企业电话",
+            "Email": "邮箱",
+            "tips1": "请输入发票抬头",
+            "tips2": "请输入纳税人识别号",
+            "tips3": "是否删除该发票?",
+            "addinvoice": "新增发票"
         }
     },
     "banksign": {
@@ -560,6 +649,18 @@
         "operatetype": "操作类型",
         "amount": "金额",
         "bankaccountno": "银行卡号",
+        "verificationcode": "获取验证码",
+        "sendagain": "重新发送",
+        "sendfailure": "发送失败",
+        "Pleaseenterbranchbankname": "请输入开户行支行名称",
+        "Pleaseenterbranchbankno": "请输入开户行支行号",
+        "submitsuccess1": "签约信息修改提交成功。",
+        "submitsuccess2": "签约提交成功,请稍后确认结果。",
+        "tips1": "'请先添加签约账户信息!",
+        "tips2": "去签约",
+        "tips3": "请先实名认证,再进行该操作!",
+        "tips4": "去实名",
+        "tips5": "是否退出当前账号?",
         "search": {
             "title": "查询支行",
             "Pleaseenterbranchbankname": "请输入支行名称",
@@ -569,13 +670,60 @@
         },
         "capital": {
             "title": "资金",
+            "title2": "资金信息",
+            "title3": "资金流水",
+            "title4": "结算单",
+            "createtime": "时间",
+            "operatetypename": "操作类型",
+            "amount": "金额",
             "hisamountlogs": "历史资金流水"
         },
         "wallet": {
             "title": "出入金",
             "applys": "申请记录",
             "cashin": "入金",
-            "cashout": "出金"
+            "cashout": "出金",
+            "deposit": {
+                "inamount": "入金金额",
+                "pleaseenterinamount": "请填写入金金额",
+                "credit": "凭证",
+                "time": "入金时间:交易日 ",
+                "notice": "节假日以通知、公告为准,非交易日请勿操作!",
+                "platformdepositbankname": "平台入金银行",
+                "platformdepositaccountno": "平台入金账号",
+                "platformdepositaccount": "平台入金账户",
+                "platformdepositsub-branch": "平台入金支行",
+                "goldisnotwithinthetimeframe": "入金不在时间范围内",
+                "failedtogetservertime": "获取服务器时间失败",
+                "paste": "已复制,快去粘贴吧~",
+                "pastefailure": "复制失败",
+                "submitfailure": "提交失败:",
+                "whetherthedeposittransferhasbeenmadeatthebankend": "是否已在银行端进行入金转账?"
+            },
+            "withdraw": {
+                "outamount": "出金金额",
+                "bankname": "开户银行",
+                "bankaccountno": "银行卡号",
+                "bankaccountname": "姓名",
+                "pleaseenteroutamount": "请填写出金金额",
+                "time": "出金时间:交易日 ",
+                "notice": "节假日以通知、公告为准,非交易日请勿操作!",
+                "theamountavailableis0": "可出金额为0",
+                "exceedingthepayableamount": "超过可出金额",
+                "goldisnotwithinthetimeframe": "出金不在时间范围内",
+                "failedtogetservertime": "获取服务器时间失败",
+                "submitsuccess": "提交成功,请勿重复提交,稍后确认结果",
+                "submitfailure": "提交失败:",
+                "pleaseuploadthetransfervoucher": "请上传转账凭证",
+                "availableoutmoney": "可出金额"
+            },
+            "inoutapply": {
+                "title": "申请流水",
+                "charge": "手续费",
+                "executetype": "类型",
+                "extoperateid": "流水号",
+                "updatetime": "时间"
+            }
         }
     },
     "user": {
@@ -621,8 +769,7 @@
             "getsmscode": "获取验证码",
             "newpwd": "新密码",
             "confirmpwd": "确认密码",
-            "resetpwd": "重置密码",
-            "pleaseenter": "请输入"
+            "resetpwd": "重置密码"
         },
         "cancel": {
             "title": "注销服务",
@@ -634,6 +781,25 @@
             "tips_4": "2. 账号处于安全状态",
             "tips_5": "账号处于正常使用状态,无被盗风险。",
             "tips_6": "3. 账号无任何纠纷"
+        },
+        "authentication": {
+            "title": "实名认证",
+            "customername": "姓名",
+            "cardtype": "证件类型",
+            "cardnum": "证件号码",
+            "cardfrontphoto": "证件正面照片",
+            "cardbackphoto": "证件反面照片",
+            "halfbodyphoto": "手持证件照",
+            "modifyremark": "审核备注",
+            "authstatus": "实名状态",
+            "submit": "提交实名认证",
+            "pleaseentertheusername": "请输入用户姓名",
+            "pleaseenterthecardnum": "请输入证件号码",
+            "pleaseuploadthecardbackphoto": "请上传证件背面照片",
+            "pleaseuploadthecardfrontphoto": "请上传证件正面照片",
+            "pleaseselectthecardtype": "请选择证件类型",
+            "openfailure": "开户失败,您的年龄不符合开户要求",
+            "opensuccess": "实名认证提交请求成功"
         }
     },
     "report": {
@@ -661,6 +827,13 @@
     "notices": {
         "title": "通知公告",
         "notice": "通知", 
-        "announcement": "公告"
+        "announcement": "公告", 
+        "details": "公告详情"
+    },
+    "news": {
+        "source": "来源:",
+        "numbers": "阅览数:",
+        "hotnews": "热门资讯",
+        "author": "作者:"
     }
 }

+ 9 - 9
src/packages/mobile/views/account/authresult/Index.vue

@@ -1,26 +1,26 @@
 <template>
     <app-view class="g-form">
         <template #header>
-            <app-navbar title="实名认证" />
+            <app-navbar :title="$t('user.authentication.title')" />
         </template>
         <div class="g-form__container" v-if="userInfo">
             <CellGroup inset>
-                <Cell title="姓名" :value="userInfo.customername" />
-                <Cell title="证件类型" :value="getCertificateTypeCodeName(userInfo.cardtypeid)" />
-                <Cell title="证件号码" :value="userInfo.cardnum" />
-                <Cell title="证件正面照片">
+                <Cell :title="$t('user.authentication.customername')" :value="userInfo.customername" />
+                <Cell :title="$t('user.authentication.cardtype')" :value="getCertificateTypeCodeName(userInfo.cardtypeid)" />
+                <Cell :title="$t('user.authentication.cardnum')" :value="userInfo.cardnum" />
+                <Cell :title="$t('user.authentication.cardfrontphoto')">
                     <Image fit="contain" :src="getFileUrl(userInfo.cardfrontphotourl)" width="100" height="100" />
                 </Cell>
-                <Cell title="证件反面照片" v-if="showCardBackPhoto === '1'">
+                <Cell :title="$t('user.authentication.cardbackphoto')" v-if="showCardBackPhoto === '1'">
                     <Image fit="contain" :src="getFileUrl(userInfo.cardbackphotourl)" width="100" height="100" />
                 </Cell>
-                <Cell title="手持证件照" v-if="showHalfBodyPhoto === '1'">
+                <Cell :title="$t('user.authentication.halfbodyphoto')" v-if="showHalfBodyPhoto === '1'">
                     <Image fit="contain" :src="getFileUrl(userInfo.halfbodyphotourl)" width="100" height="100" />
                 </Cell>
-                <Cell title="实名状态" :value="getAuthStatusName(2)" />
+                <Cell :title="$t('user.authentication.authstatus')" :value="getAuthStatusName(2)" />
             </CellGroup>
         </div>
-        <Empty description="暂无数据" v-else />
+        <Empty :description="$t('common.nodatas')" v-else />
     </app-view>
 </template>
 

+ 19 - 17
src/packages/mobile/views/account/certification/Index.vue

@@ -1,42 +1,42 @@
 <template>
     <app-view class="g-form account-certification">
         <template #header>
-            <app-navbar title="实名认证" />
+            <app-navbar :title="$t('user.authentication.title')" />
         </template>
         <Form ref="formRef" class="g-form__container" @submit="onSubmit">
             <CellGroup inset>
-                <Field v-model="formData.username" name="username" label="姓名" placeholder="请输入用户姓名"
+                <Field v-model="formData.username" name="username" :label="$t('user.authentication.customername')" :placeholder="$t('user.authentication.pleaseentertheusername')"
                     :rules="formRules.username" />
-                <Field name="cardtype" label="证件类型" :rules="formRules.cardtype" is-link>
+                <Field name="cardtype" :label="$t('user.authentication.cardtype')" :rules="formRules.cardtype" is-link>
                     <template #input>
-                        <app-select v-model="formData.cardtype" placeholder="请选择证件类型"
+                        <app-select v-model="formData.cardtype" :placeholder="$t('user.authentication.pleaseselectthecardtype')"
                             :options="getCerTypePersonList()" />
                     </template>
                 </Field>
-                <Field v-model="formData.cardnum" name="cardnum" label="证件号码" placeholder="请输入证件号码"
-                    :rules="formRules.cardnum" />
-                <Field name="cardfrontphotourl" label="证件正面照片" :rules="formRules.cardfrontphotourl">
+                <Field v-model="formData.cardnum" name="cardnum" :label="$t('user.authentication.cardnum')" 
+                   :placeholder="$t('user.authentication.pleaseenterthecardnum')" :rules="formRules.cardnum" />
+                <Field name="cardfrontphotourl" :label="$t('user.authentication.cardfrontphoto')" :rules="formRules.cardfrontphotourl">
                     <template #input>
                         <app-uploader @success="b_afterRead" />
                     </template>
                 </Field>
-                <Field name="cardbackphotourl" v-if="showCardBackPhoto === '1'" label="证件反面照片" :rules="formRules.cardbackphotourl">
+                <Field name="cardbackphotourl" v-if="showCardBackPhoto === '1'" :label="$t('user.authentication.cardbackphoto')" :rules="formRules.cardbackphotourl">
                     <template #input>
                         <app-uploader @success="f_afterRead" />
                     </template>
                 </Field>
-                <Field name="halfbodyphotourl" v-if="showHalfBodyPhoto === '1'" label="手持证件照" :rules="formRules.halfbodyphotourl">
+                <Field name="halfbodyphotourl" v-if="showHalfBodyPhoto === '1'" :label="$t('user.authentication.halfbodyphoto')" :rules="formRules.halfbodyphotourl">
                     <template #input>
                         <app-uploader @success="h_afterRead" />
                     </template>
                 </Field>
-                <Field v-if="modifyremark != ''" v-model="modifyremark" readonly name="modifyremark" label="审核备注" />
+                <Field v-if="modifyremark != ''" v-model="modifyremark" readonly name="modifyremark" :label="$t('user.authentication.modifyremark')" />
             </CellGroup>
         </Form>
         <img src="../../../assets/images/certification.png" />
         <template #footer>
             <div class="g-form__footer inset">
-                <Button type="danger" @click="formRef?.submit" round block>提交实名认证</Button>
+                <Button type="danger" @click="formRef?.submit" round block>{{ $t('user.authentication.submit') }}</Button>
             </div>
         </template>
     </app-view>
@@ -55,10 +55,12 @@ import { useRequest } from '@/hooks/request'
 import AppUploader from '@mobile/components/base/uploader/index.vue'
 import AppSelect from '@mobile/components/base/select/index.vue'
 import { getWskhOpenAccountConfigs } from '@/services/api/account'
+import { i18n } from '@/stores'
 
 const formRef = shallowRef<FormInstance>()
 const { formData, formSubmit, modifyremark } = addAuthReq()
 const { router } = useNavigation()
+const { global: { t }} = i18n
 
 const showHalfBodyPhoto = shallowRef('0')
 const showCardBackPhoto = shallowRef('0')
@@ -91,18 +93,18 @@ const h_afterRead = (filePath: string) => {
 const formRules: { [key in keyof Model.AddAuthReq]?: FieldRule[] } = {
     username: [{
         required: true,
-        message: '请输入用户姓名',
+        message: t("user.authentication.pleaseentertheusername"),
     }],
     cardnum: [{
         required: true,
-        message: '请输入证件号码',
+        message: t("user.authentication.pleaseenterthecardnum"),
         validator: (val) => {
             if (formData.cardtype != 0) {
                 return true
             } else {
                 if (validateRules.cardno.validate(val)) {
                     if (getIdCardAge(val)) {
-                        return '开户失败,您的年龄不符合开户要求'
+                        return t("user.authentication.openfailure")
                     }
                     return true
                 }
@@ -112,11 +114,11 @@ const formRules: { [key in keyof Model.AddAuthReq]?: FieldRule[] } = {
     }],
     cardbackphotourl: [{
         required: true,
-        message: '请上传证件背面照片',
+        message: t("user.authentication.pleaseuploadthecardbackphoto"),
     }],
     cardfrontphotourl: [{
         required: true,
-        message: '请上传证件正面照片',
+        message: t("user.authentication.pleaseuploadthecardfrontphoto"),
     }],
 }
 
@@ -128,7 +130,7 @@ const onSubmit = () => {
                 showFailToast(res.message)
             } else {
                 hideLoading()
-                dialog('实名认证提交请求成功').then(() => {
+                dialog(t("user.authentication.opensuccess")).then(() => {
                     router.back()
                 })
             }

+ 10 - 10
src/packages/mobile/views/ballot/detail/Index.vue

@@ -1,37 +1,37 @@
 <template>
     <app-view class="g-detail">
         <template #header>
-            <app-navbar title="商品详情" />
+            <app-navbar :title="$t('quote.ballot.goodsdetail')" />
         </template>
         <Banner :data-list="detailBanners" />
         <div class="g-detail__buy">
             <div class="topic">
                 <div class="topic-left">
-                    <span class="price-text">发行价</span>
+                    <span class="price-text">{{ $t('quote.ballot.issueprice') }}</span>
                     <span class="price-unit">¥</span>
                     <span class="price-integer">{{ detail.refprice?.toFixed(2) }}</span>
                 </div>
                 <div class="topic-right">
-                    <span>开始:{{ detail.starttime }}</span>
-                    <span>结束:{{ detail.endtime }}</span>
+                    <span>{{ $t('quote.ballot.starttime') }}{{ detail.starttime }}</span>
+                    <span>{{ $t('quote.ballot.endtime') }}{{ detail.endtime }}</span>
                 </div>
             </div>
             <div class="title">
-                <Tag type="danger" round>摇号中签</Tag>
+                <Tag type="danger" round>{{ $t('quote.ballot.winningthelottery') }}</Tag>
                 <span>{{ detail.sellname }}</span>
                 <span>{{ detail.goodscode }}/{{ detail.goodsname }}</span>
             </div>
             <div class="qty">
-                <span>总量:{{ detail.presaleqty }}</span>
+                <span>{{ $t('quote.ballot.totalqty') }}{{ detail.presaleqty }}</span>
             </div>
             <div class="info">
                 <ul>
                     <li>
-                        <span>预售定金</span>
+                        <span>{{ $t('quote.ballot.earnest') }}</span>
                         <span>{{ earnest }}</span>
                     </li>
                     <li>
-                        <span>转让定金</span>
+                        <span>{{ $t('quote.ballot.transferdepositratio') }}</span>
                         <span>{{ parsePercent(detail.transferdepositratio) }}</span>
                     </li>
                 </ul>
@@ -45,12 +45,12 @@
         <template #footer>
             <div class="g-detail__footer" v-if="detail.presalestatus === 2">
                 <div class="price">
-                    <span class="price-text">发行价:</span>
+                    <span class="price-text">{{ $t('quote.ballot.issueprice') }}:</span>
                     <span class="price-unit">¥</span>
                     <span class="price-integer">{{ detail.refprice?.toFixed(2) }}</span>
                 </div>
                 <div class="submit">
-                    <span class="submit-button danger" @click="openComponent('delisting')">我要认购</span>
+                    <span class="submit-button danger" @click="openComponent('delisting')">{{ $t('quote.ballot.subscribe') }}</span>
                 </div>
             </div>
             <component ref="componentRef" :is="componentMap.get(componentId)" v-bind="{ detail }" @closed="closeComponent"

+ 12 - 10
src/packages/mobile/views/ballot/detail/components/delisting/index.vue

@@ -1,35 +1,35 @@
 <template>
-    <app-popup class="supply-demand-listing" title="认购" v-model:show="showModal" :refresh="refresh">
+    <app-popup class="supply-demand-listing" :title="$t('quote.ballot.title')" v-model:show="showModal" :refresh="refresh">
         <Form class="supply-demand-listing__form" ref="formRef" @submit="onSubmit">
-            <Field label="发行价">
+            <Field :label="$t('quote.ballot.refprice')">
                 <template #input>
                     <span>{{ detail.refprice }}</span>
                 </template>
             </Field>
-            <Field name="OrderQty" :rules="formRules.OrderQty" label="认购量">
+            <Field name="OrderQty" :rules="formRules.OrderQty" :label="$t('quote.ballot.refprice')">
                 <template #input>
                     <Stepper v-model="formData.OrderQty" theme="round" :max="Math.min(detail.presaleqty, detail.maxbuyqty)"
                         button-size="22" :auto-fixed="false" integer />
                 </template>
             </Field>
-            <Field label="最大申购量">
+            <Field :label="$t('quote.ballot.maxbuyqty')">
                 <template #input>
                     <span>{{ detail.maxbuyqty }}</span>
                 </template>
             </Field>
-            <Field label="预售定金">
+            <Field :label="$t('quote.ballot.deposit')">
                 <template #input>
                     <span>{{ deposit }}</span>
                 </template>
             </Field>
-            <Field label="可用资金">
+            <Field :label="$t('quote.ballot.avaiablefunds')">
                 <template #input>
                     <span>{{ accountStore.currentAccount.avaiableMoney?.toFixed(2) }}</span>
                 </template>
             </Field>
         </Form>
         <template #footer>
-            <Button type="danger" block round @click="formRef?.submit">提交</Button>
+            <Button type="danger" block round @click="formRef?.submit">{{ $t('operation.submit') }}</Button>
         </template>
     </app-popup>
 </template>
@@ -44,6 +44,7 @@ import { useOrder } from '@/business/trade'
 import AppPopup from '@mobile/components/base/popup/index.vue'
 import { BuyOrSell } from '@/constants/order'
 import { EPriceMode, EValidType } from '@/constants/client'
+import { useI18n } from 'vue-i18n'
 
 const props = defineProps({
     detail: {
@@ -52,6 +53,7 @@ const props = defineProps({
     },
 })
 
+const { t } = useI18n()
 const { formData, formSubmit } = useOrder()
 const accountStore = useAccountStore()
 const formRef = shallowRef<FormInstance>()
@@ -67,9 +69,9 @@ const formRules: { [key: string]: FieldRule[] } = {
                 if (val <= maxbuyqty) {
                     return true
                 }
-                return '委托量不能大于' + maxbuyqty
+                return t('quote.ballot.ordercannotbegreaterthan') + maxbuyqty
             }
-            return '请输入认购量'
+            return t('quote.ballot.pleaseenterthesubscriptionquantity')
         }
     }],
 }
@@ -108,7 +110,7 @@ const onSubmit = () => {
     fullloading((hideLoading) => {
         formSubmit().then(() => {
             hideLoading()
-            dialog('提交成功').then(() => closed(true))
+            dialog(t('common.submitsuccess')).then(() => closed(true))
         }).catch((err) => {
             hideLoading(err, 'fail')
         })

+ 12 - 10
src/packages/mobile/views/ballot/list/Index.vue

@@ -18,7 +18,7 @@
                         <div class="goods-info">
                             <div class="goods-info__title">{{ item.goodsname }}</div>
                             <div class="goods-info__price">
-                                <Tag type="danger" plain>预售价</Tag>
+                                <Tag type="danger" plain>{{ $t('quote.ballot.refprice') }}</Tag>
                                 <span class="unit">¥</span>
                                 <span class="integer">{{ item.refprice }}</span>
                             </div>
@@ -36,7 +36,7 @@
                         <div class="goods-info">
                             <div class="goods-info__title">{{ item.goodsname }}</div>
                             <div class="goods-info__price">
-                                <Tag type="danger" plain>预售价</Tag>
+                                <Tag type="danger" plain>{{ $t('quote.ballot.refprice') }}</Tag>
                                 <span class="unit">¥</span>
                                 <span class="integer">{{ item.refprice }}</span>
                             </div>
@@ -52,29 +52,29 @@
                     <div class="info">
                         <div class="title"><span>{{ item.goodscode }}/{{ item.goodsname }}</span></div>
                         <div class="desc">
-                            <span>开始:{{ item.starttime }}</span>
-                            <span>结束:{{ item.endtime }}</span>
+                            <span>{{ $t('quote.ballot.starttime') }}{{ item.starttime }}</span>
+                            <span>{{ $t('quote.ballot.endtime') }}{{ item.endtime }}</span>
                         </div>
                         <div class="price">
-                            <Tag type="danger" plain>预售价</Tag>
+                            <Tag type="danger" plain>{{ $t('quote.ballot.refprice') }}</Tag>
                             <span class="unit">¥</span>
                             <span class="integer">{{ item.refprice }}</span>
                         </div>
                     </div>
                 </li>
             </ul>
-            <Divider>发售历史</Divider>
+            <Divider>{{ $t('quote.ballot.historypresale') }}</Divider>
             <ul class="g-goods-list">
                 <li class="list-item" v-for="(item, index) in endList" :key="index" @click="toDetail(item)">
                     <div class="img mask"><img :src="getFirstImage(item.attachmenturl)" /></div>
                     <div class="info">
                         <div class="title"><span>{{ item.goodscode }}/{{ item.goodsname }}</span></div>
                         <div class="desc">
-                            <span>开始:{{ item.starttime }}</span>
-                            <span>结束:{{ item.endtime }}</span>
+                            <span>{{ $t('quote.ballot.starttime') }}{{ item.starttime }}</span>
+                            <span>{{ $t('quote.ballot.endtime') }}{{ item.endtime }}</span>
                         </div>
                         <div class="price">
-                            <Tag type="danger" plain>预售价</Tag>
+                            <Tag type="danger" plain>{{ $t('quote.ballot.refprice') }}</Tag>
                             <span class="unit">¥</span>
                             <span class="integer">{{ item.refprice }}</span>
                         </div>
@@ -94,6 +94,7 @@ import { useRequest } from '@/hooks/request'
 import { queryPresaleAuctions } from '@/services/api/presale'
 import Banner from '@mobile/components/base/banner/index.vue'
 import Waterfall from '@mobile/components/base/waterfall/index.vue'
+import { i18n } from '@/stores'
 
 const props = defineProps({
     showBackButton: {
@@ -105,12 +106,13 @@ const props = defineProps({
     }
 })
 
+const { global: { t }} = i18n
 const isWaterfall = shallowRef(false)
 const { router, getQueryString, setGlobalUrlParams } = useNavigation()
 const bannerList = shallowRef<string[]>([])
 
 const title = getQueryString('title')
-const titleName = computed(() => title ? decodeURIComponent(title) : props.marketSection?.displayname ?? '预售中签')
+const titleName = computed(() => title ? decodeURIComponent(title) : props.marketSection?.displayname ?? t('quote.ballot.presalewin'))
 
 const { dataList } = useRequest(queryPresaleAuctions, {
     params: {

+ 6 - 3
src/packages/mobile/views/bank/capital/index.vue

@@ -25,6 +25,9 @@
 import { shallowRef, computed, defineAsyncComponent } from 'vue'
 import { Tab, Tabs } from 'vant'
 import { useComponent } from '@/hooks/component'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
 
 const props = defineProps({
     tabName: {
@@ -36,18 +39,18 @@ const props = defineProps({
 const components = [
     {
         name: 'information',
-        title: '资金信息',
+        title: t('banksign.capital.title2'),
         component: defineAsyncComponent(() => import('./information/index.vue')),
     },
     {
         name: 'statement',
-        title: '资金流水',
+        title: t('banksign.capital.title3'),
         component: defineAsyncComponent(() => import('./statement/index.vue')),
         history: defineAsyncComponent(() => import('./statement/history/index.vue')),
     },
     {
         name: 'report',
-        title: '结算单',
+        title: t('banksign.capital.title4'),
         component: defineAsyncComponent(() => import('@mobile/views/report/components/index.vue')),
     }
 ]

+ 5 - 3
src/packages/mobile/views/bank/capital/statement/history/index.vue

@@ -39,7 +39,9 @@ import AppList from '@mobile/components/base/list/index.vue'
 import { getOperateTypeSearchList } from '@/constants/order'
 import AppSelect from '@mobile/components/base/select/index.vue'
 import AppCalendar from '@mobile/components/base/calendar/index.vue'
+import { i18n } from '@/stores'
 
+const { global: { t } } = i18n
 const showModal = shallowRef(true)
 const dataList = shallowRef<Model.HisAmountLogRsp[]>([])
 const error = shallowRef(false)
@@ -65,9 +67,9 @@ const operateTypeSearchList = [{
 }].concat(getOperateTypeSearchList())
 
 const columns: Model.TableColumn[] = [
-    { field: 'createtime', label: '时间' },
-    { field: 'operatetypename', label: '操作类型' },
-    { field: 'amount', label: '金额' },
+{ field: 'createtime', label: t('banksign.capital.createtime') },
+    { field: 'operatetypename', label: t('banksign.capital.operatetypename') },
+    { field: 'amount', label: t('banksign.capital.amount') },
 ]
 
 const { loading, pageIndex, pageCount, run } = useRequest(queryHisAmountLog, {

+ 5 - 3
src/packages/mobile/views/bank/capital/statement/index.vue

@@ -27,7 +27,9 @@ import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 import AppList from '@mobile/components/base/list/index.vue'
 import { getOperateTypeSearchList } from '@/constants/order'
 import AppSelect from '@mobile/components/base/select/index.vue'
+import { i18n } from '@/stores'
 
+const { global: { t } } = i18n
 const dataList = shallowRef<Model.AmountLogRsp[]>([])
 const error = shallowRef(false)
 /// 资金类型
@@ -41,9 +43,9 @@ const operateTypeSearchList = [{
     }].concat(getOperateTypeSearchList())
 
 const columns: Model.TableColumn[] = [
-    { field: 'createtime', label: '时间' },
-    { field: 'operatetypename', label: '操作类型' },
-    { field: 'amount', label: '金额' },
+    { field: 'createtime', label: t('banksign.capital.createtime') },
+    { field: 'operatetypename', label: t('banksign.capital.operatetypename') },
+    { field: 'amount', label: t('banksign.capital.amount') },
 ]
 
 const { loading, pageIndex, pageCount, run } = useRequest(queryAmountLog, {

+ 14 - 13
src/packages/mobile/views/bank/sign/components/edit/Index.vue

@@ -24,8 +24,8 @@
                                 name="vcode" :label="item.fieldname" :placeholder="$t('common.required')" autocomplete="off">
                                 <template #button>
                                     <Button size="small" type="danger" :disabled="isCountdown" @click="sendVerifyCode">
-                                        <span v-if="isCountdown">重新发送({{ currentTime.seconds }})</span>
-                                        <span v-else>获取验证码</span>
+                                        <span v-if="isCountdown">{{ $t('banksign.sendagain') }}({{ currentTime.seconds }})</span>
+                                        <span v-else>{{ $t('banksign.verificationcode') }}</span>
                                     </Button>
                                 </template>
                             </Field>
@@ -33,18 +33,18 @@
                         <template v-else-if="(item.fieldcode === 'bank_branch_name')">
                             <Field v-if="showExtendInfo(item)" name="OpenBankName" :label="item.fieldname"
                                 v-model="item.value" maxlength="100" right-icon="search"
-                                :placeholder="`请输入${item.fieldname}`" :rules="formRules.OpenBankName"
+                                :placeholder="$t('common.pleaseenter')+`${item.fieldname}`" :rules="formRules.OpenBankName"
                                 @click-right-icon="showSearch = true" />
                         </template>
                         <template v-else-if="(item.fieldcode === '100')">
                             <Field v-if="showExtendInfo(item)" type="number" name="OpenBankNo" :label="item.fieldname"
-                                v-model="item.value" maxlength="50" :placeholder="`请输入${item.fieldname}`"
+                                v-model="item.value" maxlength="50" :placeholder="$t('common.pleaseenter')+`${item.fieldname}`"
                                 :rules="formRules.OpenBankNo" />
                         </template>
                         <template v-else>
                             <Field v-if="showExtendInfo(item)" :name="item.fieldcode" :label="item.fieldname"
                                 :readonly="item.fieldcode === 'legal_name' && legalpersonname != ''"
-                                v-model="item.value" maxlength="50" :placeholder="`请输入${item.fieldname}`" />
+                                v-model="item.value" maxlength="50" :placeholder="$t('common.pleaseenter')+`${item.fieldname}`" />
                         </template>
                     </template>
                 </CellGroup>
@@ -67,7 +67,7 @@ import { fullloading, dialog } from '@/utils/vant'
 import { useDoBankSign, useDoCusBankExtendConfigs, useT2bSMSVerificationCode } from '@/business/bank'
 import { validateRules } from '@/constants/regex'
 import { useCountDown } from '@vant/use'
-import { useUserStore } from '@/stores'
+import { useUserStore, i18n } from '@/stores'
 import AppModal from '@/components/base/modal/index.vue'
 import AppSelect from '@mobile/components/base/select/index.vue'
 
@@ -84,6 +84,7 @@ const userStore = useUserStore()
 const { smsVerificationCode } = useT2bSMSVerificationCode()
 const { legalpersonname, mobile2, bankaccount, userinfotype } = userStore.userInfo
 
+const { global: { t } } = i18n
 /// 短信验证码交易中心信息
 const CenterErrMsg = shallowRef('')
 // 倒计时函数
@@ -122,7 +123,7 @@ const sendVerifyCode = () => {
             isCountdown.value = true
             countdown.start()
         }).catch(() => {
-            showFailToast('发送失败')
+            showFailToast(t('banksign.sendfailure'))
         })
     })
 }
@@ -156,15 +157,15 @@ const formRules: { [key in keyof Proto.t2bBankSignReq]?: FieldRule[] } = {
     }],
     BankAccountNo: [{
         required: true,
-        message: '请输入银行卡账号'
+        message: t('banksign.Pleaseenterbankaccountno')
     }],
     AccountName: [{
         required: true,
-        message: '请输入银行卡账户名',
+        message: t('banksign.Pleaseenterbankaccountname')
     }],
     MobilePhone: [{
         required: true,
-        message: '请输入手机号码',
+        message: t('banksign.Pleaseenteryourmobilephonenumber'),
         validator: (val) => {
             if (validateRules.phone.validate(val)) {
                 return true
@@ -174,11 +175,11 @@ const formRules: { [key in keyof Proto.t2bBankSignReq]?: FieldRule[] } = {
     }],
     OpenBankName: [{
         required: true,
-        message: '请输入开户行支行名称',
+        message: t('banksign.Pleaseenterbranchbankname'),
     }],
     OpenBankNo: [{
         required: true,
-        message: '请输入开户行支行号',
+        message: t('banksign.Pleaseenterbranchbankno'),
     }]
 }
 
@@ -210,7 +211,7 @@ const formSubmit = () => {
 
         onSubmit().then(() => {
             hideLoading()
-            dialog(props.isedit ? '签约信息修改提交成功。' : '签约提交成功,请稍后确认结果。').then(() => {
+            dialog(props.isedit ? t('banksign.submitsuccess1') : t('banksign.submitsuccess2')).then(() => {
                 closed(true)
             })
         }).catch((err) => {

+ 20 - 19
src/packages/mobile/views/bank/wallet/components/deposit/Index.vue

@@ -2,9 +2,9 @@
     <app-view class="g-form bank-wallet-deposit">
         <Form ref="formRef" class="g-form__container" @submit="doDepositWarning">
             <CellGroup inset v-if="cusBank?.caninamount === 1">
-                <Field type="number" v-model="formData.Amount" label="入金金额" placeholder="请填写入金金额"
+                <Field type="number" v-model="formData.Amount" :label="$t('banksign.wallet.deposit.inamount')" :placeholder="$t('banksign.wallet.deposit.pleaseenterinamount')"
                     :rules="formRules.Amount" />
-                <Field label="凭证" :rules="formRules.filePath">
+                <Field :label="$t('banksign.wallet.deposit.credit')" :rules="formRules.filePath">
                     <template #input>
                         <app-uploader @success="onUploadSuccess" />
                     </template>
@@ -12,28 +12,28 @@
                 <template v-for="(item, index) in configs" :key="index">
                     <Field v-if="item.usabletype === 1 || item.usabletype === userStore.userInfo?.userinfotype"
                         :name="item.fieldcode" :label="item.fieldname" v-model="item.value"
-                        :placeholder="`请输入${item.fieldname}`" />
+                        :placeholder="$t('common.pleaseenter')+`${item.fieldname}`" />
                 </template>
             </CellGroup>
             <div class="tips_time">
-                <span class="tips">入金时间:交易日 {{ startTime }} - {{ endTime }}</span>
-                <span class="tips"><br>节假日以通知、公告为准,非交易日请勿操作!</span>
+                <span class="tips">{{ $t('banksign.wallet.deposit.time') }} {{ startTime }} - {{ endTime }}</span>
+                <span class="tips"><br>{{ $t('banksign.wallet.deposit.notice') }}</span>
             </div>
             <div class="tips_bank">
                 <div class="tips_bank_row" v-if="msg_320">
-                    <span class="tips_bank_row__label">平台入金银行</span>
+                    <span class="tips_bank_row__label">{{ $t('banksign.wallet.deposit.platformdepositbankname') }}</span>
                     <span class="msg_tips" :data-clipboard-text="msg_320" v-copy="onCopy">{{ msg_320 }}</span>
                 </div>
                 <div class="tips_bank_row" v-if="msg_321">
-                    <span class="tips_bank_row__label">平台入金账号</span>
+                    <span class="tips_bank_row__label">{{ $t('banksign.wallet.deposit.platformdepositaccountno') }}</span>
                     <span class="msg_tips" :data-clipboard-text="msg_321" v-copy="onCopy">{{ msg_321 }}</span>
                 </div>
                 <div class="tips_bank_row" v-if="msg_322">
-                    <span class="tips_bank_row__label">平台入金账户</span>
+                    <span class="tips_bank_row__label">{{ $t('banksign.wallet.deposit.platformdepositaccount') }}</span>
                     <span class="msg_tips" :data-clipboard-text="msg_322" v-copy="onCopy">{{ msg_322 }}</span>
                 </div>
                 <div class="tips_bank_row" v-if="msg_323">
-                    <span class="tips_bank_row__label">平台入金支行</span>
+                    <span class="tips_bank_row__label">{{ $t('banksign.wallet.deposit.platformdepositsub-branch') }}</span>
                     <span class="msg_tips" :data-clipboard-text="msg_323" v-copy="onCopy">{{ msg_323 }}</span>
                 </div>
             </div>
@@ -60,7 +60,7 @@ import { fullloading, dialog } from '@/utils/vant'
 import { useNavigation } from '@mobile/router/navigation'
 import { useDoDeposit, useDoCusBankExtendConfigs } from '@/business/bank'
 import { getServerTime } from '@/services/api/common'
-import { useUserStore } from '@/stores'
+import { useUserStore, i18n } from '@/stores'
 import AppUploader from '@mobile/components/base/uploader/index.vue'
 import moment from 'moment'
 
@@ -71,6 +71,7 @@ const { getSystemParamValue } = useUserStore()
 const { configs, cusBank, startTime, endTime } = useDoCusBankExtendConfigs(2)
 const certificate_photo_url = ref('')
 const userStore = useUserStore()
+const { global: { t }} = i18n
 
 const msg_320 = getSystemParamValue('320')
 const msg_321 = getSystemParamValue('321')
@@ -82,10 +83,10 @@ const msg_324 = getSystemParamValue('324')
 const formRules: { [key: string]: FieldRule[] } = {
     Amount: [{
         required: true,
-        message: '请填写入金金额',
+        message: t('banksign.wallet.deposit.pleaseenterinamount'),
     }],
     filePath: [{
-        message: '请上传转账凭证',
+        message: t('banksign.wallet.deposit.pleaseuploadthetransfervoucher'),
         validator: () => {
             /// 是否非必填
             const ismandatory = Number(getSystemParamValue('316'))
@@ -106,7 +107,7 @@ const doDepositWarning = () => {
             const s = moment(startTime.value, 'HH:mm')
             const e = moment(endTime.value, 'HH:mm')
             if (n.isSameOrAfter(s) && n.isBefore(e)) {
-                dialog({ message: '是否已在银行端进行入金转账?', showCancelButton: true, confirmButtonText: '确认', cancelButtonText: '取消', }).then(() => {
+                dialog({ message: t('banksign.wallet.deposit.whetherthedeposittransferhasbeenmadeatthebankend'), showCancelButton: true, confirmButtonText: t('operation.confirm'), cancelButtonText: t('operation.cancel'), }).then(() => {
                     /// 提交
                     formSubmit()
                 }).catch(() => {
@@ -115,13 +116,13 @@ const doDepositWarning = () => {
                 })
             } else {
                 dialog({
-                    title: '提示',
-                    message: '入金不在时间范围内',
-                    confirmButtonText: '我知道了'
+                    title: t('common.tips'),
+                    message: t('banksign.wallet.deposit.goldisnotwithinthetimeframe'),
+                    confirmButtonText: t('common.ikonw')
                 })
             }
         }).catch(() => {
-            hideLoading('获取服务器时间失败', 'fail')
+            hideLoading(t('banksign.wallet.deposit.failedtogetservertime'), 'fail')
         }).finally(() => {
             hideLoading()
         })
@@ -130,9 +131,9 @@ const doDepositWarning = () => {
 
 const onCopy = (status: boolean) => {
     if (status) {
-        showToast({ message: '已复制,快去粘贴吧~' })
+        showToast({ message: t('banksign.wallet.deposit.paste') })
     } else {
-        showFailToast('复制失败')
+        showFailToast(t('banksign.wallet.deposit.pastefailure'))
     }
 }
 

+ 5 - 5
src/packages/mobile/views/bank/wallet/components/inoutapply/Index.vue

@@ -3,7 +3,7 @@
     <app-modal direction="right-top" height="100%" width="100%" v-model:show="showModal" :refresh="refresh">
         <app-view class="g-form">
             <template #header>
-                <app-navbar title="申请流水" @back="closed" />
+                <app-navbar :title="$t('banksign.wallet.inoutapply.title')" @back="closed" />
             </template>
             <app-pull-refresh ref="pullRefreshRef" v-model:loading="loading" v-model:error="error"
                 v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
@@ -36,19 +36,19 @@
                                     <span>{{ handleNoneValue(item.bankaccountno) }}</span>
                                 </li> -->
                                 <li>
-                                    <span>手续费</span>
+                                    <span>{{ $t('banksign.wallet.inoutapply.charge') }}</span>
                                     <span>{{ formatDecimal(item.charge) }}</span>
                                 </li>
                                 <li>
-                                    <span>类型</span>
+                                    <span>{{ $t('banksign.wallet.inoutapply.executetype') }}</span>
                                     <span>{{ getInOutExecuteTypeName(item.executetype) }}</span>
                                 </li>
                                 <li>
-                                    <span>流水号</span>
+                                    <span>{{ $t('banksign.wallet.inoutapply.extoperateid') }}</span>
                                     <span>{{ handleNoneValue(item.extoperateid) }}</span>
                                 </li>
                                 <li>
-                                    <span>时间</span>
+                                    <span>{{ $t('banksign.wallet.inoutapply.updatetime') }}</span>
                                     <span>{{ formatDate(item.updatetime, 'MM/DD HH:mm:ss') }}</span>
                                 </li>
                             </ul>

+ 20 - 19
src/packages/mobile/views/bank/wallet/components/withdraw/Index.vue

@@ -2,24 +2,24 @@
     <app-view class="g-form bank-wallet-withdraw">
         <Form ref="formRef" class="g-form__container" @submit="doWithDrawWarning">
             <CellGroup inset v-if="cusBank?.canoutamount === 1">
-                <Field class="form-field" type="number" label="出金金额" v-model="formData.Amount"
+                <Field class="form-field" type="number" :label="$t('banksign.wallet.withdraw.outamount')" v-model="formData.Amount"
                     :rules="formRules.Amount">
                     <template #input>
-                        <input v-model="formData.Amount" placeholder="请填写出金金额" />
-                        <span class="form-field__tips">可出金额:{{ fund.AvailableOutMoney }}</span>
+                        <input v-model="formData.Amount" :placeholder="$t('banksign.wallet.withdraw.pleaseenteroutamount')" />
+                        <span class="form-field__tips">{{ $t('banksign.wallet.withdraw.availableoutmoney') }}{{ fund.AvailableOutMoney }}</span>
                     </template>
                 </Field>
-                <Field label="开户银行">
+                <Field :label="$t('banksign.wallet.withdraw.bankname')">
                     <template #input>
                         {{ sign.bankname }}
                     </template>
                 </Field>
-                <Field label="银行卡号">
+                <Field :label="$t('banksign.wallet.withdraw.bankaccountno')">
                     <template #input>
                         {{ sign.bankaccountno }}
                     </template>
                 </Field>
-                <Field label="姓名">
+                <Field :label="$t('banksign.wallet.withdraw.bankaccountname')">
                     <template #input>
                         {{ sign.bankaccountname }}
                     </template>
@@ -27,15 +27,15 @@
                 <template v-for="(item, index) in configs" :key="index">
                     <Field v-if="item.usabletype === 1 || item.usabletype === userStore.userInfo?.userinfotype"
                         :name="item.fieldcode" :label="item.fieldname" v-model="item.value"
-                        :placeholder="`请输入${item.fieldname}`" />
+                        :placeholder="$t('common.pleaseenter')+`${item.fieldname}`" />
                 </template>
             </CellGroup>
             <div class="tips_time">
-                <span class="msg_tips">出金时间:交易日 {{ startTime }} - {{ endTime }}</span>
-                <span class="msg_tips"><br>节假日以通知、公告为准,非交易日请勿操作!</span>
+                <span class="msg_tips">{{ $t('banksign.wallet.withdraw.time') }} {{ startTime }} - {{ endTime }}</span>
+                <span class="msg_tips"><br>{{ $t('banksign.wallet.withdraw.notice') }}</span>
             </div>
             <CellGroup inset v-if="msg_317">
-                <Cell title="提示">
+                <Cell :title="$t('common.tips')">
                     <template #label>
                         <p v-html="msg_317" />
                     </template>
@@ -51,7 +51,7 @@
         </Form>
         <template #footer v-if="cusBank?.canoutamount === 1">
             <div class="g-form__footer inset">
-                <Button round block type="danger" @click="formRef?.submit()">确定</Button>
+                <Button round block type="danger" @click="formRef?.submit()">{{ $t('operation.confirm') }}</Button>
             </div>
         </template>
     </app-view>
@@ -64,7 +64,7 @@ import { fullloading, dialog, } from '@/utils/vant'
 import { useDoWithdraw, useAccountFundInfo, useDoCusBankExtendConfigs } from '@/business/bank'
 import { getServerTime } from '@/services/api/common'
 import { useNavigation } from '@mobile/router/navigation'
-import { useUserStore } from '@/stores'
+import { useUserStore, i18n } from '@/stores'
 import moment from 'moment'
 
 const { formData, onSubmit, sign } = useDoWithdraw()
@@ -77,19 +77,20 @@ const { getSystemParamValue } = useUserStore()
 const msg = getSystemParamValue('302')
 const msg_317 = getSystemParamValue('317')
 const userStore = useUserStore()
+const { global: { t }} = i18n
 
 // 表单验证规则
 const formRules: { [key: string]: FieldRule[] } = {
     Amount: [{
         required: true,
-        message: '请输入出金金额',
+        message: t('banksign.wallet.withdraw.pleaseenteroutamount'),
         validator: (val) => {
             if (val <= (fund.value.AvailableOutMoney ?? 0.0) && val > 0.0) {
                 return true
             } else if (fund.value.AvailableOutMoney === 0.0) {
-                return '可出金额为0'
+                return t('banksign.wallet.withdraw.theamountavailableis0')
             } else {
-                return '超过可出金额'
+                return t('banksign.wallet.withdraw.exceedingthepayableamount')
             }
         }
     }]
@@ -108,13 +109,13 @@ const doWithDrawWarning = () => {
                 formSubmit()
             } else {
                 dialog({
-                    title: '提示',
-                    message: '出金不在时间范围内',
-                    confirmButtonText: '我知道了'
+                    title: t('commone.tips'),
+                    message: t('banksign.wallet.withdraw.goldisnotwithinthetimeframe'),
+                    confirmButtonText: t('commone.ikonw')
                 })
             }
         }).catch(() => {
-            hideLoading('获取服务器时间失败', 'fail')
+            hideLoading(t('banksign.wallet.withdraw.failedtogetservertime'), 'fail')
         }).finally(() => {
             hideLoading()
         })

+ 4 - 2
src/packages/mobile/views/boot/Index.vue

@@ -22,7 +22,9 @@ import { showLoading, dialog } from '@/utils/vant'
 import { useLogin } from '@/business/login'
 import service from '@/services'
 import plus from '@/utils/h5plus'
+import { i18n } from '@/stores'
 
+const { global: { t } } = i18n
 const { logining, initBaseData } = useLogin()
 const route = useRoute()
 const router = useRouter()
@@ -81,8 +83,8 @@ const tryInit = (message: string) => {
   dialog({
     message,
     showCancelButton: plus.hasPlus(),
-    cancelButtonText: '退出',
-    confirmButtonText: '重试'
+    cancelButtonText: t('common.exit'),
+    confirmButtonText: t('common.tryagain')
   }).then(() => {
     skip(init())
   }).catch(() => {

+ 1 - 1
src/packages/mobile/views/goods/detail/Index.vue

@@ -1,7 +1,7 @@
 <template>
     <app-view class="goods-detail g-form">
         <template #header>
-            <app-navbar :title="quote ? quote.goodscode + '/' + quote.goodsname : '挂牌大厅'" />
+            <app-navbar :title="quote ? quote.goodscode + '/' + quote.goodsname : $t('quote.listinghall') " />
         </template>
         <component :is="Price" v-bind="{ goodsCode }" />
         <component :is="Chart" v-bind="{ goodsCode }" />

+ 19 - 16
src/packages/mobile/views/goods/detail/components/listing/Index.vue

@@ -2,13 +2,13 @@
     <app-modal direction="right-top" height="100%" width="100%" v-model:show="showModal" :refresh="refresh">
         <app-view class="goods-listing g-form">
             <template #header>
-                <app-navbar :title="quote ? `${quote.goodscode}/${quote.goodsname}` : '挂牌'" @back="closed" />
+                <app-navbar :title="quote ? `${quote.goodscode}/${quote.goodsname}` : $t('operation.listing') " @back="closed" />
             </template>
             <component :is="Price" v-bind="{ goodsCode }" />
             <component :is="Forex" v-bind="{ goodsCode, showMore: false }" @price-click="onPriceClick" />
             <Form ref="formRef" class="g-form__container" @submit="onSubmit">
                 <CellGroup inset>
-                    <Field name="BuyOrSell" :rules="formRules.BuyOrSelly" label="方向">
+                    <Field name="BuyOrSell" :rules="formRules.BuyOrSelly" :label="$t('quote.goods.buyorsell')">
                         <template #input>
                             <RadioGroup v-model="direction" direction="horizontal">
                                 <Radio :name="0">{{ $t('quote.buy') }}</Radio>
@@ -16,13 +16,13 @@
                             </RadioGroup>
                         </template>
                     </Field>
-                    <Field name="OrderPrice" :rules="formRules.OrderPrice" label="价格">
+                    <Field name="OrderPrice" :rules="formRules.OrderPrice" :label="$t('quote.goods.orderprice')">
                         <template #input>
                             <Stepper v-model="formData.OrderPrice" theme="round" button-size="22" :min="0"
                                 :auto-fixed="false" :decimal-length="quote?.decimalplace" :step="quote?.decimalvalue" />
                         </template>
                     </Field>
-                    <Field name="OrderQty" :rules="formRules.OrderQty" label="数量">
+                    <Field name="OrderQty" :rules="formRules.OrderQty" :label="$t('quote.goods.orderqty')">
                         <template #input>
                             <div class="g-qty-group">
                                 <div class="g-qty-group__stepper">
@@ -37,18 +37,18 @@
                         </template>
                     </Field>
                     <template v-if="direction === BuyOrSell.Buy || quote?.tradeproperty !== 2">
-                        <Field label="预估可订立量">
+                        <Field :label="$t('quote.goods.enableQty')">
                             <template #input>
                                 <span>{{ total.enableQty }}</span>
                             </template>
                         </Field>
-                        <Field label="预扣保证金">
+                        <Field :label="$t('quote.goods.deposit')">
                             <template #input>
                                 <span>{{ total.deposit.toFixed(2) }}</span>
                             </template>
                         </Field>
                     </template>
-                    <Field label="可用资金">
+                    <Field :label="$t('quote.goods.avaiableMoney')">
                         <template #input>
                             <span>{{ accountStore.currentAccount.avaiableMoney?.toFixed(2) }}</span>
                         </template>
@@ -59,22 +59,22 @@
                 <div class="g-form__footer">
                     <template v-if="direction === BuyOrSell.Buy">
                         <Button type="danger" block square :disabled="!formData.OrderQty"
-                            @click="onBeforeSubmit(EBuildType.BUILDTYPE_OPEN)" v-if="!quote?.iscannotbuy">订立买入</Button>
+                            @click="onBeforeSubmit(EBuildType.BUILDTYPE_OPEN)" v-if="!quote?.iscannotbuy">{{ $t('quote.goods.orderbuy') }}</Button>
                         <Button color="#199e00" block square
                             :disabled="!formData.OrderQty || !sellQty || (formData.OrderQty > sellQty)"
                             @click="onBeforeSubmit(EBuildType.BUILDTYPE_CLOSE)" v-if="!isTrademode16">
-                            <span>转让买入</span>
+                            <span>{{ $t('quote.goods.transferbuy') }}</span>
                             <span v-if="sellQty">(≤{{ sellQty }})</span>
                         </Button>
                     </template>
                     <template v-if="direction === BuyOrSell.Sell">
                         <Button type="danger" block square :disabled="!formData.OrderQty"
                             @click="onBeforeSubmit(EBuildType.BUILDTYPE_OPEN)"
-                            v-if="!isTrademode16 && !quote?.iscannotsell">订立卖出</Button>
+                            v-if="!isTrademode16 && !quote?.iscannotsell">{{ $t('quote.goods.ordersell') }}</Button>
                         <Button color="#199e00" block square
                             :disabled="!formData.OrderQty || !buyQty || (formData.OrderQty > buyQty)"
                             @click="onBeforeSubmit(EBuildType.BUILDTYPE_CLOSE)">
-                            <span>转让卖出</span>
+                            <span>{{ $t('quote.goods.transfersell') }}</span>
                             <span v-if="buyQty">(≤{{ buyQty }})</span>
                         </Button>
                     </template>
@@ -94,6 +94,9 @@ import { useAccountStore, useFuturesStore, usePositionStore } from '@/stores'
 import { EPriceMode, EListingSelectType, EDelistingType, EBuildType, EValidType, EOrderOperateType } from '@/constants/client'
 import AppModal from '@/components/base/modal/index.vue'
 import Stepper from '@mobile/components/base/stepper/index.vue'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
 
 const Price = defineAsyncComponent(() => import('@mobile/components/modules/quote/price/index.vue'))
 const Forex = defineAsyncComponent(() => import('@mobile/components/modules/quote/forex/index.vue'))
@@ -159,13 +162,13 @@ const sellQty = computed(() => positionStore.getOrderQty(BuyOrSell.Sell, props.g
 // 表单验证规则
 const formRules: { [key: string]: FieldRule[] } = {
     OrderPrice: [{
-        message: '请输入价格',
+        message: t('quote.goods.pleaseenterorderprice'),
         validator: () => {
             return !!formData.OrderPrice
         }
     }],
     OrderQty: [{
-        message: '请输入数量',
+        message: t('quote.goods.pleaseenterorderqty'),
         validator: () => {
             return !!formData.OrderQty
         }
@@ -189,8 +192,8 @@ const onBeforeSubmit = (buildType: EBuildType) => {
         formRef.value?.submit()
     } else {
         dialog({
-            title: '确认要提交吗?',
-            message: '*若存在价格匹配的反方向委托订单,系统将会自动撤销',
+            title: t('quote.goods.tips1'),
+            message: t('quote.goods.tips2'),
             showCancelButton: true,
         }).then(() => {
             formRef.value?.submit()
@@ -213,7 +216,7 @@ const onSubmit = () => {
 
     fullloading((hideLoading) => {
         formSubmit().then(() => {
-            hideLoading('提交成功。', 'success')
+            hideLoading(t('quote.goods.tips3'), 'success')
         }).catch((err) => {
             hideLoading(err, 'fail')
         })

+ 17 - 15
src/packages/mobile/views/goods/list/Index.vue

@@ -72,7 +72,9 @@ import { useNavigation } from '@mobile/router/navigation'
 import { useFuturesStore } from '@/stores'
 import quoteSocket from '@/services/websocket/quote'
 import AppList from '@mobile/components/base/list/index.vue'
+import { i18n } from '@/stores'
 
+const { global: { t } } = i18n
 const props = defineProps({
     showBackButton: {
         type: Boolean,
@@ -91,21 +93,21 @@ const title = getQueryString('title')
 const titleName = computed(() => title ? decodeURIComponent(title) : props.marketSection?.displayname ?? '订单挂牌')
 
 const columns: Model.TableColumn[] = [
-    { field: 'goodsname', label: '商品名称/代码' },
-    { field: 'bid', label: '买价' },
-    { field: 'bidvolume', label: '买量' },
-    { field: 'ask', label: '卖价' },
-    { field: 'askvolume', label: '卖量' },
-    { field: 'last', label: '当前价' },
-    { field: 'rise', label: '涨跌' },
-    { field: 'change', label: '幅度' },
-    { field: 'opened', label: '今开' },
-    { field: 'presettle', label: '昨结' },
-    { field: 'lowest', label: '最低' },
-    { field: 'highest', label: '最高' },
-    { field: 'amplitude', label: '振幅' },
-    { field: 'limitup', label: '涨停价' },
-    { field: 'limitdown', label: '跌停价' },
+    { field: 'goodsname', label: t('quote.goodsname') },
+    { field: 'bid', label: t('quote.bid') },
+    { field: 'bidvolume', label: t('quote.bidvolume') },
+    { field: 'ask', label: t('quote.ask') },
+    { field: 'askvolume', label: t('quote.askvolume') },
+    { field: 'last', label: t('quote.last') },
+    { field: 'rise', label: t('quote.rise') },
+    { field: 'change', label: t('quote.change') },
+    { field: 'opened', label: t('quote.opened') },
+    { field: 'presettle', label: t('quote.presettle')},
+    { field: 'lowest', label: t('quote.lowest') },
+    { field: 'highest', label: t('quote.highest') },
+    { field: 'amplitude', label: t('quote.amplitude') },
+    { field: 'limitup', label: t('quote.limitup') },
+    { field: 'limitdown', label: t('quote.limitdown') },
 ]
 
 const rowClick = (row: Model.QuoteGoodsListRsp) => {

+ 18 - 15
src/packages/mobile/views/goods/trade/components/delisting/index.vue

@@ -2,36 +2,36 @@
     <app-modal direction="right-top" height="100%" width="100%" v-model:show="showModal" :refresh="refresh">
         <app-view class="goods-delisting g-form">
             <template #header>
-                <app-navbar :title="quote ? `${quote.goodscode}/${quote.goodsname}` : '摘牌'" @back="closed" />
+                <app-navbar :title="quote ? `${quote.goodscode}/${quote.goodsname}` : `${ $t('quote.goods.title') }`" @back="closed" />
             </template>
             <Form ref="formRef" class="g-form__container" @submit="onSubmit">
                 <CellGroup inset>
-                    <Field label="交易账户">
+                    <Field :label="$t('quote.goods.taaccount')">
                         <template #input>
                             <span>{{ accountStore.currentAccountId }}</span>
                         </template>
                     </Field>
-                    <Field label="挂牌方">
+                    <Field :label="$t('quote.goods.username')">
                         <template #input>
                             <span>{{ selectedRow.username }}</span>
                         </template>
                     </Field>
-                    <Field label="挂牌价格">
+                    <Field :label="$t('quote.goods.listingprice')">
                         <template #input>
                             <span>{{ selectedRow.orderprice }}</span>
                         </template>
                     </Field>
-                    <Field label="剩余量">
+                    <Field :label="$t('quote.goods.remainqty')">
                         <template #input>
                             <span>{{ selectedRow.orderqty }}</span>
                         </template>
                     </Field>
-                    <Field label="摘牌方向">
+                    <Field :label="$t('quote.goods.delistingbuyorsell')">
                         <template #input>
                             <span>{{ getBuyOrSellName(selectedRow.buyorsell) }}</span>
                         </template>
                     </Field>
-                    <Field name="OrderQty" :rules="formRules.OrderQty" label="摘牌量">
+                    <Field name="OrderQty" :rules="formRules.OrderQty" :label="$t('quote.goods.delistingqty')">
                         <template #input>
                             <div class="goods-delisting__stepper">
                                 <Stepper v-model="formData.OrderQty" theme="round" button-size="22" :min="0" :step="qtyStep"
@@ -53,18 +53,18 @@
             <template #footer>
                 <div class="g-form__footer">
                     <template v-if="selectedRow.buyorsell === BuyOrSell.Buy">
-                        <Button type="danger" block square @click="onBeforeSubmit(EBuildType.BUILDTYPE_OPEN)">订立卖出</Button>
+                        <Button type="danger" block square @click="onBeforeSubmit(EBuildType.BUILDTYPE_OPEN)">{{ $t('quote.ordersell') }}</Button>
                         <Button type="primary" :disabled="!formData.OrderQty || !buyQty || (formData.OrderQty > buyQty)"
                             block square @click="onBeforeSubmit(EBuildType.BUILDTYPE_CLOSE)">
-                            <span>转让卖出</span>
+                            <span>{{ $t('quote.transfersell') }}</span>
                             <span v-if="buyQty">(≤{{ buyQty }})</span>
                         </Button>
                     </template>
                     <template v-if="selectedRow.buyorsell === BuyOrSell.Sell">
-                        <Button type="danger" block square @click="onBeforeSubmit(EBuildType.BUILDTYPE_OPEN)">订立买入</Button>
+                        <Button type="danger" block square @click="onBeforeSubmit(EBuildType.BUILDTYPE_OPEN)">{{ $t('quote.orderbuy') }}</Button>
                         <Button type="primary" :disabled="!formData.OrderQty || !sellQty || (formData.OrderQty > sellQty)"
                             block square @click="onBeforeSubmit(EBuildType.BUILDTYPE_CLOSE)">
-                            <span>转让买入</span>
+                            <span>{{ $t('quote.transferbuy') }}</span>
                             <span v-if="sellQty">(≤{{ sellQty }})</span>
                         </Button>
                     </template>
@@ -84,6 +84,9 @@ import { useAccountStore, useFuturesStore, usePositionStore } from '@/stores'
 import { EBuildType, EDelistingType, EListingSelectType, EOrderOperateType, EPriceMode, EValidType } from '@/constants/client'
 import { useOrder } from '@/business/trade'
 import AppModal from '@/components/base/modal/index.vue'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
 
 const props = defineProps({
     selectedRow: {
@@ -113,7 +116,7 @@ const sellQty = computed(() => positionStore.getOrderQty(BuyOrSell.Sell, props.s
 // 表单验证规则
 const formRules: { [key in keyof Proto.OrderReq]?: FieldRule[] } = {
     OrderQty: [{
-        message: '请输入摘牌量',
+        message: t('quote.goods.tips4'),
         validator: () => {
             return !!formData.OrderQty
         }
@@ -127,8 +130,8 @@ const onRadioChange = (value: number) => {
 // 提交摘牌
 const onSubmit = () => {
     dialog({
-        title: '确认要提交吗?',
-        message: '*若存在价格匹配的反方向委托订单,系统将会自动撤销',
+        title: t('quote.goods.tips1'),
+        message: t('quote.goods.tips2'),
         showCancelButton: true,
     }).then(() => {
         const { goodsid, orderid, orderprice, buyorsell } = props.selectedRow
@@ -148,7 +151,7 @@ const onSubmit = () => {
         fullloading((hideLoading) => {
             formSubmit().then(() => {
                 hideLoading()
-                dialog('摘牌提交成功。').then(() => closed(true))
+                dialog(t('quote.goods.tips4')).then(() => closed(true))
             }).catch((err) => {
                 hideLoading(err, 'fail')
             })

+ 6 - 4
src/packages/mobile/views/goods/trade/index.vue

@@ -44,7 +44,9 @@ import { queryWrTradeOrderDetail } from '@/services/api/transfer'
 import { useLoginStore, useFuturesStore } from '@/stores'
 import AppList from '@mobile/components/base/list/index.vue'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+import { i18n } from '@/stores'
 
+const { global: { t } } = i18n
 const componentMap = new Map<string, unknown>([
     ['delisting', defineAsyncComponent(() => import('./components/delisting/index.vue'))],
 ])
@@ -61,9 +63,9 @@ const selectedRow = shallowRef<Model.WrTradeOrderDetailRsp>()
 const error = shallowRef(false)
 
 const columns: Model.TableColumn[] = [
-    { field: 'orderprice', label: '价格' },
-    { field: 'orderqty', label: '数量' },
-    { field: 'username', label: '挂牌方' },
+    { field: 'orderprice', label: t('quote.goods.orderprice') },
+    { field: 'orderqty', label: t('quote.goods.orderqty') },
+    { field: 'username', label: t('quote.goods.username') },
     // { field: 'operate', label: '摘牌' },
 ]
 
@@ -89,7 +91,7 @@ const onDelisting = (row: Model.WrTradeOrderDetailRsp) => {
     selectedRow.value = row
     /// 不能与自己成交
     if (row.userid === loginStore.userId) {
-        showToast('不能与自己成交')
+        showToast(t('quote.goods.nodeal'))
         return
     }
     openComponent('delisting')

+ 6 - 3
src/packages/mobile/views/home/Index.vue

@@ -22,6 +22,9 @@ import { useLoginStore, useFuturesStore } from '@/stores'
 import AppTabbar from '@mobile/components/base/tabbar/index.vue'
 import AppUpdater from '@mobile/components/base/updater/index.vue'
 import RouterTransition from '@mobile/components/base/router-transition/index.vue'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
 
 defineProps({
   iosUpdateUrl: String
@@ -112,13 +115,13 @@ const tabList = computed(() => {
   const result: Tabbar[] = [
     {
       name: 'home-index',
-      label: '首页',
+      label: t('tabbar.home'),
       icon: 'g-icon-home--line',
       activeIcon: 'g-icon-home--fill',
     },
     {
       name: 'home-mine',
-      label: '我的',
+      label: t('tabbar.mine'),
       icon: 'g-icon-mine--line',
       activeIcon: 'g-icon-mine--fill',
     }
@@ -133,7 +136,7 @@ const tabList = computed(() => {
   } else {
     result.splice(1, 0, {
       name: '#',
-      label: '交易',
+      label: t('tabbar.trade'),
       icon: 'g-icon-quote--line',
       activeIcon: 'g-icon-quote--fill',
     })

+ 1 - 1
src/packages/mobile/views/market/detail/Index.vue

@@ -1,7 +1,7 @@
 <template>
     <app-view class="market-detail">
         <template #header>
-            <app-navbar :title="futuresStore.getGoodsName(goodsCode) ?? '商品详情'" />
+            <app-navbar :title="futuresStore.getGoodsName(goodsCode) ?? $t('quote.ballot.goodsdetail')" />
         </template>
         <component :is="Price" v-bind="{ goodsCode }" />
         <component :is="Chart" v-bind="{ goodsCode }" />

+ 12 - 9
src/packages/mobile/views/market/list/Index.vue

@@ -52,6 +52,9 @@ import { useNavigation } from '@mobile/router/navigation'
 import { useFuturesStore } from '@/stores'
 import quoteSocket from '@/services/websocket/quote'
 import AppList from '@mobile/components/base/list/index.vue'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
 
 const props = defineProps({
     showBackButton: {
@@ -97,15 +100,15 @@ const goodsCodes = dataList.value.map((e) => e.goodscode.toUpperCase())
 const subscribe = quoteSocket.createSubscribe()
 
 const columns: Model.TableColumn[] = [
-    { field: 'goodsname', label: '商品/代码' },
-    { field: 'last', label: '最新价' },
-    { field: 'rise', label: '涨跌' },
-    { field: 'change', label: '幅度' },
-    { field: 'opened', label: '今开' },
-    { field: 'presettle', label: '昨结' },
-    { field: 'lowest', label: '最低' },
-    { field: 'highest', label: '最高' },
-    { field: 'amplitude', label: '振幅' },
+    { field: 'goodsname', label: t('quote.goodsname') },
+    { field: 'last', label: t('quote.last') },
+    { field: 'rise', label: t('quote.rise') },
+    { field: 'change', label: t('quote.change') },
+    { field: 'opened', label: t('quote.opened') },
+    { field: 'presettle', label: t('quote.presettle') },
+    { field: 'lowest', label: t('quote.lowest') },
+    { field: 'highest', label: t('quote.highest') },
+    { field: 'amplitude', label: t('quote.amplitude') },
 ]
 
 const rowClick = (row: Model.GoodsQuote) => {

+ 10 - 8
src/packages/mobile/views/mine/Index.vue

@@ -154,10 +154,12 @@ import { parsePercent } from '@/filters'
 import { useNavigation } from '@mobile/router/navigation'
 import { AuthStatus } from '@/constants/account'
 import { queryBankAccountSign } from '@/services/api/bank'
-import { useLoginStore, useAccountStore, useUserStore } from '@/stores'
+import { useLoginStore, useAccountStore, useUserStore,  } from '@/stores'
 import eventBus from '@/services/bus'
 import Iconfont from '@/components/base/iconfont/index.vue'
+import { i18n } from '@/stores'
 
+const { global: { t } } = i18n
 const { router, routerTo } = useNavigation()
 const loginStore = useLoginStore()
 const userStore = useUserStore()
@@ -184,22 +186,22 @@ const doInOutMoney = (tab: string) => {
                     router.push({ name: 'bank-wallet', query: { tab } })
                 } else {
                     dialog({
-                        message: '请先添加签约账户信息!',
+                        message: t('banksign.tips1'),
                         showCancelButton: true,
-                        confirmButtonText: '去签约'
+                        confirmButtonText: t('banksign.tips2')
                     }).then(() => {
                         router.push({ name: 'bank-sign' })
                     })
                 }
             }).catch(() => {
-                hideLoading('加载失败', 'fail')
+                hideLoading(t('common.loadingfailed'), 'fail')
             })
-        }, '正在加载...')
+        }, t('common.loading'))
     } else {
         dialog({
-            message: '请先实名认证,再进行该操作!',
+            message: t('banksign.tips3'),
             showCancelButton: true,
-            confirmButtonText: '去实名'
+            confirmButtonText: t('banksign.tips4')
         }).then(() => {
             router.push({ name: 'account-certification' })
         })
@@ -208,7 +210,7 @@ const doInOutMoney = (tab: string) => {
 
 const userLogout = () => {
     dialog({
-        message: '是否退出当前账号?',
+        message: t('banksign.tips5'),
         showCancelButton: true
     }).then(() => {
         loginStore.clearAutoLoginData()

+ 9 - 6
src/packages/mobile/views/mine/address/components/edit/Index.vue

@@ -5,7 +5,7 @@
                 <template #header>
                     <app-navbar :title="selectedRow.autoid ? $t('mine.address.modifyaddressinfo') : $t('mine.address.addaddressinfo')" @back="closed">
                         <template #right v-if="selectedRow.autoid">
-                            <span @click="formDelete">{{ $t('common.delete') }}</span>
+                            <span @click="formDelete">{{ $t('operation.delete') }}</span>
                         </template>
                     </app-navbar>
                 </template>
@@ -42,6 +42,9 @@ import { fullloading, dialog } from '@/utils/vant'
 import { validateRules } from '@/constants/regex'
 import { useAddressForm } from '@/business/user'
 import AppModal from '@/components/base/modal/index.vue'
+import { i18n } from "@/stores";
+
+const { global: { t } } = i18n
 
 // 地区选择
 const AppRegion = defineAsyncComponent(() => import('@mobile/components/base/region/index.vue'))
@@ -62,11 +65,11 @@ const refresh = shallowRef(false) // 是否刷新父组件数据
 const formRules: { [key in keyof Proto.UserReceiveInfoReq | 'Region']?: FieldRule[] } = {
     ReceiverName: [{
         required: true,
-        message: '请输入收货人',
+        message: t('mine.address.tips1'),
     }],
     PhoneNum: [{
         required: true,
-        message: '请输入联系电话',
+        message: t('mine.address.tips2'),
         validator: (val) => {
             if (validateRules.phone.validate(val)) {
                 return true
@@ -75,14 +78,14 @@ const formRules: { [key in keyof Proto.UserReceiveInfoReq | 'Region']?: FieldRul
         }
     }],
     Region: [{
-        message: '请选择收货地区',
+        message: t('mine.address.tips3'),
         validator: () => {
             return !!formData.ProvinceID && !!formData.CityID && !!formData.DistrictID
         }
     }],
     Address: [{
         required: true,
-        message: '请输入详细地址',
+        message: t('mine.address.tips4'),
     }],
 }
 
@@ -109,7 +112,7 @@ const formSubmit = () => {
 // 删除地址
 const formDelete = () => {
     dialog({
-        message: '是否删除该收货地址?',
+        message: t('mine.address.tips5'),
         showCancelButton: true
     }).then(() => {
         fullloading((hideLoading) => {

+ 3 - 3
src/packages/mobile/views/mine/invoice/Index.vue

@@ -1,7 +1,7 @@
 <template>
     <app-view class="mine-invoice">
         <template #header>
-            <app-navbar title="发票信息" />
+            <app-navbar :title="$t('mine.invoice.title')" />
         </template>
         <RadioGroup class="mine-invoice__container" v-model="checkedRow" v-if="dataList.length">
             <ul class="list">
@@ -13,7 +13,7 @@
                         <div class="list-item__info-name">
                             <Tag size="medium">{{ getReceiptTypeName(item.receipttype) }}</Tag>
                             <span>{{ item.username }}</span>
-                            <Tag type="danger" round v-if="item.isdefault">默认</Tag>
+                            <Tag type="danger" round v-if="item.isdefault">{{ $t('mine.invoice.default') }}</Tag>
                         </div>
                     </div>
                     <div class="list-item__button">
@@ -25,7 +25,7 @@
         <Empty v-else />
         <template #footer>
             <div class="g-form__footer inset">
-                <Button type="danger" @click="onEdit" round block>新增发票</Button>
+                <Button type="danger" @click="onEdit" round block>{{ $t('mine.invoice.addinvoice') }}</Button>
             </div>
             <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)"
                 @closed="closeComponent" v-if="componentId" />

+ 22 - 19
src/packages/mobile/views/mine/invoice/components/edit/Index.vue

@@ -2,40 +2,40 @@
     <app-modal direction="right-top" height="100%" width="100%" v-model:show="showModal" :refresh="refresh">
         <app-view class="g-form">
             <template #header>
-                <app-navbar :title="selectedRow.autoid ? '修改发票信息' : '新增发票信息'" @back="closed">
+                <app-navbar :title="selectedRow.autoid ? $t('mine.invoice.title1') : $t('mine.invoice.title2') " @back="closed">
                     <template #right v-if="selectedRow.autoid">
-                        <span @click="formDelete">删除</span>
+                        <span @click="formDelete">{{ $t('operation.delete') }}</span>
                     </template>
                 </app-navbar>
             </template>
             <Form ref="formRef" class="g-form__container" @submit="formSubmit">
                 <CellGroup inset>
-                    <Field name="ReceiptType" label="发票类型" :rules="formRules.ReceiptType" :is-link="!selectedRow.autoid">
+                    <Field name="ReceiptType" :label="$t('mine.invoice.receipttype')" :rules="formRules.ReceiptType" :is-link="!selectedRow.autoid">
                         <template #input>
                             <app-select v-model="formData.ReceiptType" :options="getReceiptTypeList()"
                                 :readonly="!!selectedRow.autoid" />
                         </template>
                     </Field>
-                    <Field v-model="formData.UserName" :rules="formRules.UserName" name="UserName" label="发票抬头"
-                        placeholder="必填" />
+                    <Field v-model="formData.UserName" :rules="formRules.UserName" name="UserName" :label="$t('mine.invoice.UserName')" 
+                    :placeholder="$t('common.required')" />
                     <template v-if="formData.ReceiptType === ReceiptType.Company">
-                        <Field v-model="formData.TaxpayerID" :rules="formRules.TaxpayerID" name="TaxpayerID" label="税号"
-                            placeholder="必填" />
-                        <Field v-model="formData.ReceiptBank" :rules="formRules.ReceiptBank" name="ReceiptBank" label="开户银行"
-                            placeholder="选填" />
+                        <Field v-model="formData.TaxpayerID" :rules="formRules.TaxpayerID" name="TaxpayerID" :label="$t('mine.invoice.TaxpayerID')" 
+                        :placeholder="$t('common.required')" />
+                        <Field v-model="formData.ReceiptBank" :rules="formRules.ReceiptBank" name="ReceiptBank" :label="$t('mine.invoice.ReceiptBank')"
+                        :placeholder="$t('common.optional')" />
                         <Field v-model="formData.ReceiptAccount" :rules="formRules.ReceiptAccount" name="ReceiptAccount"
-                            label="银行账号" placeholder="选填" />
-                        <Field v-model="formData.Address" :rules="formRules.Address" name="Address" label="企业地址"
-                            placeholder="选填" />
-                        <Field v-model="formData.ContactInfo" :rules="formRules.ContactInfo" name="ContactInfo" label="企业电话"
-                            placeholder="选填" />
+                            :label="$t('mine.invoice.ReceiptAccount')" :placeholder="$t('common.optional')" />
+                        <Field v-model="formData.Address" :rules="formRules.Address" name="Address" :label="$t('mine.invoice.Address')"
+                        :placeholder="$t('common.optional')" />
+                        <Field v-model="formData.ContactInfo" :rules="formRules.ContactInfo" name="ContactInfo" :label="$t('mine.invoice.ContactInfo')"
+                        :placeholder="$t('common.optional')" />
                     </template>
-                    <Field v-model="formData.Email" :rules="formRules.Email" name="Email" label="邮箱" placeholder="选填" />
+                    <Field v-model="formData.Email" :rules="formRules.Email" name="Email" :label="$t('mine.invoice.Email')" :placeholder="$t('common.optional')" />
                 </CellGroup>
             </Form>
             <template #footer>
                 <div class="g-form__footer inset">
-                    <Button type="danger" @click="formRef?.submit" round block>保存</Button>
+                    <Button type="danger" @click="formRef?.submit" round block>{{  $t('common.save')  }}</Button>
                 </div>
             </template>
         </app-view>
@@ -51,6 +51,9 @@ import { validateRules } from '@/constants/regex'
 import { useInvoiceForm } from '@/business/user'
 import AppModal from '@/components/base/modal/index.vue'
 import AppSelect from '@mobile/components/base/select/index.vue'
+import { i18n } from "@/stores"
+
+const { global: { t } } = i18n
 
 const props = defineProps({
     selectedRow: {
@@ -68,11 +71,11 @@ const refresh = shallowRef(false) // 是否刷新父组件数据
 const formRules: { [key in keyof Proto.UserReceiptInfoReq]?: FieldRule[] } = {
     UserName: [{
         required: true,
-        message: '请输入发票抬头',
+        message: t('mine.invoice.tips1'),
     }],
     TaxpayerID: [{
         required: true,
-        message: '请输入纳税人识别号',
+        message: t('mine.invoice.tips2'),
     }],
     Email: [{
         validator: (val) => {
@@ -99,7 +102,7 @@ const formSubmit = () => {
 // 删除发票
 const formDelete = () => {
     dialog({
-        message: '是否删除该发票?',
+        message: t('mine.invoice.tips3'),
         showCancelButton: true
     }).then(() => {
         fullloading((hideLoading) => {

+ 1 - 1
src/packages/mobile/views/mine/profile/Index.vue

@@ -21,7 +21,7 @@ import { onActivated } from 'vue'
 defineProps({
     title: {
         type: String,
-        default: '个人信息'
+        default: '个人信息', 
     }
 })
 

+ 3 - 2
src/packages/mobile/views/mine/wechat/Index.vue

@@ -22,11 +22,12 @@
 import { shallowRef, reactive } from 'vue'
 import { Form, Field, FormInstance, CellGroup, FieldRule, Button, showFailToast } from 'vant'
 import { updateUserInfoWechatAndEmail } from '@/services/api/user'
-import { useLoginStore, useUserStore } from '@/stores'
+import { useLoginStore, useUserStore, i18n } from '@/stores'
 import { useNavigation } from '@mobile/router/navigation'
 import { fullloading } from '@/utils/vant'
 import { decryptAES } from '@/services/websocket/package/crypto'
 
+const { global: { t } } = i18n
 // formRef
 const formRef = shallowRef<FormInstance>()
 // loginStore
@@ -44,7 +45,7 @@ const formData = reactive<Model.UserInfoWechatAndEmailReq>({
 // 表单验证规则
 const formRules: { [key in keyof Model.UserInfoWechatAndEmailReq]?: FieldRule[] } = {
     wechat: [{
-        message: '请输入微信号',
+        message: t('mine.profile.tips1'),
         validator: () => {
             return !!formData.wechat
         }

+ 5 - 5
src/packages/mobile/views/news/detail/Index.vue

@@ -1,7 +1,7 @@
 <template>
     <app-view class="news-details">
         <template #header>
-            <app-navbar title="详情">
+            <app-navbar :title="$t('operation.details')">
                 <!-- <template #right>
                     <div @click="sendShareMessage" v-if="plus.hasPlus()">
                         <Icon name="share" size="18px" />
@@ -15,17 +15,17 @@
         <section class="news-details__container" v-if="data">
             <h1>{{ data.title }}</h1>
             <h4>
-                <span>来源:</span>
+                <span>{{ $t('news.source') }}</span>
                 <img :src="getFileUrl(data.srclogo)" v-if="data.srclogo" />
                 <span @click="openUrl(data?.srcurl)" style="color:dodgerblue" v-if="data.srcname">{{ data.srcname }}</span>
                 <span>{{ formatDate(data.publishdate, 'YYYY-MM-DD') }}</span>
-                <span style="margin-left: auto;">阅览数: {{ data.hits }}</span>
+                <span style="margin-left: auto;">{{ $t('news.numbers') }} {{ data.hits }}</span>
             </h4>
             <HtmlContainer class="content" :context="formatHtmlString(data.context)" v-if="data.context" />
-            <p class="footer" v-if="data.author">作者: {{ data.author }}</p>
+            <p class="footer" v-if="data.author">{{ $t('news.author') }} {{ data.author }}</p>
         </section>
         <template v-if="dataList.length">
-            <Divider>热门资讯</Divider>
+            <Divider>{{ $t('news.hotnews') }}</Divider>
             <CellGroup class="news-details__list">
                 <template v-for="(item, index) in dataList" :key="index">
                     <Cell class="article-item" title-class="article-item__title" value-class="article-item__time"

+ 1 - 1
src/packages/mobile/views/notice/list/components/detail/index.vue

@@ -2,7 +2,7 @@
     <app-modal direction="right-top" height="100%" width="100%" v-model:show="showModal" :refresh="refresh">
         <app-view class="notice-detail">
             <template #header>
-                <app-navbar title="公告详情" @back="closed" />
+                <app-navbar :title="$t('notices.details')" @back="closed" />
             </template>
             <section class="notice-detail__container">
                 <h1>{{ selectedRow.title }}</h1>

+ 9 - 6
src/packages/mobile/views/order/position/Index.vue

@@ -25,37 +25,40 @@
 import { shallowRef, defineAsyncComponent, computed } from 'vue'
 import { Tab, Tabs } from 'vant'
 import { useComponent } from '@/hooks/component'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
 
 const components = [
     {
         name: 'goods',
-        title: '订单持仓',
+        title: t('position.goods.title'),
         component: defineAsyncComponent(() => import('./components/goods/list/Index.vue')),
         detail: defineAsyncComponent(() => import('./components/goods/detail/Index.vue')),
     },
     {
         name: 'spot',
-        title: '现货持仓',
+        title: t('position.spot.title'),
         component: defineAsyncComponent(() => import('./components/spot/list/Index.vue')),
     },
     {
         name: 'presale',
-        title: '预售持仓',
+        title: t('position.presale.title'),
         component: defineAsyncComponent(() => import('./components/presale/list/Index.vue')),
     },
     {
         name: 'transfer',
-        title: '转让持仓',
+        title: t('position.transfer.title'),
         component: defineAsyncComponent(() => import('./components/transfer/list/Index.vue')),
     },
     {
         name: 'swap',
-        title: '掉期持仓',
+        title: t('position.swap.title'),
         component: defineAsyncComponent(() => import('./components/swap/list/Index.vue')),
     },
     {
         name: 'pricing',
-        title: '点价持仓',
+        title: t('position.pricing.title'),
         component: defineAsyncComponent(() => import('./components/pricing/list/Index.vue')),
     },
 ]

+ 8 - 8
src/packages/mobile/views/order/position/components/goods/detail/Index.vue

@@ -3,7 +3,7 @@
     <app-modal direction="right-top" height="100%" width="100%" v-model:show="showModal">
         <app-view class="g-form">
             <template #header>
-                <app-navbar title="订单明细" @back="closed" />
+                <app-navbar :title="$t('position.goods.holddetail.title')" @back="closed" />
             </template>
             <app-pull-refresh ref="pullRefreshRef" v-model:loading="loading" v-model:error="error" @refresh="run">
                 <div class="g-order-list">
@@ -16,35 +16,35 @@
                         <div class="g-order-list__content">
                             <ul>
                                 <li>
-                                    <span>交易时间</span>
+                                    <span>{{ $t('position.goods.holddetail.tradetime') }}</span>
                                     <span>{{ formatDate(item.tradetime, 'HH:mm:ss') }}</span>
                                 </li>
                                 <li>
-                                    <span>类型</span>
+                                    <span>{{ $t('position.goods.holddetail.buyorsell') }}</span>
                                     <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
                                         {{ getBuyOrSellName(item.buyorsell) }}
                                     </span>
                                 </li>
                                 <li>
-                                    <span>持仓量</span>
+                                    <span>{{ $t('position.goods.holddetail.holderqty') }}</span>
                                     <span>{{ item.holderqty }}</span>
                                 </li>
                                 <li>
-                                    <span>冻结量</span>
+                                    <span>{{ $t('position.goods.holddetail.freezeqty') }}</span>
                                     <span>{{ item.freezeqty }}</span>
                                 </li>
                                 <li>
-                                    <span>持仓价格</span>
+                                    <span>{{ $t('position.goods.holddetail.holderprice') }}</span>
                                     <span>{{ item.holderprice }}</span>
                                 </li>
                                 <li>
-                                    <span>持仓金额</span>
+                                    <span>{{ $t('position.goods.holddetail.holderamount') }}</span>
                                     <span>{{ formatDecimal(item.holderamount) }}</span>
                                 </li>
                             </ul>
                         </div>
                         <div class="g-order-list__btnbar" v-if="item.trademode === 50 && item.holderqty">
-                            <Button size="small" @click="showComponent('close', item)" round>转让</Button>
+                            <Button size="small" @click="showComponent('close', item)" round>{{ $t('operation.transfer') }}</Button>
                         </div>
                     </div>
                 </div>

+ 6 - 6
src/packages/mobile/views/order/position/components/goods/list/Index.vue

@@ -16,27 +16,27 @@
                 <div class="g-order-list__content">
                     <ul>
                         <li>
-                            <span>{{ $t('position.order.curpositionqty') }}</span>
+                            <span>{{ $t('position.goods.curpositionqty') }}</span>
                             <span>{{ item.curpositionqty }}</span>
                         </li>
                         <li>
-                            <span>{{ $t('position.order.averageprice') }}</span>
+                            <span>{{ $t('position.goods.averageprice') }}</span>
                             <span>{{ handleNumberValue(item.averageprice) }}</span>
                         </li>
                         <li>
-                            <span>{{ $t('position.order.frozenqty') }}</span>
+                            <span>{{ $t('position.goods.frozenqty') }}</span>
                             <span>{{ item.frozenqty }}</span>
                         </li>
                         <li>
-                            <span>{{ $t('position.order.curholderamount') }}</span>
+                            <span>{{ $t('position.goods.curholderamount') }}</span>
                             <span>{{ formatDecimal(item.curholderamount) }}</span>
                         </li>
                         <li>
-                            <span>{{ $t('position.order.enableqty') }}</span>
+                            <span>{{ $t('position.goods.enableqty') }}</span>
                             <span>{{ item.enableqty }}</span>
                         </li>
                         <li>
-                            <span>{{ $t('position.order.closepl') }}</span>
+                            <span>{{ $t('position.goods.closepl') }}</span>
                             <span :class="item.closeplColor">
                                 {{ formatDecimal(item.closepl, item.decimalplace) }}
                             </span>

+ 4 - 4
src/packages/mobile/views/user/forget/Index.vue

@@ -5,9 +5,9 @@
         </template>
         <Form ref="formRef" class="g-form__container" @submit="formSubmit">
             <CellGroup inset>
-                <Field v-model="formData.mobile" type="tel" name="mobile" :label="$t('user.forget.mobile')" :placeholder="$t('user.forget.pleaseenter')" autocomplete="off"
+                <Field v-model="formData.mobile" type="tel" name="mobile" :label="$t('user.forget.mobile')" :placeholder="$t('common.pleaseenter')" autocomplete="off"
                     :rules="formRules.mobile" />
-                <Field v-model="formData.vcode" type="digit" name="vcode" :label="$t('user.forget.vcode')" :placeholder="$t('user.forget.pleaseenter')" autocomplete="off"
+                <Field v-model="formData.vcode" type="digit" name="vcode" :label="$t('user.forget.vcode')" :placeholder="$t('common.pleaseenter')" autocomplete="off"
                     :rules="formRules.vcode">
                     <template #button>
                         <Button size="small" type="danger" :disabled="isCountdown" @click="sendVerifyCode">
@@ -16,10 +16,10 @@
                         </Button>
                     </template>
                 </Field>
-                <Field v-model="formData.password" name="password" type="password" :label="$t('user.forget.newpwd')" :placeholder="$t('user.forget.pleaseenter')"
+                <Field v-model="formData.password" name="password" type="password" :label="$t('user.forget.newpwd')" :placeholder="$t('common.pleaseenter')"
                     autocomplete="off" :rules="formRules.password" />
                 <Field v-model="formData.confirmpassword" name="confirmpassword" type="password" :label="$t('user.forget.confirmpwd')"
-                :placeholder="$t('user.forget.pleaseenter')" autocomplete="off" :rules="formRules.confirmpassword" />
+                :placeholder="$t('common.pleaseenter')" autocomplete="off" :rules="formRules.confirmpassword" />
             </CellGroup>
         </Form>
         <template #footer>

+ 1 - 1
src/stores/modules/language.ts

@@ -6,7 +6,7 @@ import enUS from '@public/locales/en-US.json'
 const appLanguage = localData.getRef('appLanguage')
 
 export const i18n = createI18n({
-    locale: appLanguage.value,
+    locale: "en-US",//appLanguage.value,
     fallbackLocale: 'zh-CN',
     messages: {
         'zh-CN': zhCN,