student пре 3 недеља
родитељ
комит
6fb9779f6d

+ 13 - 13
Kitty_Fall/Kitty_Fall/Kitty_Fall.Apis/Business/Game/GameBusinessImpl.cs

@@ -188,7 +188,7 @@ namespace Kitty_Fall.Apis.Business.Game
                 log.Error("UserGameActivityHistory Exception: ", exception);
                 log.Error("UserGameActivityHistory Exception: ", exception);
             }
             }
 
 
-            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "An error was happened", new { });
+            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.errorOccurred, new { });
         }
         }
 
 
         public async Task<IActionResult> UserLeaderboard(HttpRequest httpRequest, UserLeaderboardReq request)
         public async Task<IActionResult> UserLeaderboard(HttpRequest httpRequest, UserLeaderboardReq request)
@@ -330,7 +330,7 @@ namespace Kitty_Fall.Apis.Business.Game
                 log.Error("UserLeaderboard Exception: ", exception);
                 log.Error("UserLeaderboard Exception: ", exception);
             }
             }
 
 
-            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "An error was happened", new { });
+            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.errorOccurred, new { });
         }
         }
 
 
         public async Task<IActionResult> UserDailyWinners(HttpRequest httpRequest, UserDailyWinnersReq request)
         public async Task<IActionResult> UserDailyWinners(HttpRequest httpRequest, UserDailyWinnersReq request)
@@ -450,7 +450,7 @@ namespace Kitty_Fall.Apis.Business.Game
                 log.Error("UserDailyWinners Exception: ", exception);
                 log.Error("UserDailyWinners Exception: ", exception);
             }
             }
 
 
-            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "An error was happened", new { });
+            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.errorOccurred, new { });
         }
         }
 
 
         public async Task<IActionResult> UserMonthlyWinners(HttpRequest httpRequest, UserMonthlyWinnersReq request)
         public async Task<IActionResult> UserMonthlyWinners(HttpRequest httpRequest, UserMonthlyWinnersReq request)
@@ -567,7 +567,7 @@ namespace Kitty_Fall.Apis.Business.Game
                 log.Error("UserMonthlyWinners Exception: ", exception);
                 log.Error("UserMonthlyWinners Exception: ", exception);
             }
             }
 
 
-            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "An error was happened", new { });
+            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.errorOccurred, new { });
         }
         }
 
 
         public async Task<IActionResult> UserStartGameSession(HttpRequest httpRequest, UserGameLevelResultReq request)
         public async Task<IActionResult> UserStartGameSession(HttpRequest httpRequest, UserGameLevelResultReq request)
@@ -589,16 +589,16 @@ namespace Kitty_Fall.Apis.Business.Game
 
 
                 if (string.IsNullOrWhiteSpace(request.transId))
                 if (string.IsNullOrWhiteSpace(request.transId))
                 {
                 {
-                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Missing transaction id", new { });
+                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.missingTransactionId, new { });
                 }
                 }
 
 
                 var now = DateTime.Now;
                 var now = DateTime.Now;
                 var mode = await GetGameModeAsync(request.gameType);
                 var mode = await GetGameModeAsync(request.gameType);
-                if (mode == null) return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Game mode is not configured", new { });
+                if (mode == null) return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.gameModeNotConfigured, new { });
                 var levelNo = NormalizeRequestedLevel(request.level);
                 var levelNo = NormalizeRequestedLevel(request.level);
                 if (levelNo == null || !await IsConfiguredLevelAsync(mode.ModeId, levelNo.Value))
                 if (levelNo == null || !await IsConfiguredLevelAsync(mode.ModeId, levelNo.Value))
                 {
                 {
-                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Game level is not configured", new { });
+                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.gameLevelNotConfigured, new { });
                 }
                 }
 
 
                 var account = await dbContext.AccountUsers.AsNoTracking()
                 var account = await dbContext.AccountUsers.AsNoTracking()
@@ -674,7 +674,7 @@ namespace Kitty_Fall.Apis.Business.Game
                 log.Error("UserStartGameSession Exception: ", exception);
                 log.Error("UserStartGameSession Exception: ", exception);
             }
             }
 
 
-            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "An error was happened", new { });
+            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.errorOccurred, new { });
         }
         }
 
 
         public async Task<IActionResult> UserSaveLevelResult(HttpRequest httpRequest, UserGameLevelResultReq request)
         public async Task<IActionResult> UserSaveLevelResult(HttpRequest httpRequest, UserGameLevelResultReq request)
@@ -696,16 +696,16 @@ namespace Kitty_Fall.Apis.Business.Game
 
 
                 if (string.IsNullOrWhiteSpace(request.transId))
                 if (string.IsNullOrWhiteSpace(request.transId))
                 {
                 {
-                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Missing transaction id", new { });
+                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.missingTransactionId, new { });
                 }
                 }
 
 
                 var now = DateTime.Now;
                 var now = DateTime.Now;
                 var mode = await GetGameModeAsync(request.gameType);
                 var mode = await GetGameModeAsync(request.gameType);
-                if (mode == null) return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Game mode is not configured", new { });
+                if (mode == null) return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.gameModeNotConfigured, new { });
                 var levelNo = NormalizeRequestedLevel(request.level);
                 var levelNo = NormalizeRequestedLevel(request.level);
                 if (levelNo == null)
                 if (levelNo == null)
                 {
                 {
-                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Game level is not configured", new { });
+                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.gameLevelNotConfigured, new { });
                 }
                 }
 
 
                 var account = await dbContext.AccountUsers.AsNoTracking()
                 var account = await dbContext.AccountUsers.AsNoTracking()
@@ -750,7 +750,7 @@ namespace Kitty_Fall.Apis.Business.Game
                     .FirstOrDefaultAsync();
                     .FirstOrDefaultAsync();
                 if (levelConfig == null)
                 if (levelConfig == null)
                 {
                 {
-                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Game level is not configured", new { });
+                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.gameLevelNotConfigured, new { });
                 }
                 }
 
 
                 var clientScore = ClampScore(request.score, MaxAttemptScore);
                 var clientScore = ClampScore(request.score, MaxAttemptScore);
@@ -932,7 +932,7 @@ namespace Kitty_Fall.Apis.Business.Game
                 log.Error("UserSaveLevelResult Exception: ", exception);
                 log.Error("UserSaveLevelResult Exception: ", exception);
             }
             }
 
 
-            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "An error was happened", new { });
+            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.errorOccurred, new { });
         }
         }
 
 
         private async Task<decimal> NextDecimalIdAsync(string type)
         private async Task<decimal> NextDecimalIdAsync(string type)

+ 22 - 22
Kitty_Fall/Kitty_Fall/Kitty_Fall.Apis/Business/User/UserBusinessImpl.cs

@@ -123,7 +123,7 @@ namespace Kitty_Fall.Apis.Business.User
                 url,
                 url,
                 json,
                 json,
                 CommonErrorCode.Error,
                 CommonErrorCode.Error,
-                "An error was happened",
+                Lang.errorOccurred,
                 new { }
                 new { }
             );
             );
         }
         }
@@ -204,7 +204,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
 
 
@@ -236,7 +236,7 @@ namespace Kitty_Fall.Apis.Business.User
                       url,
                       url,
                       json,
                       json,
                      CommonErrorCode.Error,
                      CommonErrorCode.Error,
-                        "User info is not existed.",
+                        Lang.accountNotExisted,
                       new
                       new
                       {
                       {
                       }
                       }
@@ -261,7 +261,7 @@ namespace Kitty_Fall.Apis.Business.User
                     url,
                     url,
                     json,
                     json,
                    CommonErrorCode.SUCCESS,
                    CommonErrorCode.SUCCESS,
-                    "Success",
+                      Lang.success,
                      new { packages = query, totalPage = o }
                      new { packages = query, totalPage = o }
                   );
                   );
             }
             }
@@ -273,7 +273,7 @@ namespace Kitty_Fall.Apis.Business.User
                     url,
                     url,
                     json,
                     json,
                    CommonErrorCode.Error,
                    CommonErrorCode.Error,
-                "An error was happened",
+                Lang.errorOccurred,
                 new { }
                 new { }
                   );
                   );
         }
         }
@@ -354,7 +354,7 @@ namespace Kitty_Fall.Apis.Business.User
                     url,
                     url,
                     json,
                     json,
                     CommonErrorCode.SUCCESS,
                     CommonErrorCode.SUCCESS,
-                    "Success",
+                    Lang.success,
                     new
                     new
                     {
                     {
                         accountUser = userAccounts,
                         accountUser = userAccounts,
@@ -370,7 +370,7 @@ namespace Kitty_Fall.Apis.Business.User
             {
             {
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
                 return await Task.FromResult<IActionResult>(
                 return await Task.FromResult<IActionResult>(
-                    new BadRequestObjectResult(new { message = "Bad request" })
+                    new BadRequestObjectResult(new { message = Lang.badRequest })
                 );
                 );
             }
             }
         }
         }
@@ -485,7 +485,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
 
 
@@ -584,7 +584,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
 
 
@@ -681,7 +681,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
 
 
@@ -770,7 +770,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
 
 
@@ -886,7 +886,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
 
 
@@ -1010,7 +1010,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
         public async Task<IActionResult> UserOtpConfirm(
         public async Task<IActionResult> UserOtpConfirm(
@@ -1110,7 +1110,7 @@ namespace Kitty_Fall.Apis.Business.User
                     url,
                     url,
                     json,
                     json,
                   CommonErrorCode.SUCCESS,
                   CommonErrorCode.SUCCESS,
-                    "Success",
+                    Lang.success,
                     new
                     new
                     {
                     {
                         accountUser = userAccounts,
                         accountUser = userAccounts,
@@ -1124,7 +1124,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
 
 
@@ -1159,7 +1159,7 @@ namespace Kitty_Fall.Apis.Business.User
 
 
                 if (verifySubscription && string.IsNullOrWhiteSpace(myIdToken))
                 if (verifySubscription && string.IsNullOrWhiteSpace(myIdToken))
                 {
                 {
-                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "Missing MyID access token", new { });
+                    return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.missingMyIdAccessToken, new { });
                 }
                 }
 
 
                 if (verifySubscription)
                 if (verifySubscription)
@@ -1167,7 +1167,7 @@ namespace Kitty_Fall.Apis.Business.User
                     var verified = await VerifyMyIdSubscriptionAsync(msisdn, myIdToken!);
                     var verified = await VerifyMyIdSubscriptionAsync(msisdn, myIdToken!);
                     if (!verified)
                     if (!verified)
                     {
                     {
-                        return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "MyID authentication failed", new { });
+                        return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.myIdAuthenticationFailed, new { });
                     }
                     }
                 }
                 }
 
 
@@ -1220,7 +1220,7 @@ namespace Kitty_Fall.Apis.Business.User
                     url,
                     url,
                     json,
                     json,
                     CommonErrorCode.SUCCESS,
                     CommonErrorCode.SUCCESS,
-                    "Success",
+                    Lang.success,
                     new
                     new
                     {
                     {
                         accountUser = account,
                         accountUser = account,
@@ -1233,7 +1233,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("MyIdAutoLogin Exception: ", exception);
                 log.Error("MyIdAutoLogin Exception: ", exception);
             }
             }
 
 
-            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, "An error was happened", new { });
+            return CommonLogic.BuildResponse(url, json, CommonErrorCode.Error, Lang.errorOccurred, new { });
         }
         }
 
 
         private async Task<bool> VerifyMyIdSubscriptionAsync(string msisdn, string myIdToken)
         private async Task<bool> VerifyMyIdSubscriptionAsync(string msisdn, string myIdToken)
@@ -1303,7 +1303,7 @@ namespace Kitty_Fall.Apis.Business.User
                      url,
                      url,
                      json,
                      json,
                         CommonErrorCode.Error,
                         CommonErrorCode.Error,
-                        "Msisdn is invalid",
+                        Lang.msisdnInvalid,
                         new { }
                         new { }
                     );
                     );
                 }
                 }
@@ -1352,7 +1352,7 @@ namespace Kitty_Fall.Apis.Business.User
                     url,
                     url,
                     json,
                     json,
                     CommonErrorCode.SUCCESS,
                     CommonErrorCode.SUCCESS,
-                    "Success",
+                    Lang.success,
                     new
                     new
                     {
                     {
                         accountUser = userAccounts[0],
                         accountUser = userAccounts[0],
@@ -1366,7 +1366,7 @@ namespace Kitty_Fall.Apis.Business.User
                 log.Error("Exception: ", exception);
                 log.Error("Exception: ", exception);
             }
             }
             return await Task.FromResult<IActionResult>(
             return await Task.FromResult<IActionResult>(
-                new BadRequestObjectResult(new { message = "Bad request" })
+                new BadRequestObjectResult(new { message = Lang.badRequest })
             );
             );
         }
         }
         private static object GetHttpSendRequest()
         private static object GetHttpSendRequest()

+ 7 - 7
Kitty_Fall/Kitty_Fall/Kitty_Fall.Apis/Common/Logic.cs

@@ -71,19 +71,19 @@ namespace Kitty_Fall.Apis.Common
         {
         {
             if (errorCode == "0")
             if (errorCode == "0")
             {
             {
-                return "Success";
+                return Language.Lang.success;
             }
             }
             else if (errorCode == "100")
             else if (errorCode == "100")
             {
             {
-                return "WAITING OTP";
+                return Language.Lang.waitingOtp;
             }
             }
             else if (errorCode == "416")
             else if (errorCode == "416")
             {
             {
-                return "Your OTP is wrong";
+                return Language.Lang.otpwrong;
             }
             }
             else if (errorCode == "415")
             else if (errorCode == "415")
             {
             {
-                return "Your OTP is not valid";
+                return Language.Lang.otpInvalid;
             }
             }
             else if (errorCode == "401" || errorCode == "103")
             else if (errorCode == "401" || errorCode == "103")
             {
             {
@@ -91,13 +91,13 @@ namespace Kitty_Fall.Apis.Common
             }
             }
             else if (errorCode == "408" || errorCode == "2000")
             else if (errorCode == "408" || errorCode == "2000")
             {
             {
-                return "You have registered this service";
+                return Language.Lang.serviceAlreadyRegistered;
             }
             }
             else if (errorCode == "417")
             else if (errorCode == "417")
             {
             {
-                return "Error USSD time out";
+                return Language.Lang.ussdTimeout;
             }
             }
-            return "An error was happened";
+            return Language.Lang.errorOccurred;
         }
         }
     }
     }
 }
 }

+ 3 - 2
Kitty_Fall/Kitty_Fall/Kitty_Fall.Apis/Filters/JwtAuthFilter.cs

@@ -2,6 +2,7 @@ using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 using Common;
 using Common;
+using Kitty_Fall.Apis.Language;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Mvc.Filters;
 using Microsoft.AspNetCore.Mvc.Filters;
@@ -58,8 +59,8 @@ namespace Kitty_Fall.Apis.Filters
                 context.Result = new OkObjectResult(new
                 context.Result = new OkObjectResult(new
                 {
                 {
                     errorCode = 401,
                     errorCode = 401,
-                    message = "Unauthorized",
-                    msg = "Unauthorized",
+                    message = Lang.unauthorized,
+                    msg = Lang.unauthorized,
                     status = false,
                     status = false,
                     data = new { }
                     data = new { }
                 });
                 });

+ 66 - 0
Kitty_Fall/Kitty_Fall/Kitty_Fall.Apis/Language/Lang.Designer.cs

@@ -365,5 +365,71 @@ namespace Kitty_Fall.Apis.Language {
                 return ResourceManager.GetString("userOrPassWrong", resourceCulture);
                 return ResourceManager.GetString("userOrPassWrong", resourceCulture);
             }
             }
         }
         }
+
+        public static string badRequest {
+            get {
+                return ResourceManager.GetString("badRequest", resourceCulture);
+            }
+        }
+
+        public static string errorOccurred {
+            get {
+                return ResourceManager.GetString("errorOccurred", resourceCulture);
+            }
+        }
+
+        public static string missingTransactionId {
+            get {
+                return ResourceManager.GetString("missingTransactionId", resourceCulture);
+            }
+        }
+
+        public static string gameModeNotConfigured {
+            get {
+                return ResourceManager.GetString("gameModeNotConfigured", resourceCulture);
+            }
+        }
+
+        public static string gameLevelNotConfigured {
+            get {
+                return ResourceManager.GetString("gameLevelNotConfigured", resourceCulture);
+            }
+        }
+
+        public static string missingMyIdAccessToken {
+            get {
+                return ResourceManager.GetString("missingMyIdAccessToken", resourceCulture);
+            }
+        }
+
+        public static string myIdAuthenticationFailed {
+            get {
+                return ResourceManager.GetString("myIdAuthenticationFailed", resourceCulture);
+            }
+        }
+
+        public static string waitingOtp {
+            get {
+                return ResourceManager.GetString("waitingOtp", resourceCulture);
+            }
+        }
+
+        public static string otpInvalid {
+            get {
+                return ResourceManager.GetString("otpInvalid", resourceCulture);
+            }
+        }
+
+        public static string serviceAlreadyRegistered {
+            get {
+                return ResourceManager.GetString("serviceAlreadyRegistered", resourceCulture);
+            }
+        }
+
+        public static string ussdTimeout {
+            get {
+                return ResourceManager.GetString("ussdTimeout", resourceCulture);
+            }
+        }
     }
     }
 }
 }

+ 34 - 1
Kitty_Fall/Kitty_Fall/Kitty_Fall.Apis/Language/Lang.resx

@@ -219,4 +219,37 @@
   <data name="unauthorizedOrNotEmployer" xml:space="preserve">
   <data name="unauthorizedOrNotEmployer" xml:space="preserve">
     <value>Unauthorized or not an employer</value>
     <value>Unauthorized or not an employer</value>
   </data>
   </data>
-</root>
+  <data name="badRequest" xml:space="preserve">
+    <value>Bad request</value>
+  </data>
+  <data name="errorOccurred" xml:space="preserve">
+    <value>An error occurred</value>
+  </data>
+  <data name="missingTransactionId" xml:space="preserve">
+    <value>Transaction ID is required</value>
+  </data>
+  <data name="gameModeNotConfigured" xml:space="preserve">
+    <value>Game mode is not configured</value>
+  </data>
+  <data name="gameLevelNotConfigured" xml:space="preserve">
+    <value>Game level is not configured</value>
+  </data>
+  <data name="missingMyIdAccessToken" xml:space="preserve">
+    <value>MyID access token is required</value>
+  </data>
+  <data name="myIdAuthenticationFailed" xml:space="preserve">
+    <value>MyID authentication failed</value>
+  </data>
+  <data name="waitingOtp" xml:space="preserve">
+    <value>Waiting for OTP</value>
+  </data>
+  <data name="otpInvalid" xml:space="preserve">
+    <value>OTP is invalid</value>
+  </data>
+  <data name="serviceAlreadyRegistered" xml:space="preserve">
+    <value>You have registered this service</value>
+  </data>
+  <data name="ussdTimeout" xml:space="preserve">
+    <value>USSD request timed out</value>
+  </data>
+</root>

+ 23 - 4
Kitty_Fall/Kitty_Fall/Kitty_Fall.Website/wwwroot/kitty/css/all.min.css

@@ -325,14 +325,14 @@ button {
     top: var(--hero-top);
     top: var(--hero-top);
     width: 100%;
     width: 100%;
     height: 360px;
     height: 360px;
-    overflow: hidden;
+    overflow: visible;
     pointer-events: none;
     pointer-events: none;
 }
 }
 
 
 .kitty-logo {
 .kitty-logo {
     position: absolute;
     position: absolute;
     z-index: 1;
     z-index: 1;
-    top: -12px;
+    top: -40px;
     left: 50%;
     left: 50%;
     width: 260px;
     width: 260px;
     transform: translateX(calc(-50% - 3px)) rotate(3.7deg);
     transform: translateX(calc(-50% - 3px)) rotate(3.7deg);
@@ -341,7 +341,7 @@ button {
 .kitty-cat {
 .kitty-cat {
     position: absolute;
     position: absolute;
     z-index: 2;
     z-index: 2;
-    top: 68px;
+    top: 56px;
     left: 50%;
     left: 50%;
     width: 271px;
     width: 271px;
     height: 299px;
     height: 299px;
@@ -353,7 +353,7 @@ button {
 .play-button {
 .play-button {
     position: absolute;
     position: absolute;
     z-index: 5;
     z-index: 5;
-    top: calc(var(--hero-top) + 326px);
+    top: calc(var(--hero-top) + 314px);
     left: 50%;
     left: 50%;
     width: 200px;
     width: 200px;
     height: 48px;
     height: 48px;
@@ -3902,3 +3902,22 @@ button {
         transform-origin: center;
         transform-origin: center;
     }
     }
 }
 }
+
+@media (max-height: 719px) {
+    .kitty-logo {
+        top: 0;
+        width: 220px;
+    }
+
+    .kitty-cat {
+        top: 55px;
+        width: 230px;
+        height: 254px;
+    }
+
+    .play-button {
+        top: calc(var(--hero-top) + 270px);
+        width: 190px;
+        height: 46px;
+    }
+}

+ 23 - 4
Kitty_Fall/Kitty_Fall/Kitty_Fall.Website/wwwroot/kitty/css/input.css

@@ -325,14 +325,14 @@ button {
     top: var(--hero-top);
     top: var(--hero-top);
     width: 100%;
     width: 100%;
     height: 360px;
     height: 360px;
-    overflow: hidden;
+    overflow: visible;
     pointer-events: none;
     pointer-events: none;
 }
 }
 
 
 .kitty-logo {
 .kitty-logo {
     position: absolute;
     position: absolute;
     z-index: 1;
     z-index: 1;
-    top: -12px;
+    top: -28px;
     left: 50%;
     left: 50%;
     width: 260px;
     width: 260px;
     transform: translateX(calc(-50% - 3px)) rotate(3.7deg);
     transform: translateX(calc(-50% - 3px)) rotate(3.7deg);
@@ -341,7 +341,7 @@ button {
 .kitty-cat {
 .kitty-cat {
     position: absolute;
     position: absolute;
     z-index: 2;
     z-index: 2;
-    top: 68px;
+    top: 56px;
     left: 50%;
     left: 50%;
     width: 271px;
     width: 271px;
     height: 299px;
     height: 299px;
@@ -353,7 +353,7 @@ button {
 .play-button {
 .play-button {
     position: absolute;
     position: absolute;
     z-index: 5;
     z-index: 5;
-    top: calc(var(--hero-top) + 326px);
+    top: calc(var(--hero-top) + 314px);
     left: 50%;
     left: 50%;
     width: 200px;
     width: 200px;
     height: 48px;
     height: 48px;
@@ -3902,3 +3902,22 @@ button {
         transform-origin: center;
         transform-origin: center;
     }
     }
 }
 }
+
+@media (max-height: 719px) {
+    .kitty-logo {
+        top: 0;
+        width: 220px;
+    }
+
+    .kitty-cat {
+        top: 55px;
+        width: 230px;
+        height: 254px;
+    }
+
+    .play-button {
+        top: calc(var(--hero-top) + 270px);
+        width: 190px;
+        height: 46px;
+    }
+}

+ 4 - 3
Kitty_Fall/Kitty_Fall/Kitty_Fall.Website/wwwroot/kitty/js/all.min.js

@@ -7,10 +7,11 @@ const initKittyFall = () => {
 
 
         const packageShell = app.querySelector(".package-shell");
         const packageShell = app.querySelector(".package-shell");
         const appHeight = app.clientHeight;
         const appHeight = app.clientHeight;
-        const topFloor = 152;
-        const playOffset = 296;
+        const isCompactHeight = appHeight <= 719;
+        const topFloor = isCompactHeight ? 160 : 152;
+        const playOffset = isCompactHeight ? 270 : 314;
         const playHeight = 48;
         const playHeight = 48;
-        const bottomGap = 20;
+        const bottomGap = isCompactHeight ? 8 : 20;
         const heroBlockHeight = playOffset + playHeight;
         const heroBlockHeight = playOffset + playHeight;
         const packageTop = packageShell ? packageShell.offsetTop : appHeight;
         const packageTop = packageShell ? packageShell.offsetTop : appHeight;
         const centeredTop = (appHeight - heroBlockHeight) / 2;
         const centeredTop = (appHeight - heroBlockHeight) / 2;

+ 4 - 3
Kitty_Fall/Kitty_Fall/Kitty_Fall.Website/wwwroot/kitty/js/input.js

@@ -7,10 +7,11 @@ const initKittyFall = () => {
 
 
         const packageShell = app.querySelector(".package-shell");
         const packageShell = app.querySelector(".package-shell");
         const appHeight = app.clientHeight;
         const appHeight = app.clientHeight;
-        const topFloor = 152;
-        const playOffset = 296;
+        const isCompactHeight = appHeight <= 719;
+        const topFloor = isCompactHeight ? 160 : 152;
+        const playOffset = isCompactHeight ? 270 : 314;
         const playHeight = 48;
         const playHeight = 48;
-        const bottomGap = 20;
+        const bottomGap = isCompactHeight ? 8 : 20;
         const heroBlockHeight = playOffset + playHeight;
         const heroBlockHeight = playOffset + playHeight;
         const packageTop = packageShell ? packageShell.offsetTop : appHeight;
         const packageTop = packageShell ? packageShell.offsetTop : appHeight;
         const centeredTop = (appHeight - heroBlockHeight) / 2;
         const centeredTop = (appHeight - heroBlockHeight) / 2;