Explorar el Código

1.修改默认区域和语言。
2.修改货币符号。
3.修改默认域名和新增域名。
4.支付修改。

fattiger hace 2 semanas
padre
commit
6053ea970a
Se han modificado 93 ficheros con 272 adiciones y 246 borrados
  1. BIN
      public/banner/en/box.webp
  2. BIN
      public/banner/en/lucky_roll.webp
  3. BIN
      public/banner/en/partner.webp
  4. 1 1
      public/download.html
  5. 31 18
      public/js/load.m.js
  6. 1 1
      public/pwa/landingjs/landingpage-912d14ae.js
  7. 1 1
      public/pwa/startup.html
  8. BIN
      public/resources/favicons/ukslot777.ico
  9. BIN
      public/resources/icons/ukslot777-180.png
  10. BIN
      public/resources/icons/ukslot777.webp
  11. BIN
      public/resources/logos/blazingreels777.webp
  12. BIN
      public/resources/logos/goldenreel777.webp
  13. BIN
      public/resources/logos/jackpotreels777.webp
  14. BIN
      public/resources/logos/jackpotspin777.webp
  15. BIN
      public/resources/logos/luckyvault777.webp
  16. BIN
      public/resources/logos/megavault777.webp
  17. BIN
      public/resources/logos/reelroyal777.webp
  18. BIN
      public/resources/logos/reelrush777.webp
  19. BIN
      public/resources/logos/spinharbor777.webp
  20. BIN
      public/resources/logos/spinhaven777.webp
  21. BIN
      public/resources/logos/spinnova777.webp
  22. BIN
      public/resources/logos/spinpulse777.webp
  23. BIN
      public/resources/logos/spinrush777.webp
  24. BIN
      public/resources/logos/ukslot777.webp
  25. BIN
      public/resources/logos/wildreel777.webp
  26. 19 10
      src/Global.js
  27. 2 0
      src/api/config.js
  28. BIN
      src/assets/deposit/img_coin.webp
  29. 4 0
      src/assets/lvicon/GBP.black.svg
  30. 1 12
      src/assets/pay/icon_card.svg
  31. BIN
      src/assets/pay/icon_card.webp
  32. BIN
      src/assets/tab/icon_L&W_dark.png
  33. BIN
      src/assets/tab/icon_L&W_light.png
  34. 2 2
      src/components/AutoWinList/index.jsx
  35. 2 2
      src/components/UInput/PhoneInput.jsx
  36. 15 15
      src/constants/region.js
  37. 6 23
      src/db/area.js
  38. 15 7
      src/db/payment.js
  39. 10 6
      src/features/mainSlice.js
  40. 2 2
      src/hooks/usePaymentActions.js
  41. 2 2
      src/locales/index.js
  42. 32 32
      src/locales/languages/en_US.json
  43. 1 1
      src/migration/sim.js
  44. 3 3
      src/tracking/SnapPixel.js
  45. 1 1
      src/tracking/TrackAll.js
  46. 2 2
      src/utils/adjust.js
  47. 3 3
      src/utils/helpers.js
  48. 5 5
      src/widgets/HomeWithdraw/index.jsx
  49. 1 1
      src/widgets/LoginForm/index.jsx
  50. 3 3
      src/widgets/ModuleGroup/index.jsx
  51. 1 1
      src/widgets/ModuleSidebar/index.jsx
  52. 4 2
      src/widgets/PhoneSMS/index.jsx
  53. 4 2
      src/widgets/Userinfo/WBindInfo/WModify/WChangePhone/index.jsx
  54. 1 1
      src/widgets/Userinfo/index.jsx
  55. 2 2
      src/widgets/WBonus/index.jsx
  56. 2 2
      src/widgets/WBrowserNotSupport/WIOSNotSupport/index.jsx
  57. 1 1
      src/widgets/WBrowserNotSupport/index.jsx
  58. 1 1
      src/widgets/WCashWheel/WInviteRecord/WInviteRecordPop.jsx
  59. 1 1
      src/widgets/WCashWheel/WRetainPop/WRetainPop.jsx
  60. 2 2
      src/widgets/WCashWheel/WShare/WShare.jsx
  61. 6 5
      src/widgets/WCashWheel/WWheel/WWheel.jsx
  62. 4 4
      src/widgets/WCashWheel/index.jsx
  63. 1 1
      src/widgets/WCheckIn/index.jsx
  64. 2 2
      src/widgets/WComeBackBonus/index.jsx
  65. 2 2
      src/widgets/WComeBackWithdraw/index.jsx
  66. 3 3
      src/widgets/WDailyGift/index.jsx
  67. 3 3
      src/widgets/WDailyRechargeGift/index.jsx
  68. 2 2
      src/widgets/WDeposit/DepositHeader.jsx
  69. 3 1
      src/widgets/WDeposit/WPayInfo/WDepositInfo.jsx
  70. 2 2
      src/widgets/WExclusiveGift/index.jsx
  71. 1 1
      src/widgets/WFixedWithdraw/index.jsx
  72. 1 1
      src/widgets/WGameWithdrawTips/index.jsx
  73. 1 1
      src/widgets/WGoogleRedirectH5/index.jsx
  74. 3 3
      src/widgets/WHolidaysAct/index.jsx
  75. 14 11
      src/widgets/WInstallBox/WPopPwaBonus/index.jsx
  76. 4 4
      src/widgets/WLuckyRoll/index.jsx
  77. 1 1
      src/widgets/WMigLanding/index.jsx
  78. 7 4
      src/widgets/WMigration/index.jsx
  79. 1 1
      src/widgets/WNewUserPrompt/index.jsx
  80. 6 5
      src/widgets/WOfficialGuide/index.jsx
  81. 1 1
      src/widgets/WPaymentMethods/index.jsx
  82. 1 1
      src/widgets/WPromotion2/index.jsx
  83. 2 2
      src/widgets/WRecharge/index.jsx
  84. 1 1
      src/widgets/WRechargeGears/index.jsx
  85. 2 2
      src/widgets/WReferral/index.jsx
  86. 0 0
      src/widgets/WServices/index.jsx
  87. 1 1
      src/widgets/WSuperBall/Common/WSummary.jsx
  88. 1 1
      src/widgets/WSuperBall/WSuperBallBanner.jsx
  89. 1 1
      src/widgets/WSuperBall/WSuperBallDesc/index.jsx
  90. 2 2
      src/widgets/WSuperBall/WSuperBallMission/WConfirmMission.jsx
  91. 7 7
      src/widgets/WSuperBall/WSuperBallPopup/WSuperBallPrize.jsx
  92. 1 1
      src/widgets/WWithdraw/WWithdrawForm/WWithdrawForm.jsx
  93. 1 1
      src/widgets/WWithdrawalInfo/Security/WSecurityCheck.jsx

BIN
public/banner/en/box.webp


BIN
public/banner/en/lucky_roll.webp


BIN
public/banner/en/partner.webp


+ 1 - 1
public/download.html

@@ -197,7 +197,7 @@
                 <span style="position: absolute; inset: 0;" class="shimmer"></span>
                 <span style="position: relative; display: flex; align-items: center; justify-content: center; gap: 0.75rem; color: white;">
                     <svg class="download-icon" style="width: 1.875rem; height: 1.875rem; fill: currentColor;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
-                    <span class="title-font">INSTALL BONUS $10</span>
+                    <span class="title-font">INSTALL BONUS £10</span>
                     <svg class="download-icon" style="width: 1.875rem; height: 1.875rem; fill: currentColor;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
                 </span>
             </button>

+ 31 - 18
public/js/load.m.js

@@ -70,7 +70,7 @@
 
     // 弹窗专用(新增)
     titleGradient: "linear-gradient(180deg, #FEC412 0%, #FFFB23 100%)",  // WELCOME 标题渐变
-    bonusGradient: "linear-gradient(179deg, #FEC412 20.1%, #FE871C 46.83%, #FFFB23 78.17%)", // Free $10 渐变
+    bonusGradient: "linear-gradient(179deg, #FEC412 20.1%, #FE871C 46.83%, #FFFB23 78.17%)", // 免费奖励渐变
     popupBgFilter: "none",          // 弹窗背景图滤镜
     tabIconFilter: "none",          // Tab图标滤镜(默认绿色主题保持红色图标)
     gameMenuBg: "#232626",  // 游戏菜单背景
@@ -392,24 +392,24 @@
   // 区域配置包含:可用语言、默认语言、API、电话区号、货币、时区等
   // ═══════════════════════════════════════════════════════
   const regions = {
-    // 美国区域(默认区域)
+    // 英国区域(沿用内部兼容键 "us",避免影响现有站点和后端路由)
     // languages / defaultLang 使用完整 BCP47 locale(en-US vs en-GB、pt-BR vs pt-PT 等),消除歧义
     "us": {
       "code": "us",
-      "countryCode": "US",
-      "locale": "en-US",
-      "languages": ["en-US", "es-MX"],
-      "defaultLang": "en-US",
+      "countryCode": "GB",
+      "locale": "en-GB",
+      "languages": ["en-GB"],
+      "defaultLang": "en-GB",
       "api": "https://ukapi.uswinslots.com/",
       "apiHost": "api1.usvip.org",
       "ws": "wss://ukapi.uswinslots.com:10000",
       "wsPort": 10000,
-      "phoneCode": "+1",
-      "currency": "USD",
-      "currencySymbol": "$",
-      "timezone": "America/New_York",
-      "dateFormat": "MM/DD/YYYY",
-      "numberFormat": "en-US",
+      "phoneCode": "+44",
+      "currency": "GBP",
+      "currencySymbol": "£",
+      "timezone": "Europe/London",
+      "dateFormat": "DD/MM/YYYY",
+      "numberFormat": "en-GB",
       "supportEmailDomain": "lionhalo.com",
       "titleSuffix": "Online Slots & Real Money Games"
     },
@@ -419,7 +419,7 @@
       "code": "br",
       "countryCode": "BR",
       "locale": "pt-BR",
-      "languages": ["pt-BR", "en-US"],
+      "languages": ["pt-BR", "en-GB"],
       "defaultLang": "pt-BR",
       "api": "https://ukapi.uswinslots.com/",
       "apiHost": "brapi.vipsvip.org",
@@ -439,7 +439,7 @@
       "code": "mx",
       "countryCode": "MX",
       "locale": "es-MX",
-      "languages": ["es-MX", "en-US"],
+      "languages": ["es-MX", "en-GB"],
       "defaultLang": "es-MX",
       "api": "https://ukapi.uswinslots.com/",
       "apiHost": "api1.usvip.org",
@@ -458,7 +458,7 @@
       "code": "ru",
       "countryCode": "RU",
       "locale": "ru-RU",
-      "languages": ["ru-RU", "en-US"],
+      "languages": ["ru-RU", "en-GB"],
       "defaultLang": "ru-RU",
       "api": "https://ukapi.uswinslots.com/",
       "apiHost": "api1.usvip.org",
@@ -497,6 +497,19 @@
   const DEFAULT_REGION = "us";
   const sites_config = {
     "default": {
+      "title": "UKSlot777",
+      "subtitle": "High-quality games, instant access, daily rewards, and a smooth experience built for serious slot fans.",
+      "product": "ukslot777",
+      "product_id": "1",
+      "logo": `/${res_path}/logos/ukslot777.webp`,
+      "icon": `/${res_path}/icons/ukslot777.webp`,
+      "favicon": `/${res_path}/favicons/ukslot777.ico`,
+      "res": `/${res_path}/res/common/`,
+      "region": "us",
+      "theme": defaultTheme
+    },
+
+    "blazingreels777": {
       "title": "BlazingReels777",
       "subtitle": "High-quality games, instant access, daily rewards, and a smooth experience built for serious slot fans.",
       "product": "blazingreels777",
@@ -508,7 +521,7 @@
       "region": "us",
       "theme": defaultTheme
     },
-
+	
 	"goldenreel777": {
 	  "title": "GoldenReel777",
 	  "subtitle": "Spin golden reels, unlock daily rewards, and chase exciting jackpots in every game.",
@@ -876,7 +889,7 @@
   const getSiteConfig = () => {
 	// 默认站点的配置键不是域名前缀,需要用完整域名显式映射。
 	const HOST_ALIAS = {
-	  "blazingreels777.com": "default",
+	  "ukslot777.com": "default",
 	};
     const host = window.location.hostname.replace(/^www\./, "");
     let prefix = HOST_ALIAS[host] || getSitePrefix();
@@ -916,7 +929,7 @@
       else if (/icon-512\.png$/i.test(icon)) href = icon.replace(/icon-512\.png$/i, "icon-180.png");
       else href = icon;
     }
-    if (!href || /\.webp$/i.test(href)) href = `/${res_path}/icons/blazingreels777-180.png`;
+    if (!href || /\.webp$/i.test(href)) href = `/${res_path}/icons/ukslot777-180.png`;
     return href;
   };
   const applyPageMeta = () => {

+ 1 - 1
public/pwa/landingjs/landingpage-912d14ae.js

@@ -973,7 +973,7 @@ const Nt = "styles-module__main__glxqM", kt = "styles-module__title__ihzQQ", Jt
                           o.jsx(m, {
                               name: J.gplogo,
                               className: A["description-img"]
-                          }), o.jsxs("span", { children: ["If you download the game and ", o.jsx("br", {}), " play 50 games, you'll have a ", o.jsx("br", {}), " chance to win a $20 gift card."] })
+                          }), o.jsxs("span", { children: ["If you download the game and ", o.jsx("br", {}), " play 50 games, you'll have a ", o.jsx("br", {}), " chance to win a £20 gift card."] })
                       ]
                   }), o.jsx("div", {
                       className: A.active,

+ 1 - 1
public/pwa/startup.html

@@ -223,7 +223,7 @@
     (() => {
         const applyBrand = (brandName, iconUrl, faviconUrl) => {
             const name = brandName || "One Pice Win";
-            document.title = name + " - Win $1000";
+            document.title = name + " - Win £1000";
 
             const titleEl = document.getElementById("main-title");
             if (titleEl) {

BIN
public/resources/favicons/ukslot777.ico


BIN
public/resources/icons/ukslot777-180.png


BIN
public/resources/icons/ukslot777.webp


BIN
public/resources/logos/blazingreels777.webp


BIN
public/resources/logos/goldenreel777.webp


BIN
public/resources/logos/jackpotreels777.webp


BIN
public/resources/logos/jackpotspin777.webp


BIN
public/resources/logos/luckyvault777.webp


BIN
public/resources/logos/megavault777.webp


BIN
public/resources/logos/reelroyal777.webp


BIN
public/resources/logos/reelrush777.webp


BIN
public/resources/logos/spinharbor777.webp


BIN
public/resources/logos/spinhaven777.webp


BIN
public/resources/logos/spinnova777.webp


BIN
public/resources/logos/spinpulse777.webp


BIN
public/resources/logos/spinrush777.webp


BIN
public/resources/logos/ukslot777.webp


BIN
public/resources/logos/wildreel777.webp


+ 19 - 10
src/Global.js

@@ -2,9 +2,10 @@ import i18n from './locales/index';
 import { LOCAL_AREA_ID, LOCAL_DEFAULT_COUNTRY, LOCAL_WD_PASS, LOCAL_WD_PASS_SET_TIME } from "@constants/localkey";
 import { decrypt, encrypt, getUrlParamsAsJsonManual, localStorageGet, localStorageSet } from "@utils/helpers";
 import area from "@db/area";
-import img1 from "@assets/area/BRL.rect.png";
+import gbFlag from "@assets/area/GB.rect.png";
 import tracker from "@utils/adjust";
 import SsqHelp from "@utils/SsqHelp";
+import { getCurrency, getCurrencySymbol, getPhoneCode } from "@constants/region";
 
 global.tracker = tracker;
 global.enterRechargeType = 0; // 进入充值界面的状态
@@ -15,8 +16,8 @@ global.flags = {
 
 global.i18n = i18n;
 global.CASH_BASE = 100;
-global.DOLLAR = "$";
-global.currency = "";
+global.DOLLAR = getCurrencySymbol();
+global.currency = getCurrency();
 global.dispatch = null;
 global.curGoods = null;
 global.curPayUrl = null;
@@ -291,6 +292,7 @@ global.checkDomainArea = () => {
 };
 global.getLocalAreaID = () => {
     let areaID = Number(localStorageGet(LOCAL_AREA_ID, 0));
+    if (!area.some((item) => item?.id === areaID)) areaID = 0;
     if (areaID === 0) {
         let dAreaID = global.checkDomainArea();
         if (dAreaID === 0) {
@@ -321,15 +323,17 @@ global.getLocalAreaItem = () => {
     }
     return {
         id: 0,
-        name: "United States",
-        icon: img1,
+        name: "United Kingdom",
+        icon: gbFlag,
         code: "us",
-        alcode: "en-US",
-        open: 1
+        alcode: "en-GB",
+        open: 1,
+        areaCodes: ["44"],
+        langs: ["en"]
     };
 };
 global.getLocalAreaAlCode = () => {
-    let code = 'en-US';
+    let code = 'en-GB';
     let item = global.getLocalAreaItem();
     if (item) {
         code = item.alcode;
@@ -364,8 +368,13 @@ global.checkLocalAreaLang = (lang) => {
     return index > -1;
 };
 global.getLocalCountryCode = () => {
-    let phone_code = localStorageGet(LOCAL_DEFAULT_COUNTRY, "");
-    return phone_code;
+    const allowedCodes = global.getLocalAreaCodes().map(String);
+    let phoneCode = String(localStorageGet(LOCAL_DEFAULT_COUNTRY, "") || "").replace(/^\+/, "");
+    if (!allowedCodes.includes(phoneCode)) {
+        phoneCode = allowedCodes[0] || String(getPhoneCode()).replace(/^\+/, "") || "44";
+        localStorageSet(LOCAL_DEFAULT_COUNTRY, phoneCode);
+    }
+    return phoneCode;
 }
 global.showSaveAccount = (info) => {
     if (global.saveAccount) global.saveAccount.show(info);

+ 2 - 0
src/api/config.js

@@ -13,10 +13,12 @@ export const API_URL_TEST = "https://testapi.usgamewin.com/";
 export const WS_URL_TEST = "wss://testapi.usgamewin.com:10000";
 
 export const getApiUrl = () => {
+    return API_URL_MAIN;
     return isDebugEnv() ? API_URL_TEST : API_URL_MAIN;
 };
 
 export const getWsUrl = () => {
+    return API_URL_MAIN;
     return isDebugEnv() ? WS_URL_TEST : WS_URL_MAIN;
 };
 

BIN
src/assets/deposit/img_coin.webp


+ 4 - 0
src/assets/lvicon/GBP.black.svg

@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" role="img" aria-label="British pound">
+  <circle cx="50" cy="50" r="50" fill="#fbcf00"/>
+  <text x="50" y="70" fill="#111" font-family="Arial, sans-serif" font-size="64" font-weight="700" text-anchor="middle">£</text>
+</svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 12
src/assets/pay/icon_card.svg


BIN
src/assets/pay/icon_card.webp


BIN
src/assets/tab/icon_L&W_dark.png


BIN
src/assets/tab/icon_L&W_light.png


+ 2 - 2
src/components/AutoWinList/index.jsx

@@ -6,7 +6,7 @@ import {Autoplay, EffectCube, Virtual} from "swiper/modules";
 import lv_1 from "@assets/lvicon/gold_mini.png";
 import lv_2 from "@assets/lvicon/platinum_mini.png";
 import lv_3 from "@assets/lvicon/diamond_mini.png";
-import usdimg from "@assets/lvicon/USD.black.png";
+import gbpimg from "@assets/lvicon/GBP.black.svg";
 import {useNavigate} from "react-router";
 import {numFormatter} from "@utils/helpers";
 import LazyImgix from "@components/Imgix/LazyImgix";
@@ -297,7 +297,7 @@ const AutoWinList=({data})=>{
                                                 <div className={styles.amount_m}>
                                                     {formatGolds(item.win)}
                                                 </div>
-                                                <img alt="" className={styles.coin_m} src={usdimg}/>
+                                                <img alt="" className={styles.coin_m} src={gbpimg}/>
                                             </div>
                                         </div>
                                     </div>

+ 2 - 2
src/components/UInput/PhoneInput.jsx

@@ -8,6 +8,7 @@ import RadioBtn from "@components/RadioBtn";
 import MuiDrawer from "@mui/material/Drawer";
 import { getPhoneCodeMaxLen, localStorageGet, localStorageSet } from "@utils/helpers";
 import { LOCAL_DEFAULT_COUNTRY } from "@constants/localkey";
+import { getPhoneCode } from "@constants/region";
 const i18n = global.i18n;
 
 const getDefaultAreaCode = (area) => {
@@ -22,7 +23,7 @@ const getDefaultAreaCode = (area) => {
 
         return codes[index];
     }
-    return 1;
+    return String(getPhoneCode()).replace(/^\+/, "") || "44";
 }
 const PhoneInput = ({ innerRef, onChangeCountry, ...props }) => {
     const area = global.getLocalAreaID();
@@ -220,4 +221,3 @@ const PhoneInput = ({ innerRef, onChangeCountry, ...props }) => {
 }
 
 export default PhoneInput
-

+ 15 - 15
src/constants/region.js

@@ -15,23 +15,23 @@
  */
 
 // ============ 兜底默认值(与 load.m.js 中 regions.us 对齐) ============
-// languages / defaultLang 使用完整 BCP47 locale(en-US / pt-BR / zh-TW…)
+// `code` 暂时保留内部兼容值 us,面向用户的地区配置均为英国。
 const FALLBACK_REGION = {
     code: "us",
-    countryCode: "US",
-    locale: "en-US",
-    languages: ["en-US"],
-    defaultLang: "en-US",
+    countryCode: "GB",
+    locale: "en-GB",
+    languages: ["en-GB"],
+    defaultLang: "en-GB",
     api: "https://api1.usvip.org/",
     apiHost: "api1.usvip.org",
     ws: "wss://api1.usvip.org:10000",
     wsPort: 10000,
-    phoneCode: "+1",
-    currency: "USD",
-    currencySymbol: "$",
-    timezone: "America/New_York",
-    dateFormat: "MM/DD/YYYY",
-    numberFormat: "en-US",
+    phoneCode: "+44",
+    currency: "GBP",
+    currencySymbol: "£",
+    timezone: "Europe/London",
+    dateFormat: "DD/MM/YYYY",
+    numberFormat: "en-GB",
     titleSuffix: "Online Slots & Real Money Games"
 };
 
@@ -50,10 +50,10 @@ export const getRegion = () => {
 /** 区域 code:us / br / mx / ru / eu ... */
 export const getRegionCode = () => getRegion().code || FALLBACK_REGION.code;
 
-/** 国家 ISO 码:US / BR / MX ... */
+/** 国家 ISO 码:GB / BR / MX ... */
 export const getCountryCode = () => getRegion().countryCode || FALLBACK_REGION.countryCode;
 
-/** 完整 locale:en-US / pt-BR ... */
+/** 完整 locale:en-GB / pt-BR ... */
 export const getLocale = () => getRegion().locale || FALLBACK_REGION.locale;
 
 /** 区域可用语言列表 */
@@ -80,10 +80,10 @@ export const getRegionWs = () => {
     return (tc && tc.ws) || getRegion().ws || FALLBACK_REGION.ws;
 };
 
-/** 电话区号:+1 / +55 ... */
+/** 电话区号:+44 / +55 ... */
 export const getPhoneCode = () => getRegion().phoneCode || FALLBACK_REGION.phoneCode;
 
-/** 货币 ISO:USD / BRL ... */
+/** 货币 ISO:GBP / BRL ... */
 export const getCurrency = () => getRegion().currency || FALLBACK_REGION.currency;
 
 /** 货币符号:$ / R$ ... */

+ 6 - 23
src/db/area.js

@@ -1,37 +1,20 @@
-import img1 from '@assets/area/US.react.png';
-import img2 from '@assets/area/MXN.rect.png';
+import img1 from '@assets/area/GB.rect.png';
 const area = [
     {
         id: 1,
-        name: "USA",
+        name: "United Kingdom",
         icon: img1,
         code: "us",
-        alcode: "en-US",
+        alcode: "en-GB",
         open: 1,
         //该区域默认语言
         dlang: "en",
         //该区域支持的语言      
-        langs: [],
+        langs: ["en"],
         //该区域匹配的域名       
         hosts: ["www.usslot777", "newh5t."],
         //该区域支持的手机区号, 第一位是默认区号
-        areaCodes: ["1"],// ["1", "61", "44"],
-    },
-    {
-        id: 2,
-        name: "Español",
-        icon: img2,
-        code: "mx",
-        alcode: "es-MX",
-        open: 1,
-        //该区域默认语言
-        dlang: "en",
-        //该区域支持的语言      
-        langs: ["en", "es"],
-        //该区域匹配的域名       
-        hosts: [],
-        //该区域支持的手机区号
-        areaCodes: ["1", "34"],
+        areaCodes: ["44"],
     },
 ]
-export default area;
+export default area;

+ 15 - 7
src/db/payment.js

@@ -1,4 +1,5 @@
 import icon_cashapp from "@assets/pay/icon_cashapp.svg";
+import icon_card from "@assets/pay/icon_card.svg";
 import icon_applePay from "@assets/pay/icon_apple.svg";
 import icon_googlePay from "@assets/pay/icon_google.svg";
 import icon_paypal from "@assets/pay/icon_paypal.svg";
@@ -18,7 +19,8 @@ export const CryptoGroupId = 2;
 export const CryptoGroupName = "crypto";
 
 export const PayTypeMap = {
-    "1": "cashapp",
+    //"1": "cashapp",
+    "1": "credit_card",
     "2": "paypal",
     "4": "applepay",
     "8": "googlepay",
@@ -36,7 +38,8 @@ export const PayTypeMap = {
  * 支付渠道分组  group_id
  */
 export const PayTypeGroup = {
-    1: "cashapp",
+    //1: "cashapp",
+    1: "credit_card",
     2: "crypto"
 }
 
@@ -47,9 +50,13 @@ export const PayTypeGroup = {
  * icon: 图片
  */
 export const PaymentGears = {
-    "cashapp": {
-        name: "Cash App",
-        icon: icon_cashapp
+    // "cashapp": {
+    //     name: "Cash App",
+    //     icon: icon_cashapp
+    // },
+    "credit_card": {
+        name: "Card",
+        icon: icon_card
     },
     "cashbtcpay": {
         name: "Btc Payment",
@@ -92,10 +99,11 @@ export const PaymentGears = {
 
 
 ///推荐档位
-export const RecommendGears = ["usdc", "cashapp"];
+export const RecommendGears = ["usdc", "credit_card"];
 
 
 export const WithdrawType = {
-    CashApp: 1,
+    //CashApp: 1,
+    Credit_card: 1,
     Paypal: 2,
 }

+ 10 - 6
src/features/mainSlice.js

@@ -64,6 +64,7 @@ import {
     LOCAL_RESET_LOGIN_STATES
 } from "@constants/localkey";
 import { APP_LOGIN_TYPE } from "@constants/app";
+import { getCurrency, getCurrencySymbol } from "@constants/region";
 import { v4 as uuidv4 } from 'uuid';
 import { VIPStatus } from "@constants/vip";
 import SsqHelp from "@utils/SsqHelp";
@@ -235,7 +236,7 @@ const applyGoogleRedirectDebugConf = (googleRedirectH5, googleRedirectJumpApk, g
     const jumpApkMode = Number(params.get("gd_jumpapk")) || 0;
     if (jumpApkMode === 1 || jumpApkMode === 2 || jumpApkMode === 3) {
         const rewardAmount = params.get("gd_reward") || googleRedirectH5?.reward_amount || googleRedirectH5?.rewardAmount || 10;
-        const rewardCurrency = params.get("gd_currency") || googleRedirectH5?.reward_currency || googleRedirectH5?.rewardCurrency || global.DOLLAR || "$";
+        const rewardCurrency = params.get("gd_currency") || googleRedirectH5?.reward_currency || googleRedirectH5?.rewardCurrency || global.DOLLAR || "£";
         const defaultBonusUrl = `${window.location.origin}${window.location.pathname}?gdebug=1&gd_bonus=1&gd_sk=debug_sk&gd_amount=${params.get("gd_amount") || 1000}&gd_claim_success=1`;
         googleRedirectJumpApk = jumpApkMode;
         googleRedirectH5 = {
@@ -350,8 +351,9 @@ const reducerRoutes = (state, action) => {
 
         if (conf) {
             if (!!conf.hall) hallServerUrl = conf.hall;
-            if (!!conf.DOLLAR) global.DOLLAR = conf.DOLLAR;
-            if (!!conf.currency) global.currency = conf.currency;
+            // 当前站点的区域配置是展示货币的唯一来源,避免后端旧版美元兜底覆盖英国设置。
+            global.DOLLAR = getCurrencySymbol() || conf.DOLLAR || global.DOLLAR;
+            global.currency = getCurrency() || conf.currency || global.currency;
             global.pf = conf.pf;
             //平台配置
             if (!!conf.pf && !!conf.pf.id) {
@@ -1043,9 +1045,11 @@ const reducerGameInterval = (state, action, arg) => {
 const reducerCountryCode = (state, action, arg) => {
     let payload = action.payload;
     if (payload && payload.code === 200 && payload.data) {
-        const phone_code = payload.data.phone_code || global.getLocalAreaID();
-        if (phone_code) {
-            localStorageSet(LOCAL_DEFAULT_COUNTRY, phone_code)
+        const allowedCodes = global.getLocalAreaCodes().map(String);
+        const suggestedCode = String(payload.data.phone_code || "").replace(/^\+/, "");
+        const phoneCode = allowedCodes.includes(suggestedCode) ? suggestedCode : allowedCodes[0];
+        if (phoneCode) {
+            localStorageSet(LOCAL_DEFAULT_COUNTRY, phoneCode)
         }
     }
 }

+ 2 - 2
src/hooks/usePaymentActions.js

@@ -166,7 +166,7 @@ const usePaymentActions = () => {
     const getPaymentConfig = (name) => {
         const type_num = parseInt(name);
         if (!isNaN(type_num)) {
-            name = PayTypeMap[name] || "cashapp"
+            name = PayTypeMap[name] || "card"
         } else {
             name = name || global.curGoods.pay_name;
         }
@@ -174,7 +174,7 @@ const usePaymentActions = () => {
     }
 
     const getWithdrawConfig = (type) => {
-        const key = PayTypeMap[type] || "cashapp";
+        const key = PayTypeMap[type] || "card";
         return PaymentGears[key];
     }
 

+ 2 - 2
src/locales/index.js

@@ -60,7 +60,7 @@ if (regionLangs.length) {
 }
 
 // 默认语言:region.defaultLang 优先
-const dlang = getRegionDefaultLang() || getSiteLang() || "en-US";
+const dlang = getRegionDefaultLang() || getSiteLang() || "en-GB";
 
 // 区域显式给出默认语言时,强制使用它;否则交给 LanguageDetector 判断
 const forceLng = getRegionDefaultLang() || null;
@@ -101,7 +101,7 @@ i18nChain
             let value = i18n.old_t(key, params);
             const DOLLAR = global.DOLLAR != null ? global.DOLLAR : "";
             const currency = global.currency != null ? global.currency : "";
-            const brandName = window.themeConfig?.title || "USSlot777";
+            const brandName = window.themeConfig?.title || "UKSlot777";
             if (value != null && typeof value === "string") {
                 value = value.replaceAll("{D}", DOLLAR);
                 value = value.replaceAll("{C}", currency);

+ 32 - 32
src/locales/languages/en_US.json

@@ -44,7 +44,7 @@
     "all_games": "All Games",
     "hot_games": "Hot Games",
     "live_casino": "Live Casino",
-    "favorites": "Favorites",
+    "favorites": "Favourites",
     "recent": "Recent",
     "new_release": "New Releases",
     "bingo": "Bingo",
@@ -98,10 +98,10 @@
     "privacy_policy": "Privacy Policy",
     "terms_of_service": "Terms of Service",
     "kyc_policy": "AML & KYC Policy",
-    "copyright": "{0} is owned and operated by JACK ENTERTAINMENT N.V registration number: 160337, registered address: Abraham de Veerstraat 9, Curacao. Contact us {1}. {0} is licensed and regulated by the Government of the Autonomous Island of Anjouan, Union of Comoros and operates under License No. ALSI-202410050-F12. {0} has passed all regulatory compliance and is legally authorized to conduct gaming operations for any and all games of chance and wagering.",
+    "copyright": "{0} is owned and operated by JACK ENTERTAINMENT N.V registration number: 160337, registered address: Abraham de Veerstraat 9, Curacao. Contact us {1}. {0} is licensed and regulated by the Government of the Autonomous Island of Anjouan, Union of Comoros and operates under Licence No. ALSI-202410050-F12. {0} has passed all regulatory compliance and is legally authorised to conduct gaming operations for any and all games of chance and wagering.",
     "rights": "(c) 2026 All rights reserved.",
     "pay_tip": "Available payment methods are subject to current supply conditions",
-    "description": "{BRAND} is an online casino specifically designed for the North American market, ensuring all bets are conducted with complete fairness.<br/>We are licensed and regulated by the New Jersey Division of Gaming Enforcement as an Internet gaming operator in accordance with the Casino Control Act N.J.S.A. 5:12-1 and its implementing regulations.<br/>Only customers 21 and over are permitted to play our games.<br/><br/>We welcome player feedback and are committed to updating our casino based on your preferences.<br/>If you or someone you know has a gambling problem and wants help, call 1-800 GAMBLER."
+    "description": "{BRAND} is an online casino designed for players in the United Kingdom, with a focus on fair play and a smooth gaming experience.<br/>Only customers aged 18 or over may play our games.<br/><br/>We welcome player feedback and continue to improve the casino based on your preferences.<br/>Please gamble responsibly. If you or someone you know needs support with gambling, visit GambleAware."
   },
   "color_card": {
     "go_to": "Go to "
@@ -1036,8 +1036,8 @@
   },
   "newUserPrompt": {
     "title": "Welcome",
-    "game_name": "US Slot 777",
-    "title_tips": "Platform licensed \nwith US Gaming License.",
+    "game_name": "Blazing Reels 777",
+    "title_tips": "Platform licence and\ncompliance information.",
     "tips_1": "1. Grab Your Free <highlight>{D}10</highlight> Now! No Deposit Needed.",
     "tips_2": "2. Deposit any amount to become VIP and withdraw cash.",
     "bonus": "Free {D}10",
@@ -1265,7 +1265,7 @@
     "vault_unlock": "Vault unlock",
     "choose_goods": "Choose your deposit",
     "selected": "selected",
-    "expire_tips": "Bonuses expire in 7 days · 21+ only",
+    "expire_tips": "Bonuses expire in 7 days · 18+ only",
     "deposit_on": "YOUR FIRST DEPOSIT BONUS ON {D}{{price}}",
     "instant_bonus": "Instant bonus",
     "instant_desc": "Credited to your game balance the moment your deposit settles — no action needed. Carries the standard 1x playthrough before withdrawal. A {D}{{price}} deposit credits {D}{{instant}} instantly.",
@@ -1286,7 +1286,7 @@
     "terms_2": "Deposit any amount up to {D}{{max}} to take part. Amounts above {D}{{max}} are not matched.",
     "terms_3": "All bonuses must be claimed or unlocked within 7 days of deposit. Unclaimed and unreleased amounts are voided when the timer ends.",
     "terms_4": "Released bonus funds carry the platform-standard 1× playthrough before withdrawal.",
-    "terms_5": "One first-deposit bonus per player. 21+ only. Pay with Apple Pay or Cash App."
+    "terms_5": "One first-deposit bonus per player. 18+ only. Use an available supported payment method."
   },
   "firstVault": {
     "claim_reward": "Claim your rewards",
@@ -1438,7 +1438,7 @@
       "fail_FaceID": "The FaceID string is not valid.",
       "fail_Gender": "Gender must be female, male, or unknown.",
       "fail_DefaultLanguage": "The default language must be a valid string.",
-      "fail_ThemeColor": "Theme color should be  dark or light!"
+      "fail_ThemeColor": "Theme colour should be dark or light!"
     },
     "reg": {
       "password_notsame": "The passwords entered twice are inconsistent, please enter them again!",
@@ -1518,13 +1518,13 @@
   "withdrawMission": {
     "endless": "Endless",
     "endlessTip": {
-      "first": "First completion pays <gold>$20</gold> — after that, every <gold>100 deposit + 1,000 bets = $10</gold>, forever.",
-      "normal": "Totals never reset-withdrawing <gold>$10</gold> deducts <gold>100 deposit + 1,000 bets.</gold>",
+      "first": "First completion pays <gold>{D}20</gold> — after that, every <gold>100 deposit + 1,000 bets = {D}10</gold>, forever.",
+      "normal": "Totals never reset-withdrawing <gold>{D}10</gold> deducts <gold>100 deposit + 1,000 bets.</gold>",
       "reload": "The extra <gold>{{amount}}</gold> needs more bonus <gold>reload freeBonus</gold> to claim it."
     },
     "endlessTitle": {
-      "deposit": "Deposit:every 100 = $10",
-      "bets": "Bets:every 1,000 = $10"
+      "deposit": "Deposit:every 100 = {D}10",
+      "bets": "Bets:every 1,000 = {D}10"
     },
     "moveBtn": "Move to Balance: {{amount}}",
     "bonus": "+{{amount}}%BONUS",
@@ -1619,7 +1619,7 @@
       "line1": "Limited-time event",
       "line2": "Dice-Shaking<br/>Treasure Hunt",
       "line3": "LUCKY ROLL JACKPOT",
-      "line4": "Max win $777",
+      "line4": "Max win {D}777",
       "bottom": "GO PLAY THE GAME!",
       "btn": "Play now"
     },
@@ -1640,8 +1640,8 @@
     "referEarn": {
       "line1": "REFER & EARN",
       "line2": "Per<br/>Friend",
-      "line3": "They deposit, you both<br/>cash in - 50% each, up to $100",
-      "bottom": "GET $100 PER FRIEND",
+      "line3": "They deposit, you both<br/>cash in - 50% each, up to {D}100",
+      "bottom": "GET {D}100 PER FRIEND",
       "btn": "Invite & Earn",
       "get": "Get"
     }
@@ -1727,20 +1727,20 @@
     "subtitle": "AML Anti-Money-Laundering policy of {BRAND_DOMAIN}",
     "intro_label": "Introduction:",
     "intro_text": "{BRAND_DOMAIN} is operated by {BRAND_COMPANY} with registration number {REG_NUMBER} and registered office located at {REG_ADDRESS}. Objective of the AML Policy: We seek to offer the highest security to all of our users and customers on {BRAND_DOMAIN}. A three-step account verification is performed to confirm the identity of our customers. The purpose is to verify that the registered person's details are correct and that the deposit methods used are not stolen or used by someone else, creating the general framework for the fight against money laundering. We also take into account that, depending on nationality and origin, different safety measures must be applied to payment and withdrawal methods. {BRAND_DOMAIN} also puts reasonable measures in place to control and limit money-laundering risk, including dedicating appropriate resources.",
-    "commitment": "{BRAND_DOMAIN} is committed to high standards of anti-money laundering (AML) compliance and requires management and employees to enforce these standards to prevent the use of its services for money-laundering purposes. The AML program of {BRAND_DOMAIN} is designed to comply with applicable regulations in its licensing jurisdiction.",
+    "commitment": "{BRAND_DOMAIN} is committed to high standards of anti-money laundering (AML) compliance and requires management and employees to enforce these standards to prevent the use of its services for money-laundering purposes. The AML programme of {BRAND_DOMAIN} is designed to comply with applicable regulations in its licensing jurisdiction.",
     "definition_title": "Definition of money laundering:",
     "definition_subtitle": "Money Laundering is understood as:",
     "definition_text": "Money laundering is understood as: the conversion or transfer of property, especially money, knowing that such property is derived from criminal activity or from taking part in such activity, for the purpose of concealing or disguising the illegal origin of the property, or of helping any person who is involved in the commission of such activity to evade the legal consequences of that person's or company's action; the concealment or disguise of the true nature, source, location, disposition, movement, or ownership of property, knowing that such property is derived from criminal activity; the acquisition, possession, or use of property, knowing at the time of receipt that such property was derived from criminal activity; and participation in, association to commit, attempts to commit, and aiding, abetting, facilitating, or counselling the commission of any of the actions referred to above.",
-    "organization_title": "Organization of the AML for 24680.com:",
+    "organization_title": "Organisation of the AML for 24680.com:",
     "organization_text": "In accordance with AML legislation, {BRAND_DOMAIN} has appointed the highest level of responsibility for the prevention of money laundering: the full management of {BRAND_COMPANY} is in charge. Furthermore, an AMLCO (Anti-Money-Laundering Compliance Officer) is in charge of enforcing the AML policy and procedures within the system. The AMLCO is placed under the direct responsibility of general management. AML policy changes and implementation requirements: each major change to the {BRAND_DOMAIN} AML policy is subject to approval by the general management of {BRAND_COMPANY} and the Anti-Money-Laundering Compliance Officer.",
     "kyc_title": "KYC Policy of {BRAND_DOMAIN}",
     "steps_title": "There are three steps of verification on {BRAND_DOMAIN}:",
     "step1_title": "Step one verification:",
     "step1_text": "Step one verification must be done by every user and customer before withdrawing. Depending on the choice and amount of payment, the amount and choice of withdrawal, and the nationality of the user/customer, step one verification must be completed first. Step one verification is a document that must be filled out by the user/customer. The following information must be provided: first name, last name, date of birth, country of usual residence, gender, and full address.",
     "step2_title": "Step two verification:",
-    "step2_text": "Step two verification must be done by every user who deposits over {D}2,000 (two thousand dollars), withdraws over {D}2,000, or sends another user over {D}1,000 (one thousand dollars). Until step two verification is done, the withdrawal, tip, or deposit will be held. Step two verification will direct the user/customer to a page where they must submit their ID. The user/customer must take a photo of their official ID together with a slip showing a randomly generated six-digit number. Only an official ID may be used for ID verification; accepted ID types may vary by country. An electronic check will also confirm that the data filled in during step one verification is correct. If the electronic check fails or is not possible, the user/customer is required to submit confirmation of their current residence, such as a government-issued certificate of registration or a similar document.",
+    "step2_text": "Step two verification must be done by every user who deposits over {D}2,000 (two thousand pounds), withdraws over {D}2,000, or sends another user over {D}1,000 (one thousand pounds). Until step two verification is done, the withdrawal, tip, or deposit will be held. Step two verification will direct the user/customer to a page where they must submit their ID. The user/customer must take a photo of their official ID together with a slip showing a randomly generated six-digit number. Only an official ID may be used for ID verification; accepted ID types may vary by country. An electronic check will also confirm that the data filled in during step one verification is correct. If the electronic check fails or is not possible, the user/customer is required to submit confirmation of their current residence, such as a government-issued certificate of registration or a similar document.",
     "step3_title": "Step three verification:",
-    "step3_text": "Step three verification must be done by every user who deposits over {D}5,000 (five thousand dollars or crypto equivalent), withdraws over {D}5,000, or sends another user over {D}3,000 (three thousand dollars or crypto equivalent). Until step three verification is done, the withdrawal, tip, or deposit will be held. For step three, the user/customer will be asked to provide a source of wealth.",
+    "step3_text": "Step three verification must be done by every user who deposits over {D}5,000 (five thousand pounds or crypto equivalent), withdraws over {D}5,000, or sends another user over {D}3,000 (three thousand pounds or crypto equivalent). Until step three verification is done, the withdrawal, tip, or deposit will be held. For step three, the user/customer will be asked to provide a source of wealth.",
     "contact_title": "Contact us:",
     "contact_text": "If you have any questions or complaints about our AML Policy, please contact us by email: {BRAND_COMPLIANCE_EMAIL}"
   },
@@ -1792,7 +1792,7 @@
     },
     "guide": {
       "line1": "LUCKY DRAW",
-      "line2": "Win up to $777",
+      "line2": "Win up to {D}777",
       "line3": "There was <green>{{time}}</green> time",
       "line4": "Opening opportunity",
       "time": "Ends in ",
@@ -1818,7 +1818,7 @@
       "rule5": "(e.g..ban/reward deduction)",
       "ok": "OK"
     },
-    "tips": "Deposit to open boxes.<br/>Top prize : <price>$777</price>",
+    "tips": "Deposit to open boxes.<br/>Top prize : <price>{D}777</price>",
     "opens": "OPENS",
     "spin": "SPIN",
     "free": "FREE"
@@ -2163,7 +2163,7 @@
     },
     "redeemCode":{
         "title": "Free cash Every Wed",
-        "subTitle":"Win up to $100",
+        "subTitle":"Win up to {D}100",
         "desc":"Redeem"
     }
   },
@@ -2394,7 +2394,7 @@
     "invite_log": "Invite Log",
     "reward_log": "Reward Log",
     "invite_title": "Invite Friends, Both Win ",
-    "invite_desc": "When your friend deposits, you each get 50% of it (up to $50)",
+    "invite_desc": "When your friend deposits, you each get 50% of it (up to {D}50)",
     "share_link": "Share link",
     "friend_deposits": "Friend deposits",
     "inbox_reward": "Inbox reward",
@@ -2428,7 +2428,7 @@
     "all_matches": "All Matches",
     "kickoff": "Kickoff",
     "bet_close": "Betting closes 1 hour before kickoff",
-    "favorites": "Favorites",
+    "favorites": "Favourites",
     "first_bet_get": "First bet gets +50% bonus",
     "first_max_bet": "Max first stake {D}{{amount}}",
     "bet_win_home": "Home Win",
@@ -2518,7 +2518,7 @@
       "notice": {
         "line1": "Get Today's Code on Telegram",
         "line2": "Daily codes only in our official channel",
-        "line3": "Up to $1,000 in rewards"
+        "line3": "Up to {D}1,000 in rewards"
       }
     },
     "result": {
@@ -2595,7 +2595,7 @@
             "resend":"Resend code",
             "resendLimit":"Resend code - daily limit reached",
             "newCode":"New code every",
-            "higher":"Higher VIP = bigger bonus.<y>up to$100<y>",
+            "higher":"Higher VIP = bigger bonus.<y>up to {D}100<y>",
             "redeem":"Redeem",
             "changeMail":{
                 "title":"Change Email",
@@ -2645,7 +2645,7 @@
         },
         "launch":{
             "title":"Free Cash Every Wed",
-            "desc":"WIN UP TO $100<br/>REAL CASH!",
+            "desc":"WIN UP TO {D}100<br/>REAL CASH!",
             "redeem": "Redeem"
 
         }
@@ -2659,13 +2659,13 @@
     "livechat": "Live Chat",
     "livechat_desc": "In-app support with instant answers, 24/7",
     "suggestion": "Suggestion",
-    "win100": "Win$100",
-    "suggestion_desc": "Best adopted idea earns a $100 reward",
+    "win100": "Win {D}100",
+    "suggestion_desc": "Best adopted idea earns a {D}100 reward",
     "complaint": "Complaint",
     "complaint_desc": "Report an issue- priority review within 24h",
     "online": "ONLINE-Replies in under 1 min",
     "sug_banner_title": "Got an idea to make us better?",
-    "sug_banner_body": "Every month our team picks the best suggestions — if yours is adopted, you'll receive <em>up to $100</em> in your account.",
+    "sug_banner_body": "Every month our team picks the best suggestions — if yours is adopted, you'll receive <em>up to {D}100</em> in your account.",
     "category": "Category",
     "select_category": "Select a category…",
     "your_suggestion": "Your suggestion",
@@ -2682,7 +2682,7 @@
     "submitting": "Submitting…",
     "sug_done_title": "Suggestion received!",
     "ref": "Ref",
-    "sug_done_body": "If your idea is adopted, <em>up to $100</em> will be credited to your account automatically. Results are announced monthly.",
+    "sug_done_body": "If your idea is adopted, <em>up to {D}100</em> will be credited to your account automatically. Results are announced monthly.",
     "cmp_done_title": "Complaint filed.",
     "ticket": "Ticket",
     "cmp_done_body": "A senior agent will review and reply via in-app message within <em>24 hours</em>. You can also check progress in Live Chat.",
@@ -2820,4 +2820,4 @@
       "trouble": "Trouble signing in? Verify with OTP instead"
     }
   }
-}
+}

+ 1 - 1
src/migration/sim.js

@@ -107,7 +107,7 @@ export const applySimPreset = (name) => {
  */
 export const buildSimConfig = (s = getSimState()) => {
     if (s.channel_off) return { enabled: false }; // 渠道未开放迁移
-    const packText = s.vip ? "77 Free Bonus + $7 Cash" : "77 Free Bonus";
+    const packText = s.vip ? `77 Free Bonus + ${global.DOLLAR || "£"}7 Cash` : "77 Free Bonus";
     const now = Date.now();
     const blockAt = new Date(now + Number(s.block_days) * 864e5 + 7 * 36e5).toISOString();
     // 端类型 → platform 枚举(与后端一致:0 H5 / 1 iOS / 2 Android / 3 PWA);sim 下按 mig_state 粗映射

+ 3 - 3
src/tracking/SnapPixel.js

@@ -55,7 +55,7 @@ export const snap_setPixelID = (pixelID, ex_id) => {
  * @param {string} eventName - Snapchat standard event name
  * @param {object} params - Event parameters
  * @param {number} params.price - Monetary value (default: 0)
- * @param {string} params.currency - Currency code (default: 'USD')
+ * @param {string} params.currency - Currency code (default: 'GBP')
  */
 export const snap_trackEvent = (eventName, params = {}) => {
     if (!window.snaptr || !snapPixel_ID) {
@@ -66,7 +66,7 @@ export const snap_trackEvent = (eventName, params = {}) => {
     // Format parameters according to Snapchat specification
     const eventParams = {
         price: params.price !== undefined ? params.price : (params.value || 0),
-        currency: params.currency || 'USD',
+        currency: params.currency || 'GBP',
     };
 
     // Send event to Snapchat
@@ -119,4 +119,4 @@ export const snap_getPixelID = () => {
  */
 export const snap_isInitialized = () => {
     return snapPixel_Initialized;
-};
+};

+ 1 - 1
src/tracking/TrackAll.js

@@ -504,7 +504,7 @@ const trackEventGo = (eventName, params) => {
         return {
             ...data,
             value,
-            currency: data.currency || global.currency || "USD"
+            currency: data.currency || global.currency || "GBP"
         };
     };
 

+ 2 - 2
src/utils/adjust.js

@@ -83,7 +83,7 @@ const tracker = {
         // 如果是原生平台走androdSDK事件
         if (window.Capacitor?.isNativePlatform?.()) {
             let revenue = params?.revenue || 0;
-            let currency = global.currency || "USD";
+            let currency = global.currency || "GBP";
             let orderId = params?.orderId || params?.transaction_id || "";
             window.AndroidAdjust?.trackEvent?.(eventConfig.token, revenue, currency, orderId);
             return;
@@ -91,7 +91,7 @@ const tracker = {
 
         if (eventKey === "purchase_success" || eventKey === "first_pay_D0" || eventKey === "first_pay_D1") {
             let revenue = params?.revenue || 0;
-            let currency = global.currency || "USD";
+            let currency = global.currency || "GBP";
             let orderId = params?.orderId || params?.transaction_id || "";
             if (revenue > 0){
                 Adjust.trackEvent({

+ 3 - 3
src/utils/helpers.js

@@ -798,8 +798,8 @@ export const validateCPF = (cpf) => {
     return true;
 
 }
-export const formatCurrency = (value, locales = "en-US") => {
-    if (locales === "ru-RU") locales = "en-US";
+export const formatCurrency = (value, locales = "en-GB") => {
+    if (locales === "ru-RU") locales = "en-GB";
     return new Intl.NumberFormat(locales, {  // 这里的'pt-BR' 是巴西的语言区域
         minimumFractionDigits: 0,
         maximumFractionDigits: 2,
@@ -1079,7 +1079,7 @@ export const getWithdrawOnlyType = (channel) => {
 
     // if (channel.some(v => v == "paypal")) return 1;
 
-    return -1;
+    return 1;
 }
 
 export const windowOpenShare = async (url) => {

+ 5 - 5
src/widgets/HomeWithdraw/index.jsx

@@ -55,7 +55,7 @@ const HomeWithdraw = ({ data }) => {
                         style={{ width: `${progress}%` }}
                     />
                     <span className={styles.progressText}>
-                        ${withdrawInfo.InsureScore} / ${withdrawInfo.total}
+                        {global.DOLLAR}{withdrawInfo.InsureScore} / {global.DOLLAR}{withdrawInfo.total}
                     </span>
                 </>
             );
@@ -82,7 +82,7 @@ const HomeWithdraw = ({ data }) => {
                     />
 
                     <span className={styles.progressText}>
-                        ${withdrawInfo.InsureScore} / ${withdrawInfo.total}
+                        {global.DOLLAR}{withdrawInfo.InsureScore} / {global.DOLLAR}{withdrawInfo.total}
                     </span>
                 </>
             );
@@ -232,7 +232,7 @@ const HomeWithdraw = ({ data }) => {
                 <div className={styles.left}>
                     <div className={styles.top}>
                         <span>{i18n.t('homeWithdraw.total_free_bonus')}</span>
-                        <span className={styles.cash}>${withdrawInfo.InsureScore}</span>
+                        <span className={styles.cash}>{global.DOLLAR}{withdrawInfo.InsureScore}</span>
                     </div>
 
                     <div className={styles.bottom}>
@@ -256,7 +256,7 @@ const HomeWithdraw = ({ data }) => {
                 <div className={`${styles.chargedMsg}`}>
                     <div className={styles.total}>
                         <span>{i18n.t('homeWithdraw.total_free_bonus')}</span>
-                        <span className={styles.cash}>${userInfo.InsureScore}</span>
+                        <span className={styles.cash}>{global.DOLLAR}{userInfo.InsureScore}</span>
                     </div>
 
                     {can_claim ? renderCanClaim() : renderCannotClaim()}
@@ -328,7 +328,7 @@ const HomeWithdraw = ({ data }) => {
                 <div className={styles.progressPreview}>
                     <span>{i18n.t('homeWithdraw.progressMsg', { taskNum: missionNum, cash: isEndless ? "" : global.DOLLAR + mission?.reward })}</span>
                     <span className={styles.nums}>
-                        {`${missionCompleteNum}/${missionNum}`}
+                        {`{global.DOLLAR}{missionCompleteNum}/{global.DOLLAR}{missionNum}`}
                     </span>
                 </div>
 

+ 1 - 1
src/widgets/LoginForm/index.jsx

@@ -92,7 +92,7 @@ const LoginForm = ({ close, mode = "login" }) => {
                     <Trans
                         i18nKey="loginForm.logo_text"
                         values={{
-                            bonus: "$" + formatCash(registerBonus || "10", 0)
+                            bonus: (global.DOLLAR || "£") + formatCash(registerBonus || "10", 0)
                         }}
                         components={{
                             line1: <span />,

+ 3 - 3
src/widgets/ModuleGroup/index.jsx

@@ -271,7 +271,7 @@ const UserInfo = (prop) => {
                         {global.DOLLAR}
                     </div>
                     <div className={styles.wealth}>
-                        <div className={styles.cash} id="userScore">${user.Score}</div>
+                        <div className={styles.cash} id="userScore">{global.DOLLAR}{user.Score}</div>
                         <div className={styles.gold}>
                             {/* <img ref={walletRef} src={bonus} alt="" className={styles.bonus} /> */}
                             <div className={styles.num} id="userInsureScore">{user.InsureScore}</div>
@@ -364,7 +364,7 @@ const WithdrawPopup = ({ open, onClose }) => {
                     </div>
                     <div className={styles.divLine}></div>
                     <div className={styles.bottom}>
-                        <div className={styles.value}>${user?.Score ?? 0}</div>
+                        <div className={styles.value}>{global.DOLLAR}{user?.Score ?? 0}</div>
                         <div className={styles.right}>
                             <div className={styles.withdraw + " select-border "} onClick={handleClickWithdrawCash}>{i18n.t('moduleGroup.withdraw')}</div>
                             <div className={styles.plus} onClick={handleClickDeposit}>
@@ -393,7 +393,7 @@ const WithdrawPopup = ({ open, onClose }) => {
                     </div>
                     <div className={styles.divLine}></div>
                     <div className={styles.bottom}>
-                        <div className={styles.value}>${user?.InsureScore ?? 0}</div>
+                        <div className={styles.value}>{global.DOLLAR}{user?.InsureScore ?? 0}</div>
                         <div className={styles.right}>
                             <div className={styles.withdraw + " select-border "} onClick={handleClickWithdraw}>{i18n.t('moduleGroup.withdraw')}</div>
                         </div>

+ 1 - 1
src/widgets/ModuleSidebar/index.jsx

@@ -216,7 +216,7 @@ const ModuleSidebar = ({ data, variant = "content" }) => {
             line: (
                 <Trans
                     i18nKey="moduleSidebar.rescue"
-                    values={{ amount: `$${ProtectNum}` }}
+                    values={{ amount: `${global.DOLLAR}${ProtectNum}` }}
                     components={{
                         line1: <div />,
                         line2: <div className={styles.gold} />

+ 4 - 2
src/widgets/PhoneSMS/index.jsx

@@ -18,6 +18,7 @@ import { CircularProgress } from "@mui/material";
 import { toast } from 'react-toastify';
 import MainButton from '@components/Buttons/MainButton';
 import { ReactComponent as AlertIcon } from '@assets/singlesvg/icon_alert.svg';
+import { getPhoneCode } from '@constants/region';
 
 const i18n = global.i18n;
 const objInfo = {
@@ -27,16 +28,17 @@ const objInfo = {
 
 const CODE_MIN = 4;
 const CODE_MAX = 4;
+const DEFAULT_COUNTRY = String(getPhoneCode()).replace(/^\+/, "") || "44";
 
 const PhoneSMS = ({ children, callback, buttonText, handleStatus, onCountryChange, options = {}, defValues = {}, className = '' }) => {
-    const [country, setCountry] = useState("55");
+    const [country, setCountry] = useState(DEFAULT_COUNTRY);
     const [phoneValid, setPhoneValid] = useState(Boolean(defValues.phone));
     const [phoneMessage] = useState("");
     const [sendCount, setSendCount] = useState(0);
     const dispatch = useDispatch();
     const { handleSubmit, control, watch } = useForm({
         defaultValues: {
-            // country:'55',
+            // country 由当前区域配置决定。
             account: '',
             password: '',
             email: "",

+ 4 - 2
src/widgets/Userinfo/WBindInfo/WModify/WChangePhone/index.jsx

@@ -15,8 +15,10 @@ import useMobileCode from '@hooks/useMobileCode';
 import SmallLoading from '@components/SmallLoading';
 import { APP_OPT_LENGTH } from '@constants/app';
 import SendCodeBtn from '../widgets/SendCodeBtn';
+import { getPhoneCode } from '@constants/region';
 
 const i18n = global.i18n;
+const DEFAULT_COUNTRY = String(getPhoneCode()).replace(/^\+/, "") || "44";
 const WChangePhone = ({ onDone }) => {
     const dispatch = useDispatch();
     const { getOptStatus, canSendCode } = useMobileCode();
@@ -26,7 +28,7 @@ const WChangePhone = ({ onDone }) => {
 
     const [stepIdx, setStepIdx] = useState(0);
     const [oldCode, setOldCode] = useState('')
-    const [country, setCountry] = useState('1');
+    const [country, setCountry] = useState(DEFAULT_COUNTRY);
     const [newPhone, setNewPhone] = useState('');
     const [newCode, setNewCode] = useState('');
 
@@ -78,7 +80,7 @@ const WChangePhone = ({ onDone }) => {
 
     const handleGetNewCode = async () => {
         if (!checkNewPhone(newPhone, country)) return;
-        if (!validateCountryPhone(newPhone)) return;
+        if (!validateCountryPhone(country, newPhone)) return;
         if (!canSendCode(newPhone)) return;
 
         let res = await dispatch(reqSendCode({

+ 1 - 1
src/widgets/Userinfo/index.jsx

@@ -60,7 +60,7 @@ const Userinfo = () => {
     const vipExp = Number(user.vipExp) || 0;
     const vipProgress = Math.min(Math.max((vipExp / vipRequirement) * 100, 0), 100);
     const remainingRecharge = Math.max(vipRequirement - vipExp, 0);
-    const currency = global.DOLLAR || '$';
+    const currency = global.DOLLAR || '£';
     const isMaxVip = vip === maxVip;
 
     const handleEditProfile = () => {

+ 2 - 2
src/widgets/WBonus/index.jsx

@@ -35,7 +35,7 @@ const WBonus = ({ close }) => {
             content: (
                 <>
                     <div className={styles.title}>{i18n.t("bonusPage.signIn_title")}</div>
-                    <div className={styles.desc}>$1.5+</div>
+                    <div className={styles.desc}>{global.DOLLAR || "£"}1.5+</div>
                 </>
             )
         },
@@ -73,7 +73,7 @@ const WBonus = ({ close }) => {
             content: (
                 <>
                     <div className={styles.title}>{i18n.t("bonusPage.bind_title")}</div>
-                    <div className={styles.desc}>$5</div>
+                    <div className={styles.desc}>{global.DOLLAR || "£"}5</div>
                 </>
             )
         },

+ 2 - 2
src/widgets/WBrowserNotSupport/WIOSNotSupport/index.jsx

@@ -26,7 +26,7 @@ const WIOSNotSupport = ({ onClick, open, bg }) => {
                         <span className={styles.collect}>{i18n.t("browserInvaild.title")}</span>
                         <div className={styles.bonusRow}>
                             <span className={styles.bonus}>{i18n.t("browserInvaild.bonus")}</span>
-                            <span className={styles.cash}>$10 {i18n.t("browserInvaild.cash")}</span>
+                            <span className={styles.cash}>{global.DOLLAR || "£"}10 {i18n.t("browserInvaild.cash")}</span>
                         </div>
                         <div className={styles.hintbox}>
                             <div className={styles.hintCircel}>
@@ -90,4 +90,4 @@ const WIOSNotSupport = ({ onClick, open, bg }) => {
 }
 
 
-export default WIOSNotSupport;
+export default WIOSNotSupport;

+ 1 - 1
src/widgets/WBrowserNotSupport/index.jsx

@@ -107,7 +107,7 @@ const WBrowserNotSupport = () => {
                             <span className={styles.collect}>{i18n.t("browserInvaild.title")}</span>
                             <div className={styles.bonusRow}>
                                 <span className={styles.bonus}>{i18n.t("browserInvaild.bonus")}</span>
-                                <span className={styles.cash}>$10 {i18n.t("browserInvaild.cash")}</span>
+                                <span className={styles.cash}>{global.DOLLAR || "£"}10 {i18n.t("browserInvaild.cash")}</span>
                             </div>
                             <div className={styles.hintbox}>
                                 <div className={styles.hintCircel}>

+ 1 - 1
src/widgets/WCashWheel/WInviteRecord/WInviteRecordPop.jsx

@@ -34,7 +34,7 @@ const WInviteRecordPop = ({ open, onClose, openShare, closeP }) => {
                                 <div key={item.id || index} className={`${styles.list_item} ${index % 2 === 1 ? styles.dark : ""}`}>
                                     <span className={styles.id}>{item.name}</span>
                                     <span className={styles.time}>{item.phone}</span>
-                                    <span className={styles.bonus}>${formatMoney(item.amount)}</span>
+                                    <span className={styles.bonus}>{global.DOLLAR}{formatMoney(item.amount)}</span>
                                 </div>
                             );
                         })

+ 1 - 1
src/widgets/WCashWheel/WRetainPop/WRetainPop.jsx

@@ -71,7 +71,7 @@ const WRetainPop = ({ open, onClose, closeP }) => {
                             isEnableCash ? (
                                 <Trans
                                     i18nKey="cashWheel.retain.withdraw_now"
-                                    values={{ amount: `$ ${formatCash(collect)}` }}
+                                    values={{ amount: `${global.DOLLAR} ${formatCash(collect)}` }}
                                     components={{
                                         line1: <div />,
                                         amount: <div className={styles.need_txt} />,

+ 2 - 2
src/widgets/WCashWheel/WShare/WShare.jsx

@@ -154,7 +154,7 @@ const WShare = ({ open, onClose }) => {
                                 <div className={styles.text}>
                                     <Trans
                                         i18nKey="cashWheel.share.withdraw_now"
-                                        values={{ amount: `$${formatCash(collect)}` }}
+                                        values={{ amount: `${global.DOLLAR}${formatCash(collect)}` }}
                                         components={{
                                             amount: <span />
                                         }}
@@ -164,7 +164,7 @@ const WShare = ({ open, onClose }) => {
                                 <div className={styles.text}>
                                     <Trans
                                         i18nKey="cashWheel.share.need_more"
-                                        values={{ amount: `$${formatCash(left)}`, total: `$${formatCash(total)}` }}
+                                        values={{ amount: `${global.DOLLAR}${formatCash(left)}`, total: `${global.DOLLAR}${formatCash(total)}` }}
                                         components={{
                                             amount: <span />,
                                             total: <span />

+ 6 - 5
src/widgets/WCashWheel/WWheel/WWheel.jsx

@@ -27,15 +27,16 @@ const spinImg = [];
 const StyledCanvas = styled.canvas`
     background-image:url('${spinBg}');
 `;
+const CURRENCY_SYMBOL = global.DOLLAR || "£";
 const WHEEL_DATA = [
     { id: 0, type: 1, value: 0, text: "CASH ???" },
-    { id: 1, type: 2, value: 0, text: "$1000" },
-    { id: 2, type: 2, value: 0, text: "$100" },
+    { id: 1, type: 2, value: 0, text: `${CURRENCY_SYMBOL}1000` },
+    { id: 2, type: 2, value: 0, text: `${CURRENCY_SYMBOL}100` },
     { id: 3, type: 5, value: 0, text: "SACAR" },
     { id: 4, type: 1, value: 0, text: "CASH ???" },
     { id: 5, type: 4, value: 0, text: "no won" },
-    { id: 6, type: 2, value: 0, text: "$100" },
-    { id: 7, type: 2, value: 0, text: "$10000" },
+    { id: 6, type: 2, value: 0, text: `${CURRENCY_SYMBOL}100` },
+    { id: 7, type: 2, value: 0, text: `${CURRENCY_SYMBOL}10000` },
 ];
 const turnObj = {
     timer: null,
@@ -331,7 +332,7 @@ const WWheel = ({ openShare, showShare = true, onClose = null }) => {
                     c.fillText(item.text, s.width / 7.2, g + devicePixelRatioNum * fontSizeNum * .36, 3 * s.width / dataLen);
                 }
                 if (item.type === 0) {
-                    c.fillText("$" + item.value, s.width / 7.2, g + devicePixelRatioNum * fontSizeNum * .36, 3 * s.width / dataLen);
+                    c.fillText(CURRENCY_SYMBOL + item.value, s.width / 7.2, g + devicePixelRatioNum * fontSizeNum * .36, 3 * s.width / dataLen);
                 }
                 else {
                     let img = spinImg[item.type];

+ 4 - 4
src/widgets/WCashWheel/index.jsx

@@ -153,7 +153,7 @@ const WCashWheel = ({ close }) => {
                 });
             } else {
                 toast.info(
-                    i18n.t('cashWheel.toast_withdraw_tip', { amount: `$${total / 100}` }),
+                    i18n.t('cashWheel.toast_withdraw_tip', { amount: `{global.DOLLAR}${total / 100}` }),
                     { toastId: "withdraw_tip" }
                 );
             }
@@ -189,7 +189,7 @@ const WCashWheel = ({ close }) => {
                                 canWithdraw ? (
                                     <Trans
                                         i18nKey="cashWheel.withdraw_now"
-                                        values={{ amount: `$${formatCash(collect)}` }}
+                                        values={{ amount: `{global.DOLLAR}${formatCash(collect)}` }}
                                         components={{
                                             amount: <div className={styles.need_txt} />
                                         }}
@@ -197,9 +197,9 @@ const WCashWheel = ({ close }) => {
                                 ) : (
                                     <>
                                         <div>{i18n.t("turnplate.need_tip")}</div>
-                                        <div className={styles.need_txt}>${formatCash(left)}</div>
+                                        <div className={styles.need_txt}>{global.DOLLAR}{formatCash(left)}</div>
                                         <div>{i18n.t("turnplate.need_tip_1")}</div>
-                                        <div className={styles.need_txt}>${total / 100}</div>
+                                        <div className={styles.need_txt}>{global.DOLLAR}{total / 100}</div>
                                     </>
                                 )
                             }

+ 1 - 1
src/widgets/WCheckIn/index.jsx

@@ -236,7 +236,7 @@ const WCheckIn = ({ close }) => {
                                                         <img alt="" className={styles.icon} src={coinImg} />
                                                     </div>
                                                     <span className={styles.money_box}>
-                                                        ${reward}
+                                                        {global.DOLLAR}{reward}
                                                         <span className={styles.alpha_lbl}>
                                                             x{formatMul(signAlpha)}
                                                         </span>

+ 2 - 2
src/widgets/WComeBackBonus/index.jsx

@@ -47,7 +47,7 @@ const WComeBackBonus = () => {
         <Popup onClose={hide} open={isShow} popupBg={bg} btnCloseType={2}>
             <div className={styles.container}>
                 <span>{i18n.t('comeBackBonus.balance')}</span>
-                <span>$0.54</span>
+                <span>{global.DOLLAR || "£"}0.54</span>
                 <p>{i18n.t('comeBackBonus.title')}</p>
                 <div className={styles.list}>
                     {
@@ -57,7 +57,7 @@ const WComeBackBonus = () => {
                                     <img alt="" src={item.icon} />
                                 </span>
                                 <span>{item.name}</span>
-                                <span>${item.bonus}</span>
+                                <span>{global.DOLLAR || "£"}{item.bonus}</span>
                                 <span>{i18n.t('comeBackBonus.available')}</span>
                             </div>
                         ))

+ 2 - 2
src/widgets/WComeBackWithdraw/index.jsx

@@ -78,13 +78,13 @@ const WComeBackWithdraw = () => {
         <Popup onClose={handleCloseClick} open={isShow} popupBg={bg} btnCloseType={2}>
             <div className={styles.container}>
                 <span>
-                    {i18n.t('comeBackWithdraw.balance')} <span className={styles.money}>${withdrawInfo?.InsureScore}</span>
+                    {i18n.t('comeBackWithdraw.balance')} <span className={styles.money}>{global.DOLLAR}{withdrawInfo?.InsureScore}</span>
                 </span>
                 <div className={styles.content}>
                     <span>
                         <Trans
                             i18nKey="comeBackWithdraw.need_more"
-                            values={{ amount: `$${getNeedMoney()}` }}
+                            values={{ amount: `${global.DOLLAR}${getNeedMoney()}` }}
                             components={{
                                 amount: <span className={styles.money} />
                             }}

+ 3 - 3
src/widgets/WDailyGift/index.jsx

@@ -90,7 +90,7 @@ const WDailyGift = () => {
         if (!dailyGiftInfo?.list?.[currentIdx]) return "";
         const item = dailyGiftInfo.list[currentIdx];
         const price = parseFloat(item.favorable_price);
-        return Number.isFinite(price) ? `$${price.toFixed(2)}` : "";
+        return Number.isFinite(price) ? `${global.DOLLAR}${price.toFixed(2)}` : "";
     };
 
     const handleClickItem = (item, index) => {
@@ -148,9 +148,9 @@ const WDailyGift = () => {
                                 className={`${styles.l_line} ${styles.item} ${index === currentIdx ? styles.active + " select-border" : ""}`}
                                 onClick={() => { handleClickItem(item, index); }}
                             >
-                                <span>${item.money}</span>
+                                <span>{global.DOLLAR}{item.money}</span>
                                 <span>+{item.bonus}%</span>
-                                <span>${getTotalBonus(item)}</span>
+                                <span>{global.DOLLAR}{getTotalBonus(item)}</span>
 
                                 {
                                     index === currentIdx && <BadgeIcon className={styles.badge} />

+ 3 - 3
src/widgets/WDailyRechargeGift/index.jsx

@@ -107,9 +107,9 @@ const WDailyRechargeGift = () => {
                                 className={`${styles.l_line} ${styles.item} ${index === currentIdx ? styles.active + " select-border" : ""}`}
                                 onClick={() => { setCurrentIdx(index); }}
                             >
-                                <span>${item.money}</span>
+                                <span>{global.DOLLAR}{item.money}</span>
                                 <span>+{item.bonus}%</span>
-                                <span>${getTotalBonus(item)}</span>
+                                <span>{global.DOLLAR}{getTotalBonus(item)}</span>
 
                                 {
                                     index === currentIdx && <BadgeIcon className={styles.badge} />
@@ -119,7 +119,7 @@ const WDailyRechargeGift = () => {
                     }
 
                     <button onClick={handleDepositClick} className='button-red-l'>
-                        {i18n.t("dailyDeposit.deposit")} ${getCurrentMoney()}
+                        {i18n.t("dailyDeposit.deposit")} {global.DOLLAR}{getCurrentMoney()}
                     </button>
                 </div>
             </div>

+ 2 - 2
src/widgets/WDeposit/DepositHeader.jsx

@@ -3,7 +3,7 @@ import SvgIcon from "@components/SvgIcon";
 import {ReactComponent as Video} from '@assets/singlesvg/video.svg';
 import {useSelector} from "react-redux";
 import {getUserInfo, isLogined} from "@features/mainSlice";
-import USD from "@assets/lvicon/USD.black.png";
+import GBP from "@assets/lvicon/GBP.black.svg";
 import {numFormatter} from "@utils/helpers";
 import {useNavigate} from "react-router-dom";
 import {ROUTE_PATH} from "@constants/routes";
@@ -33,7 +33,7 @@ const DepositHeader=({...props})=>{
                                <div className={styles.user}>
                                    <div className={styles.uid}>{i18n.t("deposit.uid")+""+user.GameID}</div>
                                    <div className={styles.gold_con}>
-                                       <img alt="" className={styles.icon_golds} src={USD}/>
+                                       <img alt="" className={styles.icon_golds} src={GBP}/>
                                        <div className={styles.golds}>{global.DOLLAR+""+numFormatter(user.Score)}</div>
                                    </div>
                                </div>

+ 3 - 1
src/widgets/WDeposit/WPayInfo/WDepositInfo.jsx

@@ -10,11 +10,13 @@ import PhoneInput from "@components/UInput/PhoneInput";
 import {useDispatch, useSelector} from "react-redux";
 import {getKycEUStatus, getKycTypes} from "@features/paySlice";
 import {reqKycEU} from "@features/api";
+import {getPhoneCode} from "@constants/region";
 
 const i18n=global.i18n;
+const DEFAULT_COUNTRY=String(getPhoneCode()).replace(/^\+/, "") || "44";
 const WDepositInfo = () => {
     const [isShow, setIsShow] = useState(false);
-    const [country, setCountry] = useState("55");
+    const [country, setCountry] = useState(DEFAULT_COUNTRY);
     const reqKycStatus=useSelector(getKycEUStatus);
     const dispatch = useDispatch();
     //first,last,email,phone,city

+ 2 - 2
src/widgets/WExclusiveGift/index.jsx

@@ -106,7 +106,7 @@ const WExclusiveGift = () => {
                                 className={`${styles.l_line} ${styles.item} ${index === currentIdx ? styles.active + " select-border" : ""}`}
                                 onClick={() => { setCurrentIdx(index) }}
                                 disabled={item.paidToday}>
-                                <span>${item.money}</span>
+                                <span>{global.DOLLAR}{item.money}</span>
                                 <span>+{item.bonus}%</span>
                                 <span>{getTotalBonus(item)}</span>
 
@@ -124,7 +124,7 @@ const WExclusiveGift = () => {
                     }
 
                     <MainButton onClick={handleDepositClick} disabled={currentIdx < 0}>
-                        {i18n.t('exclusiveGift.deposit')} ${getCurrentMoney()}
+                        {i18n.t('exclusiveGift.deposit')} {global.DOLLAR}{getCurrentMoney()}
                     </MainButton>
                 </div>
             </div>

+ 1 - 1
src/widgets/WFixedWithdraw/index.jsx

@@ -26,7 +26,7 @@ const WFixedWithdraw = ({ score }) => {
 
     return (
         <div className={styles.container}>
-            <span>${formatCash(score)}</span>
+            <span>{global.DOLLAR}{formatCash(score)}</span>
             <WWithdrawalInfo
                 amount={amount}
                 onConfirm={onConfirm}

+ 1 - 1
src/widgets/WGameWithdrawTips/index.jsx

@@ -90,7 +90,7 @@ const WGameWithdrawTips = ({ onLeave, currentAmount, totalAoumt, forceLandscape
                 </div>
                 <div className={styles.tips}>
                     {i18n.t("gameLeaveTips.not_enough.tips")}
-                    <span className={styles.lbl_money}>{`$${lackMoney}`}</span>
+                    <span className={styles.lbl_money}>{`${global.DOLLAR}${lackMoney}`}</span>
                     {i18n.t("gameLeaveTips.not_enough.tips2")}
                 </div>
 

+ 1 - 1
src/widgets/WGoogleRedirectH5/index.jsx

@@ -267,7 +267,7 @@ const WGoogleRedirectH5 = () => {
     const rewardAmount = bonusAmountRaw > 0
         ? formatCash(bonusAmountRaw, 0)
         : (conf.reward_amount || conf.rewardAmount || 10);
-    const rewardCurrency = conf.reward_currency || conf.rewardCurrency || global.DOLLAR || "$";
+    const rewardCurrency = conf.reward_currency || conf.rewardCurrency || global.DOLLAR || "£";
     // 已领奖:APK 里仍弹引导(逼用户去 H5),但文案改成“已领奖,去 H5 玩”
     const claimed = Number(bonusConf?.claimed) === 1;
 

+ 3 - 3
src/widgets/WHolidaysAct/index.jsx

@@ -832,7 +832,7 @@ const WHolidaysAct = () => {
                                                             transition: 'opacity 0.5s ease'
                                                         }}
                                                     >
-                                                        ${rewardData[idx]}
+                                                        {global.DOLLAR}{rewardData[idx]}
                                                     </div>
                                                 )}
 
@@ -867,7 +867,7 @@ const WHolidaysAct = () => {
                                         <div className={styles.item} key={index}>
                                             <div className={styles.itemBox}>
                                                 <img src={icon_cash} alt="" className={styles.icon_cash} />
-                                                <span className={styles.price}>${rule?.amount}</span>
+                                                <span className={styles.price}>{global.DOLLAR}{rule?.amount}</span>
                                             </div>
                                             <span className={styles.plus}>+</span>
                                             <div className={styles.itemBox}>
@@ -875,7 +875,7 @@ const WHolidaysAct = () => {
                                                 <span className={styles.spinTimes}>{i18n.t("holidaysAct.spin")}+{rule?.times}</span>
                                             </div>
                                             <div className={styles.buy} onClick={() => handleBuyClick(rule)} >
-                                                ${rule?.gear?.money}
+                                                {global.DOLLAR}{rule?.gear?.money}
                                             </div>
                                         </div>
                                     );

+ 14 - 11
src/widgets/WInstallBox/WPopPwaBonus/index.jsx

@@ -14,18 +14,21 @@ import { useWithdrawMission } from "@contexts/withdrawMissionContext";
 const i18n = global.i18n;
 
 /** 取奖励包文案:后端 download.reward_pack_text 优先,回退迁移 config,最后按 bonus 兜底 */
-const readRewardText = (downConf, vip, jumpToH5) => {
-    if (downConf?.reward_pack_text) return downConf.reward_pack_text;
+const readRewardText = (downConf, vip, jumpToH5, currencySymbol) => {
+    let rewardText = downConf?.reward_pack_text || "";
     // try {
     //     const t = getMigSnapshot()?.conf?.reward_pack_text;
     //     if (t) return t;
     // } catch (e) { /* ignore */ }
-    if (vip > 0 && jumpToH5) return "77 Free Bonus + $7 Cash";
-    const b = Number(downConf?.bonus);
-    return (b ? `${formatCash(b, 0)} ` : "") + "Free Bonus";
+    if (!rewardText && vip > 0 && jumpToH5) rewardText = `77 Free Bonus + ${currencySymbol}7 Cash`;
+    if (!rewardText) {
+        const b = Number(downConf?.bonus);
+        rewardText = (b ? `${formatCash(b, 0)} ` : "") + "Free Bonus";
+    }
+    return String(rewardText).replace(/\$/g, currencySymbol);
 };
 
-/** "77 Free Bonus + $7 Cash" → { bonus:"77 Free Bonus", cash:"$7 Cash" } */
+/** 奖励包文本拆分为 bonus 与 cash 两段。 */
 const splitReward = (txt) => {
     const parts = String(txt || "").split("+").map((s) => s.trim()).filter(Boolean);
     return { bonus: parts[0] || "", cash: parts[1] || "" };
@@ -81,12 +84,12 @@ const WPopPwaBonus = () => {
 
     if (!isShow) return null;
 
-    const DOLLAR = global.DOLLAR || "$";
-    const rewardText = readRewardText(downConf, vip, jumpToH5);
+    const DOLLAR = global.DOLLAR || "£";
+    const rewardText = readRewardText(downConf, vip, jumpToH5, DOLLAR);
     const { bonus: bonusSeg, cash: cashSeg } = splitReward(rewardText);
-    // 药丸展示:数字开头补 $ →「$77 Free Bonus」;现金段本身已带 $
+    // 数字开头的奖励段补当前区域货币符号;现金段已在读取时统一币种。
     const bonusPill = /^\s*\d/.test(bonusSeg) ? DOLLAR + bonusSeg : bonusSeg;
-    // 明细行数值:Bonus +77.00 + Cash +$7.00
+    // 明细行数值:Bonus +77.00 + Cash +£7.00
     const bonusNum = firstNum(bonusSeg) || (Number(downConf?.bonus) ? String(Number(downConf?.bonus)) : "");
     const bonusVal = bonusNum ? Number(bonusNum).toFixed(2) : "";
     const cashNum = firstNum(cashSeg);
@@ -111,7 +114,7 @@ const WPopPwaBonus = () => {
             <div className={styles.content}>
                 <img className={styles.money} src={imgMoney} alt="" />
 
-                {/* 绿色奖励药丸:💵 $77 Free Bonus + ✈️ $7 Cash */}
+                {/* 绿色奖励药丸使用当前区域货币符号。 */}
                 <div className={styles.pill}>
                     <span className={styles.seg}><span className={styles.emo}>💵</span>{bonusPill}</span>
                     {cashSeg && (

+ 4 - 4
src/widgets/WLuckyRoll/index.jsx

@@ -963,8 +963,8 @@ const WLuckyRoll = () => {
 
     const renderRulePopup = () => {
         // const normalPrices = luckyRollInfo?.packages?.normal?.map((item) => global.DOLLAR + item?.price);
-        const normalPrices = (luckyRollInfo?.packages?.normal || []).map(item => item?.price != null ? `${global.DOLLAR || "$"}${item.price}` : null).filter(Boolean);
-        const vipPrices = (luckyRollInfo?.packages?.vip || []).map(item => item?.price != null ? `${global.DOLLAR || "$"}${item.price}` : null).filter(Boolean);
+        const normalPrices = (luckyRollInfo?.packages?.normal || []).map(item => item?.price != null ? `${global.DOLLAR || "£"}${item.price}` : null).filter(Boolean);
+        const vipPrices = (luckyRollInfo?.packages?.vip || []).map(item => item?.price != null ? `${global.DOLLAR || "£"}${item.price}` : null).filter(Boolean);
 
         // const maxCash = Math.max(...board?.filter((item) => item.type === "gold")?.map((item) => item?.value));
         let maxFreeCash = 17;
@@ -1738,11 +1738,11 @@ const WLuckyRoll = () => {
                 </div>
                 <div className={styles.gameTabs}>
                     <div className={`${styles.gameTab} ${gameTab === 0 ? styles.active : ""}`} onClick={() => handleClickGameTab(0)}>
-                        {i18n.t("luckyRoll.starter")} $77
+                        {i18n.t("luckyRoll.starter")} {global.DOLLAR || "£"}77
                         {renderGameTabRedPoint(0)}
                     </div>
                     <div className={`${styles.gameTab} ${gameTab === 1 ? styles.active : ""}`} onClick={() => handleClickGameTab(1)}>
-                        {i18n.t("luckyRoll.royal")} $777
+                        {i18n.t("luckyRoll.royal")} {global.DOLLAR || "£"}777
                         {renderGameTabRedPoint(1)}
                     </div>
                 </div>

+ 1 - 1
src/widgets/WMigLanding/index.jsx

@@ -132,7 +132,7 @@ const WMigLanding = () => {
             <div className={styles.cards}>
                 <div className={styles.row}>
                     <span className={styles.ic}>💵</span>
-                    <span className={styles.lbl}>{T("migration.landing.balance")} <b className={styles.val}>${balance}</b></span>
+                    <span className={styles.lbl}>{T("migration.landing.balance")} <b className={styles.val}>{global.DOLLAR}{balance}</b></span>
                     <span className={styles.synced}>✓ {T("migration.landing.synced")}</span>
                 </div>
                 <div className={styles.row}>

+ 7 - 4
src/widgets/WMigration/index.jsx

@@ -122,13 +122,16 @@ const useCountdown = (blockAt) => {
     return t;
 };
 
+const normaliseRewardCurrency = (value) =>
+    String(value || "77 Free Bonus").replace(/\$/g, global.DOLLAR || "£");
+
 const vars = (conf) => ({
-    reward_pack: conf?.reward_pack_text || "77 Free Bonus",
-    block_date: conf?.block_at ? new Date(conf.block_at).toLocaleDateString("en-US", { month: "long", day: "numeric" }) : "",
+    reward_pack: normaliseRewardCurrency(conf?.reward_pack_text),
+    block_date: conf?.block_at ? new Date(conf.block_at).toLocaleDateString("en-GB", { month: "long", day: "numeric" }) : "",
     n: conf?.hard_block?.later_remaining ?? 0
 });
 
-/** 拆分后端 reward_pack_text:"77 Free Bonus + $7 Cash" → { bonus, cash } */
+/** 拆分后端 reward_pack_text 奖励文案。 */
 const splitReward = (txt) => {
     const parts = String(txt || "77 Free Bonus").split("+").map((s) => s.trim());
     return { bonus: parts[0] || "77 Free Bonus", cash: parts[1] || "" };
@@ -208,7 +211,7 @@ const MigSoftPopup = ({ conf, which, onClose }) => {
             <div className={styles.card}>
                 <button className={styles.x} onClick={() => { migTrack("mig_soft_close", { which }); onClose(); }}>✕</button>
                 <img className={styles.illus} src={imgMoney} alt="" />
-                {/* 主标题=奖励 bonus 段;$X Cash 段以绿色药丸展示(非 VIP 无 cash 段则不显示) */}
+                {/* 主标题为奖励 bonus 段;Cash 段以绿色药丸展示。 */}
                 <div className={styles.amt}>{bonus}</div>
                 {cash ? <div className={styles.chip}><img src={imgPillCash} alt="" />{cash}</div> : null}
                 <div className={styles.t1}>{copy.headline}</div>

+ 1 - 1
src/widgets/WNewUserPrompt/index.jsx

@@ -124,7 +124,7 @@ const WNewUserPrompt = () => {
                             <Trans
                                 className={styles.item}
                                 i18nKey="newUserPrompt.tips_1"
-                                values={{ amount: '$10' }}
+                                values={{ amount: `${global.DOLLAR || "£"}10` }}
                                 components={{
                                     highlight: <span className={styles.money} />
                                 }}

+ 6 - 5
src/widgets/WOfficialGuide/index.jsx

@@ -33,7 +33,7 @@ const WOfficialGuide = () => {
         if (!inputString) return [];
 
         // 正则详细拆解:
-        // 1. (?:\p{Sc}\s*[\d,]+(?:\.\d+)?)  -> 匹配货币:如 $13,000, ¥500.50
+        // 1. (?:\p{Sc}\s*[\d,]+(?:\.\d+)?)  -> 匹配货币:如 £13,000, ¥500.50
         // 2. |                              -> 或者
         // 3. (?:[\d,]+%)                    -> 匹配百分比:如 140%, 50% (放在前面防止匹配成纯数字)
         // 4. |                              -> 或者
@@ -45,15 +45,16 @@ const WOfficialGuide = () => {
         return result || [];
     }, []);
     const formatDesc = useCallback((desc) => {
-        let nums = extractAllFinancials(desc);
-        let n_desc = desc;
+        const normalisedDesc = String(desc || "").replace(/\$/g, global.DOLLAR || "£");
+        let nums = extractAllFinancials(normalisedDesc);
+        let n_desc = normalisedDesc;
         for (let i = 0; i < nums.length; i++) {
             let num_str = nums[i];
             let r_str = `<${i + 1}></${i + 1}>`;
             n_desc = n_desc.replace(num_str, r_str);
         }
         return {
-            o_desc: desc,
+            o_desc: normalisedDesc,
             n_desc,
             nums
         }
@@ -138,7 +139,7 @@ const WOfficialGuide = () => {
                                 key={i}
                                 value={nums[i]}
                                 autoAnimationStart={false}
-                                separatorCharacters={["$", "%"]}
+                                separatorCharacters={[global.DOLLAR || "£", "$", "%"]}
                                 ref={(el) => {
                                     if (el) {
                                         slotsRefs.current[`${index}_${i}`] = el;

+ 1 - 1
src/widgets/WPaymentMethods/index.jsx

@@ -76,7 +76,7 @@ const WPaymentMethods = () => {
                     {
                         subs.map((gear, idx) => {
                             const config = PaymentGears[gear] || {};
-                    const active = subIdx === idx;
+                            const active = subIdx === idx;
                             return (
                                 <div key={`sub_gear_${gear}`}
                                     className={`${styles.sub_item} ${active && 'select-border'}`}

+ 1 - 1
src/widgets/WPromotion2/index.jsx

@@ -153,7 +153,7 @@ const WPromotion = ({ close }) => {
                             />
                         </div>
                         <div className={styles.desc}>
-                            {firstGift.has_purchased ? `$${firstGift.total_bonus}` : `${firstGift.bonus_percent}%`}
+                            {firstGift.has_purchased ? `${global.DOLLAR}${firstGift.total_bonus}` : `${firstGift.bonus_percent}%`}
                         </div>
                         {
                             firstGift.has_purchased && <div className={styles.bottom}>

+ 2 - 2
src/widgets/WRecharge/index.jsx

@@ -85,7 +85,7 @@ const WRecharge = ({ goods = EMPTY_GOODS, onSelect, goodsName = "", giftId = 0,
             </div>
 
             <div className={styles.amount_box}>
-                <div className={styles.money}>$</div>
+                <div className={styles.money}>{global.DOLLAR}</div>
                 <div>{amount}</div>
             </div>
 
@@ -95,7 +95,7 @@ const WRecharge = ({ goods = EMPTY_GOODS, onSelect, goodsName = "", giftId = 0,
                         <div key={`recharge_grid_${index}`} className={`${styles.item}  ${goodsIdx === index ? styles.active : ""}`}
                             onClick={() => { onGoodsClick(index) }}>
                             <div className={styles.item_amount}>
-                                <div className={styles.item_amount_money}>$</div>
+                                <div className={styles.item_amount_money}>{global.DOLLAR}</div>
                                 <div>{item.money}</div>
                             </div>
                             {

+ 1 - 1
src/widgets/WRechargeGears/index.jsx

@@ -219,7 +219,7 @@ const WRechargeGears = ({
                         groups.map((gear, idx) => {
                             const config = getPaymentConfig(gear);
                             const bonus_percent = config?.bonus_percent || 0;
-                    const active = subIdx === idx;
+                            const active = subIdx === idx;
                             let extraClass = "";
                             if (active) {
                                 extraClass = bonus_percent > 0 ? styles.bonus : styles.active;

+ 2 - 2
src/widgets/WReferral/index.jsx

@@ -41,7 +41,7 @@ const WReferral = () => {
     if (type === WITHDRAW_TYPE.SHARE) {
         return (
             <div className={styles.container}>
-                <span>${collectedAmount.toFixed(2)}</span>
+                <span>{global.DOLLAR}{collectedAmount.toFixed(2)}</span>
                 <WWithdrawalInfo
                     paypalTips
                     togType={2}
@@ -54,7 +54,7 @@ const WReferral = () => {
     } else if (type === WITHDRAW_TYPE.MISSION) {
         return (
             <div className={styles.container}>
-                <span>${missionScore.toFixed(2)}</span>
+                <span>{global.DOLLAR}{missionScore.toFixed(2)}</span>
                 <WWithdrawalInfo
                     paypalTips
                     togType={2}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
src/widgets/WServices/index.jsx


+ 1 - 1
src/widgets/WSuperBall/Common/WSummary.jsx

@@ -17,7 +17,7 @@ const WSummary = () => {
             <div className={`${styles.item} ${styles.special}`}>
                 <div className={styles.corner}></div>
                 <span>{i18n.t("superBall.base_ball")}</span>
-                <span>${today?.base_reward_per_ball_display}</span>
+                <span>{global.DOLLAR}{today?.base_reward_per_ball_display}</span>
             </div>
         </div>
     )

+ 1 - 1
src/widgets/WSuperBall/WSuperBallBanner.jsx

@@ -25,7 +25,7 @@ export const WSuperBallBanner = () => {
                 </div>
                 <div className={styles.info_box}>
                     <span>{i18n.t("superBall.base_ball")}</span>
-                    <span>${base_prize}</span>
+                    <span>{global.DOLLAR}{base_prize}</span>
                 </div>
             </div>
         </div>

+ 1 - 1
src/widgets/WSuperBall/WSuperBallDesc/index.jsx

@@ -137,7 +137,7 @@ const WSuperBallDesc = () => {
                                 <div className={styles.tips}>
                                     <span>{i18n.t("superBall.est_reward")}</span>
 
-                                    <span>= ${(today.base_reward_per_ball_display + 1) * totalBallCount}</span>
+                                    <span>= {global.DOLLAR}{(today.base_reward_per_ball_display + 1) * totalBallCount}</span>
                                 </div>
                             </div>
                         </div>

+ 2 - 2
src/widgets/WSuperBall/WSuperBallMission/WConfirmMission.jsx

@@ -57,12 +57,12 @@ const WConfirmMission = ({ open, onClose, mission, onConfirm, upgrade = false })
                     <div className={styles.desc}>
                         <div>
                             <span>{i18n.t("superBall.deposit_target")}</span>
-                            <span>${mission.recharge_required}</span>
+                            <span>{global.DOLLAR}{mission.recharge_required}</span>
                         </div>
 
                         <div>
                             <span>{i18n.t("superBall.bet_target")}</span>
-                            <span>${mission.turnover_required}</span>
+                            <span>{global.DOLLAR}{mission.turnover_required}</span>
                         </div>
                     </div>
 

+ 7 - 7
src/widgets/WSuperBall/WSuperBallPopup/WSuperBallPrize.jsx

@@ -70,24 +70,24 @@ const WSuperBallPrize = ({ prizeBox = false }) => {
             <div className={styles.prizeBox}>
                 <span>
                     <span>{i18n.t("superBall.your_prize")}</span>
-                    <span>$ {prize_number}</span>
+                    <span>{global.DOLLAR} {prize_number}</span>
                 </span>
 
                 <span className={styles.desc_box}>
                     <span>
                         <span>
-                            {i18n.t("superBall.base_prize")} (${basePrize} x {balls.length})
+                            {i18n.t("superBall.base_prize")} ({global.DOLLAR}{basePrize} x {balls.length})
                         </span>
                         <span>
-                            ${basePrize * balls.length}
+                            {global.DOLLAR}{basePrize * balls.length}
                         </span>
                     </span>
                     <span className={styles.special}>
                         <span>
-                            {i18n.t("superBall.lucky_prize")} (${luckyPrize} x {luckyCount})
+                            {i18n.t("superBall.lucky_prize")} ({global.DOLLAR}{luckyPrize} x {luckyCount})
                         </span>
                         <span>
-                            + ${luckyPrize * luckyCount}
+                            + {global.DOLLAR}{luckyPrize * luckyCount}
                         </span>
                     </span>
                 </span>
@@ -98,7 +98,7 @@ const WSuperBallPrize = ({ prizeBox = false }) => {
                             {i18n.t("superBall.subtotal")}
                         </span>
                         <span>
-                            = ${basePrize * balls.length + luckyPrize * luckyCount}
+                            = {global.DOLLAR}{basePrize * balls.length + luckyPrize * luckyCount}
                         </span>
                     </span>
                     <span>
@@ -190,7 +190,7 @@ const WSuperBallPrize = ({ prizeBox = false }) => {
                             claimPrizeStatus === REQ_STATUS.LOADING && <SmallLoading fill='#fff' />
                         }
                         {
-                            (claimPrizeStatus !== REQ_STATUS.LOADING && canClaim) && <span>{i18n.t("superBall.claim_prize")} ${yesterday.pending_prize}</span>
+                            (claimPrizeStatus !== REQ_STATUS.LOADING && canClaim) && <span>{i18n.t("superBall.claim_prize")} {global.DOLLAR}{yesterday.pending_prize}</span>
                         }
                         {
                             (claimPrizeStatus !== REQ_STATUS.LOADING && !canClaim) && <span>{i18n.t("superBall.start_mission")}</span>

+ 1 - 1
src/widgets/WWithdraw/WWithdrawForm/WWithdrawForm.jsx

@@ -25,7 +25,7 @@ const WWithdrawForm = ({ maxAmount = 40 }) => {
                 </div>
             </div>
             <div className={styles.amount_box}>
-                $
+                {global.DOLLAR}
                 <input
                     className={styles.input_box}
                     type='number' value={amount}

+ 1 - 1
src/widgets/WWithdrawalInfo/Security/WSecurityCheck.jsx

@@ -13,7 +13,7 @@ import { WithdrawType } from '@db/payment';
 
 const i18n = global.i18n;
 
-const timesFormatter = new Intl.DateTimeFormat('en-US', {
+const timesFormatter = new Intl.DateTimeFormat('en-GB', {
     month: 'short',   // 缩写月份 (May)
     day: 'numeric',   // 数字日期 (12)
     year: 'numeric',  // 完整年份 (2026)

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio