student 1 ヶ月 前
コミット
c95d028318

+ 182 - 61
website/Areas/Millions/Views/Home/BuyTicket.cshtml

@@ -256,7 +256,7 @@ else
                                     <div class="ball-circle ball-empty"></div>
                                     @if (Model.termType == Constants.Millions_CODE && j == 5)
                                     {
-                                        <div class="absolute -bottom-1 -right-1 bg-[#FFD700] text-black text-[9px] font-black px-[3px] py-[2px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>
+                                        <div class="absolute -bottom-[6px] -right-[4px] bg-[#FFD700] text-black text-[8.5px] font-black px-[2.5px] py-[1.5px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>
                                     }
                                 </div>
                             }
@@ -505,13 +505,26 @@ else
             var card = $(btn).closest('.ticket-card');
             var balls = card.find('.ball-circle');
             
-            // Generate unique random numbers 1-80
+            // Generate unique random numbers
             var numbers = [];
-            while(numbers.length < maxBalls){
-                var r = Math.floor(Math.random() * 80) + 1;
-                if(numbers.indexOf(r) === -1) numbers.push(r);
+            if ("@Model.termType" === "@Constants.Millions_CODE") {
+                // First 5 standard balls (1-70)
+                while(numbers.length < 5){
+                    var r = Math.floor(Math.random() * 70) + 1;
+                    if(numbers.indexOf(r) === -1) numbers.push(r);
+                }
+                numbers.sort((a, b) => a - b);
+                
+                // 6th Mega Ball (1-24)
+                var mb = Math.floor(Math.random() * 24) + 1;
+                numbers.push(mb);
+            } else {
+                while(numbers.length < maxBalls){
+                    var r = Math.floor(Math.random() * 80) + 1;
+                    if(numbers.indexOf(r) === -1) numbers.push(r);
+                }
+                numbers.sort((a, b) => a - b);
             }
-            numbers.sort((a, b) => a - b);
             
             // Update balls with staggered animation
             balls.each(function(index) {
@@ -590,7 +603,6 @@ else
                 title.text("Pick Number");
                 countArea.addClass('hidden');
                 confirmBtn.removeClass('hidden').text("@Lang.confirm");
-                // Single mode logic is handled by setting selectedNumbers previously or here
             }
             
             updateSelectionCount(); 
@@ -603,61 +615,146 @@ else
                 container.stop().animate({ scrollTop: scrollPos - 15 }, 500);
             }
 
-            // Populate Grid
-            for (var i = 1; i <= 80; i++) {
-                var formatted = i.toString().padStart(2, '0');
-                var isSelected = selectedNumbers.includes(formatted);
+            var isMillions = "@Model.termType" === "@Constants.Millions_CODE";
+            
+            if (isMillions) {
+                // Millions Split UI: 1-70 (cols-7) | Divider | 1-24 (cols-3)
+                var splitHtml = `
+                    <div class="flex gap-3 h-full">
+                         <!-- Left: Standard (1-70) -->
+                         <div class="flex-1 flex flex-col h-full min-w-0">
+                              <span class="text-[10px] font-black text-blue-600 mb-1 uppercase tracking-wider shrink-0">Standard (1-70)</span>
+                              <div class="flex-1 overflow-y-auto grid grid-cols-7 gap-1 pr-1 pb-2" id="standardGrid" style="scrollbar-width: thin; scrollbar-color: #0062FF transparent;"></div>
+                         </div>
+                         <!-- Divider -->
+                         <div class="w-[1px] bg-gray-300 self-stretch my-1 shrink-0"></div>
+                         <!-- Right: Mega Ball (1-24) -->
+                         <div class="w-[105px] flex flex-col h-full shrink-0">
+                              <span class="text-[10px] font-black text-red-600 mb-1 uppercase tracking-wider shrink-0 text-center">Mega (1-24)</span>
+                              <div class="flex-1 overflow-y-auto grid grid-cols-3 gap-1 pl-1 pb-2" id="megaGrid" style="scrollbar-width: thin; scrollbar-color: #E3132D transparent;"></div>
+                         </div>
+                    </div>
+                `;
+                grid.append(splitHtml);
                 
-                var btnClass = isSelected 
-                    ? 'bg-[#0062FF] text-white shadow-md scale-105 active-num' 
-                    : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
+                var standardContainer = $("#standardGrid");
+                var megaContainer = $("#megaGrid");
                 
-                grid.append(`<button type="button" class="num-btn w-8 h-8 rounded-full font-black text-[11px] transition-all focus:outline-none flex items-center justify-center ${btnClass}">${formatted}</button>`);
-            }
-
-            // Cleanup old listeners and add new one to the grid (event delegation)
-            grid.off('click', '.num-btn').on('click', '.num-btn', function(e) {
-                e.preventDefault();
-                var $btn = $(this);
-                var picked = $btn.text().trim();
+                // Populate Standard (1-70)
+                for (var i = 1; i <= 70; i++) {
+                    var formatted = i.toString().padStart(2, '0');
+                    var isSelected = selectedNumbers.slice(0, 5).includes(formatted);
+                    var btnClass = isSelected 
+                        ? 'bg-[#0062FF] text-white shadow-sm' 
+                        : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
+                    
+                    standardContainer.append(`<button type="button" class="std-num-btn w-[26px] h-[26px] rounded-full font-black text-[9.5px] transition-all flex items-center justify-center ${btnClass}">${formatted}</button>`);
+                }
                 
-                if (isMultiMode) {
-                    if (selectedNumbers.includes(picked)) {
-                        // Remove
-                        let idx = selectedNumbers.indexOf(picked);
-                        if (idx !== -1) selectedNumbers[idx] = null;
-                        $btn.removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
-                    } else {
-                        // Add
-                        let firstEmpty = selectedNumbers.indexOf(null);
-                        if (firstEmpty !== -1) {
-                            selectedNumbers[firstEmpty] = picked;
-                            $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
-                        }
-                    }
-                    liveUpdateTicket();
-                } else {
-                    // Single Select mode
-                    var exists = false;
-                    if (activeTicketCard) {
-                        activeTicketCard.find('.ball-filled').each(function() {
-                            if (activeBall && this !== activeBall[0] && $(this).text().trim() === picked) {
-                                exists = true;
+                // Populate Mega (1-24)
+                for (var i = 1; i <= 24; i++) {
+                    var formatted = i.toString().padStart(2, '0');
+                    var isSelected = selectedNumbers[5] === formatted;
+                    var btnClass = isSelected 
+                        ? 'bg-[#E3132D] text-white shadow-sm' 
+                        : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
+                    
+                    megaContainer.append(`<button type="button" class="mega-num-btn w-[26px] h-[26px] rounded-full font-black text-[9.5px] transition-all flex items-center justify-center ${btnClass}">${formatted}</button>`);
+                }
+                
+                // Standard Grid Click Handler
+                standardContainer.on('click', '.std-num-btn', function(e) {
+                    e.preventDefault();
+                    var $btn = $(this);
+                    var picked = $btn.text().trim();
+                    
+                    if (isMultiMode) {
+                        var stdSelected = selectedNumbers.slice(0, 5);
+                        if (stdSelected.includes(picked)) {
+                            // Deselect
+                            let idx = selectedNumbers.indexOf(picked);
+                            if (idx !== -1 && idx < 5) selectedNumbers[idx] = null;
+                            $btn.removeClass('bg-[#0062FF] text-white shadow-sm').addClass('bg-white text-gray-700 border border-gray-100');
+                        } else {
+                            // Select standard ball (first empty slot in 0-4)
+                            let emptyIdx = -1;
+                            for (var k = 0; k < 5; k++) {
+                                if (selectedNumbers[k] === null) {
+                                    emptyIdx = k;
+                                    break;
+                                }
                             }
-                        });
+                            if (emptyIdx !== -1) {
+                                selectedNumbers[emptyIdx] = picked;
+                                $btn.addClass('bg-[#0062FF] text-white shadow-sm').removeClass('bg-white text-gray-700 border border-gray-100');
+                            }
+                        }
+                        liveUpdateTicket();
                     }
-                    if (exists) {
-                        if (typeof showNotification === "function") {
-                            showNotification("Number already selected", "warning");
+                    updateSelectionCount();
+                });
+                
+                // Mega Grid Click Handler
+                megaContainer.on('click', '.mega-num-btn', function(e) {
+                    e.preventDefault();
+                    var $btn = $(this);
+                    var picked = $btn.text().trim();
+                    
+                    if (isMultiMode) {
+                        if (selectedNumbers[5] === picked) {
+                            // Deselect Mega Ball
+                            selectedNumbers[5] = null;
+                            $btn.removeClass('bg-[#E3132D] text-white shadow-sm').addClass('bg-white text-gray-700 border border-gray-100');
+                        } else {
+                            // Overwrite Mega Ball
+                            selectedNumbers[5] = picked;
+                            megaContainer.find('.mega-num-btn').removeClass('bg-[#E3132D] text-white shadow-sm').addClass('bg-white text-gray-700 border border-gray-100');
+                            $btn.addClass('bg-[#E3132D] text-white shadow-sm').removeClass('bg-white text-gray-700 border border-gray-100');
                         }
-                        return;
+                        liveUpdateTicket();
                     }
-                    grid.find('.num-btn').removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
-                    selectedNumbers = [picked];
-                    $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
+                    updateSelectionCount();
+                });
+                
+            } else {
+                // Default Pick 10 UI: 1-80 Grid
+                var normalHtml = `<div class="grid grid-cols-10 gap-1.5 w-full pb-2 h-full overflow-y-auto" id="normalGrid"></div>`;
+                grid.append(normalHtml);
+                var normalContainer = $("#normalGrid");
+                
+                for (var i = 1; i <= 80; i++) {
+                    var formatted = i.toString().padStart(2, '0');
+                    var isSelected = selectedNumbers.includes(formatted);
+                    
+                    var btnClass = isSelected 
+                        ? 'bg-[#0062FF] text-white shadow-md scale-105 active-num' 
+                        : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
+                    
+                    normalContainer.append(`<button type="button" class="num-btn w-8 h-8 rounded-full font-black text-[11px] transition-all focus:outline-none flex items-center justify-center ${btnClass}">${formatted}</button>`);
                 }
-                updateSelectionCount();
-            });
+                
+                normalContainer.on('click', '.num-btn', function(e) {
+                    e.preventDefault();
+                    var $btn = $(this);
+                    var picked = $btn.text().trim();
+                    
+                    if (isMultiMode) {
+                        if (selectedNumbers.includes(picked)) {
+                            let idx = selectedNumbers.indexOf(picked);
+                            if (idx !== -1) selectedNumbers[idx] = null;
+                            $btn.removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
+                        } else {
+                            let firstEmpty = selectedNumbers.indexOf(null);
+                            if (firstEmpty !== -1) {
+                                selectedNumbers[firstEmpty] = picked;
+                                $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
+                            }
+                        }
+                        liveUpdateTicket();
+                    }
+                    updateSelectionCount();
+                });
+            }
 
             modal.removeClass('hidden').addClass('flex');
             modal.find('.modal-content').removeClass('animate__zoomOut').addClass('animate__zoomIn');
@@ -723,8 +820,28 @@ else
                 if (count === 0) return;
 
                 if (isMultiMode && activeTicketCard && activeTicketCard.length > 0) {
-                    // Collect and sort for final storage/display (lottery numbers are usually sorted)
-                    var finalSorted = selectedNumbers.filter(n => n !== null && n !== "").sort((a, b) => parseInt(a) - parseInt(b));
+                    // Double check validation for Mega Ball before confirming
+                    if ("@Model.termType" === "@Constants.Millions_CODE") {
+                        var mbVal = selectedNumbers[5];
+                        if (mbVal) {
+                            var mbValInt = parseInt(mbVal);
+                            if (mbValInt < 1 || mbValInt > 24) {
+                                showNotification("🎱 @Lang.millions_megaball_invalid_title\n@Lang.millions_megaball_invalid_desc", "warning");
+                                return;
+                            }
+                        }
+                    }
+
+                    // Keep exact selected order, do not sort!
+                    var finalSorted = [];
+                    if ("@Model.termType" === "@Constants.Millions_CODE") {
+                        var first5 = selectedNumbers.slice(0, 5).filter(n => n !== null && n !== "");
+                        var mb = selectedNumbers[5];
+                        finalSorted = first5;
+                        if (mb) finalSorted.push(mb);
+                    } else {
+                        finalSorted = selectedNumbers.filter(n => n !== null && n !== "");
+                    }
                     
                     var balls = activeTicketCard.find('.ball-circle');
                     balls.removeClass('ball-filled').addClass('ball-empty').text('');
@@ -795,7 +912,7 @@ else
             var ballsHtml = '';
             var isMillions = @(Model.termType == Constants.Millions_CODE ? "true" : "false");
             for (var i = 0; i < maxBalls; i++) {
-                var mbIndicator = (isMillions && i === 5) ? '<div class="absolute -bottom-1 -right-1 bg-[#FFD700] text-black text-[9px] font-black px-[3px] py-[2px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>' : '';
+                var mbIndicator = (isMillions && i === 5) ? '<div class="absolute -bottom-[6px] -right-[4px] bg-[#FFD700] text-black text-[8.5px] font-black px-[2.5px] py-[1.5px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>' : '';
                 ballsHtml += '<div class="relative w-fit"><div class="ball-circle ball-empty"></div>' + mbIndicator + '</div>';
             }
 
@@ -1133,7 +1250,7 @@ else
             if (gameTypeStr === "@Constants.PIC10_BIGSMALL_CODE" || gameTypeStr === "@Constants.PIC10_ODDEVEN_CODE") {
                 choiceText = $("#summaryTicketList .flex.items-center span.font-black").first().text().trim();
             } else {
-                choiceText = gameTypeStr === "@Constants.Millions_CODE" ? "Millions 6" : "PICK 10";
+                choiceText = gameTypeStr === "@Constants.Millions_CODE" ? "Millions" : "PICK 10";
             }
             $("#receiptChoice").text(choiceText);
             
@@ -1201,7 +1318,11 @@ else
             const iconEl = $("#notificationModal img");
             const btnEl = $("#notificationModal button");
             
-            msgEl.text(message);
+            if (message && message.includes("\n")) {
+                msgEl.html(message.replace(/\n/g, '<br/>'));
+            } else {
+                msgEl.text(message);
+            }
             
             if (code === "-2" || (message && message.includes("System is upgrading"))) {
                 systemUpgrading = true;
@@ -1325,8 +1446,8 @@ else
                 #numberGrid::-webkit-scrollbar-thumb { background: #FFD700; border-radius: 10px; }
                 #numberGrid { scrollbar-width: thin; scrollbar-color: #FFD700 transparent; }
             </style>
-            <div class="p-1 px-2 grid grid-cols-10 gap-1.5 h-[160px] overflow-y-auto bg-gray-50 border-b" id="numberGrid">
-                 <!-- 1-80 populated via JS -->
+            <div class="p-2 h-[220px] overflow-hidden bg-gray-50 border-b" id="numberGrid">
+                 <!-- Populated via JS -->
             </div>
             <div class="p-3 bg-white border-t flex gap-3">
                  <button onclick="closeNumberPicker()" class="flex-1 py-1 bg-gray-100 text-gray-600 rounded-lg font-black text-[12px] active:bg-gray-200 transition-all uppercase">

+ 5 - 3
website/Areas/Millions/Views/Home/GameHome.cshtml

@@ -156,9 +156,11 @@
                     @Lang.millions_mega_jackpot
                 </p>
                 <p class="text-white text-xs mt-2">@Lang.millions_estimate_jackpot_prize</p>
-                <p class="leading-none mt-1 flex items-start" style="margin-bottom:18px;">
-                    <span class="mega-amount mega-jackpot-spiral text-[40px] font-condensed text-gold-gradient tracking-tight leading-none">@Utils.FormatMoney(Model.bolet ?? "30000000")</span>
-                    <span class="mega-jackpot-spiral text-gold-gradient text-sm font-bold uppercase ml-1">@Lang.v2_htg</span>
+                <p class="leading-none mt-1" style="margin-bottom:18px;">
+                    <span class="mega-jackpot-spiral inline-flex items-start">
+                        <span class="mega-amount text-[40px] font-condensed text-gold-gradient tracking-tight leading-none">@Utils.FormatMoney(Model.bolet ?? "30000000")</span>
+                        <span class="text-gold-gradient text-sm font-bold uppercase ml-2 mt-0.5">@Lang.v2_htg</span>
+                    </span>
                 </p>
                 <p class="text-white text-[10px] mt-1 ">@Lang.millions_be_the_next_millionaire</p>
                 <div class="relative z-10 mt-1 flex items-end justify-between gap-2">

+ 26 - 0
website/Areas/Millions/Views/Home/Rule.cshtml

@@ -126,7 +126,33 @@
                         <div class="match-col">@Lang.millions_match_mega_only</div>
                         <div class="prize-col">10</div>
                     </div>
+            </div>
+            
+            <!-- Note Section -->
+            <div class="rule-section note-section" style="margin-top: 32px; border-top: 1.5px dashed #eee; padding-top: 20px;">
+                <style>
+                    .note-section .rule-list {
+                        margin-top: 8px;
+                    }
+                    .note-section .rule-item-no-bullet::before {
+                        content: none !important;
+                    }
+                    .note-section .rule-item-no-bullet {
+                        padding-left: 0 !important;
+                        font-weight: 700;
+                        color: #1A1A1A;
+                    }
+                </style>
+                <div class="section-header" style="margin-bottom: 8px;">
+                    <span class="section-emoji">📌</span>
+                    <div class="section-title">@Lang.millions_note_title</div>
                 </div>
+                <ul class="rule-list">
+                    <li class="rule-item rule-item-no-bullet">@Lang.millions_note_coin_rate</li>
+                    <li class="rule-item" style="margin-top: 10px;">@Lang.millions_note_rewards_credit</li>
+                    <li class="rule-item rule-subitem" style="color: #555; font-size: 13px;">@Lang.millions_note_conversion_main</li>
+                    <li class="rule-item rule-subitem" style="color: #555; font-size: 13px;">@Lang.millions_note_conversion_natcash</li>
+                </ul>
             </div>
         </div>
     </div>

+ 10 - 0
website/Areas/Millions/Views/Home/TransferWinMoney.cshtml

@@ -168,6 +168,7 @@
 
                 <h2 class="transfer-success-title">@Lang.success</h2>
                 <p class="transfer-success-sub">@Lang.millions_payment_successfully</p>
+                <p id="successTransferNote" class="transfer-success-sub" style="color: #0A9800; font-size: 14px; margin-top: -6px; margin-bottom: 12px; font-weight: 800; text-align: center;"></p>
 
                 <div class="transfer-success-panel">
                     <div class="transfer-success-row">
@@ -574,6 +575,15 @@
                         const formattedTime = `${pad(now.getDate())}/${pad(now.getMonth() + 1)}/${now.getFullYear()} - ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`;
                         $("#successTime").text(formattedTime);
 
+                        // Set dynamic transfer note based on channel
+                        const noteWallet = "@Html.Raw(Lang.millions_reward_transferred_to_wallet)";
+                        const noteMainAccount = "@Html.Raw(Lang.millions_reward_transferred_to_main_account)";
+                        if (selectedChannel === 1) {
+                            $("#successTransferNote").html(noteMainAccount);
+                        } else {
+                            $("#successTransferNote").html(noteWallet);
+                        }
+
                         $("#successModal").removeClass("hidden").addClass("flex");
                     } else {
                         if (res.responseCode === "-2" || (res.message && res.message.includes("System is upgrading"))) {

+ 99 - 0
website/Languages/Lang.Designer.cs

@@ -2142,6 +2142,24 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Mega Ball must be between 01–24.
+        /// </summary>
+        public static string millions_megaball_invalid_desc {
+            get {
+                return ResourceManager.GetString("millions_megaball_invalid_desc", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Mega Ball Invalid.
+        /// </summary>
+        public static string millions_megaball_invalid_title {
+            get {
+                return ResourceManager.GetString("millions_megaball_invalid_title", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Money Ticket.
         /// </summary>
@@ -2205,6 +2223,33 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to (*) 1 coin = 1 HTG.
+        /// </summary>
+        public static string millions_note_coin_rate {
+            get {
+                return ResourceManager.GetString("millions_note_coin_rate", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to 1 Winning Coin = 1 HTG in Main Balance.
+        /// </summary>
+        public static string millions_note_conversion_main {
+            get {
+                return ResourceManager.GetString("millions_note_conversion_main", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to 1 Winning Coin = 1 HTG in NatCash.
+        /// </summary>
+        public static string millions_note_conversion_natcash {
+            get {
+                return ResourceManager.GetString("millions_note_conversion_natcash", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Le résultat est annoncé publiquement et vérifié.
         /// </summary>
@@ -2223,6 +2268,15 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Rewards will be credited to the Winning Coins balance. Customers can convert Winning Coins into their Main Balance or NatCash balance (excluding Jackpot rewards)..
+        /// </summary>
+        public static string millions_note_rewards_credit {
+            get {
+                return ResourceManager.GetString("millions_note_rewards_credit", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Merci pour votre confiance et votre soutien.
         /// </summary>
@@ -2232,6 +2286,15 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Note:.
+        /// </summary>
+        public static string millions_note_title {
+            get {
+                return ResourceManager.GetString("millions_note_title", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to now.
         /// </summary>
@@ -2403,6 +2466,24 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to 💸 Reward transferred to Main Account.
+        /// </summary>
+        public static string millions_reward_transferred_to_main_account {
+            get {
+                return ResourceManager.GetString("millions_reward_transferred_to_main_account", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to 💸 Reward transferred to Wallet.
+        /// </summary>
+        public static string millions_reward_transferred_to_wallet {
+            get {
+                return ResourceManager.GetString("millions_reward_transferred_to_wallet", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Tou.
         /// </summary>
@@ -2502,6 +2583,24 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Standard Ball must be between 01–70.
+        /// </summary>
+        public static string millions_standardball_invalid_desc {
+            get {
+                return ResourceManager.GetString("millions_standardball_invalid_desc", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Standard Ball Invalid.
+        /// </summary>
+        public static string millions_standardball_invalid_title {
+            get {
+                return ResourceManager.GetString("millions_standardball_invalid_title", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to {0} subscribers won.
         /// </summary>

+ 33 - 0
website/Languages/Lang.fr.resx

@@ -1921,4 +1921,37 @@ We’ll help you create an account in a few easy steps.</value>
   <data name="millions_view_all_results" xml:space="preserve">
     <value>Voir tous les résultats</value>
   </data>
+  <data name="millions_megaball_invalid_title" xml:space="preserve">
+    <value>Mega Ball Invalide</value>
+  </data>
+  <data name="millions_megaball_invalid_desc" xml:space="preserve">
+    <value>Mega Ball doit être entre 01 et 24</value>
+  </data>
+  <data name="millions_standardball_invalid_title" xml:space="preserve">
+    <value>Standard Ball Invalide</value>
+  </data>
+  <data name="millions_standardball_invalid_desc" xml:space="preserve">
+    <value>Standard Ball doit être entre 01 et 70</value>
+  </data>
+  <data name="millions_note_title" xml:space="preserve">
+    <value>Remarque:</value>
+  </data>
+  <data name="millions_note_coin_rate" xml:space="preserve">
+    <value>(*) 1 coin = 1 HTG</value>
+  </data>
+  <data name="millions_note_rewards_credit" xml:space="preserve">
+    <value>• Les récompenses seront créditées sur le solde des Winning Coins. Les clients peuvent convertir les Winning Coins en leur solde principal ou solde NatCash (à l'exclusion des récompenses Jackpot).</value>
+  </data>
+  <data name="millions_note_conversion_main" xml:space="preserve">
+    <value>1 Winning Coin = 1 HTG sur le solde principal</value>
+  </data>
+  <data name="millions_note_conversion_natcash" xml:space="preserve">
+    <value>1 Winning Coin = 1 HTG sur NatCash</value>
+  </data>
+  <data name="millions_reward_transferred_to_wallet" xml:space="preserve">
+    <value>💸 Récompense transférée vers le portefeuille</value>
+  </data>
+  <data name="millions_reward_transferred_to_main_account" xml:space="preserve">
+    <value>💸 Récompense transférée vers le compte principal</value>
+  </data>
 </root>

+ 33 - 0
website/Languages/Lang.resx

@@ -1922,4 +1922,37 @@ Apre yo fin tire 20 nimewo, sistem nan konte konbyen nimewo ki enpe oswa pe: &lt
   <data name="millions_view_all_results" xml:space="preserve">
     <value>View all results</value>
   </data>
+  <data name="millions_megaball_invalid_title" xml:space="preserve">
+    <value>Mega Ball Invalid</value>
+  </data>
+  <data name="millions_megaball_invalid_desc" xml:space="preserve">
+    <value>Mega Ball must be between 01–24</value>
+  </data>
+  <data name="millions_standardball_invalid_title" xml:space="preserve">
+    <value>Standard Ball Invalid</value>
+  </data>
+  <data name="millions_standardball_invalid_desc" xml:space="preserve">
+    <value>Standard Ball must be between 01–70</value>
+  </data>
+  <data name="millions_note_title" xml:space="preserve">
+    <value>Note:</value>
+  </data>
+  <data name="millions_note_coin_rate" xml:space="preserve">
+    <value>(*) 1 coin = 1 HTG</value>
+  </data>
+  <data name="millions_note_rewards_credit" xml:space="preserve">
+    <value>Rewards will be credited to the Winning Coins balance. Customers can convert Winning Coins into their Main Balance or NatCash balance (excluding Jackpot rewards).</value>
+  </data>
+  <data name="millions_note_conversion_main" xml:space="preserve">
+    <value>1 Winning Coin = 1 HTG in Main Balance</value>
+  </data>
+  <data name="millions_note_conversion_natcash" xml:space="preserve">
+    <value>1 Winning Coin = 1 HTG in NatCash</value>
+  </data>
+  <data name="millions_reward_transferred_to_wallet" xml:space="preserve">
+    <value>💸 Reward transferred to Wallet</value>
+  </data>
+  <data name="millions_reward_transferred_to_main_account" xml:space="preserve">
+    <value>💸 Reward transferred to Main Account</value>
+  </data>
 </root>