Browse Source

魔盒页面的语言设置改为存入自定义配置文件中

felix 1 year ago
parent
commit
f43a7cb057

+ 23 - 27
Vinno.FIS.Sonopost/Assets/wwwroot/js/index.js

@@ -1,8 +1,8 @@
-$(function () {
+$(async function () {
     if (!window.isModernBrowser) return;
 
     const sessionId = window.utils.guid();
-    const runtime = loadRuntime();
+    const runtime = await loadRuntime();
     const app = loadApplication(runtime);
 
     // expose for debugging
@@ -13,8 +13,8 @@ $(function () {
      * 装载运行时(应用能力集)
      * @returns {object} runtime
      */
-    function loadRuntime() {
-        var locale = initLocale();
+    async function loadRuntime() {
+        var locale = await initLocale();
         initLayVerify(locale);
         invokeApi._t = locale.translate;
 
@@ -66,9 +66,17 @@ $(function () {
                 elLangSelector.find("a")
                     .each(function () {
                         $(this)
-                            .on("click", function () {
+                            .on("click", async function () {
                                 let lang = $(this)
                                     .data("lang");
+                                let request = {
+                                    Language: lang,
+                                };
+                                let res = await invokeApi("System", "SetPageLanguage", request);
+                                if (!res.IsSuccess) {
+                                    layer.msg.error($t(res.Code));
+                                    return;
+                                }
                                 locale.changeLanguage(lang)
                                     .then(() => {
                                         checkLanguageClass(app);
@@ -161,7 +169,7 @@ $(function () {
         }
         async function checkIsLogon() {
             try {
-                let res = await invokeApi("Server", "CheckIsLogon");
+                let res = await invokeApi("Server", "CheckIsLogon",);
                 return res && res.Data;
             } catch (e) {
                 layui.layer.msg.error(locale.translate("RequestError") + ": " + e.toString());
@@ -479,7 +487,7 @@ $(function () {
      * 初始化本地化Host
      * @returns {object} Locale Host
      */
-    function initLocale() {
+    async function initLocale() {
         let data = {};
         const langKeys = {
             CN: 'zh-cn',
@@ -489,26 +497,14 @@ $(function () {
             .map(x => x[1]);
         const storeKey = "Vinno_Sonopost_Language";
 
-        let curLang = localStorage.getItem(storeKey);
-        if (!curLang || !curLang.length) {
-            var isCH = false
-            if (navigator.languages) {
-                navigator.languages.forEach(x => {
-                    if (x.toLowerCase().startsWith("zh")) {
-                        isCH = true;
-                    }
-                })
-                if (isCH) {
-                    curLang = langKeys.CN;
-                }
-                else {
-                    curLang = langKeys.EN;
-                }
-            }
-            else {
-                let browserLang = (navigator.language || navigator.browserLanguage).toLowerCase();
-                curLang = supportLanguages.includes(browserLang) ? browserLang : langKeys.EN;
-            }
+        let res = await invokeApi("System", "GetPageLanguage");
+        if (!res.IsSuccess) {
+            layer.msg.error($t(res.Code));
+            return;
+        }
+        let curLang = langKeys.CN;
+        if (res.Data != langKeys.CN) {
+            curLang = langKeys.EN;
         }
 
         loadData(curLang)

+ 3 - 3
Vinno.FIS.Sonopost/Assets/wwwroot/pages/dicom/faillist.html

@@ -15,9 +15,9 @@
         display: flex;
     }
 
-        #formDicomFailQuery .layui-form-item {
-            margin-bottom: 0;
-        }
+    #formDicomFailQuery .layui-form-item {
+        margin-bottom: 0;
+    }
 </style>
 <div id="pageDicomFail">
     <div class="page-title" data-content="PageTitle4DicomFailList"></div>

+ 9 - 0
Vinno.FIS.Sonopost/Features/Config/PageSetting.cs

@@ -0,0 +1,9 @@
+using Vinno.FIS.Sonopost.Features.Oled;
+
+namespace Vinno.FIS.Sonopost.Features.Config
+{
+    internal class PageSetting
+    {
+        public Language Language { get; set; }
+    }
+}

+ 12 - 0
Vinno.FIS.Sonopost/Features/Config/SonopostUserDefinedSettingInfo.cs

@@ -20,6 +20,7 @@ namespace Vinno.FIS.Sonopost.Features.Config
         public HardwareSetting HardwareSetting { get; set; }
 
         public OledSetting OledSetting { get; set; }
+        public PageSetting PageSetting { get; set; }
     }
 
     internal class SonopostUserDefinedSettings : SonopostUserDefinedSettingInfo
@@ -61,6 +62,10 @@ namespace Vinno.FIS.Sonopost.Features.Config
                         MicDeviceInfo = new FISMicDeviceInfo(),
                     },
                     OledSetting = new OledSetting
+                    {
+                        Language = Language.Chinese,
+                    },
+                    PageSetting = new PageSetting
                     {
                         Language = Language.Chinese,
                     }
@@ -88,6 +93,13 @@ namespace Vinno.FIS.Sonopost.Features.Config
                 {
                     return false;
                 }
+                else if (Instance.PageSetting == null)//老版的配置文件可能为空,
+                {
+                    Instance.PageSetting = new PageSetting
+                    {
+                        Language = Language.Chinese,
+                    };
+                }
                 return true;
             }
             catch

+ 2 - 1
Vinno.FIS.Sonopost/Vinno.FIS.Sonopost.csproj

@@ -77,6 +77,7 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </ApplicationDefinition>
+    <Compile Include="Features\Config\PageSetting.cs" />
     <Compile Include="WebApi\BaseController.cs" />
     <Compile Include="WebApi\Controllers\DicomController.cs" />
     <Compile Include="WebApi\Controllers\LiveController.cs" />
@@ -105,7 +106,7 @@
     <Compile Include="WebApi\Models\ServerLoginResult.cs" />
     <Compile Include="WebApi\Models\ServerNodeRequest.cs" />
     <Compile Include="WebApi\Models\ServerRegisterRequest.cs" />
-    <Compile Include="WebApi\Models\SetMiniOledLanguageRequest.cs" />
+    <Compile Include="WebApi\Models\SetLanguageRequest.cs" />
     <Compile Include="WebApi\Models\SonoInfoModel.cs" />
     <Compile Include="WebApi\Models\SystemGetLogRequest.cs" />
     <Compile Include="WebApi\Models\VCloudLoginRequest.cs" />

+ 70 - 2
Vinno.FIS.Sonopost/WebApi/Controllers/SystemController.cs

@@ -64,13 +64,81 @@ namespace Vinno.FIS.Sonopost.WebApi.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [WebApiAction]
-        public Result SetOledLanguage(SetMiniOledLanguageRequest request)
+        public Result SetOledLanguage(SetLanguageRequest request)
         {
-            Features.Oled.Language language = (Features.Oled.Language)Enum.Parse(typeof(Features.Oled.Language), request.Language);
+            var language = (Language)Enum.Parse(typeof(Language), request.Language);
             OledManager.SetLanguage(language);
             return Result.Success();
         }
 
+        /// <summary>
+        /// 获取页面语言
+        /// </summary>
+        /// <returns></returns>
+        [WebApiAction]
+        public Result GetPageLanguage()
+        {
+            switch (SonopostUserDefinedSettings.Instance.PageSetting.Language)
+            {
+                case Language.English:
+                    return Result.Success("en-us");
+
+                case Language.Chinese:
+                default:
+                    return Result.Success("zh-cn");
+            }
+        }
+
+        /// <summary>
+        /// 设置页面语言
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [WebApiAction]
+        public Result SetPageLanguage(SetLanguageRequest request)
+        {
+            if (request == null)
+            {
+                return Result.Fail();
+            }
+            if (request.Language.ToLower() == "en-us")
+            {
+                SonopostUserDefinedSettings.Instance.PageSetting.Language = Language.English;
+            }
+            else
+            {
+                SonopostUserDefinedSettings.Instance.PageSetting.Language = Language.Chinese;
+            }
+            ConfigManager.Save();
+            return Result.Success();
+        }
+
+        /// <summary>
+        /// 设置语言,包含页面语言和OLED语言
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [WebApiAction]
+        public Result SetLanguage(SetLanguageRequest request)
+        {
+            if (request == null)
+            {
+                return Result.Fail();
+            }
+            if (request.Language.ToLower() == "en-us")
+            {
+                SonopostUserDefinedSettings.Instance.PageSetting.Language = Language.English;
+                OledManager.SetLanguage(Language.English);
+            }
+            else
+            {
+                SonopostUserDefinedSettings.Instance.PageSetting.Language = Language.Chinese;
+                OledManager.SetLanguage(Language.Chinese);
+            }
+            ConfigManager.Save();
+            return Result.Success();
+        }
+
         /// <summary>
         /// 获取版本
         /// </summary>

+ 2 - 2
Vinno.FIS.Sonopost/WebApi/Models/SetMiniOledLanguageRequest.cs → Vinno.FIS.Sonopost/WebApi/Models/SetLanguageRequest.cs

@@ -1,7 +1,7 @@
 namespace Vinno.FIS.Sonopost.WebApi.Models
 {
-    internal class SetMiniOledLanguageRequest
+    internal class SetLanguageRequest
     {
         public string Language { get; set; }
     }
-}
+}