diff --git a/backend/constant/common.go b/backend/constant/common.go index 5637d5811..687c22998 100644 --- a/backend/constant/common.go +++ b/backend/constant/common.go @@ -117,11 +117,11 @@ var WebUrlMap = map[string]struct{}{ "/xpack/monitor/rank": {}, "/xpack/monitor/log": {}, "/xpack/tamper": {}, - "/xpack/gpu": {}, "/xpack/alert/dashboard": {}, "/xpack/alert/log": {}, "/xpack/alert/setting": {}, "/xpack/setting": {}, + "/xpack/app": {}, } var DynamicRoutes = []string{ diff --git a/backend/constant/errs.go b/backend/constant/errs.go index 0a2895b19..6cf28d1c8 100644 --- a/backend/constant/errs.go +++ b/backend/constant/errs.go @@ -182,3 +182,10 @@ var ( ErrAlertSync = "ErrAlertSync" ErrAlertRemote = "ErrAlertRemote" ) + +// mobile app +var ( + ErrVerifyToken = "ErrVerifyToken" + ErrInvalidToken = "ErrInvalidToken" + ErrExpiredToken = "ErrExpiredToken" +) diff --git a/backend/i18n/lang/en.yaml b/backend/i18n/lang/en.yaml index 68a39cd68..06f8d7fbc 100644 --- a/backend/i18n/lang/en.yaml +++ b/backend/i18n/lang/en.yaml @@ -287,3 +287,8 @@ SystemMode: "mode: " #ai-tool ErrOpenrestyInstall: 'Please install Openresty first' + +#mobile app +ErrVerifyToken: 'Token verification error, please reset and scan again.' +ErrInvalidToken: 'Invalid token, please reset and scan again.' +ErrExpiredToken: 'Token has expired, please reset and scan again.' diff --git a/backend/i18n/lang/ja.yaml b/backend/i18n/lang/ja.yaml index 880353080..26e6c3088 100644 --- a/backend/i18n/lang/ja.yaml +++ b/backend/i18n/lang/ja.yaml @@ -283,4 +283,9 @@ SystemVersion: "バージョン:" SystemMode: "モード:" #ai-tool -ErrOpenrestyInstall: 'まず Openresty をインストールしてください' \ No newline at end of file +ErrOpenrestyInstall: 'まず Openresty をインストールしてください' + +#mobile app +ErrVerifyToken: 'トークンの検証エラーです。リセット後、再度QRコードをスキャンしてください。' +ErrInvalidToken: '無効なトークンです。リセット後、再度QRコードをスキャンしてください。' +ErrExpiredToken: 'トークンの有効期限が切れました。リセット後、再度QRコードをスキャンしてください。' diff --git a/backend/i18n/lang/ko.yaml b/backend/i18n/lang/ko.yaml index 5338b5c8d..3122f4b17 100644 --- a/backend/i18n/lang/ko.yaml +++ b/backend/i18n/lang/ko.yaml @@ -286,4 +286,9 @@ SystemVersion: "버전: " SystemMode: "모드: " #ai-tool -ErrOpenrestyInstall: '먼저 Openresty를 설치하세요' \ No newline at end of file +ErrOpenrestyInstall: '먼저 Openresty를 설치하세요' + +#mobile app +ErrVerifyToken: '토큰 검증 오류가 발생했습니다. 재설정 후 다시 스캔해 주세요.' +ErrInvalidToken: '유효하지 않은 토큰입니다. 재설정 후 다시 스캔해 주세요.' +ErrExpiredToken: '토큰이 만료되었습니다. 재설정 후 다시 스캔해 주세요.' diff --git a/backend/i18n/lang/ms.yml b/backend/i18n/lang/ms.yml index ace41c67f..6da80d626 100644 --- a/backend/i18n/lang/ms.yml +++ b/backend/i18n/lang/ms.yml @@ -285,4 +285,9 @@ SystemVersion: "Versi: " SystemMode: "Mod: " #ai-tool -ErrOpenrestyInstall: 'Sila pasang Openresty terlebih dahulu' \ No newline at end of file +ErrOpenrestyInstall: 'Sila pasang Openresty terlebih dahulu' + +#mobile app +ErrVerifyToken: 'Ralat pengesahan token, sila tetapkan semula dan imbas semula.' +ErrInvalidToken: 'Token tidak sah, sila tetapkan semula dan imbas semula.' +ErrExpiredToken: 'Token telah tamat tempoh, sila tetapkan semula dan imbas semula.' diff --git a/backend/i18n/lang/pt-BR.yaml b/backend/i18n/lang/pt-BR.yaml index 78e96743b..8d1694a3b 100644 --- a/backend/i18n/lang/pt-BR.yaml +++ b/backend/i18n/lang/pt-BR.yaml @@ -283,4 +283,9 @@ SystemVersion: "versão: " SystemMode: "modo: " #ai-tool -ErrOpenrestyInstall: 'Por favor, instale o Openresty primeiro' \ No newline at end of file +ErrOpenrestyInstall: 'Por favor, instale o Openresty primeiro' + +#mobile app +ErrVerifyToken: 'Erro de verificação do token, por favor, reinicie e escaneie novamente.' +ErrInvalidToken: 'Token inválido, por favor, reinicie e escaneie novamente.' +ErrExpiredToken: 'O token expirou, por favor, reinicie e escaneie novamente.' diff --git a/backend/i18n/lang/ru.yaml b/backend/i18n/lang/ru.yaml index bb32d2356..d7fd3de68 100644 --- a/backend/i18n/lang/ru.yaml +++ b/backend/i18n/lang/ru.yaml @@ -285,5 +285,10 @@ DBConnErr: "Ошибка: не удалось инициализировать SystemVersion: "версия: " SystemMode: "режим: " -#ai-tool +#ai-tool "ErrOpenrestyInstall": "Пожалуйста, установите Openresty сначала" + +#mobile app +ErrVerifyToken: 'шибка проверки токена, пожалуйста, сбросьте и отсканируйте снова.' +ErrInvalidToken: 'Неверный токен, пожалуйста, сбросьте и отсканируйте снова.' +ErrExpiredToken: 'Токен истек, пожалуйста, сбросьте и отсканируйте снова.' diff --git a/backend/i18n/lang/zh-Hant.yaml b/backend/i18n/lang/zh-Hant.yaml index 54ff41298..32d45d00c 100644 --- a/backend/i18n/lang/zh-Hant.yaml +++ b/backend/i18n/lang/zh-Hant.yaml @@ -285,5 +285,10 @@ DBConnErr: "錯誤:初始化資料庫連線失敗,{{ .err }}" SystemVersion: "版本:" SystemMode: "模式:" -#ai-tool -"ErrOpenrestyInstall": "請先安裝 Openresty" \ No newline at end of file +#ai-tool +"ErrOpenrestyInstall": "請先安裝 Openresty" + +#mobile app +ErrVerifyToken: '令牌驗證錯誤,請重置後再次掃碼' +ErrInvalidToken: '無效的令牌,請重置後再次掃碼' +ErrExpiredToken: '令牌過期,請重置後再次掃碼' diff --git a/backend/i18n/lang/zh.yaml b/backend/i18n/lang/zh.yaml index fab315a0b..5a621d7f3 100644 --- a/backend/i18n/lang/zh.yaml +++ b/backend/i18n/lang/zh.yaml @@ -286,4 +286,9 @@ SystemVersion: "版本:" SystemMode: "模式:" #ai-tool -ErrOpenrestyInstall: '请先安装 Openresty' \ No newline at end of file +ErrOpenrestyInstall: '请先安装 Openresty' + +#mobile app +ErrVerifyToken: '令牌验证错误,请重置后再次扫码' +ErrInvalidToken: '无效的令牌,请重置后再次扫码' +ErrExpiredToken: '令牌过期,请重置后再次扫码' diff --git a/backend/init/migration/migrate.go b/backend/init/migration/migrate.go index e73515842..76b361107 100644 --- a/backend/init/migration/migrate.go +++ b/backend/init/migration/migrate.go @@ -103,6 +103,8 @@ func Init() { migrations.UpdateAppTag, migrations.UpdateApp, migrations.AddOllamaModel, + migrations.AddAppMenu, + migrations.AddAppPanelName, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/backend/init/migration/migrations/v_1_10.go b/backend/init/migration/migrations/v_1_10.go index 656fc0932..81690a5a0 100644 --- a/backend/init/migration/migrations/v_1_10.go +++ b/backend/init/migration/migrations/v_1_10.go @@ -390,3 +390,61 @@ var AddOllamaModel = &gormigrate.Migration{ return nil }, } + +var AddAppMenu = &gormigrate.Migration{ + ID: "20250217-update-xpack-hide-menu", + Migrate: func(tx *gorm.DB) error { + var ( + setting model.Setting + menu dto.XpackHideMenu + ) + + tx.Model(&model.Setting{}).Where("key = ?", "XpackHideMenu").First(&setting) + + if err := json.Unmarshal([]byte(setting.Value), &menu); err != nil { + return err + } + + var newChildren []dto.XpackHideMenu + for _, item := range menu.Children { + if item.ID != "4" { + newChildren = append(newChildren, item) + } + } + menu.Children = newChildren + + appIsCheck := false + for _, item := range menu.Children { + if item.IsCheck { + appIsCheck = true + break + } + } + + menu.Children = append(menu.Children, dto.XpackHideMenu{ + ID: "8", + Title: "xpack.app.app", + Path: "/xpack/app", + Label: "XApp", + IsCheck: appIsCheck, + }) + + data, err := json.Marshal(menu) + if err != nil { + return err + } + + return tx.Model(&model.Setting{}).Where("key = ?", "XpackHideMenu").Updates(map[string]interface{}{"value": string(data)}).Error + }, +} + +var AddAppPanelName = &gormigrate.Migration{ + ID: "20250218-add-app-panel-name", + Migrate: func(tx *gorm.DB) error { + + if err := tx.Create(&model.Setting{Key: "AppPanelName", Value: ""}).Error; err != nil { + return err + } + return nil + }, +} diff --git a/frontend/src/assets/iconfont/iconfont.css b/frontend/src/assets/iconfont/iconfont.css index ff285ec15..b13e8ab57 100644 --- a/frontend/src/assets/iconfont/iconfont.css +++ b/frontend/src/assets/iconfont/iconfont.css @@ -1,9 +1,9 @@ @font-face { font-family: "panel"; /* Project id 3575356 */ - src: url('iconfont.woff2?t=1739443302730') format('woff2'), - url('iconfont.woff?t=1739443302730') format('woff'), - url('iconfont.ttf?t=1739443302730') format('truetype'), - url('iconfont.svg?t=1739443302730#panel') format('svg'); + src: url('iconfont.woff2?t=1739946811686') format('woff2'), + url('iconfont.woff?t=1739946811686') format('woff'), + url('iconfont.ttf?t=1739946811686') format('truetype'), + url('iconfont.svg?t=1739946811686#panel') format('svg'); } .panel { @@ -14,6 +14,18 @@ -moz-osx-font-smoothing: grayscale; } +.p-app-3:before { + content: "\e69e"; +} + +.p-app-2:before { + content: "\e6ec"; +} + +.p-app-1:before { + content: "\e639"; +} + .p-jiqiren2:before { content: "\e613"; } @@ -174,6 +186,10 @@ content: "\e604"; } +.p-gpu-1:before { + content: "\e63d"; +} + .p-monitor-4:before { content: "\ec4e"; } diff --git a/frontend/src/assets/iconfont/iconfont.js b/frontend/src/assets/iconfont/iconfont.js index a78d93dc1..a956c3f10 100644 --- a/frontend/src/assets/iconfont/iconfont.js +++ b/frontend/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_3575356='',(h=>{var l=(a=(a=document.getElementsByTagName("script"))[a.length-1]).getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var c,t,p,z,v,i=function(l,a){a.parentNode.insertBefore(l,a)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}c=function(){var l,a=document.createElement("div");a.innerHTML=h._iconfont_svg_string_3575356,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(l=document.body).firstChild?i(a,l.firstChild):l.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),c()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(p=c,z=h.document,v=!1,d(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,m())})}function m(){v||(v=!0,p())}function d(){try{z.documentElement.doScroll("left")}catch(l){return void setTimeout(d,50)}m()}})(window); \ No newline at end of file +window._iconfont_svg_string_3575356='',(h=>{var l=(a=(a=document.getElementsByTagName("script"))[a.length-1]).getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var c,t,p,z,v,i=function(l,a){a.parentNode.insertBefore(l,a)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}c=function(){var l,a=document.createElement("div");a.innerHTML=h._iconfont_svg_string_3575356,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(l=document.body).firstChild?i(a,l.firstChild):l.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),c()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(p=c,z=h.document,v=!1,d(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,m())})}function m(){v||(v=!0,p())}function d(){try{z.documentElement.doScroll("left")}catch(l){return void setTimeout(d,50)}m()}})(window); \ No newline at end of file diff --git a/frontend/src/assets/iconfont/iconfont.json b/frontend/src/assets/iconfont/iconfont.json index 195dd08ca..61cc58e24 100644 --- a/frontend/src/assets/iconfont/iconfont.json +++ b/frontend/src/assets/iconfont/iconfont.json @@ -5,6 +5,27 @@ "css_prefix_text": "p-", "description": "", "glyphs": [ + { + "icon_id": "10593804", + "name": "过程监控_jurassic", + "font_class": "app-3", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "26508547", + "name": "服务信息", + "font_class": "app-2", + "unicode": "e6ec", + "unicode_decimal": 59116 + }, + { + "icon_id": "28544760", + "name": "移动管理-01", + "font_class": "app-1", + "unicode": "e639", + "unicode_decimal": 58937 + }, { "icon_id": "10505865", "name": "机器人", @@ -285,6 +306,13 @@ "unicode": "e604", "unicode_decimal": 58884 }, + { + "icon_id": "24848551", + "name": "系统监控", + "font_class": "gpu-1", + "unicode": "e63d", + "unicode_decimal": 58941 + }, { "icon_id": "40398413", "name": "监控", diff --git a/frontend/src/assets/iconfont/iconfont.svg b/frontend/src/assets/iconfont/iconfont.svg index 789ceedd1..9f61598d7 100644 --- a/frontend/src/assets/iconfont/iconfont.svg +++ b/frontend/src/assets/iconfont/iconfont.svg @@ -14,6 +14,12 @@ /> + + + + + + @@ -94,6 +100,8 @@ + + diff --git a/frontend/src/assets/iconfont/iconfont.ttf b/frontend/src/assets/iconfont/iconfont.ttf index fad72d2d8..f91e594ba 100644 Binary files a/frontend/src/assets/iconfont/iconfont.ttf and b/frontend/src/assets/iconfont/iconfont.ttf differ diff --git a/frontend/src/assets/iconfont/iconfont.woff b/frontend/src/assets/iconfont/iconfont.woff index e7d21b365..704377324 100644 Binary files a/frontend/src/assets/iconfont/iconfont.woff and b/frontend/src/assets/iconfont/iconfont.woff differ diff --git a/frontend/src/assets/iconfont/iconfont.woff2 b/frontend/src/assets/iconfont/iconfont.woff2 index 7a213fc34..70657e4fc 100644 Binary files a/frontend/src/assets/iconfont/iconfont.woff2 and b/frontend/src/assets/iconfont/iconfont.woff2 differ diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 1ac151419..cf49bc617 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1490,8 +1490,10 @@ const message = { proxyDockerHelper: 'Synchronize proxy server configuration to Docker, support offline server image pulling and other operations', apiInterface: 'Enable API', - apiInterfaceClose: 'Once closed, API interfaces cannot be accessed. Do you want to continue?', - apiInterfaceHelper: 'Allow third-party applications to access the API.', + apiInterfaceClose: + 'API interfaces are unavailable, app functionality will be restricted. Do you want to continue?', + apiInterfaceHelper: + 'Enable panel support for API interface access (this feature needs to be enabled for panel apps).', apiInterfaceAlert1: `Don't enable it in production environments because it may increase server security risks.`, apiInterfaceAlert2: `Don't use third-party applications to call the API to prevent potential security threats.`, apiInterfaceAlert3: 'API Docs', @@ -1810,6 +1812,7 @@ const message = { monitor: 'Upgrade to the professional version to view the real-time status of the website, visitor trends, visitor sources, request logs and other information. ', alert: 'Upgrade to the professional version to receive alarm information via SMS and view alarm logs, fully control various key events, and ensure worry-free system operation', + app: 'Upgrade to the professional version to view service information, abnormal monitoring, etc. through the mobile APP. ', }, clean: { scan: 'Start scanning', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 518b4dcd7..5ca8ca2d7 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -1466,8 +1466,9 @@ const message = { proxyDockerHelper: 'プロキシサーバーの構成をDockerに同期し、オフラインサーバーイメージの引っ張りやその他の操作をサポートします', apiInterface: 'APIを有効にします', - apiInterfaceClose: '閉じたら、APIインターフェイスにアクセスできません。続けたいですか?', - apiInterfaceHelper: 'サードパーティのアプリケーションにAPIにアクセスできるようにします。', + apiInterfaceClose: 'APIインターフェースが利用できません。アプリ機能が制限されます。続行しますか?', + apiInterfaceHelper: + 'APIインターフェースアクセスのためにパネルサポートを有効にしてください(この機能はパネルアプリで有効化する必要があります)。', apiInterfaceAlert1: `サーバーのセキュリティリスクが増加する可能性があるため、生産環境で有効にしないでください。`, apiInterfaceAlert2: `サードパーティのアプリケーションを使用してAPIを呼び出して、潜在的なセキュリティの脅威を防止しないでください。`, apiInterfaceAlert3: 'APIドキュメント', @@ -1782,7 +1783,8 @@ const message = { 'プロのバージョンにアップグレードすることで、パネルロゴ、ウェルカムメッセージ、その他の情報のカスタマイズが可能になります。', monitor: 'プロのバージョンにアップグレードして、Webサイトのリアルタイムステータス、訪問者の傾向、訪問者ソース、リクエストログ、その他の情報を表示します。', - alert: 'プロのバージョンにアップグレードして、SMSを介してアラーム情報を受信し、アラームログを表示し、さまざまなキーイベントを完全に制御し、心配のないシステム操作を確実にする', + alert: 'プロのバージョンにアップグレードして、SMSを介してアラーム情報を受信し、アラームログを表示し、さまざまなキーイベントを完全に制御し、心配のないシステム操作を確実にする。', + app: 'モバイルアプリでサービス情報、異常監視などを表示するには、プロフェッショナル版にアップグレードしてください。', }, clean: { scan: 'スキャンを開始します', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 5ff1d2b53..3db717c5e 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -1447,10 +1447,11 @@ const message = { proxyDockerHelper: '프록시 서버 구성을 Docker 에 동기화하여 오프라인 서버 이미지 가져오기 등의 작업을 지원합니다.', apiInterface: 'API 활성화', - apiInterfaceClose: '비활성화하면 API 인터페이스에 접근할 수 없습니다. 계속하시겠습니까?', - apiInterfaceHelper: '서드파티 애플리케이션이 API 에 접근할 수 있도록 허용합니다.', + apiInterfaceClose: 'API 인터페이스를 사용할 수 없습니다. 앱 기능이 제한됩니다. 계속하시겠습니까?', + apiInterfaceHelper: + 'API 인터페이스 액세스를 위한 패널 지원을 활성화하세요 (이 기능은 패널 앱에서 활성화해야 합니다).', apiInterfaceAlert1: '운영 환경에서는 활성화하지 마십시오. 서버 보안 위험이 증가할 수 있습니다.', - apiInterfaceAlert2: '잠재적인 보안 위협을 방지하기 위해 서드파티 애플리케이션으로 API를 호출하지 마십시오.', + apiInterfaceAlert2: '잠재적인 보안 위협을 방지하기 위해 서드파티 애플리케이션으로 API 를 호출하지 마십시오.', apiInterfaceAlert3: 'API 문서', apiInterfaceAlert4: '사용 설명서', apiKey: 'API 키', @@ -1752,6 +1753,7 @@ const message = { monitor: '전문 버전으로 업그레이드하면 웹사이트의 실시간 상태, 방문자 트렌드, 방문자 출처, 요청 로그 등 정보를 확인할 수 있습니다.', alert: '전문 버전으로 업그레이드하면 SMS 를 통해 알림 정보를 받고 알림 로그를 볼 수 있으며, 다양한 주요 이벤트를 완벽하게 제어하여 시스템 운영을 걱정 없이 유지할 수 있습니다.', + app: '프로페셔널 버전으로 업그레이드하면 모바일 APP을 통해 서비스 정보, 이상 모니터링 등을 확인할 수 있습니다.', }, clean: { scan: '스캔 시작', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 0abf039d8..b64775f2e 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1509,8 +1509,9 @@ const message = { proxyDockerHelper: 'Selaraskan konfigurasi pelayan proksi ke Docker, menyokong tarikan imej pelayan luar talian dan operasi lain', apiInterface: 'Aktifkan API', - apiInterfaceClose: 'Setelah ditutup, antara muka API tidak boleh diakses. Adakah anda mahu meneruskan?', - apiInterfaceHelper: 'Benarkan aplikasi pihak ketiga mengakses API.', + apiInterfaceClose: 'ntaramuka API tidak tersedia, fungsi aplikasi akan terhad. Adakah anda ingin meneruskan?', + apiInterfaceHelper: + 'Aktifkan sokongan panel untuk akses antaramuka API (ciri ini perlu diaktifkan untuk aplikasi panel).', apiInterfaceAlert1: 'Jangan aktifkan dalam persekitaran pengeluaran kerana ia mungkin meningkatkan risiko keselamatan pelayan.', apiInterfaceAlert2: @@ -1839,6 +1840,7 @@ const message = { monitor: 'Tingkatkan ke versi profesional untuk melihat status masa nyata laman web, tren pelawat, sumber pelawat, log permintaan dan maklumat lain.', alert: 'Tingkatkan ke versi profesional untuk menerima maklumat amaran melalui SMS dan melihat log amaran, mengawal sepenuhnya pelbagai acara utama, dan memastikan operasi sistem bebas kerisauan.', + app: 'Tingkatkan ke versi profesional untuk melihat maklumat perkhidmatan, pemantauan abnormal, dll melalui aplikasi mudah alih.', }, clean: { scan: 'Mulakan imbasan', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index e38e6b8c8..aca8a5bca 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1496,8 +1496,10 @@ const message = { proxyDockerHelper: 'Sincronize a configuração do servidor proxy com o Docker, suportando operações de puxar imagens de servidor offline e outras', apiInterface: 'Habilitar API', - apiInterfaceClose: 'Uma vez fechado, as interfaces da API não poderão ser acessadas. Deseja continuar?', - apiInterfaceHelper: 'Permitir que aplicativos de terceiros acessem a API.', + apiInterfaceClose: + 'As interfaces de API estão indisponíveis, a funcionalidade do aplicativo será restrita. Deseja continuar?', + apiInterfaceHelper: + 'Habilite o suporte ao painel para acesso à interface de API (essa funcionalidade precisa ser habilitada para aplicativos de painel).', apiInterfaceAlert1: 'Não habilite em ambientes de produção, pois pode aumentar os riscos de segurança do servidor.', apiInterfaceAlert2: @@ -1826,6 +1828,7 @@ const message = { monitor: 'Upgrade para a versão profissional para visualizar o status em tempo real do site, tendências de visitantes, fontes de visitantes, logs de solicitações e outras informações.', alert: 'Upgrade para a versão profissional para receber informações de alarme via SMS e visualizar logs de alarmes, controlar completamente vários eventos chave e garantir a operação sem preocupações do sistema', + app: 'Upgrade para a versão profissional para visualizar informações do serviço, monitoramento anômalo, etc., através do aplicativo móvel.', }, clean: { scan: 'Iniciar escaneamento', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index dbb91a23a..5ea5ed78b 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1498,8 +1498,10 @@ const message = { proxyDockerHelper: 'Синхронизировать конфигурацию прокси-сервера с Docker, поддержка офлайн загрузки образов и других операций', apiInterface: 'Включить API', - apiInterfaceClose: 'После закрытия API-интерфейсы будут недоступны. Хотите продолжить?', - apiInterfaceHelper: 'Разрешить сторонним приложениям доступ к API.', + apiInterfaceClose: + 'API интерфейсы недоступны, функциональность приложения будет ограничена. Хотите продолжить?', + apiInterfaceHelper: + 'Включите поддержку панели для доступа к интерфейсу API (эта функция должна быть активирована для панельных приложений).', apiInterfaceAlert1: 'Не включайте в производственной среде, так как это может повысить риски безопасности сервера.', apiInterfaceAlert2: @@ -1825,6 +1827,7 @@ const message = { monitor: 'Обновление до профессиональной версии позволяет просматривать статус веб-сайта в реальном времени, тенденции посещений, источники посетителей, логи запросов и другую информацию.', alert: 'Обновление до профессиональной версии позволяет получать информацию о тревогах через SMS и просматривать логи тревог, полностью контролировать различные ключевые события и обеспечивать беспроблемную работу системы', + app: 'Обновите до профессиональной версии, чтобы просматривать информацию о сервисах, мониторинг аномалий и т.д. через мобильное приложение.', }, clean: { scan: 'Начать сканирование', diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts index 6474d95c7..4a9844c7d 100644 --- a/frontend/src/lang/modules/tw.ts +++ b/frontend/src/lang/modules/tw.ts @@ -1413,10 +1413,10 @@ const message = { proxyDocker: 'Docker 代理', proxyDockerHelper: '將代理伺服器配寘同步至 Docker,支援離線伺服器拉取鏡像等操作', apiInterface: 'API 介面', - apiInterfaceClose: '關閉後將不能使用 API 介面進行瀏覽,是否繼續?', - apiInterfaceHelper: '提供面板支援 API 介面瀏覽', + apiInterfaceClose: '關閉後將不能使用 API 介面進行瀏覽,APP功能將被限制,是否繼續?', + apiInterfaceHelper: '提供面板支持API介面訪問(面板APP需要開啟該功能)', apiInterfaceAlert1: '請不要在生產環境開啟,這可能新增伺服器安全風險', - apiInterfaceAlert2: '請不要使用協力廠商應用呼叫面板 API,以防止潛在的安全威脅。', + apiInterfaceAlert2: '請不要使用協力廠商應用呼叫面板 API,以防止潛在的安全威脅', apiInterfaceAlert3: 'API 介面檔案', apiInterfaceAlert4: '使用檔案', apiKey: '介面金鑰', @@ -1692,6 +1692,7 @@ const message = { setting: '升級專業版可以自訂面板 Logo、歡迎簡介等資訊。', monitor: '升級專業版可以查看網站的即時狀態、訪客趨勢、訪客來源、請求日誌等資訊。 ', alert: '升級專業版可透過簡訊接收告警資訊,並查看告警日誌,全面掌控各類關鍵事件,確保系統執行無憂。', + app: '升級專業版可通過手機APP,查看服務資訊、异常監控等。', }, clean: { scan: '開始掃描', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 4bcf01a83..6591d51b0 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1415,10 +1415,10 @@ const message = { proxyDocker: 'Docker 代理', proxyDockerHelper: '将代理服务器配置同步至 Docker,支持离线服务器拉取镜像等操作', apiInterface: 'API 接口', - apiInterfaceClose: '关闭后将不能使用 API 接口进行访问,是否继续?', - apiInterfaceHelper: '提供面板支持 API 接口访问', + apiInterfaceClose: '关闭后将不能使用 API 接口进行访问,APP 功能将被限制,是否继续?', + apiInterfaceHelper: '提供面板支持 API 接口访问( 面板 APP 需要开启该功能)', apiInterfaceAlert1: '请不要在生产环境开启,这可能增加服务器安全风险', - apiInterfaceAlert2: '请不要使用第三方应用调用面板 API,以防止潜在的安全威胁。', + apiInterfaceAlert2: '请不要使用第三方应用调用面板 API,以防止潜在的安全威胁', apiInterfaceAlert3: 'API 接口文档', apiInterfaceAlert4: '使用文档', apiKey: '接口密钥', @@ -1693,6 +1693,7 @@ const message = { setting: '升级专业版可以自定义面板 Logo、欢迎简介等信息。', monitor: '升级专业版可以查看网站的实时状态、访客趋势、访客来源、请求日志等信息。', alert: '升级专业版可通过短信接收告警信息,并查看告警日志,全面掌控各类关键事件,确保系统运行无忧。', + app: '升级专业版可通过手机 APP,查看服务信息、异常监控等。', }, clean: { scan: '开始扫描',