From f39050f25e1a299e34a6a96fa76fa8bc69f29beb Mon Sep 17 00:00:00 2001 From: "github-action[bot]" Date: Thu, 25 Sep 2025 20:42:17 +0200 Subject: [PATCH] Update On Thu Sep 25 20:42:16 CEST 2025 --- .github/update.log | 1 + .../backend/tauri/src/core/state.rs | 26 +- clash-nyanpasu/frontend/nyanpasu/package.json | 2 +- .../src/components/profiles/profile-item.tsx | 9 +- .../nyanpasu/src/utils/notification.ts | 4 +- clash-nyanpasu/manifest/version.json | 6 +- clash-nyanpasu/package.json | 12 +- clash-nyanpasu/pnpm-lock.yaml | 408 ++++---- clash-nyanpasu/scripts/package.json | 2 +- filebrowser/CHANGELOG.md | 20 + filebrowser/cmd/config.go | 1 + filebrowser/cmd/root.go | 7 +- filebrowser/cmd/users.go | 3 + .../src/components/prompts/CreateFilePath.vue | 86 ++ .../src/components/prompts/NewDir.vue | 2 + .../src/components/prompts/NewFile.vue | 2 + .../src/components/prompts/UploadFiles.vue | 29 +- .../components/settings/AceEditorTheme.vue | 24 + filebrowser/frontend/src/i18n/ar.json | 5 +- filebrowser/frontend/src/i18n/ca.json | 5 +- filebrowser/frontend/src/i18n/cs.json | 5 +- filebrowser/frontend/src/i18n/de.json | 5 +- filebrowser/frontend/src/i18n/el.json | 5 +- filebrowser/frontend/src/i18n/en.json | 5 +- filebrowser/frontend/src/i18n/es.json | 5 +- filebrowser/frontend/src/i18n/fa.json | 5 +- filebrowser/frontend/src/i18n/fr.json | 5 +- filebrowser/frontend/src/i18n/he.json | 5 +- filebrowser/frontend/src/i18n/hu.json | 5 +- filebrowser/frontend/src/i18n/is.json | 5 +- filebrowser/frontend/src/i18n/it.json | 5 +- filebrowser/frontend/src/i18n/ja.json | 5 +- filebrowser/frontend/src/i18n/ko.json | 5 +- filebrowser/frontend/src/i18n/nl-be.json | 5 +- filebrowser/frontend/src/i18n/no.json | 7 +- filebrowser/frontend/src/i18n/pl.json | 5 +- filebrowser/frontend/src/i18n/pt-br.json | 5 +- filebrowser/frontend/src/i18n/pt.json | 5 +- filebrowser/frontend/src/i18n/ro.json | 5 +- filebrowser/frontend/src/i18n/ru.json | 5 +- filebrowser/frontend/src/i18n/sk.json | 5 +- filebrowser/frontend/src/i18n/sv-se.json | 5 +- filebrowser/frontend/src/i18n/tr.json | 5 +- filebrowser/frontend/src/i18n/uk.json | 5 +- filebrowser/frontend/src/i18n/vi.json | 5 +- filebrowser/frontend/src/i18n/zh-cn.json | 5 +- filebrowser/frontend/src/i18n/zh-tw.json | 5 +- filebrowser/frontend/src/types/settings.d.ts | 1 + filebrowser/frontend/src/types/user.d.ts | 1 + filebrowser/frontend/src/utils/theme.ts | 16 + .../frontend/src/views/files/Editor.vue | 15 +- .../frontend/src/views/settings/Profile.vue | 14 +- filebrowser/http/auth.go | 42 +- filebrowser/settings/defaults.go | 20 +- filebrowser/tools/package.json | 3 +- filebrowser/users/users.go | 31 +- lede/target/linux/airoha/dts/an7581.dtsi | 4 +- ...-gigadevice-add-support-for-GD5F1GM9.patch | 76 -- .../arm64/boot/dts/qcom/ipq5018-ax6000.dts | 2 +- mieru/apis/client/{mieru.go => client.go} | 6 +- mieru/apis/client/interface.go | 4 +- mieru/apis/server/doc.go | 18 + mieru/apis/server/interface.go | 73 ++ .../src/net/tools/naive/naive_proxy_bin.cc | 3 + naiveproxy/tests/basic.py | 6 +- openwrt-packages/filebrowser/Makefile | 4 +- .../htdocs/luci-static/argon/css/cascade.css | 8 +- .../luci-theme-argon/less/cascade.less | 8 +- .../luci-theme-argon/less/page-fix.less | 3 +- .../htdocs/luci-static/resources/fchomo.js | 20 + .../resources/view/fchomo/global.js | 11 + .../luci-static/resources/view/fchomo/node.js | 28 + .../resources/view/fchomo/server.js | 31 +- small/luci-app-fchomo/po/templates/fchomo.pot | 976 +++++++++-------- small/luci-app-fchomo/po/zh_Hans/fchomo.po | 983 ++++++++++-------- small/luci-app-fchomo/po/zh_Hant/fchomo.po | 983 ++++++++++-------- small/luci-app-fchomo/root/etc/init.d/fchomo | 15 +- .../uci-defaults/99_luci-app-fchomo-migration | 6 +- .../root/usr/share/fchomo/generate_client.uc | 4 + .../root/usr/share/fchomo/generate_server.uc | 2 + .../root/usr/share/rpcd/ucode/luci.fchomo | 4 +- small/naiveproxy/Makefile | 10 +- small/nikki/Makefile | 8 +- v2rayn/v2rayN/ServiceLib/Events/AppEvents.cs | 32 + .../v2rayN/ServiceLib/Events/EventChannel.cs | 29 + v2rayn/v2rayN/ServiceLib/GlobalUsings.cs | 1 + v2rayn/v2rayN/ServiceLib/Handler/AppEvents.cs | 33 - .../v2rayN/ServiceLib/Manager/AppManager.cs | 4 +- .../ServiceLib/Manager/NoticeManager.cs | 4 +- .../ViewModels/CheckUpdateViewModel.cs | 2 +- .../ViewModels/MainWindowViewModel.cs | 20 +- .../ViewModels/ProfilesViewModel.cs | 4 +- .../ViewModels/StatusBarViewModel.cs | 18 +- v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs | 2 +- v2rayn/v2rayN/v2rayN.Desktop/GlobalUsings.cs | 1 + .../v2rayN.Desktop/Views/MainWindow.axaml.cs | 2 +- v2rayn/v2rayN/v2rayN/GlobalUsings.cs | 1 + v2rayn/v2rayN/v2rayN/Views/MainWindow.xaml.cs | 2 +- 98 files changed, 2493 insertions(+), 1892 deletions(-) create mode 100644 filebrowser/frontend/src/components/prompts/CreateFilePath.vue create mode 100644 filebrowser/frontend/src/components/settings/AceEditorTheme.vue delete mode 100644 lede/target/linux/generic/backport-5.10/420-v5.19-06-mtd-spinand-gigadevice-add-support-for-GD5F1GM9.patch rename mieru/apis/client/{mieru.go => client.go} (98%) create mode 100644 mieru/apis/server/doc.go create mode 100644 mieru/apis/server/interface.go create mode 100644 v2rayn/v2rayN/ServiceLib/Events/AppEvents.cs create mode 100644 v2rayn/v2rayN/ServiceLib/Events/EventChannel.cs delete mode 100644 v2rayn/v2rayN/ServiceLib/Handler/AppEvents.cs diff --git a/.github/update.log b/.github/update.log index 19765cccc9..d83f4fb30a 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1131,3 +1131,4 @@ Update On Sun Sep 21 20:36:55 CEST 2025 Update On Mon Sep 22 20:36:16 CEST 2025 Update On Tue Sep 23 20:37:30 CEST 2025 Update On Wed Sep 24 20:34:28 CEST 2025 +Update On Thu Sep 25 20:42:08 CEST 2025 diff --git a/clash-nyanpasu/backend/tauri/src/core/state.rs b/clash-nyanpasu/backend/tauri/src/core/state.rs index eeb26f2fd6..635c145138 100644 --- a/clash-nyanpasu/backend/tauri/src/core/state.rs +++ b/clash-nyanpasu/backend/tauri/src/core/state.rs @@ -103,7 +103,12 @@ where pub fn latest(&self) -> MappedRwLockReadGuard<'_, T> { if self.is_dirty() { let draft = self.draft.read(); - RwLockReadGuard::map(draft, |guard| guard.as_ref().unwrap()) + if draft.is_some() { + RwLockReadGuard::map(draft, |guard| guard.as_ref().unwrap()) + } else { + let state = self.inner.read(); + RwLockReadGuard::map(state, |guard| guard) + } } else { let state = self.inner.read(); RwLockReadGuard::map(state, |guard| guard) @@ -118,7 +123,10 @@ where /// You can modify the draft state, and then commit it pub fn draft(&self) -> MappedRwLockWriteGuard<'_, T> { if self.is_dirty() { - return RwLockWriteGuard::map(self.draft.write(), |guard| guard.as_mut().unwrap()); + let guard = self.draft.write(); + if guard.is_some() { + return RwLockWriteGuard::map(guard, |g| g.as_mut().unwrap()); + } } let state = self.inner.read().clone(); @@ -140,10 +148,16 @@ where let mut draft = self.draft.write(); let mut inner = self.inner.write(); let old_value = inner.to_owned(); - *inner = draft.take().unwrap(); - self.is_dirty - .store(false, std::sync::atomic::Ordering::Release); - Some(old_value) + if let Some(draft_value) = draft.take() { + *inner = draft_value; + self.is_dirty + .store(false, std::sync::atomic::Ordering::Release); + Some(old_value) + } else { + self.is_dirty + .store(false, std::sync::atomic::Ordering::Release); + None + } } /// discard the draft state diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index bace60b281..a55a04b9b6 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -85,7 +85,7 @@ "nanoid": "5.1.6", "sass-embedded": "1.93.2", "shiki": "2.5.0", - "unplugin-auto-import": "20.1.0", + "unplugin-auto-import": "20.2.0", "unplugin-icons": "22.3.0", "validator": "13.15.15", "vite": "7.1.7", diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/profiles/profile-item.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/profiles/profile-item.tsx index ea524c0def..19671bc56e 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/components/profiles/profile-item.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/profiles/profile-item.tsx @@ -105,16 +105,15 @@ export const ProfileItem = memo(function ProfileItem({ await deleteConnections.mutateAsync(undefined) } catch (err) { + // This FetchError was triggered by the `DELETE /connections` API const isFetchError = err instanceof Error && err.name === 'FetchError' message( isFetchError - ? t('FetchError', { - content: t('Subscription'), - }) + ? `Failed to delete connections: \n ${err instanceof Error ? err.message : String(err)}` : `Error setting profile: \n ${err instanceof Error ? err.message : String(err)}`, { - title: t('Error'), - kind: 'error', + title: isFetchError ? t('DeleteConnectionsError') : t('Error'), + kind: isFetchError ? 'warning' : 'error', }, ) } finally { diff --git a/clash-nyanpasu/frontend/nyanpasu/src/utils/notification.ts b/clash-nyanpasu/frontend/nyanpasu/src/utils/notification.ts index 26d4097a7c..dfa9d1992b 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/utils/notification.ts +++ b/clash-nyanpasu/frontend/nyanpasu/src/utils/notification.ts @@ -70,7 +70,9 @@ export const message = async ( if (typeof options === 'object') { await tauriMessage(value, { ...options, - title: `Clash Nyanpasu - ${options.title}`, + title: options.title + ? `Clash Nyanpasu - ${options.title}` + : 'Clash Nyanpasu', }) } else { await tauriMessage(value, options) diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 95cd781f30..6a1cd02a39 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -1,8 +1,8 @@ { "manifest_version": 1, "latest": { - "mihomo": "v1.19.13", - "mihomo_alpha": "alpha-57b527d", + "mihomo": "v1.19.14", + "mihomo_alpha": "alpha-fdc46f0", "clash_rs": "v0.9.0", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.9.0-alpha+sha.2784d7a" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-09-23T22:20:51.447Z" + "updated_at": "2025-09-24T22:21:01.034Z" } diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json index a198ccf087..875beaf535 100644 --- a/clash-nyanpasu/package.json +++ b/clash-nyanpasu/package.json @@ -60,15 +60,15 @@ "devDependencies": { "@commitlint/cli": "19.8.1", "@commitlint/config-conventional": "19.8.1", - "@eslint/compat": "1.3.2", + "@eslint/compat": "1.4.0", "@eslint/eslintrc": "3.3.1", "@ianvs/prettier-plugin-sort-imports": "4.7.0", "@tauri-apps/cli": "2.8.4", "@types/fs-extra": "11.0.4", "@types/lodash-es": "4.17.12", "@types/node": "24.3.1", - "@typescript-eslint/eslint-plugin": "8.44.0", - "@typescript-eslint/parser": "8.44.0", + "@typescript-eslint/eslint-plugin": "8.44.1", + "@typescript-eslint/parser": "8.44.1", "autoprefixer": "10.4.21", "conventional-changelog-conventionalcommits": "9.1.0", "cross-env": "10.0.0", @@ -86,7 +86,7 @@ "eslint-plugin-react-hooks": "5.2.0", "globals": "16.4.0", "knip": "5.64.0", - "lint-staged": "16.1.6", + "lint-staged": "16.2.0", "neostandard": "0.12.2", "npm-run-all2": "8.0.4", "postcss": "8.5.6", @@ -108,11 +108,11 @@ "tailwindcss": "4.1.13", "tsx": "4.20.5", "typescript": "5.9.2", - "typescript-eslint": "8.44.0" + "typescript-eslint": "8.44.1" }, "packageManager": "pnpm@10.17.1", "engines": { - "node": "22.19.0" + "node": "22.20.0" }, "pnpm": { "overrides": { diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 974f02bdef..cec6ad8c55 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -29,8 +29,8 @@ importers: specifier: 19.8.1 version: 19.8.1 '@eslint/compat': - specifier: 1.3.2 - version: 1.3.2(eslint@9.36.0(jiti@2.5.1)) + specifier: 1.4.0 + version: 1.4.0(eslint@9.36.0(jiti@2.5.1)) '@eslint/eslintrc': specifier: 3.3.1 version: 3.3.1 @@ -50,11 +50,11 @@ importers: specifier: 24.3.1 version: 24.3.1 '@typescript-eslint/eslint-plugin': - specifier: 8.44.0 - version: 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + specifier: 8.44.1 + version: 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/parser': - specifier: 8.44.0 - version: 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + specifier: 8.44.1 + version: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) autoprefixer: specifier: 10.4.21 version: 10.4.21(postcss@8.5.6) @@ -75,13 +75,13 @@ importers: version: 10.1.8(eslint@9.36.0(jiti@2.5.1)) eslint-import-resolver-alias: specifier: 1.1.2 - version: 1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))) + version: 1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))) eslint-plugin-html: specifier: 8.1.3 version: 8.1.3 eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + version: 2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) eslint-plugin-n: specifier: 17.23.1 version: 17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) @@ -107,11 +107,11 @@ importers: specifier: 5.64.0 version: 5.64.0(@types/node@24.3.1)(typescript@5.9.2) lint-staged: - specifier: 16.1.6 - version: 16.1.6 + specifier: 16.2.0 + version: 16.2.0 neostandard: specifier: 0.12.2 - version: 0.12.2(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + version: 0.12.2(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) npm-run-all2: specifier: 8.0.4 version: 8.0.4 @@ -173,8 +173,8 @@ importers: specifier: 5.9.2 version: 5.9.2 typescript-eslint: - specifier: 8.44.0 - version: 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + specifier: 8.44.1 + version: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) frontend/interface: dependencies: @@ -433,8 +433,8 @@ importers: specifier: 2.5.0 version: 2.5.0 unplugin-auto-import: - specifier: 20.1.0 - version: 20.1.0 + specifier: 20.2.0 + version: 20.2.0 unplugin-icons: specifier: 22.3.0 version: 22.3.0(@svgr/core@8.1.0(typescript@5.9.2)) @@ -606,8 +606,8 @@ importers: specifier: 1.1.1 version: 1.1.1 tar: - specifier: 7.4.4 - version: 7.4.4 + specifier: 7.5.1 + version: 7.5.1 telegram: specifier: 2.26.22 version: 2.26.22 @@ -1727,8 +1727,8 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.3.2': - resolution: {integrity: sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==} + '@eslint/compat@1.4.0': + resolution: {integrity: sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.40 || 9 @@ -1748,6 +1748,10 @@ packages: resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3489,16 +3493,16 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.44.0': - resolution: {integrity: sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==} + '@typescript-eslint/eslint-plugin@8.44.1': + resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.44.0 + '@typescript-eslint/parser': ^8.44.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.44.0': - resolution: {integrity: sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==} + '@typescript-eslint/parser@8.44.1': + resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3510,8 +3514,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.44.0': - resolution: {integrity: sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==} + '@typescript-eslint/project-service@8.44.1': + resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3520,8 +3524,8 @@ packages: resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.44.0': - resolution: {integrity: sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==} + '@typescript-eslint/scope-manager@8.44.1': + resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.41.0': @@ -3530,20 +3534,20 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.43.0': - resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.44.0': resolution: {integrity: sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.44.0': - resolution: {integrity: sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==} + '@typescript-eslint/tsconfig-utils@8.44.1': + resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.44.1': + resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3553,22 +3557,22 @@ packages: resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.43.0': - resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.44.0': resolution: {integrity: sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.44.1': + resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.41.0': resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.44.0': - resolution: {integrity: sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==} + '@typescript-eslint/typescript-estree@8.44.1': + resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3580,8 +3584,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.44.0': - resolution: {integrity: sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==} + '@typescript-eslint/utils@8.44.1': + resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3591,8 +3595,8 @@ packages: resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.44.0': - resolution: {integrity: sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==} + '@typescript-eslint/visitor-keys@8.44.1': + resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -4124,10 +4128,6 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.0: - resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -4173,9 +4173,9 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@5.1.0: + resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} + engines: {node: '>=20'} cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} @@ -4224,6 +4224,10 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -5315,6 +5319,10 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -5770,10 +5778,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - is-fullwidth-code-point@5.0.0: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} @@ -6183,20 +6187,16 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.1.6: - resolution: {integrity: sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==} + lint-staged@16.2.0: + resolution: {integrity: sha512-spdYSOCQ2MdZ9CM1/bu/kDmaYGsrpNOeu1InFFV8uhv14x6YIubGxbCpSmGILFoxkiheNQPDXSg5Sbb5ZuVnug==} engines: {node: '>=20.17'} hasBin: true - listr2@9.0.3: - resolution: {integrity: sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==} + listr2@9.0.4: + resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} engines: {node: '>=20.0.0'} local-pkg@1.1.1: @@ -6299,6 +6299,9 @@ packages: magic-string@0.30.18: resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} @@ -6495,6 +6498,9 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + monaco-editor@0.52.2: resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} @@ -6551,8 +6557,8 @@ packages: react: '*' react-dom: '*' - nano-spawn@1.0.2: - resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} + nano-spawn@1.0.3: + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} engines: {node: '>=20.17'} nanoid@3.3.11: @@ -6881,9 +6887,6 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -7663,10 +7666,6 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - slice-ansi@7.1.0: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} @@ -7776,6 +7775,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -7966,8 +7969,8 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar@7.4.4: - resolution: {integrity: sha512-O1z7ajPkjTgEgmTGz0v9X4eqeEXTDREPTO77pVC1Nbs86feBU1Zhdg+edzavPmYW1olxkwsqA2v4uOw6E8LeDg==} + tar@7.5.1: + resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} engines: {node: '>=18'} telegram@2.26.22: @@ -8135,8 +8138,8 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typescript-eslint@8.44.0: - resolution: {integrity: sha512-ib7mCkYuIzYonCq9XWF5XNw+fkj2zg629PSa9KNIQ47RXFF763S5BIX4wqz1+FLPogTZoiw8KmCiRPRa8bL3qw==} + typescript-eslint@8.44.1: + resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -8160,6 +8163,9 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -8201,8 +8207,8 @@ packages: unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} - unimport@5.2.0: - resolution: {integrity: sha512-bTuAMMOOqIAyjV4i4UH7P07pO+EsVxmhOzQ2YJ290J6mkLUdozNhb5I/YoOEheeNADC03ent3Qj07X0fWfUpmw==} + unimport@5.4.0: + resolution: {integrity: sha512-g/OLFZR2mEfqbC6NC9b2225eCJGvufxq34mj6kM3OmI5gdSL0qyqtnv+9qmsGpAmnzSl6x0IWZj4W+8j2hLkMA==} engines: {node: '>=18.12.0'} unique-string@1.0.0: @@ -8244,8 +8250,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unplugin-auto-import@20.1.0: - resolution: {integrity: sha512-Wa7/y3DwpbxhjyXCbuliuATCPa0/e47tstWkytJGAr55ooSNwIvbkrq0rlduqYGiCNMsZcD+C6vsN+W3AX96eA==} + unplugin-auto-import@20.2.0: + resolution: {integrity: sha512-vfBI/SvD9hJqYNinipVOAj5n8dS8DJXFlCKFR5iLDp2SaQwsfdnfLXgZ+34Kd3YY3YEY9omk8XQg0bwos3Q8ug==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': ^4.0.0 @@ -8279,10 +8285,6 @@ packages: vue-template-es2015-compiler: optional: true - unplugin-utils@0.2.4: - resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} - engines: {node: '>=18.12.0'} - unplugin-utils@0.3.0: resolution: {integrity: sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg==} engines: {node: '>=20.19.0'} @@ -8291,10 +8293,6 @@ packages: resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} engines: {node: '>=18.12.0'} - unplugin@2.3.9: - resolution: {integrity: sha512-2dcbZq6aprwXTkzptq3k5qm5B8cvpjG9ynPd5fyM2wDJuuF7PeUK64Sxf0d+X1ZyDOeGydbNzMqBSIVlH8GIfA==} - engines: {node: '>=18.12.0'} - unrs-resolver@1.10.1: resolution: {integrity: sha512-EFrL7Hw4kmhZdwWO3dwwFJo6hO3FXuQ6Bg8BK/faHZ9m1YxqBS31BNSTxklIQkxK/4LlV8zTYnPsIRLBzTzjCA==} @@ -10103,7 +10101,9 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.3.2(eslint@9.36.0(jiti@2.5.1))': + '@eslint/compat@1.4.0(eslint@9.36.0(jiti@2.5.1))': + dependencies: + '@eslint/core': 0.16.0 optionalDependencies: eslint: 9.36.0(jiti@2.5.1) @@ -10121,6 +10121,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -11261,7 +11265,7 @@ snapshots: '@tailwindcss/oxide@4.1.13': dependencies: detect-libc: 2.0.4 - tar: 7.4.4 + tar: 7.5.1 optionalDependencies: '@tailwindcss/oxide-android-arm64': 4.1.13 '@tailwindcss/oxide-darwin-arm64': 4.1.13 @@ -11793,14 +11797,14 @@ snapshots: '@types/node': 24.3.1 optional: true - '@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/type-utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.1 eslint: 9.36.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -11810,12 +11814,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.1 debug: 4.4.1 eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 @@ -11824,17 +11828,17 @@ snapshots: '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2) + '@typescript-eslint/types': 8.44.0 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.44.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2) - '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: @@ -11845,28 +11849,28 @@ snapshots: '@typescript-eslint/types': 8.41.0 '@typescript-eslint/visitor-keys': 8.41.0 - '@typescript-eslint/scope-manager@8.44.0': + '@typescript-eslint/scope-manager@8.44.1': dependencies: - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': - dependencies: - typescript: 5.9.2 - '@typescript-eslint/tsconfig-utils@8.44.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + typescript: 5.9.2 + + '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1 eslint: 9.36.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) @@ -11876,10 +11880,10 @@ snapshots: '@typescript-eslint/types@8.41.0': {} - '@typescript-eslint/types@8.43.0': {} - '@typescript-eslint/types@8.44.0': {} + '@typescript-eslint/types@8.44.1': {} + '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2) @@ -11896,12 +11900,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.44.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.44.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2) - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/visitor-keys': 8.44.0 + '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -11923,12 +11927,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.8.0(eslint@9.36.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.44.0 - '@typescript-eslint/types': 8.44.0 - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -11939,9 +11943,9 @@ snapshots: '@typescript-eslint/types': 8.41.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.44.0': + '@typescript-eslint/visitor-keys@8.44.1': dependencies: - '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/types': 8.44.1 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.2.0': {} @@ -12547,8 +12551,6 @@ snapshots: chalk@5.4.1: {} - chalk@5.6.0: {} - change-case@5.4.4: {} character-entities-html4@2.1.0: {} @@ -12591,10 +12593,10 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-truncate@4.0.0: + cli-truncate@5.1.0: dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 + slice-ansi: 7.1.0 + string-width: 8.1.0 cliui@8.0.1: dependencies: @@ -12638,6 +12640,8 @@ snapshots: commander@14.0.0: {} + commander@14.0.1: {} + commander@2.20.3: {} commander@7.2.0: {} @@ -13517,9 +13521,9 @@ snapshots: optionalDependencies: unrs-resolver: 1.10.1 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))): dependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) eslint-import-resolver-node@0.3.9: dependencies: @@ -13529,7 +13533,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1 @@ -13540,16 +13544,16 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.10.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.36.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -13566,7 +13570,7 @@ snapshots: dependencies: htmlparser2: 10.0.0 - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)): dependencies: '@typescript-eslint/types': 8.41.0 comment-parser: 1.4.1 @@ -13579,12 +13583,12 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.10.1 optionalDependencies: - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13595,7 +13599,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.36.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13607,7 +13611,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13995,6 +13999,8 @@ snapshots: get-east-asian-width@1.2.0: {} + get-east-asian-width@1.4.0: {} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -14510,8 +14516,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.0.0: dependencies: get-east-asian-width: 1.2.0 @@ -14861,28 +14865,21 @@ snapshots: lilconfig@2.1.0: {} - lilconfig@3.1.3: {} - lines-and-columns@1.2.4: {} - lint-staged@16.1.6: + lint-staged@16.2.0: dependencies: - chalk: 5.6.0 - commander: 14.0.0 - debug: 4.4.1 - lilconfig: 3.1.3 - listr2: 9.0.3 + commander: 14.0.1 + listr2: 9.0.4 micromatch: 4.0.8 - nano-spawn: 1.0.2 + nano-spawn: 1.0.3 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.8.1 - transitivePeerDependencies: - - supports-color - listr2@9.0.3: + listr2@9.0.4: dependencies: - cli-truncate: 4.0.0 + cli-truncate: 5.1.0 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 @@ -14982,6 +14979,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + make-dir@1.3.0: dependencies: pify: 3.0.0 @@ -15290,6 +15291,13 @@ snapshots: pkg-types: 1.3.1 ufo: 1.5.4 + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + monaco-editor@0.52.2: {} monaco-languageserver-types@0.4.0: @@ -15359,7 +15367,7 @@ snapshots: stacktrace-js: 2.0.2 stylis: 4.3.2 - nano-spawn@1.0.2: {} + nano-spawn@1.0.3: {} nanoid@3.3.11: {} @@ -15375,20 +15383,20 @@ snapshots: sax: 1.3.0 optional: true - neostandard@0.12.2(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + neostandard@0.12.2(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@humanwhocodes/gitignore-to-minimatch': 1.0.2 '@stylistic/eslint-plugin': 2.11.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.36.0(jiti@2.5.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.36.0(jiti@2.5.1)) eslint-plugin-n: 17.23.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-promise: 7.2.1(eslint@9.36.0(jiti@2.5.1)) eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.5.1)) find-up: 5.0.0 globals: 15.15.0 peowly: 1.3.2 - typescript-eslint: 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + typescript-eslint: 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -15743,12 +15751,6 @@ snapshots: exsolve: 1.0.4 pathe: 2.0.3 - pkg-types@2.2.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - pkg-types@2.3.0: dependencies: confbox: 0.2.2 @@ -16530,11 +16532,6 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - slice-ansi@7.1.0: dependencies: ansi-styles: 6.2.1 @@ -16636,6 +16633,11 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.0 + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 @@ -16885,7 +16887,7 @@ snapshots: tapable@2.2.1: {} - tar@7.4.4: + tar@7.5.1: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -17088,12 +17090,12 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typescript-eslint@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -17129,6 +17131,8 @@ snapshots: ufo@1.5.4: {} + ufo@1.6.1: {} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.8 @@ -17174,22 +17178,22 @@ snapshots: trough: 2.2.0 vfile: 6.0.1 - unimport@5.2.0: + unimport@5.4.0: dependencies: acorn: 8.15.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.2 - magic-string: 0.30.18 - mlly: 1.7.4 + magic-string: 0.30.19 + mlly: 1.8.0 pathe: 2.0.3 picomatch: 4.0.3 - pkg-types: 2.2.0 + pkg-types: 2.3.0 scule: 1.3.0 strip-literal: 3.0.0 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 unplugin: 2.3.10 - unplugin-utils: 0.2.4 + unplugin-utils: 0.3.0 unique-string@1.0.0: dependencies: @@ -17233,13 +17237,13 @@ snapshots: universalify@2.0.1: {} - unplugin-auto-import@20.1.0: + unplugin-auto-import@20.2.0: dependencies: local-pkg: 1.1.2 - magic-string: 0.30.18 + magic-string: 0.30.19 picomatch: 4.0.3 - unimport: 5.2.0 - unplugin: 2.3.9 + unimport: 5.4.0 + unplugin: 2.3.10 unplugin-utils: 0.3.0 unplugin-icons@22.3.0(@svgr/core@8.1.0(typescript@5.9.2)): @@ -17254,11 +17258,6 @@ snapshots: transitivePeerDependencies: - supports-color - unplugin-utils@0.2.4: - dependencies: - pathe: 2.0.3 - picomatch: 4.0.3 - unplugin-utils@0.3.0: dependencies: pathe: 2.0.3 @@ -17271,13 +17270,6 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - unplugin@2.3.9: - dependencies: - '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 - picomatch: 4.0.3 - webpack-virtual-modules: 0.6.2 - unrs-resolver@1.10.1: dependencies: napi-postinstall: 0.3.0 diff --git a/clash-nyanpasu/scripts/package.json b/clash-nyanpasu/scripts/package.json index ab23f4b719..ceaaf6dd71 100644 --- a/clash-nyanpasu/scripts/package.json +++ b/clash-nyanpasu/scripts/package.json @@ -22,7 +22,7 @@ "fs-extra": "11.3.2", "octokit": "5.0.3", "picocolors": "1.1.1", - "tar": "7.4.4", + "tar": "7.5.1", "telegram": "2.26.22", "undici": "7.16.0", "yargs": "18.0.0" diff --git a/filebrowser/CHANGELOG.md b/filebrowser/CHANGELOG.md index f81c8cd455..9bf8bd77cf 100644 --- a/filebrowser/CHANGELOG.md +++ b/filebrowser/CHANGELOG.md @@ -2,6 +2,26 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.44.0](https://github.com/filebrowser/filebrowser/compare/v2.43.0...v2.44.0) (2025-09-25) + + +### Features + +* allow setting ace editor theme ([#3826](https://github.com/filebrowser/filebrowser/issues/3826)) ([b9787c7](https://github.com/filebrowser/filebrowser/commit/b9787c78f3889171f94db19e7655dce68c64b6fb)) +* Improved path display in the new file and directory modal ([#5451](https://github.com/filebrowser/filebrowser/issues/5451)) ([d29ad35](https://github.com/filebrowser/filebrowser/commit/d29ad356d1067c87b2821debab91286549f512a0)) +* Translate frontend/src/i18n/en.json in no ([dec7a02](https://github.com/filebrowser/filebrowser/commit/dec7a027378fbc6948d203199c44a640a141bcad)) +* Updates for project File Browser ([#5446](https://github.com/filebrowser/filebrowser/issues/5446)) ([4ff247e](https://github.com/filebrowser/filebrowser/commit/4ff247e134e4d61668ee656a258ed67f71414e18)) +* Updates for project File Browser ([#5450](https://github.com/filebrowser/filebrowser/issues/5450)) ([0eade71](https://github.com/filebrowser/filebrowser/commit/0eade717ce9d04bf48051922f11d983edbc7c2d0)) +* Updates for project File Browser ([#5457](https://github.com/filebrowser/filebrowser/issues/5457)) ([1165f00](https://github.com/filebrowser/filebrowser/commit/1165f00bd4dcb0dcfbc084f54f51902ba4b4a714)) + + +### Bug Fixes + +* computation of file path ([c472542](https://github.com/filebrowser/filebrowser/commit/c4725428e07da72b855009e2c13c6ed91d32e0b7)) +* show login when session token expires ([e6c674b](https://github.com/filebrowser/filebrowser/commit/e6c674b3c616831942c4d4aacab0907d58003e23)) +* some formatting issues with i18n files ([949ddff](https://github.com/filebrowser/filebrowser/commit/949ddffef20e38169902c5fd74dca4815dcecf11)) +* **upload:** throttle upload speed calculation to 100ms to avoid Infinity MB/s ([#5456](https://github.com/filebrowser/filebrowser/issues/5456)) ([692ca5e](https://github.com/filebrowser/filebrowser/commit/692ca5eaf01e4dcf346ba03f82c5dbd50cce246b)) + ## [2.43.0](https://github.com/filebrowser/filebrowser/compare/v2.42.5...v2.43.0) (2025-09-13) diff --git a/filebrowser/cmd/config.go b/filebrowser/cmd/config.go index 5ce54ad9c7..ebb9c69f90 100644 --- a/filebrowser/cmd/config.go +++ b/filebrowser/cmd/config.go @@ -221,6 +221,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode) fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode) fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " ")) + fmt.Fprintf(w, "\tAce editor syntax highlighting theme:\t%s\n", set.Defaults.AceEditorTheme) fmt.Fprintf(w, "\tSorting:\n") fmt.Fprintf(w, "\t\tBy:\t%s\n", set.Defaults.Sorting.By) fmt.Fprintf(w, "\t\tAsc:\t%t\n", set.Defaults.Sorting.Asc) diff --git a/filebrowser/cmd/root.go b/filebrowser/cmd/root.go index 286f634381..a9704cf483 100644 --- a/filebrowser/cmd/root.go +++ b/filebrowser/cmd/root.go @@ -424,9 +424,10 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) error { MinimumPasswordLength: settings.DefaultMinimumPasswordLength, UserHomeBasePath: settings.DefaultUsersHomeBasePath, Defaults: settings.UserDefaults{ - Scope: ".", - Locale: "en", - SingleClick: false, + Scope: ".", + Locale: "en", + SingleClick: false, + AceEditorTheme: getStringParam(flags, "defaults.aceEditorTheme"), Perm: users.Permissions{ Admin: false, Execute: true, diff --git a/filebrowser/cmd/users.go b/filebrowser/cmd/users.go index dd3d1f52b6..5b458a5a50 100644 --- a/filebrowser/cmd/users.go +++ b/filebrowser/cmd/users.go @@ -79,6 +79,7 @@ func addUserFlags(flags *pflag.FlagSet) { flags.Bool("singleClick", false, "use single clicks only") flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)") flags.Bool("hideDotfiles", false, "hide dotfiles") + flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users") } func getViewMode(flags *pflag.FlagSet) (users.ViewMode, error) { @@ -110,6 +111,8 @@ func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all defaults.ViewMode, err = getViewMode(flags) case "singleClick": defaults.SingleClick, err = getBool(flags, flag.Name) + case "aceEditorTheme": + defaults.AceEditorTheme, err = getString(flags, flag.Name) case "perm.admin": defaults.Perm.Admin, err = getBool(flags, flag.Name) case "perm.execute": diff --git a/filebrowser/frontend/src/components/prompts/CreateFilePath.vue b/filebrowser/frontend/src/components/prompts/CreateFilePath.vue new file mode 100644 index 0000000000..ec470f3abf --- /dev/null +++ b/filebrowser/frontend/src/components/prompts/CreateFilePath.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/filebrowser/frontend/src/components/prompts/NewDir.vue b/filebrowser/frontend/src/components/prompts/NewDir.vue index 1eb6d481ac..85d47bb862 100644 --- a/filebrowser/frontend/src/components/prompts/NewDir.vue +++ b/filebrowser/frontend/src/components/prompts/NewDir.vue @@ -14,6 +14,7 @@ v-model.trim="name" tabindex="1" /> +
@@ -48,6 +49,7 @@ import { files as api } from "@/api"; import url from "@/utils/url"; import { useRoute, useRouter } from "vue-router"; import { useI18n } from "vue-i18n"; +import CreateFilePath from "@/components/prompts/CreateFilePath.vue"; const $showError = inject("$showError")!; diff --git a/filebrowser/frontend/src/components/prompts/NewFile.vue b/filebrowser/frontend/src/components/prompts/NewFile.vue index b7c05d440f..d3fb34edce 100644 --- a/filebrowser/frontend/src/components/prompts/NewFile.vue +++ b/filebrowser/frontend/src/components/prompts/NewFile.vue @@ -13,6 +13,7 @@ @keyup.enter="submit" v-model.trim="name" /> +
@@ -42,6 +43,7 @@ import { useI18n } from "vue-i18n"; import { useRoute, useRouter } from "vue-router"; import { useFileStore } from "@/stores/file"; import { useLayoutStore } from "@/stores/layout"; +import CreateFilePath from "@/components/prompts/CreateFilePath.vue"; import { files as api } from "@/api"; import url from "@/utils/url"; diff --git a/filebrowser/frontend/src/components/prompts/UploadFiles.vue b/filebrowser/frontend/src/components/prompts/UploadFiles.vue index 883fffe3de..4d96d5bb13 100644 --- a/filebrowser/frontend/src/components/prompts/UploadFiles.vue +++ b/filebrowser/frontend/src/components/prompts/UploadFiles.vue @@ -14,7 +14,7 @@ }}
-
{{ speedMbytes }}/s
+
{{ speedText }}/s
{{ formattedETA }} remaining
{{ sentPercent }}% Completed
@@ -88,6 +88,7 @@ const uploadStore = useUploadStore(); const { sentBytes, totalBytes } = storeToRefs(uploadStore); const byteToMbyte = partial({ exponent: 2 }); +const byteToKbyte = partial({ exponent: 1 }); const sentPercent = computed(() => ((uploadStore.sentBytes / uploadStore.totalBytes) * 100).toFixed(2) @@ -95,11 +96,33 @@ const sentPercent = computed(() => const sentMbytes = computed(() => byteToMbyte(uploadStore.sentBytes)); const totalMbytes = computed(() => byteToMbyte(uploadStore.totalBytes)); -const speedMbytes = computed(() => byteToMbyte(speed.value)); +const speedText = computed(() => { + const bytes = speed.value; + + if (bytes < 1024 * 1024) { + const kb = parseFloat(byteToKbyte(bytes)); + return `${kb.toFixed(2)} KB`; + } else { + const mb = parseFloat(byteToMbyte(bytes)); + return `${mb.toFixed(2)} MB`; + } +}); let lastSpeedUpdate: number = 0; let recentSpeeds: number[] = []; +let lastThrottleTime = 0; + +const throttledCalculateSpeed = (sentBytes: number, oldSentBytes: number) => { + const now = Date.now(); + if (now - lastThrottleTime < 100) { + return; + } + + lastThrottleTime = now; + calculateSpeed(sentBytes, oldSentBytes); +}; + const calculateSpeed = (sentBytes: number, oldSentBytes: number) => { // Reset the state when the uploads batch is complete if (sentBytes === 0) { @@ -149,7 +172,7 @@ const calculateEta = () => { eta.value = remainingSize / speedBytesPerSecond; }; -watch(sentBytes, calculateSpeed); +watch(sentBytes, throttledCalculateSpeed); watch(totalBytes, (totalBytes, oldTotalBytes) => { if (oldTotalBytes !== 0) { diff --git a/filebrowser/frontend/src/components/settings/AceEditorTheme.vue b/filebrowser/frontend/src/components/settings/AceEditorTheme.vue new file mode 100644 index 0000000000..09efe48b5a --- /dev/null +++ b/filebrowser/frontend/src/components/settings/AceEditorTheme.vue @@ -0,0 +1,24 @@ + + + diff --git a/filebrowser/frontend/src/i18n/ar.json b/filebrowser/frontend/src/i18n/ar.json index 70feef517a..26e9576515 100644 --- a/filebrowser/frontend/src/i18n/ar.json +++ b/filebrowser/frontend/src/i18n/ar.json @@ -42,8 +42,8 @@ "update": "تحديث", "upload": "رفع", "openFile": "فتح الملف", - "discardChanges": "إلغاء التغييرات", - "saveChanges": "Save changes" + "discardChanges": "إلغاء التغييرات", + "saveChanges": "Save changes" }, "download": { "downloadFile": "تحميل الملف", @@ -158,6 +158,7 @@ "video": "فيديوهات" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "إدارة", "administrator": "مدير", "allowCommands": "تنفيذ اﻷوامر", diff --git a/filebrowser/frontend/src/i18n/ca.json b/filebrowser/frontend/src/i18n/ca.json index 4d698fa54d..e17c7c8094 100644 --- a/filebrowser/frontend/src/i18n/ca.json +++ b/filebrowser/frontend/src/i18n/ca.json @@ -42,8 +42,8 @@ "update": "Actualitzar", "upload": "Pujar", "openFile": "Obrir fitxer", - "discardChanges": "Descartar", - "saveChanges": "Save changes" + "discardChanges": "Descartar", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Descarregar fitxer", @@ -158,6 +158,7 @@ "video": "Vídeo" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrador", "allowCommands": "Executar comandes", diff --git a/filebrowser/frontend/src/i18n/cs.json b/filebrowser/frontend/src/i18n/cs.json index c7e3284278..914b843f86 100644 --- a/filebrowser/frontend/src/i18n/cs.json +++ b/filebrowser/frontend/src/i18n/cs.json @@ -42,8 +42,8 @@ "update": "Aktualizovat", "upload": "Nahrát", "openFile": "Otevřít soubor", - "discardChanges": "Zrušit změny", - "saveChanges": "Save changes" + "discardChanges": "Zrušit změny", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Stáhnout soubor", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrátor", "allowCommands": "Povolit příkazy", diff --git a/filebrowser/frontend/src/i18n/de.json b/filebrowser/frontend/src/i18n/de.json index d22a3be16f..48c91eb8ab 100644 --- a/filebrowser/frontend/src/i18n/de.json +++ b/filebrowser/frontend/src/i18n/de.json @@ -42,8 +42,8 @@ "update": "Update", "upload": "Upload", "openFile": "Datei öffnen", - "discardChanges": "Verwerfen", - "saveChanges": "Save changes" + "discardChanges": "Verwerfen", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Download Datei", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Befehle ausführen", diff --git a/filebrowser/frontend/src/i18n/el.json b/filebrowser/frontend/src/i18n/el.json index 9fed72f1fc..97206a1f2c 100644 --- a/filebrowser/frontend/src/i18n/el.json +++ b/filebrowser/frontend/src/i18n/el.json @@ -42,8 +42,8 @@ "update": "Ενημέρωση", "upload": "Μεταφόρτωση", "openFile": "Άνοιγμα αρχείου", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Λήψη αρχείου", @@ -158,6 +158,7 @@ "video": "Βίντεο" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Διαχειριστής", "administrator": "Διαχειριστής", "allowCommands": "Εκτέλεση εντολών", diff --git a/filebrowser/frontend/src/i18n/en.json b/filebrowser/frontend/src/i18n/en.json index 9411d91edd..15a297dfd1 100644 --- a/filebrowser/frontend/src/i18n/en.json +++ b/filebrowser/frontend/src/i18n/en.json @@ -42,8 +42,8 @@ "update": "Update", "upload": "Upload", "openFile": "Open file", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Download File", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Execute commands", diff --git a/filebrowser/frontend/src/i18n/es.json b/filebrowser/frontend/src/i18n/es.json index e7f9e882d0..2981ece1e9 100644 --- a/filebrowser/frontend/src/i18n/es.json +++ b/filebrowser/frontend/src/i18n/es.json @@ -42,8 +42,8 @@ "update": "Actualizar", "upload": "Subir", "openFile": "Abrir archivo", - "discardChanges": "Discard", - "saveChanges": "Guardar cambios" + "discardChanges": "Discard", + "saveChanges": "Guardar cambios" }, "download": { "downloadFile": "Descargar fichero", @@ -158,6 +158,7 @@ "video": "Vídeo" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrador", "allowCommands": "Ejecutar comandos", diff --git a/filebrowser/frontend/src/i18n/fa.json b/filebrowser/frontend/src/i18n/fa.json index 70e10c1221..1d885fcc54 100644 --- a/filebrowser/frontend/src/i18n/fa.json +++ b/filebrowser/frontend/src/i18n/fa.json @@ -42,8 +42,8 @@ "update": "به روز سانی", "upload": "آپلود", "openFile": "باز کردن فایل", - "discardChanges": "لغو کردن", - "saveChanges": "Save changes" + "discardChanges": "لغو کردن", + "saveChanges": "Save changes" }, "download": { "downloadFile": "دانلود فایل", @@ -158,6 +158,7 @@ "video": "ویدئو " }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "اجرای دستورات", diff --git a/filebrowser/frontend/src/i18n/fr.json b/filebrowser/frontend/src/i18n/fr.json index 165088077e..bf07499a5d 100644 --- a/filebrowser/frontend/src/i18n/fr.json +++ b/filebrowser/frontend/src/i18n/fr.json @@ -42,8 +42,8 @@ "update": "Mettre à jour", "upload": "Importer", "openFile": "Ouvrir le fichier", - "discardChanges": "Annuler", - "saveChanges": "Save changes" + "discardChanges": "Annuler", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Télécharger le fichier", @@ -158,6 +158,7 @@ "video": "Vidéo" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrateur·ice", "allowCommands": "Exécuter des commandes", diff --git a/filebrowser/frontend/src/i18n/he.json b/filebrowser/frontend/src/i18n/he.json index a8e89a93ed..6576ebd020 100644 --- a/filebrowser/frontend/src/i18n/he.json +++ b/filebrowser/frontend/src/i18n/he.json @@ -42,8 +42,8 @@ "update": "עדכון", "upload": "העלאה", "openFile": "פתח קובץ", - "discardChanges": "זריקת השינויים", - "saveChanges": "Save changes" + "discardChanges": "זריקת השינויים", + "saveChanges": "Save changes" }, "download": { "downloadFile": "הורד קובץ", @@ -158,6 +158,7 @@ "video": "וידאו" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "מנהל", "administrator": "מנהל ראשי", "allowCommands": "הפעלת פקודות", diff --git a/filebrowser/frontend/src/i18n/hu.json b/filebrowser/frontend/src/i18n/hu.json index 00fc419eb9..dd58ed1d37 100644 --- a/filebrowser/frontend/src/i18n/hu.json +++ b/filebrowser/frontend/src/i18n/hu.json @@ -42,8 +42,8 @@ "update": "Frissítés", "upload": "Feltöltés", "openFile": "Fájl megnyitása", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Fájl letöltése", @@ -158,6 +158,7 @@ "video": "Videó" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Adminisztrátor", "allowCommands": "Parancsok futtatása", diff --git a/filebrowser/frontend/src/i18n/is.json b/filebrowser/frontend/src/i18n/is.json index c55455e56d..431f21ef65 100644 --- a/filebrowser/frontend/src/i18n/is.json +++ b/filebrowser/frontend/src/i18n/is.json @@ -42,8 +42,8 @@ "update": "Vista", "upload": "Hlaða upp", "openFile": "Open file", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Sækja skjal", @@ -158,6 +158,7 @@ "video": "Myndbönd" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Stjórnandi", "administrator": "Stjórnandi", "allowCommands": "Senda skipanir", diff --git a/filebrowser/frontend/src/i18n/it.json b/filebrowser/frontend/src/i18n/it.json index 995ba7cdcc..929d90ed34 100644 --- a/filebrowser/frontend/src/i18n/it.json +++ b/filebrowser/frontend/src/i18n/it.json @@ -42,8 +42,8 @@ "update": "Aggiorna", "upload": "Carica", "openFile": "Apri file", - "discardChanges": "Ignora", - "saveChanges": "Save changes" + "discardChanges": "Ignora", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Scarica file", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Amministratore", "allowCommands": "Esegui comandi", diff --git a/filebrowser/frontend/src/i18n/ja.json b/filebrowser/frontend/src/i18n/ja.json index 99e4b017c1..0e6b9c0461 100644 --- a/filebrowser/frontend/src/i18n/ja.json +++ b/filebrowser/frontend/src/i18n/ja.json @@ -42,8 +42,8 @@ "update": "更新", "upload": "アップロード", "openFile": "ファイルを開く", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "ファイルのダウンロード", @@ -158,6 +158,7 @@ "video": "動画" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "管理者", "administrator": "管理者", "allowCommands": "コマンドの実行", diff --git a/filebrowser/frontend/src/i18n/ko.json b/filebrowser/frontend/src/i18n/ko.json index ec64bd6249..64a6c7d58b 100644 --- a/filebrowser/frontend/src/i18n/ko.json +++ b/filebrowser/frontend/src/i18n/ko.json @@ -42,8 +42,8 @@ "update": "업데이트", "upload": "업로드", "openFile": "파일 열기", - "discardChanges": "변경 사항 취소", - "saveChanges": "변경사항 저장" + "discardChanges": "변경 사항 취소", + "saveChanges": "변경사항 저장" }, "download": { "downloadFile": "파일 다운로드", @@ -158,6 +158,7 @@ "video": "비디오" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "관리자", "administrator": "관리자", "allowCommands": "명령 실행", diff --git a/filebrowser/frontend/src/i18n/nl-be.json b/filebrowser/frontend/src/i18n/nl-be.json index c104ef8146..78a7c28171 100644 --- a/filebrowser/frontend/src/i18n/nl-be.json +++ b/filebrowser/frontend/src/i18n/nl-be.json @@ -42,8 +42,8 @@ "update": "Updaten", "upload": "Uploaden", "openFile": "Open file", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Bestand downloaden", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Commando's uitvoeren", diff --git a/filebrowser/frontend/src/i18n/no.json b/filebrowser/frontend/src/i18n/no.json index b3ff472f2a..3eea3638ef 100644 --- a/filebrowser/frontend/src/i18n/no.json +++ b/filebrowser/frontend/src/i18n/no.json @@ -42,8 +42,8 @@ "update": "Opptater", "upload": "Last opp", "openFile": "Open file", - "discardChanges": "Slett", - "saveChanges": "Lagre Endringane " + "discardChanges": "Slett", + "saveChanges": "Lagre Endringane " }, "download": { "downloadFile": "Nedlast filen", @@ -103,7 +103,7 @@ "usernameTaken": "Brukernavn er allerede i bruk", "wrongCredentials": "Feil legitimasjon", "logout_reasons": { - "inactivity": "You have been logged out due to inactivity." + "inactivity": "Du har blitt logget ut på grunn av inaktivitet" } }, "permanent": "Permanent", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Utfør kommandoer", diff --git a/filebrowser/frontend/src/i18n/pl.json b/filebrowser/frontend/src/i18n/pl.json index 54dd9aed3d..b9db745534 100644 --- a/filebrowser/frontend/src/i18n/pl.json +++ b/filebrowser/frontend/src/i18n/pl.json @@ -42,8 +42,8 @@ "update": "Aktualizuj", "upload": "Wyślij", "openFile": "Otwórz plik", - "discardChanges": "Odrzuć", - "saveChanges": "Zapisz zmiany" + "discardChanges": "Odrzuć", + "saveChanges": "Zapisz zmiany" }, "download": { "downloadFile": "Pobierz plik", @@ -158,6 +158,7 @@ "video": "Wideo" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Wykonaj polecenie", diff --git a/filebrowser/frontend/src/i18n/pt-br.json b/filebrowser/frontend/src/i18n/pt-br.json index 8e314c77fb..d29f98d63c 100644 --- a/filebrowser/frontend/src/i18n/pt-br.json +++ b/filebrowser/frontend/src/i18n/pt-br.json @@ -42,8 +42,8 @@ "update": "Atualizar", "upload": "Enviar", "openFile": "Abrir", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Baixar arquivo", @@ -158,6 +158,7 @@ "video": "Vídeos" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrador", "allowCommands": "Executar comandos", diff --git a/filebrowser/frontend/src/i18n/pt.json b/filebrowser/frontend/src/i18n/pt.json index 4c719cc9e4..e54a4f0d0d 100644 --- a/filebrowser/frontend/src/i18n/pt.json +++ b/filebrowser/frontend/src/i18n/pt.json @@ -42,8 +42,8 @@ "update": "Atualizar", "upload": "Enviar", "openFile": "Open file", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Descarregar ficheiro", @@ -158,6 +158,7 @@ "video": "Vídeos" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrador", "allowCommands": "Executar comandos", diff --git a/filebrowser/frontend/src/i18n/ro.json b/filebrowser/frontend/src/i18n/ro.json index 232b0e4dcd..73719a4e0e 100644 --- a/filebrowser/frontend/src/i18n/ro.json +++ b/filebrowser/frontend/src/i18n/ro.json @@ -42,8 +42,8 @@ "update": "Actualizează", "upload": "Încarcă", "openFile": "Open file", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Descarcă fișier", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Execută comenzi", diff --git a/filebrowser/frontend/src/i18n/ru.json b/filebrowser/frontend/src/i18n/ru.json index 931cf68dc2..0678ce14f1 100644 --- a/filebrowser/frontend/src/i18n/ru.json +++ b/filebrowser/frontend/src/i18n/ru.json @@ -42,8 +42,8 @@ "update": "Обновить", "upload": "Загрузить", "openFile": "Открыть файл", - "discardChanges": "Отказаться", - "saveChanges": "Save changes" + "discardChanges": "Отказаться", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Скачать файл", @@ -158,6 +158,7 @@ "video": "Видео" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Админ", "administrator": "Администратор", "allowCommands": "Запуск команд", diff --git a/filebrowser/frontend/src/i18n/sk.json b/filebrowser/frontend/src/i18n/sk.json index 2f01ef8c1f..68112fbaeb 100644 --- a/filebrowser/frontend/src/i18n/sk.json +++ b/filebrowser/frontend/src/i18n/sk.json @@ -42,8 +42,8 @@ "update": "Aktualizovať", "upload": "Nahrať", "openFile": "Otvoriť súbor", - "discardChanges": "Zahodiť", - "saveChanges": "Save changes" + "discardChanges": "Zahodiť", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Stiahnuť súbor", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administrátor", "allowCommands": "Vykonávať príkazy", diff --git a/filebrowser/frontend/src/i18n/sv-se.json b/filebrowser/frontend/src/i18n/sv-se.json index 319b7eb2aa..9f66a1416d 100644 --- a/filebrowser/frontend/src/i18n/sv-se.json +++ b/filebrowser/frontend/src/i18n/sv-se.json @@ -42,8 +42,8 @@ "update": "Uppdatera", "upload": "Ladda upp", "openFile": "Open file", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Ladda ner fil", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Admin", "administrator": "Administratör", "allowCommands": "Exekvera kommandon", diff --git a/filebrowser/frontend/src/i18n/tr.json b/filebrowser/frontend/src/i18n/tr.json index aa0d3558a1..7493821edf 100644 --- a/filebrowser/frontend/src/i18n/tr.json +++ b/filebrowser/frontend/src/i18n/tr.json @@ -42,8 +42,8 @@ "update": "Güncelle", "upload": "Yükle", "openFile": "Dosyayı aç", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "discardChanges": "Discard", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Dosyayı indir", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Yönetim", "administrator": "Yönetici", "allowCommands": "Komutları çalıştır", diff --git a/filebrowser/frontend/src/i18n/uk.json b/filebrowser/frontend/src/i18n/uk.json index d3f01c9f64..40a968937d 100644 --- a/filebrowser/frontend/src/i18n/uk.json +++ b/filebrowser/frontend/src/i18n/uk.json @@ -42,8 +42,8 @@ "update": "Оновити", "upload": "Вивантажити", "openFile": "Відкрити файл", - "discardChanges": "Скасувати", - "saveChanges": "Save changes" + "discardChanges": "Скасувати", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Завантажити файл", @@ -158,6 +158,7 @@ "video": "Відео" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Адмін", "administrator": "Адміністратор", "allowCommands": "Запуск команд", diff --git a/filebrowser/frontend/src/i18n/vi.json b/filebrowser/frontend/src/i18n/vi.json index 380f98ff73..fab93759f3 100644 --- a/filebrowser/frontend/src/i18n/vi.json +++ b/filebrowser/frontend/src/i18n/vi.json @@ -42,8 +42,8 @@ "update": "Cập nhật", "upload": "Tải lên", "openFile": "Mở tệp", - "discardChanges": "Hủy bỏ thay đổi", - "saveChanges": "Save changes" + "discardChanges": "Hủy bỏ thay đổi", + "saveChanges": "Save changes" }, "download": { "downloadFile": "Tải xuống tệp tin", @@ -158,6 +158,7 @@ "video": "Video" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "Quản trị viên", "administrator": "Người quản trị", "allowCommands": "Thực thi lệnh", diff --git a/filebrowser/frontend/src/i18n/zh-cn.json b/filebrowser/frontend/src/i18n/zh-cn.json index c18c7e98df..15cf8e3cb8 100644 --- a/filebrowser/frontend/src/i18n/zh-cn.json +++ b/filebrowser/frontend/src/i18n/zh-cn.json @@ -42,8 +42,8 @@ "update": "更新", "upload": "上传", "openFile": "打开文件", - "discardChanges": "放弃更改", - "saveChanges": "Save changes" + "discardChanges": "放弃更改", + "saveChanges": "Save changes" }, "download": { "downloadFile": "下载文件", @@ -158,6 +158,7 @@ "video": "视频" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "管理员", "administrator": "管理员", "allowCommands": "执行命令(Shell 命令)", diff --git a/filebrowser/frontend/src/i18n/zh-tw.json b/filebrowser/frontend/src/i18n/zh-tw.json index adcfde91bb..d59f1efd71 100644 --- a/filebrowser/frontend/src/i18n/zh-tw.json +++ b/filebrowser/frontend/src/i18n/zh-tw.json @@ -42,8 +42,8 @@ "update": "更新", "upload": "上傳", "openFile": "開啟檔案", - "discardChanges": "放棄變更", - "saveChanges": "Save changes" + "discardChanges": "放棄變更", + "saveChanges": "Save changes" }, "download": { "downloadFile": "下載檔案", @@ -158,6 +158,7 @@ "video": "影片" }, "settings": { + "aceEditorTheme": "Ace editor theme", "admin": "管理員", "administrator": "管理員", "allowCommands": "執行命令", diff --git a/filebrowser/frontend/src/types/settings.d.ts b/filebrowser/frontend/src/types/settings.d.ts index 90ca6ae754..ba56c6128a 100644 --- a/filebrowser/frontend/src/types/settings.d.ts +++ b/filebrowser/frontend/src/types/settings.d.ts @@ -21,6 +21,7 @@ interface SettingsDefaults { commands: any[]; hideDotfiles: boolean; dateFormat: boolean; + aceEditorTheme: string; } interface SettingsBranding { diff --git a/filebrowser/frontend/src/types/user.d.ts b/filebrowser/frontend/src/types/user.d.ts index b81806fcab..40c453c502 100644 --- a/filebrowser/frontend/src/types/user.d.ts +++ b/filebrowser/frontend/src/types/user.d.ts @@ -13,6 +13,7 @@ interface IUser { dateFormat: boolean; viewMode: ViewModeType; sorting?: Sorting; + aceEditorTheme: string; } type ViewModeType = "list" | "mosaic" | "mosaic gallery"; diff --git a/filebrowser/frontend/src/utils/theme.ts b/filebrowser/frontend/src/utils/theme.ts index 8058356a55..0244b0447b 100644 --- a/filebrowser/frontend/src/utils/theme.ts +++ b/filebrowser/frontend/src/utils/theme.ts @@ -1,4 +1,6 @@ import { theme } from "./constants"; +import "ace-builds"; +import { themesByName } from "ace-builds/src-noconflict/ext-themelist"; export const getTheme = (): UserTheme => { return (document.documentElement.className as UserTheme) || theme; @@ -32,3 +34,17 @@ export const getMediaPreference = (): UserTheme => { return "light"; } }; + +export const getEditorTheme = (themeName: string) => { + if (!themeName.startsWith("ace/theme/")) { + themeName = `ace/theme/${themeName}`; + } + const themeKey = themeName.replace("ace/theme/", ""); + if (themesByName[themeKey] !== undefined) { + return themeName; + } else if (getTheme() === "dark") { + return "ace/theme/twilight"; + } else { + return "ace/theme/chrome"; + } +}; diff --git a/filebrowser/frontend/src/views/files/Editor.vue b/filebrowser/frontend/src/views/files/Editor.vue index 13013a9fb9..f3d9aa9463 100644 --- a/filebrowser/frontend/src/views/files/Editor.vue +++ b/filebrowser/frontend/src/views/files/Editor.vue @@ -69,7 +69,7 @@ import HeaderBar from "@/components/header/HeaderBar.vue"; import { useAuthStore } from "@/stores/auth"; import { useFileStore } from "@/stores/file"; import { useLayoutStore } from "@/stores/layout"; -import { getTheme } from "@/utils/theme"; +import { getEditorTheme } from "@/utils/theme"; import { marked } from "marked"; import { inject, onBeforeUnmount, onMounted, ref, watchEffect } from "vue"; import { useI18n } from "vue-i18n"; @@ -122,7 +122,7 @@ onMounted(() => { value: fileContent, showPrintMargin: false, readOnly: fileStore.req?.type === "textImmutable", - theme: "ace/theme/chrome", + theme: getEditorTheme(authStore.user?.aceEditorTheme ?? ""), mode: modelist.getModeForPath(fileStore.req!.name).mode, wrap: true, enableBasicAutocompletion: true, @@ -130,10 +130,6 @@ onMounted(() => { enableSnippets: true, }); - if (getTheme() === "dark") { - editor.value!.setTheme("ace/theme/twilight"); - } - editor.value.setFontSize(fontSize.value); editor.value.focus(); }); @@ -219,6 +215,13 @@ const decreaseFontSize = () => { }; const close = () => { + if (!editor.value?.session.getUndoManager().isClean()) { + layoutStore.showHover("discardEditorChanges"); + return; + } + + fileStore.updateRequest(null); + const uri = url.removeLastDir(route.path) + "/"; router.push({ path: uri }); }; diff --git a/filebrowser/frontend/src/views/settings/Profile.vue b/filebrowser/frontend/src/views/settings/Profile.vue index c677092f6b..1b0794734e 100644 --- a/filebrowser/frontend/src/views/settings/Profile.vue +++ b/filebrowser/frontend/src/views/settings/Profile.vue @@ -24,6 +24,13 @@ class="input input--block" v-model:locale="locale" > + +

{{ t("settings.aceEditorTheme") }}

+
@@ -81,6 +88,7 @@ import { useAuthStore } from "@/stores/auth"; import { useLayoutStore } from "@/stores/layout"; import { users as api } from "@/api"; +import AceEditorTheme from "@/components/settings/AceEditorTheme.vue"; import Languages from "@/components/settings/Languages.vue"; import { computed, inject, onMounted, ref } from "vue"; import { useI18n } from "vue-i18n"; @@ -98,6 +106,7 @@ const hideDotfiles = ref(false); const singleClick = ref(false); const dateFormat = ref(false); const locale = ref(""); +const aceEditorTheme = ref(""); const passwordClass = computed(() => { const baseClass = "input input--block"; @@ -113,13 +122,14 @@ const passwordClass = computed(() => { return `${baseClass} input--red`; }); -onMounted(() => { +onMounted(async () => { layoutStore.loading = true; if (authStore.user === null) return false; locale.value = authStore.user.locale; hideDotfiles.value = authStore.user.hideDotfiles; singleClick.value = authStore.user.singleClick; dateFormat.value = authStore.user.dateFormat; + aceEditorTheme.value = authStore.user.aceEditorTheme; layoutStore.loading = false; return true; }); @@ -163,6 +173,7 @@ const updateSettings = async (event: Event) => { hideDotfiles: hideDotfiles.value, singleClick: singleClick.value, dateFormat: dateFormat.value, + aceEditorTheme: aceEditorTheme.value, }; await api.update(data, [ @@ -170,6 +181,7 @@ const updateSettings = async (event: Event) => { "hideDotfiles", "singleClick", "dateFormat", + "aceEditorTheme", ]); authStore.updateUser(data); $showSuccess(t("settings.settingsUpdated")); diff --git a/filebrowser/http/auth.go b/filebrowser/http/auth.go index 0ecaed1457..18d100255a 100644 --- a/filebrowser/http/auth.go +++ b/filebrowser/http/auth.go @@ -21,16 +21,17 @@ const ( ) type userInfo struct { - ID uint `json:"id"` - Locale string `json:"locale"` - ViewMode users.ViewMode `json:"viewMode"` - SingleClick bool `json:"singleClick"` - Perm users.Permissions `json:"perm"` - Commands []string `json:"commands"` - LockPassword bool `json:"lockPassword"` - HideDotfiles bool `json:"hideDotfiles"` - DateFormat bool `json:"dateFormat"` - Username string `json:"username"` + ID uint `json:"id"` + Locale string `json:"locale"` + ViewMode users.ViewMode `json:"viewMode"` + SingleClick bool `json:"singleClick"` + Perm users.Permissions `json:"perm"` + Commands []string `json:"commands"` + LockPassword bool `json:"lockPassword"` + HideDotfiles bool `json:"hideDotfiles"` + DateFormat bool `json:"dateFormat"` + Username string `json:"username"` + AceEditorTheme string `json:"aceEditorTheme"` } type authToken struct { @@ -190,16 +191,17 @@ func renewHandler(tokenExpireTime time.Duration) handleFunc { func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.User, tokenExpirationTime time.Duration) (int, error) { claims := &authToken{ User: userInfo{ - ID: user.ID, - Locale: user.Locale, - ViewMode: user.ViewMode, - SingleClick: user.SingleClick, - Perm: user.Perm, - LockPassword: user.LockPassword, - Commands: user.Commands, - HideDotfiles: user.HideDotfiles, - DateFormat: user.DateFormat, - Username: user.Username, + ID: user.ID, + Locale: user.Locale, + ViewMode: user.ViewMode, + SingleClick: user.SingleClick, + Perm: user.Perm, + LockPassword: user.LockPassword, + Commands: user.Commands, + HideDotfiles: user.HideDotfiles, + DateFormat: user.DateFormat, + Username: user.Username, + AceEditorTheme: user.AceEditorTheme, }, RegisteredClaims: jwt.RegisteredClaims{ IssuedAt: jwt.NewNumericDate(time.Now()), diff --git a/filebrowser/settings/defaults.go b/filebrowser/settings/defaults.go index d60e36dc9f..5b6c3f2a5c 100644 --- a/filebrowser/settings/defaults.go +++ b/filebrowser/settings/defaults.go @@ -8,15 +8,16 @@ import ( // UserDefaults is a type that holds the default values // for some fields on User. type UserDefaults struct { - Scope string `json:"scope"` - Locale string `json:"locale"` - ViewMode users.ViewMode `json:"viewMode"` - SingleClick bool `json:"singleClick"` - Sorting files.Sorting `json:"sorting"` - Perm users.Permissions `json:"perm"` - Commands []string `json:"commands"` - HideDotfiles bool `json:"hideDotfiles"` - DateFormat bool `json:"dateFormat"` + Scope string `json:"scope"` + Locale string `json:"locale"` + ViewMode users.ViewMode `json:"viewMode"` + SingleClick bool `json:"singleClick"` + Sorting files.Sorting `json:"sorting"` + Perm users.Permissions `json:"perm"` + Commands []string `json:"commands"` + HideDotfiles bool `json:"hideDotfiles"` + DateFormat bool `json:"dateFormat"` + AceEditorTheme string `json:"aceEditorTheme"` } // Apply applies the default options to a user. @@ -30,4 +31,5 @@ func (d *UserDefaults) Apply(u *users.User) { u.Commands = d.Commands u.HideDotfiles = d.HideDotfiles u.DateFormat = d.DateFormat + u.AceEditorTheme = d.AceEditorTheme } diff --git a/filebrowser/tools/package.json b/filebrowser/tools/package.json index 9a2bd1c66f..9433b94ec4 100644 --- a/filebrowser/tools/package.json +++ b/filebrowser/tools/package.json @@ -3,5 +3,6 @@ "@commitlint/cli": "^15.0.0", "@commitlint/config-conventional": "^15.0.0", "standard-version": "^9.3.2" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/filebrowser/users/users.go b/filebrowser/users/users.go index e0310f2126..020faf118e 100644 --- a/filebrowser/users/users.go +++ b/filebrowser/users/users.go @@ -20,21 +20,22 @@ const ( // User describes a user. type User struct { - ID uint `storm:"id,increment" json:"id"` - Username string `storm:"unique" json:"username"` - Password string `json:"password"` - Scope string `json:"scope"` - Locale string `json:"locale"` - LockPassword bool `json:"lockPassword"` - ViewMode ViewMode `json:"viewMode"` - SingleClick bool `json:"singleClick"` - Perm Permissions `json:"perm"` - Commands []string `json:"commands"` - Sorting files.Sorting `json:"sorting"` - Fs afero.Fs `json:"-" yaml:"-"` - Rules []rules.Rule `json:"rules"` - HideDotfiles bool `json:"hideDotfiles"` - DateFormat bool `json:"dateFormat"` + ID uint `storm:"id,increment" json:"id"` + Username string `storm:"unique" json:"username"` + Password string `json:"password"` + Scope string `json:"scope"` + Locale string `json:"locale"` + LockPassword bool `json:"lockPassword"` + ViewMode ViewMode `json:"viewMode"` + SingleClick bool `json:"singleClick"` + Perm Permissions `json:"perm"` + Commands []string `json:"commands"` + Sorting files.Sorting `json:"sorting"` + Fs afero.Fs `json:"-" yaml:"-"` + Rules []rules.Rule `json:"rules"` + HideDotfiles bool `json:"hideDotfiles"` + DateFormat bool `json:"dateFormat"` + AceEditorTheme string `json:"aceEditorTheme"` } // GetRules implements rules.Provider. diff --git a/lede/target/linux/airoha/dts/an7581.dtsi b/lede/target/linux/airoha/dts/an7581.dtsi index 58aed4b255..11622dccf2 100644 --- a/lede/target/linux/airoha/dts/an7581.dtsi +++ b/lede/target/linux/airoha/dts/an7581.dtsi @@ -510,7 +510,7 @@ #address-cells = <1>; #size-cells = <0>; - status = "disable"; + status = "disabled"; }; i2c1: i2c1@1fbf8100 { @@ -524,7 +524,7 @@ #address-cells = <1>; #size-cells = <0>; - status = "disable"; + status = "disabled"; }; snfi: spi@1fa10000 { diff --git a/lede/target/linux/generic/backport-5.10/420-v5.19-06-mtd-spinand-gigadevice-add-support-for-GD5F1GM9.patch b/lede/target/linux/generic/backport-5.10/420-v5.19-06-mtd-spinand-gigadevice-add-support-for-GD5F1GM9.patch deleted file mode 100644 index a6ae5ec3f0..0000000000 --- a/lede/target/linux/generic/backport-5.10/420-v5.19-06-mtd-spinand-gigadevice-add-support-for-GD5F1GM9.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- a/drivers/mtd/nand/spi/gigadevice.c -+++ b/drivers/mtd/nand/spi/gigadevice.c -@@ -323,6 +323,16 @@ - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&gd5fxgq4xc_oob_256_ops, - gd5fxgq4ufxxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ4UC", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xd1), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(8, 2048), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), - SPINAND_INFO("GD5F4GQ4UC", - SPINAND_ID(SPINAND_READID_METHOD_OPCODE, 0xb4, 0x68), - NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), -@@ -496,6 +506,56 @@ - SPINAND_INFO("GD5F4GM8RExxG", - SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x85), - NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F2GQ5xExxH", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x22), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_2gq5, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ5RExxH", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x21), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ4RExxH", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xc9), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GM9UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x91, 0x01), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GM9RExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x81, 0x01), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5, - &write_cache_variants, diff --git a/lede/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts b/lede/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts index 1d2e4f0e85..f906c4b8df 100644 --- a/lede/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts +++ b/lede/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts @@ -563,7 +563,7 @@ * although the pcie1 phy probes successfully, the controller is unable * to bring it up. So let's disable it until a solution is found. */ - status = "disbled"; + status = "disabled"; perst-gpios = <&tlmm 18 GPIO_ACTIVE_LOW>; diff --git a/mieru/apis/client/mieru.go b/mieru/apis/client/client.go similarity index 98% rename from mieru/apis/client/mieru.go rename to mieru/apis/client/client.go index 847584dd73..8a0007d88c 100644 --- a/mieru/apis/client/mieru.go +++ b/mieru/apis/client/client.go @@ -75,16 +75,16 @@ func (mc *mieruClient) Store(config *ClientConfig) error { mc.mu.Lock() defer mc.mu.Unlock() if config == nil { - return fmt.Errorf("%w: client config is nil", ErrInvalidConfigConfig) + return fmt.Errorf("%w: client config is nil", ErrInvalidClientConfig) } if config.Profile == nil { - return fmt.Errorf("%w: client config profile is nil", ErrInvalidConfigConfig) + return fmt.Errorf("%w: client config profile is nil", ErrInvalidClientConfig) } if mc.running { return ErrStoreClientConfigAfterStart } if err := appctlcommon.ValidateClientConfigSingleProfile(config.Profile); err != nil { - return fmt.Errorf("%w: %s", ErrInvalidConfigConfig, err.Error()) + return fmt.Errorf("%w: %s", ErrInvalidClientConfig, err.Error()) } mc.config = config return nil diff --git a/mieru/apis/client/interface.go b/mieru/apis/client/interface.go index 7432d4d7aa..6895858a03 100644 --- a/mieru/apis/client/interface.go +++ b/mieru/apis/client/interface.go @@ -26,12 +26,12 @@ import ( var ( ErrNoClientConfig = errors.New("no client config") - ErrInvalidConfigConfig = errors.New("invalid client config") + ErrInvalidClientConfig = errors.New("invalid client config") ErrClientIsNotRunning = errors.New("client is not running") ErrStoreClientConfigAfterStart = errors.New("can't store client config after start") ) -// Client contains methods supported by a mieru client. +// Client contains methods supported by a proxy client. type Client interface { ClientConfigurationService ClientLifecycleService diff --git a/mieru/apis/server/doc.go b/mieru/apis/server/doc.go new file mode 100644 index 0000000000..6bacaa3509 --- /dev/null +++ b/mieru/apis/server/doc.go @@ -0,0 +1,18 @@ +// Copyright (C) 2025 mieru authors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// Package server provides mieru server APIs for third party applications +// to integrate mieru protocol. +package server diff --git a/mieru/apis/server/interface.go b/mieru/apis/server/interface.go new file mode 100644 index 0000000000..bcf0ac83b0 --- /dev/null +++ b/mieru/apis/server/interface.go @@ -0,0 +1,73 @@ +// Copyright (C) 2025 mieru authors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package server + +import ( + "errors" + + "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" +) + +var ( + ErrNoServerConfig = errors.New("no server config") + ErrInvalidServerConfig = errors.New("invalid server config") + ErrServerIsNotRunning = errors.New("server is not running") + ErrStoreServerConfigAfterStart = errors.New("can't store server config after start") +) + +// Server contains methods supported by a proxy server. +type Server interface { + ServerConfigurationService + ServerLifecycleService + ServerNetworkService +} + +// ServerConfigurationService contains methods to manage proxy server configuration. +type ServerConfigurationService interface { + // Load returns the server config. + // It returns ErrNoServerConfig if server config is never stored. + Load() (*ServerConfig, error) + + // Store saves the server config. + // It returns wrapped ErrInvalidServerConfig error + // if the provided server config is invalid. + // It returns ErrStoreServerConfigAfterStart error + // if it is called after start. + Store(*ServerConfig) error +} + +// ServerLifecycleService contains methods to manage proxy server lifecycle. +type ServerLifecycleService interface { + // Start activates the server with the stored configuration. + // Calling Start function more than once has undefined behavior. + Start() error + + // Stop deactivates the server. + // Established network connections are NOT terminated. + // After stop, the server can't be reused. + Stop() error + + // IsRunning returns true if the server has been started + // and has not been stopped. + IsRunning() bool +} + +type ServerNetworkService interface{} + +// ServerConfig stores proxy server configuration. +type ServerConfig struct { + Config *appctlpb.ServerConfig +} diff --git a/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc b/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc index 3177de6e82..1a5406c197 100644 --- a/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc +++ b/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc @@ -533,6 +533,9 @@ int main(int argc, char* argv[]) { naive_proxies.push_back(std::move(naive_proxy)); } + if (getenv("TEST_MARK_STARTUP") != nullptr) { + LOG(INFO) << "TEST_MARK_STARTUP"; + } base::RunLoop().Run(); return EXIT_SUCCESS; diff --git a/naiveproxy/tests/basic.py b/naiveproxy/tests/basic.py index a684a64925..010cb5eaf3 100644 --- a/naiveproxy/tests/basic.py +++ b/naiveproxy/tests/basic.py @@ -97,7 +97,9 @@ def start_naive(naive_args, config_file): cmdline = [argv.naive] cmdline.extend(naive_args) - proc = subprocess.Popen(cmdline, stdout=subprocess.DEVNULL, + env = os.environ.copy() + env["TEST_MARK_STARTUP"] = "yes" + proc = subprocess.Popen(cmdline, stdout=subprocess.DEVNULL, env=env, stderr=subprocess.PIPE, text=True, encoding='utf-8') print('subprocess.Popen', ' '.join(cmdline), 'pid:', proc.pid) @@ -122,7 +124,7 @@ def start_naive(naive_args, config_file): print('terminate pid', proc.pid) proc.terminate() return 'Failed to listen' - elif 'Listening on ' in line: + elif 'TEST_MARK_STARTUP' in line: timeout.cancel() return proc diff --git a/openwrt-packages/filebrowser/Makefile b/openwrt-packages/filebrowser/Makefile index ed55e9639e..f8e819e492 100644 --- a/openwrt-packages/filebrowser/Makefile +++ b/openwrt-packages/filebrowser/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=filebrowser -PKG_VERSION:=2.43.0 +PKG_VERSION:=2.44.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}? -PKG_HASH:=9c3acee7567986ceef331e3eea0236b4dd9a41bf3874449fbb9bdc22c00a0aab +PKG_HASH:=b2ceb3c9bbfb6e0e2c31764b8ff1d7788fa965081eb3d43452b6a5065027f71f PKG_LICENSE:=Apache-2.0 PKG_LICENSE_FILES:=LICENSE diff --git a/openwrt-packages/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css b/openwrt-packages/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css index 29681b1fb3..10917465c9 100644 --- a/openwrt-packages/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css +++ b/openwrt-packages/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css @@ -1415,15 +1415,12 @@ footer > a { margin-left: 0; margin-right: 0; margin-top: 0rem; -} - -.container .alert, -.container .alert-message.error { position: relative; top: 0; transform:translate(-50%, 0); width: 100%; } + .lg { margin: 0; padding: 0 !important; @@ -2574,7 +2571,7 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child { padding: 0.5rem; cursor: auto; white-space: pre-wrap; - color: var(--gray-dark); + color: var(--dark-primary); outline: 0; border-radius: 0.25rem; border: 1px solid var(--lighter); @@ -3467,6 +3464,7 @@ pre.command-output { background: #fb6340 !important; border-color: #fb6340 !important; margin-left: 0 !important; + width: 82px !important; } /* applyreboot fix */ #applyreboot-container { diff --git a/openwrt-packages/luci-theme-argon/less/cascade.less b/openwrt-packages/luci-theme-argon/less/cascade.less index cec6a7a172..94fbe4978b 100644 --- a/openwrt-packages/luci-theme-argon/less/cascade.less +++ b/openwrt-packages/luci-theme-argon/less/cascade.less @@ -275,16 +275,12 @@ select[multiple="multiple"] { margin-left: 0; margin-right: 0; margin-top: 0rem; -} - - -.container .alert, -.container .alert-message.error { position: relative; top: 0; transform:translate(-50%, 0); width: 100%; } + .lg { margin: 0; padding: 0 !important; @@ -1671,7 +1667,7 @@ body:not(.Interfaces) .cbi-rowstyle-2:first-child { padding: 0.5rem; cursor: auto; white-space: pre-wrap; - color: var(--gray-dark); + color: var(--dark-primary); outline: 0; border-radius: 0.25rem; border: 1px solid var(--lighter); diff --git a/openwrt-packages/luci-theme-argon/less/page-fix.less b/openwrt-packages/luci-theme-argon/less/page-fix.less index 383f11608b..623f0468d4 100644 --- a/openwrt-packages/luci-theme-argon/less/page-fix.less +++ b/openwrt-packages/luci-theme-argon/less/page-fix.less @@ -362,6 +362,7 @@ background: #fb6340 !important; border-color: #fb6340 !important; margin-left: 0 !important; + width: 82px !important; } } @@ -948,4 +949,4 @@ div[style*="display:grid;grid-template-columns:repeat"] { [data-page^="command-cfg"] .mobile-hide, [data-page^="command-cfg"] .showSide { display: none; -} \ No newline at end of file +} diff --git a/small/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js b/small/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js index 9874a07ebd..191d9613a5 100644 --- a/small/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js +++ b/small/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js @@ -297,6 +297,14 @@ const trojan_cipher_methods = [ ['chacha20-ietf-poly1305', _('chacha20-ietf-poly1305')] ]; +const tls_client_auth_types = [ + ['', _('none')], + ['request', _('Request')], + ['require-any', _('Require any')], + ['verify-if-given', _('Verify if given')], + ['require-and-verify', _('Require and verify')] +]; + const tls_client_fingerprints = [ ['chrome'], ['firefox'], @@ -1585,6 +1593,16 @@ function validateJson(section_id, value) { return true; } +function validateMTLSClientAuth(type_option, section_id, value) { + // If `client-auth-type` is set to "verify-if-given" or "require-and-verify", `client-auth-cert` must not be empty. + const auth_type = this.section.getOption(type_option).formvalue(section_id); + //this.section.getUIElement('tls_client_auth_type').getValue(); + if (!value && ["verify-if-given", "require-and-verify"].includes(auth_type)) + return _('Expecting: %s').format(_('non-empty value')); + + return true; +} + function validateBase64Key(length, section_id, value) { /* Thanks to luci-proto-wireguard */ if (value) @@ -1819,6 +1837,7 @@ return baseclass.extend({ shadowsocks_cipher_methods, shadowsocks_cipher_length, trojan_cipher_methods, + tls_client_auth_types, tls_client_fingerprints, vless_flow, @@ -1869,6 +1888,7 @@ return baseclass.extend({ validateAuthPassword, validateCommonPort, validateJson, + validateMTLSClientAuth, validateBase64Key, validateShadowsocksPassword, validateBytesize, diff --git a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js index 0d587da2bf..4f3589f936 100644 --- a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js +++ b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js @@ -546,6 +546,17 @@ return view.extend({ so.datatype = 'file'; so.value('/etc/ssl/acme/example.key'); + so = ss.option(form.ListValue, 'tls_client_auth_type', _('API Client Auth type') + _(' (mTLS)')); + so.default = hm.tls_client_auth_types[0][0]; + hm.tls_client_auth_types.forEach((res) => { + so.value.apply(so, res); + }) + + so = ss.option(form.Value, 'tls_client_auth_cert_path', _('API Client Auth Certificate path') + _(' (mTLS)'), + _('The %s public key, in PEM format.').format(_('Client'))); + so.value('/etc/fchomo/certs/client_publickey.pem'); + so.validate = L.bind(hm.validateMTLSClientAuth, so, 'tls_client_auth_type'); + so = ss.option(hm.GenText, 'tls_ech_key', _('API ECH key')); so.placeholder = '-----BEGIN ECH KEYS-----\nACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK\nmadSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz\ndC5jb20AAA==\n-----END ECH KEYS-----'; so.hm_placeholder = 'outer-sni.any.domain'; diff --git a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js index 86e9128d44..aea15a00b9 100644 --- a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js +++ b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js @@ -654,6 +654,34 @@ return view.extend({ so.depends({tls: '1', type: /^(http|socks5|vmess|vless|trojan|anytls|hysteria|hysteria2|tuic)$/}); so.modalonly = true; + so = ss.taboption('field_tls', form.Value, 'tls_cert_path', _('Certificate path') + _(' (mTLS)'), + _('The %s public key, in PEM format.').format(_('Client'))); + so.value('/etc/fchomo/certs/client_publickey.pem'); + so.depends('tls', '1'); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Button, '_upload_cert', _('Upload certificate') + _(' (mTLS)'), + _('Save your configuration before uploading files!')); + so.inputstyle = 'action'; + so.inputtitle = _('Upload...'); + so.depends({tls: '1', tls_cert_path: '/etc/fchomo/certs/client_publickey.pem'}); + so.onclick = L.bind(hm.uploadCertificate, so, _('certificate'), 'client_publickey'); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Value, 'tls_key_path', _('Key path') + _(' (mTLS)'), + _('The %s private key, in PEM format.').format(_('Client'))); + so.value('/etc/fchomo/certs/client_privatekey.pem'); + so.depends({tls: '1', tls_cert_path: /.+/}); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Button, '_upload_key', _('Upload key') + _(' (mTLS)'), + _('Save your configuration before uploading files!')); + so.inputstyle = 'action'; + so.inputtitle = _('Upload...'); + so.depends({tls: '1', tls_key_path: '/etc/fchomo/certs/client_privatekey.pem'}); + so.onclick = L.bind(hm.uploadCertificate, so, _('private key'), 'client_privatekey'); + so.modalonly = true; + so = ss.taboption('field_tls', form.Flag, 'tls_ech', _('Enable ECH')); so.default = so.disabled; so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls|hysteria|hysteria2|tuic)$/}); diff --git a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js index 42787f5b3b..318d2b7719 100644 --- a/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js +++ b/small/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js @@ -343,7 +343,7 @@ return view.extend({ o.modalonly = true; o = s.taboption('field_tls', form.Value, 'tls_cert_path', _('Certificate path'), - _('The server public key, in PEM format.')); + _('The %s public key, in PEM format.').format(_('Server'))); o.value('/etc/fchomo/certs/server_publickey.pem'); o.depends({tls: '1', tls_reality: '0'}); o.rmempty = false; @@ -358,7 +358,7 @@ return view.extend({ o.modalonly = true; o = s.taboption('field_tls', form.Value, 'tls_key_path', _('Key path'), - _('The server private key, in PEM format.')); + _('The %s private key, in PEM format.').format(_('Server'))); o.value('/etc/fchomo/certs/server_privatekey.pem'); o.rmempty = false; o.depends({tls: '1', tls_cert_path: /.+/}); @@ -372,10 +372,35 @@ return view.extend({ o.onclick = L.bind(hm.uploadCertificate, o, _('private key'), 'server_privatekey'); o.modalonly = true; + o = s.taboption('field_tls', form.ListValue, 'tls_client_auth_type', _('Client Auth type') + _(' (mTLS)')); + o.default = hm.tls_client_auth_types[0][0]; + hm.tls_client_auth_types.forEach((res) => { + o.value.apply(o, res); + }) + o.depends({tls: '1', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|hysteria2|tuic)$/}); + o.modalonly = true; + + o = s.taboption('field_tls', form.Value, 'tls_client_auth_cert_path', _('Client Auth Certificate path') + _(' (mTLS)'), + _('The %s public key, in PEM format.').format(_('Client'))); + o.value('/etc/fchomo/certs/client_publickey.pem'); + o.validate = function(section_id, value) { + return hm.validateMTLSClientAuth.call(this, 'tls_client_auth_type', section_id, value); + } + o.depends({tls: '1', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|hysteria2|tuic)$/}); + o.modalonly = true; + + o = s.taboption('field_tls', form.Button, '_upload_client_auth_cert', _('Upload certificate') + _(' (mTLS)'), + _('Save your configuration before uploading files!')); + o.inputstyle = 'action'; + o.inputtitle = _('Upload...'); + o.depends({tls: '1', tls_client_auth_cert_path: '/etc/fchomo/certs/client_publickey.pem'}); + o.onclick = L.bind(hm.uploadCertificate, o, _('certificate'), 'client_publickey'); + o.modalonly = true; + o = s.taboption('field_tls', hm.GenText, 'tls_ech_key', _('ECH key')); o.placeholder = '-----BEGIN ECH KEYS-----\nACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK\nmadSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz\ndC5jb20AAA==\n-----END ECH KEYS-----'; o.hm_placeholder = 'outer-sni.any.domain'; - o.cols = 30 + o.cols = 30; o.rows = 2; o.hm_options = { type: 'ech-keypair', diff --git a/small/luci-app-fchomo/po/templates/fchomo.pot b/small/luci-app-fchomo/po/templates/fchomo.pot index f8bbf3d6c6..235a86cfa3 100644 --- a/small/luci-app-fchomo/po/templates/fchomo.pot +++ b/small/luci-app-fchomo/po/templates/fchomo.pot @@ -5,13 +5,25 @@ msgstr "Content-Type: text/plain; charset=UTF-8" msgid "%s log" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:543 +#: htdocs/luci-static/resources/fchomo.js:551 #: htdocs/luci-static/resources/view/fchomo/client.js:237 #: htdocs/luci-static/resources/view/fchomo/client.js:267 #: htdocs/luci-static/resources/view/fchomo/client.js:363 msgid "(Imported)" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/global.js:549 +#: htdocs/luci-static/resources/view/fchomo/global.js:555 +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:671 +#: htdocs/luci-static/resources/view/fchomo/node.js:677 +#: htdocs/luci-static/resources/view/fchomo/server.js:375 +#: htdocs/luci-static/resources/view/fchomo/server.js:383 +#: htdocs/luci-static/resources/view/fchomo/server.js:392 +msgid "(mTLS)" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/client.js:924 #: htdocs/luci-static/resources/view/fchomo/client.js:925 #: htdocs/luci-static/resources/view/fchomo/client.js:938 @@ -19,19 +31,19 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1151 #: htdocs/luci-static/resources/view/fchomo/client.js:1615 #: htdocs/luci-static/resources/view/fchomo/client.js:1616 -#: htdocs/luci-static/resources/view/fchomo/node.js:1336 -#: htdocs/luci-static/resources/view/fchomo/node.js:1344 -#: htdocs/luci-static/resources/view/fchomo/node.js:1358 -#: htdocs/luci-static/resources/view/fchomo/node.js:1366 +#: htdocs/luci-static/resources/view/fchomo/node.js:1365 +#: htdocs/luci-static/resources/view/fchomo/node.js:1373 +#: htdocs/luci-static/resources/view/fchomo/node.js:1387 +#: htdocs/luci-static/resources/view/fchomo/node.js:1395 msgid "-- Please choose --" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1048 +#: htdocs/luci-static/resources/fchomo.js:1056 msgid "0-RTT reuse." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1045 -#: htdocs/luci-static/resources/fchomo.js:1049 +#: htdocs/luci-static/resources/fchomo.js:1053 +#: htdocs/luci-static/resources/fchomo.js:1057 msgid "1-RTT only." msgstr "" @@ -55,44 +67,55 @@ msgstr "" msgid "0 or 1 only." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:352 -#: htdocs/luci-static/resources/view/fchomo/server.js:367 +#: htdocs/luci-static/resources/view/fchomo/node.js:664 +#: htdocs/luci-static/resources/view/fchomo/node.js:678 +#: htdocs/luci-static/resources/view/fchomo/server.js:353 +#: htdocs/luci-static/resources/view/fchomo/server.js:368 +#: htdocs/luci-static/resources/view/fchomo/server.js:393 msgid "Save your configuration before uploading files!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:590 +#: htdocs/luci-static/resources/view/fchomo/global.js:605 msgid "API" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:630 +#: htdocs/luci-static/resources/view/fchomo/global.js:555 +msgid "API Client Auth Certificate path" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:549 +msgid "API Client Auth type" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:645 msgid "API DoH service" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:584 +#: htdocs/luci-static/resources/view/fchomo/global.js:599 msgid "API ECH config" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:545 +#: htdocs/luci-static/resources/view/fchomo/global.js:560 msgid "API ECH key" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:621 +#: htdocs/luci-static/resources/view/fchomo/global.js:636 msgid "API HTTP port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:625 +#: htdocs/luci-static/resources/view/fchomo/global.js:640 msgid "API HTTPS port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:537 +#: htdocs/luci-static/resources/view/fchomo/global.js:541 msgid "API TLS certificate path" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:541 +#: htdocs/luci-static/resources/view/fchomo/global.js:545 msgid "API TLS private key path" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:634 +#: htdocs/luci-static/resources/view/fchomo/global.js:649 msgid "API secret" msgstr "" @@ -100,8 +123,8 @@ msgstr "" msgid "ASN version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:711 -#: htdocs/luci-static/resources/view/fchomo/global.js:761 +#: htdocs/luci-static/resources/view/fchomo/global.js:726 +#: htdocs/luci-static/resources/view/fchomo/global.js:776 msgid "Access Control" msgstr "" @@ -117,11 +140,11 @@ msgstr "" msgid "Add a Node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:915 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 msgid "Add a provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1322 msgid "Add a proxy chain" msgstr "" @@ -145,11 +168,11 @@ msgstr "" msgid "Add a sub rule" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1118 +#: htdocs/luci-static/resources/view/fchomo/node.js:1147 msgid "Add prefix" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1122 +#: htdocs/luci-static/resources/view/fchomo/node.js:1151 msgid "Add suffix" msgstr "" @@ -158,7 +181,7 @@ msgstr "" msgid "Address" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1052 +#: htdocs/luci-static/resources/fchomo.js:1060 msgid "" "After the 1-RTT client/server hello, padding randomly 111-1111 bytes with " "100% probability." @@ -168,9 +191,9 @@ msgstr "" msgid "Aging time of NAT map maintained by client.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:764 -#: htdocs/luci-static/resources/view/fchomo/global.js:827 -#: htdocs/luci-static/resources/view/fchomo/global.js:846 +#: htdocs/luci-static/resources/view/fchomo/global.js:779 +#: htdocs/luci-static/resources/view/fchomo/global.js:842 +#: htdocs/luci-static/resources/view/fchomo/global.js:861 msgid "All allowed" msgstr "" @@ -178,7 +201,7 @@ msgstr "" msgid "All ports" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:617 +#: htdocs/luci-static/resources/view/fchomo/global.js:632 msgid "" "Allow access from private network.
To access the API on a private " "network from a public website, it must be enabled." @@ -210,12 +233,12 @@ msgstr "" msgid "Application version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:789 +#: htdocs/luci-static/resources/view/fchomo/global.js:804 msgid "As the TOP upstream of dnsmasq" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:790 -#: htdocs/luci-static/resources/view/fchomo/global.js:797 +#: htdocs/luci-static/resources/view/fchomo/global.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:812 msgid "As the TOP upstream of dnsmasq." msgstr "" @@ -264,23 +287,23 @@ msgstr "" msgid "Binary mrs" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:725 -#: htdocs/luci-static/resources/view/fchomo/node.js:885 -#: htdocs/luci-static/resources/view/fchomo/node.js:1191 +#: htdocs/luci-static/resources/view/fchomo/global.js:740 +#: htdocs/luci-static/resources/view/fchomo/node.js:914 +#: htdocs/luci-static/resources/view/fchomo/node.js:1220 msgid "Bind interface" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:886 -#: htdocs/luci-static/resources/view/fchomo/node.js:1192 +#: htdocs/luci-static/resources/view/fchomo/node.js:915 +#: htdocs/luci-static/resources/view/fchomo/node.js:1221 msgid "Bind outbound interface.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:726 +#: htdocs/luci-static/resources/view/fchomo/global.js:741 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:766 +#: htdocs/luci-static/resources/view/fchomo/global.js:781 msgid "Black list" msgstr "" @@ -296,50 +319,51 @@ msgstr "" msgid "Bootstrap DNS server (Node)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:828 +#: htdocs/luci-static/resources/view/fchomo/global.js:843 msgid "Bypass CN" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:847 +#: htdocs/luci-static/resources/view/fchomo/global.js:862 msgid "Bypass DSCP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:612 +#: htdocs/luci-static/resources/view/fchomo/global.js:627 msgid "CORS Allow origins" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:616 +#: htdocs/luci-static/resources/view/fchomo/global.js:631 msgid "CORS Allow private network" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:613 +#: htdocs/luci-static/resources/view/fchomo/global.js:628 msgid "CORS allowed origins, * will be used if empty." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:563 +#: htdocs/luci-static/resources/fchomo.js:571 msgid "Cancel" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:635 +#: htdocs/luci-static/resources/view/fchomo/node.js:636 msgid "Cert fingerprint" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:636 +#: htdocs/luci-static/resources/view/fchomo/node.js:637 msgid "" "Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:344 +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +#: htdocs/luci-static/resources/view/fchomo/server.js:345 msgid "Certificate path" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1335 -#: htdocs/luci-static/resources/view/fchomo/node.js:1341 +#: htdocs/luci-static/resources/view/fchomo/node.js:1364 +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 msgid "Chain head" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1357 -#: htdocs/luci-static/resources/view/fchomo/node.js:1363 +#: htdocs/luci-static/resources/view/fchomo/node.js:1386 +#: htdocs/luci-static/resources/view/fchomo/node.js:1392 msgid "Chain tail" msgstr "" @@ -384,12 +408,24 @@ msgid "" "to download the latest initial package." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1235 +#: htdocs/luci-static/resources/fchomo.js:1243 +#: htdocs/luci-static/resources/view/fchomo/global.js:556 +#: htdocs/luci-static/resources/view/fchomo/node.js:658 +#: htdocs/luci-static/resources/view/fchomo/node.js:672 +#: htdocs/luci-static/resources/view/fchomo/server.js:384 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:22 msgid "Client" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:669 +#: htdocs/luci-static/resources/view/fchomo/server.js:383 +msgid "Client Auth Certificate path" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/server.js:375 +msgid "Client Auth type" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:698 msgid "Client fingerprint" msgstr "" @@ -406,11 +442,11 @@ msgstr "" msgid "Common ports (bypass P2P traffic)" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1473 +#: htdocs/luci-static/resources/fchomo.js:1481 msgid "Complete" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1138 +#: htdocs/luci-static/resources/view/fchomo/node.js:1167 msgid "Configuration Items" msgstr "" @@ -423,19 +459,19 @@ msgstr "" msgid "Connection check" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1088 +#: htdocs/luci-static/resources/fchomo.js:1096 msgid "Content copied to clipboard!" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:598 -#: htdocs/luci-static/resources/view/fchomo/node.js:1060 -#: htdocs/luci-static/resources/view/fchomo/node.js:1074 +#: htdocs/luci-static/resources/view/fchomo/node.js:1089 +#: htdocs/luci-static/resources/view/fchomo/node.js:1103 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:328 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:342 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1059 +#: htdocs/luci-static/resources/view/fchomo/node.js:1088 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:327 msgid "Contents" msgstr "" @@ -444,7 +480,7 @@ msgstr "" msgid "Contents have been saved." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1090 +#: htdocs/luci-static/resources/fchomo.js:1098 msgid "Copy" msgstr "" @@ -456,15 +492,15 @@ msgstr "" msgid "Cron expression" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:865 +#: htdocs/luci-static/resources/view/fchomo/global.js:880 msgid "Custom Direct List" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1109 +#: htdocs/luci-static/resources/view/fchomo/node.js:1138 msgid "Custom HTTP header." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:883 +#: htdocs/luci-static/resources/view/fchomo/global.js:898 msgid "Custom Proxy List" msgstr "" @@ -497,7 +533,7 @@ msgstr "" msgid "DNS settings" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:850 +#: htdocs/luci-static/resources/view/fchomo/global.js:865 msgid "DSCP list" msgstr "" @@ -525,8 +561,8 @@ msgstr "" msgid "Dial fields" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1350 -#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1401 msgid "Different chain head/tail" msgstr "" @@ -534,15 +570,15 @@ msgstr "" msgid "Direct" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:768 +#: htdocs/luci-static/resources/view/fchomo/global.js:783 msgid "Direct IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:771 +#: htdocs/luci-static/resources/view/fchomo/global.js:786 msgid "Direct IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:774 +#: htdocs/luci-static/resources/view/fchomo/global.js:789 msgid "Direct MAC-s" msgstr "" @@ -552,11 +588,11 @@ msgstr "" msgid "Disable" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:702 +#: htdocs/luci-static/resources/view/fchomo/global.js:717 msgid "Disable ECN of quic-go" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:699 +#: htdocs/luci-static/resources/view/fchomo/global.js:714 msgid "Disable GSO of quic-go" msgstr "" @@ -564,7 +600,7 @@ msgstr "" msgid "Disable ICMP Forwarding" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:584 +#: htdocs/luci-static/resources/view/fchomo/node.js:585 msgid "Disable SNI" msgstr "" @@ -572,7 +608,7 @@ msgstr "" msgid "Disable UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:696 +#: htdocs/luci-static/resources/view/fchomo/global.js:711 msgid "Disable safe path check" msgstr "" @@ -598,29 +634,29 @@ msgstr "" msgid "Domain" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:585 +#: htdocs/luci-static/resources/view/fchomo/node.js:586 msgid "Donot send server name in ClientHello." msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1449 -#: htdocs/luci-static/resources/view/fchomo/node.js:649 -#: htdocs/luci-static/resources/view/fchomo/node.js:1178 +#: htdocs/luci-static/resources/view/fchomo/node.js:650 +#: htdocs/luci-static/resources/view/fchomo/node.js:1207 msgid "Donot verifying server certificate." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:864 +#: htdocs/luci-static/resources/view/fchomo/node.js:893 msgid "Download bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:865 +#: htdocs/luci-static/resources/view/fchomo/node.js:894 msgid "Download bandwidth in Mbps." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:992 +#: htdocs/luci-static/resources/fchomo.js:1000 msgid "Download failed: %s" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:990 +#: htdocs/luci-static/resources/fchomo.js:998 msgid "Download successful." msgstr "" @@ -628,12 +664,12 @@ msgstr "" msgid "Dual stack" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:662 -#: htdocs/luci-static/resources/view/fchomo/server.js:415 +#: htdocs/luci-static/resources/view/fchomo/node.js:691 +#: htdocs/luci-static/resources/view/fchomo/server.js:441 msgid "ECH config" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:374 +#: htdocs/luci-static/resources/view/fchomo/server.js:400 msgid "ECH key" msgstr "" @@ -649,11 +685,11 @@ msgstr "" msgid "ETag support" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:777 +#: htdocs/luci-static/resources/view/fchomo/node.js:806 msgid "Early Data first packet length limit." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:783 +#: htdocs/luci-static/resources/view/fchomo/node.js:812 msgid "Early Data header name" msgstr "" @@ -665,12 +701,12 @@ msgstr "" msgid "Edit ruleset" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1057 +#: htdocs/luci-static/resources/view/fchomo/node.js:1086 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:325 msgid "Editer" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1039 +#: htdocs/luci-static/resources/fchomo.js:1047 msgid "Eliminate encryption header characteristics" msgstr "" @@ -681,11 +717,11 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1365 #: htdocs/luci-static/resources/view/fchomo/client.js:1587 #: htdocs/luci-static/resources/view/fchomo/global.js:401 -#: htdocs/luci-static/resources/view/fchomo/global.js:671 +#: htdocs/luci-static/resources/view/fchomo/global.js:686 #: htdocs/luci-static/resources/view/fchomo/node.js:102 -#: htdocs/luci-static/resources/view/fchomo/node.js:1030 -#: htdocs/luci-static/resources/view/fchomo/node.js:1214 -#: htdocs/luci-static/resources/view/fchomo/node.js:1303 +#: htdocs/luci-static/resources/view/fchomo/node.js:1059 +#: htdocs/luci-static/resources/view/fchomo/node.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1332 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:253 #: htdocs/luci-static/resources/view/fchomo/server.js:50 #: htdocs/luci-static/resources/view/fchomo/server.js:77 @@ -703,38 +739,38 @@ msgstr "" msgid "Enable 0-RTT handshake" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:705 +#: htdocs/luci-static/resources/view/fchomo/global.js:720 msgid "" "Enable IP4P " "conversion for outbound connections" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:656 +#: htdocs/luci-static/resources/view/fchomo/node.js:685 msgid "Enable ECH" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:852 +#: htdocs/luci-static/resources/view/fchomo/node.js:881 msgid "Enable TCP Brutal" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:853 +#: htdocs/luci-static/resources/view/fchomo/node.js:882 msgid "Enable TCP Brutal congestion control algorithm" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:841 +#: htdocs/luci-static/resources/view/fchomo/node.js:870 msgid "Enable multiplexing only for TCP." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:835 +#: htdocs/luci-static/resources/view/fchomo/node.js:864 msgid "Enable padding" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:846 +#: htdocs/luci-static/resources/view/fchomo/node.js:875 msgid "Enable statistic" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:547 -#: htdocs/luci-static/resources/view/fchomo/node.js:1160 +#: htdocs/luci-static/resources/view/fchomo/node.js:548 +#: htdocs/luci-static/resources/view/fchomo/node.js:1189 msgid "" "Enable the SUoT protocol, requires server support. Conflict with Multiplex." msgstr "" @@ -746,7 +782,7 @@ msgid "" "connections, losing the ability to masquerade with HTTP/3." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1200 +#: htdocs/luci-static/resources/fchomo.js:1208 msgid "Encryption method" msgstr "" @@ -769,7 +805,7 @@ msgid "" "if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1272 +#: htdocs/luci-static/resources/view/fchomo/node.js:1301 msgid "Exclude matched node types." msgstr "" @@ -780,7 +816,7 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1043 -#: htdocs/luci-static/resources/view/fchomo/node.js:1265 +#: htdocs/luci-static/resources/view/fchomo/node.js:1294 msgid "Exclude nodes that meet keywords or regexps." msgstr "" @@ -789,59 +825,60 @@ msgid "Expand/Collapse result" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1003 -#: htdocs/luci-static/resources/view/fchomo/node.js:1250 +#: htdocs/luci-static/resources/view/fchomo/node.js:1279 msgid "Expected HTTP code. 204 will be used if empty." msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1005 -#: htdocs/luci-static/resources/view/fchomo/node.js:1252 +#: htdocs/luci-static/resources/view/fchomo/node.js:1281 msgid "Expected status" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:342 -#: htdocs/luci-static/resources/fchomo.js:345 -#: htdocs/luci-static/resources/fchomo.js:348 -#: htdocs/luci-static/resources/fchomo.js:1228 -#: htdocs/luci-static/resources/fchomo.js:1256 -#: htdocs/luci-static/resources/fchomo.js:1362 -#: htdocs/luci-static/resources/fchomo.js:1512 +#: htdocs/luci-static/resources/fchomo.js:350 +#: htdocs/luci-static/resources/fchomo.js:353 +#: htdocs/luci-static/resources/fchomo.js:356 +#: htdocs/luci-static/resources/fchomo.js:1236 +#: htdocs/luci-static/resources/fchomo.js:1264 +#: htdocs/luci-static/resources/fchomo.js:1370 #: htdocs/luci-static/resources/fchomo.js:1520 #: htdocs/luci-static/resources/fchomo.js:1528 -#: htdocs/luci-static/resources/fchomo.js:1551 -#: htdocs/luci-static/resources/fchomo.js:1554 -#: htdocs/luci-static/resources/fchomo.js:1561 -#: htdocs/luci-static/resources/fchomo.js:1579 -#: htdocs/luci-static/resources/fchomo.js:1582 -#: htdocs/luci-static/resources/fchomo.js:1592 -#: htdocs/luci-static/resources/fchomo.js:1605 -#: htdocs/luci-static/resources/fchomo.js:1607 -#: htdocs/luci-static/resources/fchomo.js:1620 -#: htdocs/luci-static/resources/fchomo.js:1629 -#: htdocs/luci-static/resources/fchomo.js:1636 -#: htdocs/luci-static/resources/fchomo.js:1645 -#: htdocs/luci-static/resources/fchomo.js:1657 -#: htdocs/luci-static/resources/fchomo.js:1660 -#: htdocs/luci-static/resources/fchomo.js:1670 +#: htdocs/luci-static/resources/fchomo.js:1536 +#: htdocs/luci-static/resources/fchomo.js:1559 +#: htdocs/luci-static/resources/fchomo.js:1562 +#: htdocs/luci-static/resources/fchomo.js:1569 +#: htdocs/luci-static/resources/fchomo.js:1587 +#: htdocs/luci-static/resources/fchomo.js:1590 +#: htdocs/luci-static/resources/fchomo.js:1601 +#: htdocs/luci-static/resources/fchomo.js:1610 +#: htdocs/luci-static/resources/fchomo.js:1623 +#: htdocs/luci-static/resources/fchomo.js:1625 +#: htdocs/luci-static/resources/fchomo.js:1638 +#: htdocs/luci-static/resources/fchomo.js:1647 +#: htdocs/luci-static/resources/fchomo.js:1654 +#: htdocs/luci-static/resources/fchomo.js:1663 +#: htdocs/luci-static/resources/fchomo.js:1675 +#: htdocs/luci-static/resources/fchomo.js:1678 +#: htdocs/luci-static/resources/fchomo.js:1688 #: htdocs/luci-static/resources/view/fchomo/client.js:66 #: htdocs/luci-static/resources/view/fchomo/client.js:900 #: htdocs/luci-static/resources/view/fchomo/client.js:1380 -#: htdocs/luci-static/resources/view/fchomo/global.js:856 -#: htdocs/luci-static/resources/view/fchomo/node.js:641 -#: htdocs/luci-static/resources/view/fchomo/node.js:1350 -#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/global.js:871 +#: htdocs/luci-static/resources/view/fchomo/node.js:642 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1401 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:280 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:294 msgid "Expecting: %s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:718 -#: htdocs/luci-static/resources/view/fchomo/node.js:725 -#: htdocs/luci-static/resources/view/fchomo/server.js:482 -#: htdocs/luci-static/resources/view/fchomo/server.js:489 +#: htdocs/luci-static/resources/view/fchomo/node.js:747 +#: htdocs/luci-static/resources/view/fchomo/node.js:754 +#: htdocs/luci-static/resources/view/fchomo/server.js:508 +#: htdocs/luci-static/resources/view/fchomo/server.js:515 msgid "Expecting: only support %s." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:690 +#: htdocs/luci-static/resources/view/fchomo/global.js:705 msgid "Experimental" msgstr "" @@ -856,19 +893,19 @@ msgstr "" msgid "Factor" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1431 +#: htdocs/luci-static/resources/fchomo.js:1439 msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1390 +#: htdocs/luci-static/resources/fchomo.js:1398 msgid "Failed to generate %s, error: %s." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1770 +#: htdocs/luci-static/resources/fchomo.js:1788 msgid "Failed to upload %s, error: %s." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1789 +#: htdocs/luci-static/resources/fchomo.js:1807 msgid "Failed to upload, error: %s." msgstr "" @@ -887,7 +924,7 @@ msgid "Fallback filter" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1038 -#: htdocs/luci-static/resources/view/fchomo/node.js:1259 +#: htdocs/luci-static/resources/view/fchomo/node.js:1288 msgid "Filter nodes that meet keywords or regexps." msgstr "" @@ -922,8 +959,8 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1004 -#: htdocs/luci-static/resources/view/fchomo/node.js:1128 -#: htdocs/luci-static/resources/view/fchomo/node.js:1251 +#: htdocs/luci-static/resources/view/fchomo/node.js:1157 +#: htdocs/luci-static/resources/view/fchomo/node.js:1280 msgid "" "For format see %s." @@ -933,7 +970,7 @@ msgstr "" msgid "Force DNS remote resolution." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:650 +#: htdocs/luci-static/resources/view/fchomo/global.js:665 msgid "Forced sniffing domain" msgstr "" @@ -948,7 +985,7 @@ msgstr "" msgid "FullCombo Shark!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:744 +#: htdocs/luci-static/resources/view/fchomo/node.js:773 msgid "GET" msgstr "" @@ -962,7 +999,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:891 #: htdocs/luci-static/resources/view/fchomo/node.js:90 -#: htdocs/luci-static/resources/view/fchomo/node.js:1020 +#: htdocs/luci-static/resources/view/fchomo/node.js:1049 #: htdocs/luci-static/resources/view/fchomo/server.js:64 msgid "General fields" msgstr "" @@ -971,13 +1008,13 @@ msgstr "" msgid "General settings" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:443 -#: htdocs/luci-static/resources/fchomo.js:445 -#: htdocs/luci-static/resources/fchomo.js:459 -#: htdocs/luci-static/resources/fchomo.js:461 -#: htdocs/luci-static/resources/fchomo.js:1331 -#: htdocs/luci-static/resources/view/fchomo/global.js:578 -#: htdocs/luci-static/resources/view/fchomo/server.js:407 +#: htdocs/luci-static/resources/fchomo.js:451 +#: htdocs/luci-static/resources/fchomo.js:453 +#: htdocs/luci-static/resources/fchomo.js:467 +#: htdocs/luci-static/resources/fchomo.js:469 +#: htdocs/luci-static/resources/fchomo.js:1339 +#: htdocs/luci-static/resources/view/fchomo/global.js:593 +#: htdocs/luci-static/resources/view/fchomo/server.js:433 msgid "Generate" msgstr "" @@ -1020,7 +1057,7 @@ msgstr "" msgid "Global Authentication" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:531 +#: htdocs/luci-static/resources/view/fchomo/global.js:535 msgid "Global client fingerprint" msgstr "" @@ -1046,20 +1083,20 @@ msgstr "" #: htdocs/luci-static/resources/fchomo.js:124 #: htdocs/luci-static/resources/fchomo.js:154 -#: htdocs/luci-static/resources/view/fchomo/node.js:500 -#: htdocs/luci-static/resources/view/fchomo/node.js:707 -#: htdocs/luci-static/resources/view/fchomo/node.js:718 -#: htdocs/luci-static/resources/view/fchomo/server.js:482 +#: htdocs/luci-static/resources/view/fchomo/node.js:501 +#: htdocs/luci-static/resources/view/fchomo/node.js:736 +#: htdocs/luci-static/resources/view/fchomo/node.js:747 +#: htdocs/luci-static/resources/view/fchomo/server.js:508 msgid "HTTP" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:135 -#: htdocs/luci-static/resources/view/fchomo/node.js:766 -#: htdocs/luci-static/resources/view/fchomo/node.js:1108 +#: htdocs/luci-static/resources/view/fchomo/node.js:795 +#: htdocs/luci-static/resources/view/fchomo/node.js:1137 msgid "HTTP header" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:743 +#: htdocs/luci-static/resources/view/fchomo/node.js:772 msgid "HTTP request method" msgstr "" @@ -1073,13 +1110,13 @@ msgid "" "returned if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:708 -#: htdocs/luci-static/resources/view/fchomo/node.js:719 -#: htdocs/luci-static/resources/view/fchomo/server.js:483 +#: htdocs/luci-static/resources/view/fchomo/node.js:737 +#: htdocs/luci-static/resources/view/fchomo/node.js:748 +#: htdocs/luci-static/resources/view/fchomo/server.js:509 msgid "HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:831 +#: htdocs/luci-static/resources/view/fchomo/global.js:846 msgid "Handle domain" msgstr "" @@ -1087,32 +1124,32 @@ msgstr "" msgid "Handshake mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:272 +#: htdocs/luci-static/resources/view/fchomo/server.js:273 msgid "Handshake target that supports TLS 1.3" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:973 -#: htdocs/luci-static/resources/view/fchomo/node.js:1219 +#: htdocs/luci-static/resources/view/fchomo/node.js:1248 msgid "Health check URL" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1002 -#: htdocs/luci-static/resources/view/fchomo/node.js:1249 +#: htdocs/luci-static/resources/view/fchomo/node.js:1278 msgid "Health check expected status" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:982 -#: htdocs/luci-static/resources/view/fchomo/node.js:1229 +#: htdocs/luci-static/resources/view/fchomo/node.js:1258 msgid "Health check interval" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:989 -#: htdocs/luci-static/resources/view/fchomo/node.js:1236 +#: htdocs/luci-static/resources/view/fchomo/node.js:1265 msgid "Health check timeout" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:893 -#: htdocs/luci-static/resources/view/fchomo/node.js:1022 +#: htdocs/luci-static/resources/view/fchomo/node.js:1051 msgid "Health fields" msgstr "" @@ -1124,7 +1161,7 @@ msgstr "" msgid "Hidden" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:506 +#: htdocs/luci-static/resources/view/fchomo/node.js:507 msgid "Host that supports TLS 1.3" msgstr "" @@ -1159,8 +1196,8 @@ msgstr "" msgid "IP override" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:897 -#: htdocs/luci-static/resources/view/fchomo/node.js:1205 +#: htdocs/luci-static/resources/view/fchomo/node.js:926 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 msgid "IP version" msgstr "" @@ -1193,7 +1230,7 @@ msgstr "" msgid "Idle timeout" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1554 +#: htdocs/luci-static/resources/fchomo.js:1562 msgid "If All ports is selected, uncheck others" msgstr "" @@ -1205,7 +1242,7 @@ msgstr "" msgid "Ignore client bandwidth" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:568 +#: htdocs/luci-static/resources/fchomo.js:576 msgid "Import" msgstr "" @@ -1219,8 +1256,8 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1354 #: htdocs/luci-static/resources/view/fchomo/client.js:1551 #: htdocs/luci-static/resources/view/fchomo/client.js:1576 -#: htdocs/luci-static/resources/view/fchomo/node.js:922 -#: htdocs/luci-static/resources/view/fchomo/node.js:1008 +#: htdocs/luci-static/resources/view/fchomo/node.js:951 +#: htdocs/luci-static/resources/view/fchomo/node.js:1037 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:142 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:230 msgid "Import mihomo config" @@ -1234,14 +1271,14 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:148 #: htdocs/luci-static/resources/view/fchomo/node.js:154 -#: htdocs/luci-static/resources/view/fchomo/node.js:1166 -#: htdocs/luci-static/resources/view/fchomo/node.js:1172 +#: htdocs/luci-static/resources/view/fchomo/node.js:1195 +#: htdocs/luci-static/resources/view/fchomo/node.js:1201 #: htdocs/luci-static/resources/view/fchomo/server.js:124 #: htdocs/luci-static/resources/view/fchomo/server.js:130 msgid "In Mbps." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1086 +#: htdocs/luci-static/resources/view/fchomo/node.js:1115 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:354 msgid "In bytes. %s will be used if empty." msgstr "" @@ -1253,7 +1290,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:990 #: htdocs/luci-static/resources/view/fchomo/client.js:1019 -#: htdocs/luci-static/resources/view/fchomo/node.js:1237 +#: htdocs/luci-static/resources/view/fchomo/node.js:1266 msgid "In millisecond. %s will be used if empty." msgstr "" @@ -1268,13 +1305,13 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:425 #: htdocs/luci-static/resources/view/fchomo/global.js:430 #: htdocs/luci-static/resources/view/fchomo/global.js:515 -#: htdocs/luci-static/resources/view/fchomo/node.js:1092 -#: htdocs/luci-static/resources/view/fchomo/node.js:1230 +#: htdocs/luci-static/resources/view/fchomo/node.js:1121 +#: htdocs/luci-static/resources/view/fchomo/node.js:1259 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:360 msgid "In seconds. %s will be used if empty." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1246 +#: htdocs/luci-static/resources/fchomo.js:1254 msgid "" "In the order of one Padding-Length and one Padding-" "Interval, infinite concatenation." @@ -1312,12 +1349,12 @@ msgstr "" msgid "Info" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1037 +#: htdocs/luci-static/resources/view/fchomo/node.js:1066 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:268 msgid "Inline" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:718 +#: htdocs/luci-static/resources/view/fchomo/global.js:733 msgid "Interface Control" msgstr "" @@ -1325,11 +1362,12 @@ msgstr "" msgid "Keep default" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:359 +#: htdocs/luci-static/resources/view/fchomo/node.js:671 +#: htdocs/luci-static/resources/view/fchomo/server.js:360 msgid "Key path" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1266 +#: htdocs/luci-static/resources/fchomo.js:1274 msgid "Keypairs" msgstr "" @@ -1339,15 +1377,15 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1360 #: htdocs/luci-static/resources/view/fchomo/client.js:1582 #: htdocs/luci-static/resources/view/fchomo/node.js:97 -#: htdocs/luci-static/resources/view/fchomo/node.js:1025 -#: htdocs/luci-static/resources/view/fchomo/node.js:1298 +#: htdocs/luci-static/resources/view/fchomo/node.js:1054 +#: htdocs/luci-static/resources/view/fchomo/node.js:1327 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:248 #: htdocs/luci-static/resources/view/fchomo/server.js:72 msgid "Label" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:996 -#: htdocs/luci-static/resources/view/fchomo/node.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1272 msgid "Lazy" msgstr "" @@ -1361,8 +1399,8 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:597 -#: htdocs/luci-static/resources/view/fchomo/server.js:340 +#: htdocs/luci-static/resources/view/fchomo/node.js:598 +#: htdocs/luci-static/resources/view/fchomo/server.js:341 msgid "List of supported application level protocols, in order of preference." msgstr "" @@ -1374,7 +1412,7 @@ msgstr "" msgid "Listen fields" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:720 +#: htdocs/luci-static/resources/view/fchomo/global.js:735 msgid "Listen interfaces" msgstr "" @@ -1391,7 +1429,7 @@ msgstr "" msgid "Load balance" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1035 +#: htdocs/luci-static/resources/view/fchomo/node.js:1064 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:266 msgid "Local" msgstr "" @@ -1420,7 +1458,7 @@ msgstr "" msgid "Log level" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:342 +#: htdocs/luci-static/resources/fchomo.js:350 msgid "Lowercase only" msgstr "" @@ -1461,7 +1499,7 @@ msgstr "" msgid "Match rule set." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:776 +#: htdocs/luci-static/resources/view/fchomo/node.js:805 msgid "Max Early Data" msgstr "" @@ -1488,18 +1526,18 @@ msgstr "" msgid "Max upload speed" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:813 -#: htdocs/luci-static/resources/view/fchomo/node.js:829 +#: htdocs/luci-static/resources/view/fchomo/node.js:842 +#: htdocs/luci-static/resources/view/fchomo/node.js:858 msgid "Maximum connections" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:827 +#: htdocs/luci-static/resources/view/fchomo/node.js:856 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:826 +#: htdocs/luci-static/resources/view/fchomo/node.js:855 msgid "Maximum streams" msgstr "" @@ -1523,13 +1561,13 @@ msgstr "" msgid "Min of idle sessions to keep" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:820 +#: htdocs/luci-static/resources/view/fchomo/node.js:849 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:819 -#: htdocs/luci-static/resources/view/fchomo/node.js:829 +#: htdocs/luci-static/resources/view/fchomo/node.js:848 +#: htdocs/luci-static/resources/view/fchomo/node.js:858 msgid "Minimum streams" msgstr "" @@ -1546,7 +1584,7 @@ msgstr "" msgid "Mixed port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:799 +#: htdocs/luci-static/resources/view/fchomo/node.js:828 msgid "Multiplex" msgstr "" @@ -1564,7 +1602,7 @@ msgstr "" msgid "NOT" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1098 +#: htdocs/luci-static/resources/view/fchomo/node.js:1127 msgid "Name of the Proxy group to download provider." msgstr "" @@ -1576,7 +1614,7 @@ msgstr "" msgid "Native" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1038 +#: htdocs/luci-static/resources/fchomo.js:1046 msgid "Native appearance" msgstr "" @@ -1589,11 +1627,11 @@ msgid "No add'l params" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:997 -#: htdocs/luci-static/resources/view/fchomo/node.js:1244 +#: htdocs/luci-static/resources/view/fchomo/node.js:1273 msgid "No testing is performed when this provider node is not in use." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:519 +#: htdocs/luci-static/resources/fchomo.js:527 msgid "No valid %s found." msgstr "" @@ -1608,17 +1646,17 @@ msgid "Node" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1042 -#: htdocs/luci-static/resources/view/fchomo/node.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1293 msgid "Node exclude filter" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1047 -#: htdocs/luci-static/resources/view/fchomo/node.js:1271 +#: htdocs/luci-static/resources/view/fchomo/node.js:1300 msgid "Node exclude type" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1037 -#: htdocs/luci-static/resources/view/fchomo/node.js:1258 +#: htdocs/luci-static/resources/view/fchomo/node.js:1287 msgid "Node filter" msgstr "" @@ -1626,19 +1664,19 @@ msgstr "" msgid "Node switch tolerance" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:313 +#: htdocs/luci-static/resources/fchomo.js:321 msgid "None" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:604 +#: htdocs/luci-static/resources/view/fchomo/global.js:619 msgid "Not Installed" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:950 +#: htdocs/luci-static/resources/fchomo.js:958 msgid "Not Running" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:499 +#: htdocs/luci-static/resources/view/fchomo/node.js:500 msgid "Obfs Mode" msgstr "" @@ -1652,15 +1690,15 @@ msgstr "" msgid "Obfuscate type" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:856 +#: htdocs/luci-static/resources/view/fchomo/global.js:871 msgid "One or more numbers in the range 0-63 separated by commas" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:721 +#: htdocs/luci-static/resources/view/fchomo/global.js:736 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:944 +#: htdocs/luci-static/resources/fchomo.js:952 msgid "Open Dashboard" msgstr "" @@ -1668,13 +1706,13 @@ msgstr "" msgid "Operation mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:646 -#: htdocs/luci-static/resources/view/fchomo/global.js:684 +#: htdocs/luci-static/resources/view/fchomo/global.js:661 +#: htdocs/luci-static/resources/view/fchomo/global.js:699 msgid "Override destination" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:892 -#: htdocs/luci-static/resources/view/fchomo/node.js:1021 +#: htdocs/luci-static/resources/view/fchomo/node.js:1050 msgid "Override fields" msgstr "" @@ -1686,7 +1724,7 @@ msgstr "" msgid "Override the Proxy group of DNS server." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:647 +#: htdocs/luci-static/resources/view/fchomo/global.js:662 msgid "Override the connection destination address with the sniffed domain." msgstr "" @@ -1698,11 +1736,11 @@ msgstr "" msgid "Overview" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:745 +#: htdocs/luci-static/resources/view/fchomo/node.js:774 msgid "POST" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:746 +#: htdocs/luci-static/resources/view/fchomo/node.js:775 msgid "PUT" msgstr "" @@ -1714,21 +1752,21 @@ msgstr "" msgid "Padding scheme" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1244 +#: htdocs/luci-static/resources/fchomo.js:1252 msgid "Paddings" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:129 #: htdocs/luci-static/resources/view/fchomo/node.js:202 -#: htdocs/luci-static/resources/view/fchomo/node.js:514 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 #: htdocs/luci-static/resources/view/fchomo/server.js:114 #: htdocs/luci-static/resources/view/fchomo/server.js:170 -#: htdocs/luci-static/resources/view/fchomo/server.js:279 +#: htdocs/luci-static/resources/view/fchomo/server.js:280 msgid "Password" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1183 -#: htdocs/luci-static/resources/view/fchomo/node.js:1073 +#: htdocs/luci-static/resources/fchomo.js:1191 +#: htdocs/luci-static/resources/view/fchomo/node.js:1102 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:341 msgid "Payload" msgstr "" @@ -1747,7 +1785,7 @@ msgstr "" msgid "Plain text" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:833 +#: htdocs/luci-static/resources/view/fchomo/global.js:848 msgid "" "Please ensure that the DNS query of the domains to be processed in the DNS " "policy
are send via DIRECT/Proxy Node in the same semantics as Routing " @@ -1760,8 +1798,8 @@ msgid "" "standards." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1058 -#: htdocs/luci-static/resources/view/fchomo/node.js:1072 +#: htdocs/luci-static/resources/view/fchomo/node.js:1087 +#: htdocs/luci-static/resources/view/fchomo/node.js:1101 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:326 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:340 msgid "" @@ -1774,7 +1812,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1193 #: htdocs/luci-static/resources/view/fchomo/client.js:1315 #: htdocs/luci-static/resources/view/fchomo/client.js:1552 -#: htdocs/luci-static/resources/view/fchomo/node.js:923 +#: htdocs/luci-static/resources/view/fchomo/node.js:952 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:143 msgid "Please type %s fields of mihomo config.
" msgstr "" @@ -1784,15 +1822,15 @@ msgstr "" msgid "Plugin" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:499 -#: htdocs/luci-static/resources/view/fchomo/node.js:506 -#: htdocs/luci-static/resources/view/fchomo/node.js:514 -#: htdocs/luci-static/resources/view/fchomo/node.js:520 -#: htdocs/luci-static/resources/view/fchomo/node.js:528 -#: htdocs/luci-static/resources/view/fchomo/node.js:534 -#: htdocs/luci-static/resources/view/fchomo/server.js:272 -#: htdocs/luci-static/resources/view/fchomo/server.js:279 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/node.js:500 +#: htdocs/luci-static/resources/view/fchomo/node.js:507 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 +#: htdocs/luci-static/resources/view/fchomo/node.js:521 +#: htdocs/luci-static/resources/view/fchomo/node.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:535 +#: htdocs/luci-static/resources/view/fchomo/server.js:273 +#: htdocs/luci-static/resources/view/fchomo/server.js:280 +#: htdocs/luci-static/resources/view/fchomo/server.js:286 msgid "Plugin:" msgstr "" @@ -1800,15 +1838,16 @@ msgstr "" msgid "Port" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1563 +#: htdocs/luci-static/resources/fchomo.js:1571 msgid "Port %s alrealy exists!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:681 +#: htdocs/luci-static/resources/view/fchomo/global.js:696 msgid "Ports" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:142 +#: htdocs/luci-static/resources/view/fchomo/node.js:212 #: htdocs/luci-static/resources/view/fchomo/server.js:97 msgid "Ports pool" msgstr "" @@ -1831,12 +1870,12 @@ msgid "" "Prevent ICMP loopback issues in some cases. Ping will not show real delay." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:727 -#: htdocs/luci-static/resources/view/fchomo/global.js:744 -#: htdocs/luci-static/resources/view/fchomo/node.js:887 -#: htdocs/luci-static/resources/view/fchomo/node.js:893 -#: htdocs/luci-static/resources/view/fchomo/node.js:1193 -#: htdocs/luci-static/resources/view/fchomo/node.js:1200 +#: htdocs/luci-static/resources/view/fchomo/global.js:742 +#: htdocs/luci-static/resources/view/fchomo/global.js:759 +#: htdocs/luci-static/resources/view/fchomo/node.js:916 +#: htdocs/luci-static/resources/view/fchomo/node.js:922 +#: htdocs/luci-static/resources/view/fchomo/node.js:1222 +#: htdocs/luci-static/resources/view/fchomo/node.js:1229 msgid "Priority: Proxy Node > Global." msgstr "" @@ -1856,8 +1895,8 @@ msgstr "" msgid "Process matching mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:675 -#: htdocs/luci-static/resources/view/fchomo/node.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:690 +#: htdocs/luci-static/resources/view/fchomo/node.js:834 msgid "Protocol" msgstr "" @@ -1872,13 +1911,13 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:937 -#: htdocs/luci-static/resources/view/fchomo/node.js:906 -#: htdocs/luci-static/resources/view/fchomo/node.js:915 -#: htdocs/luci-static/resources/view/fchomo/node.js:1309 +#: htdocs/luci-static/resources/view/fchomo/node.js:935 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 +#: htdocs/luci-static/resources/view/fchomo/node.js:1338 msgid "Provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1079 +#: htdocs/luci-static/resources/view/fchomo/node.js:1108 msgid "Provider URL" msgstr "" @@ -1887,31 +1926,31 @@ msgstr "" msgid "Proxy Group" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:777 +#: htdocs/luci-static/resources/view/fchomo/global.js:792 msgid "Proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:780 +#: htdocs/luci-static/resources/view/fchomo/global.js:795 msgid "Proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:783 +#: htdocs/luci-static/resources/view/fchomo/global.js:798 msgid "Proxy MAC-s" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:76 -#: htdocs/luci-static/resources/view/fchomo/node.js:1308 +#: htdocs/luci-static/resources/view/fchomo/node.js:1337 msgid "Proxy Node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1284 -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1313 +#: htdocs/luci-static/resources/view/fchomo/node.js:1322 msgid "Proxy chain" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:713 #: htdocs/luci-static/resources/view/fchomo/client.js:1415 -#: htdocs/luci-static/resources/view/fchomo/node.js:1097 +#: htdocs/luci-static/resources/view/fchomo/node.js:1126 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:365 msgid "Proxy group" msgstr "" @@ -1924,7 +1963,7 @@ msgstr "" msgid "Proxy mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:786 +#: htdocs/luci-static/resources/view/fchomo/global.js:801 msgid "Proxy routerself" msgstr "" @@ -1942,52 +1981,52 @@ msgstr "" msgid "Quick Reload" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:678 -#: htdocs/luci-static/resources/view/fchomo/server.js:422 +#: htdocs/luci-static/resources/view/fchomo/node.js:707 +#: htdocs/luci-static/resources/view/fchomo/server.js:448 msgid "REALITY" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:693 +#: htdocs/luci-static/resources/view/fchomo/node.js:722 msgid "REALITY X25519MLKEM768 PQC support" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:459 +#: htdocs/luci-static/resources/view/fchomo/server.js:485 msgid "REALITY certificate issued to" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:427 +#: htdocs/luci-static/resources/view/fchomo/server.js:453 msgid "REALITY handshake server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:434 +#: htdocs/luci-static/resources/view/fchomo/server.js:460 msgid "REALITY private key" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:683 -#: htdocs/luci-static/resources/view/fchomo/server.js:449 +#: htdocs/luci-static/resources/view/fchomo/node.js:712 +#: htdocs/luci-static/resources/view/fchomo/server.js:475 msgid "REALITY public key" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:688 -#: htdocs/luci-static/resources/view/fchomo/server.js:453 +#: htdocs/luci-static/resources/view/fchomo/node.js:717 +#: htdocs/luci-static/resources/view/fchomo/server.js:479 msgid "REALITY short ID" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1218 -#: htdocs/luci-static/resources/fchomo.js:1235 +#: htdocs/luci-static/resources/fchomo.js:1226 +#: htdocs/luci-static/resources/fchomo.js:1243 msgid "RTT" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:635 +#: htdocs/luci-static/resources/view/fchomo/global.js:650 msgid "Random will be used if empty." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1040 +#: htdocs/luci-static/resources/fchomo.js:1048 msgid "Randomized traffic characteristics" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1342 -#: htdocs/luci-static/resources/view/fchomo/node.js:1364 +#: htdocs/luci-static/resources/view/fchomo/node.js:1371 +#: htdocs/luci-static/resources/view/fchomo/node.js:1393 msgid "Recommended to use UoT node.
such as %s." msgstr "" @@ -2011,7 +2050,7 @@ msgstr "" msgid "Refresh every %s seconds." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:937 +#: htdocs/luci-static/resources/fchomo.js:945 #: htdocs/luci-static/resources/view/fchomo/client.js:805 #: htdocs/luci-static/resources/view/fchomo/global.js:193 #: htdocs/luci-static/resources/view/fchomo/server.js:46 @@ -2022,7 +2061,7 @@ msgstr "" msgid "Reload All" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1036 +#: htdocs/luci-static/resources/view/fchomo/node.js:1065 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:267 msgid "Remote" msgstr "" @@ -2031,29 +2070,33 @@ msgstr "" msgid "Remote DNS resolve" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1462 +#: htdocs/luci-static/resources/fchomo.js:1470 msgid "Remove" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1467 -#: htdocs/luci-static/resources/view/fchomo/node.js:1012 -#: htdocs/luci-static/resources/view/fchomo/node.js:1014 +#: htdocs/luci-static/resources/fchomo.js:1475 +#: htdocs/luci-static/resources/view/fchomo/node.js:1041 +#: htdocs/luci-static/resources/view/fchomo/node.js:1043 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:240 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:242 msgid "Remove idles" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1126 +#: htdocs/luci-static/resources/view/fchomo/node.js:1155 msgid "Replace name" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1127 +#: htdocs/luci-static/resources/view/fchomo/node.js:1156 msgid "Replace node name." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:752 -#: htdocs/luci-static/resources/view/fchomo/node.js:759 -#: htdocs/luci-static/resources/view/fchomo/server.js:501 +#: htdocs/luci-static/resources/fchomo.js:302 +msgid "Request" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:781 +#: htdocs/luci-static/resources/view/fchomo/node.js:788 +#: htdocs/luci-static/resources/view/fchomo/server.js:527 msgid "Request path" msgstr "" @@ -2061,8 +2104,16 @@ msgstr "" msgid "Request timeout" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1048 -#: htdocs/luci-static/resources/view/fchomo/node.js:694 +#: htdocs/luci-static/resources/fchomo.js:305 +msgid "Require and verify" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:303 +msgid "Require any" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:1056 +#: htdocs/luci-static/resources/view/fchomo/node.js:723 msgid "Requires server support." msgstr "" @@ -2074,7 +2125,7 @@ msgstr "" msgid "Resources management" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:534 +#: htdocs/luci-static/resources/view/fchomo/node.js:535 msgid "Restls script" msgstr "" @@ -2088,39 +2139,39 @@ msgid "" "Returns the string input for icon in the API to display in this proxy group." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:820 msgid "Routing Control" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:845 -#: htdocs/luci-static/resources/view/fchomo/global.js:848 +#: htdocs/luci-static/resources/view/fchomo/global.js:860 +#: htdocs/luci-static/resources/view/fchomo/global.js:863 msgid "Routing DSCP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:829 +#: htdocs/luci-static/resources/view/fchomo/global.js:844 msgid "Routing GFW" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:743 -#: htdocs/luci-static/resources/view/fchomo/node.js:892 -#: htdocs/luci-static/resources/view/fchomo/node.js:1199 +#: htdocs/luci-static/resources/view/fchomo/global.js:758 +#: htdocs/luci-static/resources/view/fchomo/node.js:921 +#: htdocs/luci-static/resources/view/fchomo/node.js:1228 msgid "Routing mark" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:825 +#: htdocs/luci-static/resources/view/fchomo/global.js:840 msgid "Routing mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:826 +#: htdocs/luci-static/resources/view/fchomo/global.js:841 msgid "Routing mode of the traffic enters mihomo via firewall rules." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:832 +#: htdocs/luci-static/resources/view/fchomo/global.js:847 msgid "Routing mode will be handle domain." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:807 -#: htdocs/luci-static/resources/view/fchomo/global.js:816 +#: htdocs/luci-static/resources/view/fchomo/global.js:822 +#: htdocs/luci-static/resources/view/fchomo/global.js:831 msgid "Routing ports" msgstr "" @@ -2129,11 +2180,11 @@ msgstr "" msgid "Routing rule" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:737 +#: htdocs/luci-static/resources/view/fchomo/global.js:752 msgid "Routing rule priority" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:731 +#: htdocs/luci-static/resources/view/fchomo/global.js:746 msgid "Routing table ID" msgstr "" @@ -2159,7 +2210,7 @@ msgstr "" msgid "Ruleset-URI-Scheme" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:950 +#: htdocs/luci-static/resources/fchomo.js:958 msgid "Running" msgstr "" @@ -2183,7 +2234,7 @@ msgstr "" msgid "SUB-RULE" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:552 +#: htdocs/luci-static/resources/view/fchomo/node.js:553 msgid "SUoT version" msgstr "" @@ -2208,21 +2259,23 @@ msgstr "" msgid "Select" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:596 +#: htdocs/luci-static/resources/view/fchomo/global.js:611 msgid "Select Dashboard" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1054 +#: htdocs/luci-static/resources/fchomo.js:1062 msgid "Send padding randomly 0-3333 bytes with 50% probability." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1043 -#: htdocs/luci-static/resources/fchomo.js:1044 +#: htdocs/luci-static/resources/fchomo.js:1051 +#: htdocs/luci-static/resources/fchomo.js:1052 msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1218 +#: htdocs/luci-static/resources/fchomo.js:1226 #: htdocs/luci-static/resources/view/fchomo/server.js:59 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:54 msgid "Server" msgstr "" @@ -2231,7 +2284,7 @@ msgstr "" msgid "Server address" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:737 +#: htdocs/luci-static/resources/view/fchomo/node.js:766 msgid "Server hostname" msgstr "" @@ -2263,7 +2316,7 @@ msgstr "" msgid "Shadowsocks password" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:847 +#: htdocs/luci-static/resources/view/fchomo/node.js:876 msgid "Show connections in the dashboard for breaking connections easier." msgstr "" @@ -2275,26 +2328,26 @@ msgstr "" msgid "Simple round-robin all nodes" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1085 +#: htdocs/luci-static/resources/view/fchomo/node.js:1114 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:353 msgid "Size limit" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1448 -#: htdocs/luci-static/resources/view/fchomo/node.js:648 -#: htdocs/luci-static/resources/view/fchomo/node.js:1177 +#: htdocs/luci-static/resources/view/fchomo/node.js:649 +#: htdocs/luci-static/resources/view/fchomo/node.js:1206 msgid "Skip cert verify" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:653 +#: htdocs/luci-static/resources/view/fchomo/global.js:668 msgid "Skiped sniffing domain" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:659 +#: htdocs/luci-static/resources/view/fchomo/global.js:674 msgid "Skiped sniffing dst address" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:656 +#: htdocs/luci-static/resources/view/fchomo/global.js:671 msgid "Skiped sniffing src address" msgstr "" @@ -2302,20 +2355,20 @@ msgstr "" msgid "Snell" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:663 +#: htdocs/luci-static/resources/view/fchomo/global.js:678 msgid "Sniff protocol" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:640 +#: htdocs/luci-static/resources/view/fchomo/global.js:655 msgid "Sniffer" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:643 +#: htdocs/luci-static/resources/view/fchomo/global.js:658 msgid "Sniffer settings" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:808 -#: htdocs/luci-static/resources/view/fchomo/global.js:817 +#: htdocs/luci-static/resources/view/fchomo/global.js:823 +#: htdocs/luci-static/resources/view/fchomo/global.js:832 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." @@ -2347,7 +2400,7 @@ msgstr "" msgid "Sub rule group" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:522 +#: htdocs/luci-static/resources/fchomo.js:530 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:211 msgid "Successfully imported %s %s of total %s." msgstr "" @@ -2356,7 +2409,7 @@ msgstr "" msgid "Successfully updated." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1786 +#: htdocs/luci-static/resources/fchomo.js:1804 msgid "Successfully uploaded." msgstr "" @@ -2383,7 +2436,7 @@ msgstr "" msgid "TCP concurrency" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:840 +#: htdocs/luci-static/resources/view/fchomo/node.js:869 msgid "TCP only" msgstr "" @@ -2395,24 +2448,24 @@ msgstr "" msgid "TCP-Keep-Alive interval" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:871 -#: htdocs/luci-static/resources/view/fchomo/node.js:1144 +#: htdocs/luci-static/resources/view/fchomo/node.js:900 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 msgid "TFO" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:525 -#: htdocs/luci-static/resources/view/fchomo/node.js:501 -#: htdocs/luci-static/resources/view/fchomo/node.js:565 -#: htdocs/luci-static/resources/view/fchomo/server.js:308 +#: htdocs/luci-static/resources/view/fchomo/global.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:502 +#: htdocs/luci-static/resources/view/fchomo/node.js:566 +#: htdocs/luci-static/resources/view/fchomo/server.js:309 msgid "TLS" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:596 -#: htdocs/luci-static/resources/view/fchomo/server.js:339 +#: htdocs/luci-static/resources/view/fchomo/node.js:597 +#: htdocs/luci-static/resources/view/fchomo/server.js:340 msgid "TLS ALPN" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:590 +#: htdocs/luci-static/resources/view/fchomo/node.js:591 msgid "TLS SNI" msgstr "" @@ -2440,7 +2493,19 @@ msgstr "" msgid "The %s address used by local machine in the Wireguard network." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:672 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 +msgid "The %s private key, in PEM format." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:556 +#: htdocs/luci-static/resources/view/fchomo/node.js:658 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:384 +msgid "The %s public key, in PEM format." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:692 msgid "" "The ECH parameter of the HTTPS record for the domain. Leave empty to resolve " "via DNS." @@ -2450,7 +2515,7 @@ msgstr "" msgid "The default value is 2:00 every day." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1247 +#: htdocs/luci-static/resources/fchomo.js:1255 msgid "" "The first padding must have a probability of 100% and at least 35 bytes." msgstr "" @@ -2465,26 +2530,18 @@ msgstr "" msgid "The matching %s will be deemed as poisoned." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1245 +#: htdocs/luci-static/resources/fchomo.js:1253 msgid "The server and client can set different padding parameters." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:360 -msgid "The server private key, in PEM format." -msgstr "" - -#: htdocs/luci-static/resources/view/fchomo/server.js:345 -msgid "The server public key, in PEM format." -msgstr "" - -#: htdocs/luci-static/resources/view/fchomo/global.js:585 -#: htdocs/luci-static/resources/view/fchomo/server.js:416 +#: htdocs/luci-static/resources/view/fchomo/global.js:600 +#: htdocs/luci-static/resources/view/fchomo/server.js:442 msgid "This ECH parameter needs to be added to the HTTPS record of the domain." msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1451 -#: htdocs/luci-static/resources/view/fchomo/node.js:651 -#: htdocs/luci-static/resources/view/fchomo/node.js:1180 +#: htdocs/luci-static/resources/view/fchomo/node.js:652 +#: htdocs/luci-static/resources/view/fchomo/node.js:1209 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" @@ -2507,11 +2564,11 @@ msgid "" "kmod-tun" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:837 +#: htdocs/luci-static/resources/view/fchomo/global.js:852 msgid "To enable, you need to install dnsmasq-full." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:750 +#: htdocs/luci-static/resources/view/fchomo/global.js:765 msgid "Tproxy Fwmark" msgstr "" @@ -2520,8 +2577,8 @@ msgid "Tproxy port" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:217 -#: htdocs/luci-static/resources/view/fchomo/node.js:700 -#: htdocs/luci-static/resources/view/fchomo/server.js:467 +#: htdocs/luci-static/resources/view/fchomo/node.js:729 +#: htdocs/luci-static/resources/view/fchomo/server.js:493 msgid "Transport" msgstr "" @@ -2530,8 +2587,8 @@ msgstr "" msgid "Transport fields" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:705 -#: htdocs/luci-static/resources/view/fchomo/server.js:472 +#: htdocs/luci-static/resources/view/fchomo/node.js:734 +#: htdocs/luci-static/resources/view/fchomo/server.js:498 msgid "Transport type" msgstr "" @@ -2544,7 +2601,7 @@ msgstr "" msgid "Trojan" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:755 +#: htdocs/luci-static/resources/view/fchomo/global.js:770 msgid "Tun Fwmark" msgstr "" @@ -2566,8 +2623,8 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:910 #: htdocs/luci-static/resources/view/fchomo/client.js:1597 #: htdocs/luci-static/resources/view/fchomo/node.js:106 -#: htdocs/luci-static/resources/view/fchomo/node.js:1034 -#: htdocs/luci-static/resources/view/fchomo/node.js:1307 +#: htdocs/luci-static/resources/view/fchomo/node.js:1063 +#: htdocs/luci-static/resources/view/fchomo/node.js:1336 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:265 #: htdocs/luci-static/resources/view/fchomo/server.js:86 msgid "Type" @@ -2575,9 +2632,9 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:516 #: htdocs/luci-static/resources/view/fchomo/client.js:606 -#: htdocs/luci-static/resources/view/fchomo/node.js:541 -#: htdocs/luci-static/resources/view/fchomo/node.js:1154 -#: htdocs/luci-static/resources/view/fchomo/server.js:294 +#: htdocs/luci-static/resources/view/fchomo/node.js:542 +#: htdocs/luci-static/resources/view/fchomo/node.js:1183 +#: htdocs/luci-static/resources/view/fchomo/server.js:295 msgid "UDP" msgstr "" @@ -2612,7 +2669,7 @@ msgstr "" msgid "UUID" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:995 +#: htdocs/luci-static/resources/fchomo.js:1003 msgid "Unable to download unsupported type: %s" msgstr "" @@ -2637,8 +2694,8 @@ msgstr "" msgid "Unknown error: %s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:546 -#: htdocs/luci-static/resources/view/fchomo/node.js:1159 +#: htdocs/luci-static/resources/view/fchomo/node.js:547 +#: htdocs/luci-static/resources/view/fchomo/node.js:1188 msgid "UoT" msgstr "" @@ -2646,20 +2703,22 @@ msgstr "" msgid "Update failed." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1091 +#: htdocs/luci-static/resources/view/fchomo/node.js:1120 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:359 msgid "Update interval" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:858 +#: htdocs/luci-static/resources/view/fchomo/node.js:887 msgid "Upload bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:859 +#: htdocs/luci-static/resources/view/fchomo/node.js:888 msgid "Upload bandwidth in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:351 +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/server.js:352 +#: htdocs/luci-static/resources/view/fchomo/server.js:392 msgid "Upload certificate" msgstr "" @@ -2667,13 +2726,17 @@ msgstr "" msgid "Upload initial package" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:366 +#: htdocs/luci-static/resources/view/fchomo/node.js:677 +#: htdocs/luci-static/resources/view/fchomo/server.js:367 msgid "Upload key" msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:306 -#: htdocs/luci-static/resources/view/fchomo/server.js:354 -#: htdocs/luci-static/resources/view/fchomo/server.js:369 +#: htdocs/luci-static/resources/view/fchomo/node.js:666 +#: htdocs/luci-static/resources/view/fchomo/node.js:680 +#: htdocs/luci-static/resources/view/fchomo/server.js:355 +#: htdocs/luci-static/resources/view/fchomo/server.js:370 +#: htdocs/luci-static/resources/view/fchomo/server.js:395 msgid "Upload..." msgstr "" @@ -2685,7 +2748,7 @@ msgstr "" msgid "Used to resolve the domain of the Proxy node." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:591 +#: htdocs/luci-static/resources/view/fchomo/node.js:592 msgid "Used to verify the hostname on the returned certificates." msgstr "" @@ -2698,15 +2761,15 @@ msgstr "" msgid "Username" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:763 +#: htdocs/luci-static/resources/view/fchomo/global.js:778 msgid "Users filter mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:788 +#: htdocs/luci-static/resources/view/fchomo/node.js:817 msgid "V2ray HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:793 +#: htdocs/luci-static/resources/view/fchomo/node.js:822 msgid "V2ray HTTPUpgrade fast open" msgstr "" @@ -2720,19 +2783,23 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1040 -#: htdocs/luci-static/resources/view/fchomo/node.js:1313 +#: htdocs/luci-static/resources/view/fchomo/node.js:1069 +#: htdocs/luci-static/resources/view/fchomo/node.js:1342 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:308 msgid "Value" msgstr "" +#: htdocs/luci-static/resources/fchomo.js:304 +msgid "Verify if given" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/node.js:247 -#: htdocs/luci-static/resources/view/fchomo/node.js:520 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/node.js:521 +#: htdocs/luci-static/resources/view/fchomo/server.js:286 msgid "Version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:528 +#: htdocs/luci-static/resources/view/fchomo/node.js:529 msgid "Version hint" msgstr "" @@ -2741,7 +2808,7 @@ msgstr "" msgid "Vless Encryption fields" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1053 +#: htdocs/luci-static/resources/fchomo.js:1061 msgid "Wait a random 0-111 milliseconds with 75% probability." msgstr "" @@ -2749,12 +2816,12 @@ msgstr "" msgid "Warning" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:710 -#: htdocs/luci-static/resources/view/fchomo/node.js:721 -#: htdocs/luci-static/resources/view/fchomo/node.js:726 -#: htdocs/luci-static/resources/view/fchomo/server.js:474 -#: htdocs/luci-static/resources/view/fchomo/server.js:485 -#: htdocs/luci-static/resources/view/fchomo/server.js:490 +#: htdocs/luci-static/resources/view/fchomo/node.js:739 +#: htdocs/luci-static/resources/view/fchomo/node.js:750 +#: htdocs/luci-static/resources/view/fchomo/node.js:755 +#: htdocs/luci-static/resources/view/fchomo/server.js:500 +#: htdocs/luci-static/resources/view/fchomo/server.js:511 +#: htdocs/luci-static/resources/view/fchomo/server.js:516 msgid "WebSocket" msgstr "" @@ -2762,7 +2829,7 @@ msgstr "" msgid "When used as a server, HomeProxy is a better choice." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:765 +#: htdocs/luci-static/resources/view/fchomo/global.js:780 msgid "White list" msgstr "" @@ -2782,7 +2849,7 @@ msgstr "" msgid "WireGuard requires base64-encoded private keys." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1209 +#: htdocs/luci-static/resources/fchomo.js:1217 msgid "XOR mode" msgstr "" @@ -2798,7 +2865,7 @@ msgstr "" msgid "YouTube" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1768 +#: htdocs/luci-static/resources/fchomo.js:1786 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "" @@ -2826,7 +2893,9 @@ msgstr "" msgid "bbr" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:356 +#: htdocs/luci-static/resources/view/fchomo/node.js:668 +#: htdocs/luci-static/resources/view/fchomo/server.js:357 +#: htdocs/luci-static/resources/view/fchomo/server.js:397 msgid "certificate" msgstr "" @@ -2844,35 +2913,35 @@ msgstr "" msgid "cubic" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1189 -#: htdocs/luci-static/resources/view/fchomo/server.js:300 +#: htdocs/luci-static/resources/fchomo.js:1197 +#: htdocs/luci-static/resources/view/fchomo/server.js:301 msgid "decryption" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:799 +#: htdocs/luci-static/resources/view/fchomo/global.js:814 msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1171 +#: htdocs/luci-static/resources/view/fchomo/node.js:1200 msgid "down" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1194 -#: htdocs/luci-static/resources/view/fchomo/node.js:560 +#: htdocs/luci-static/resources/fchomo.js:1202 +#: htdocs/luci-static/resources/view/fchomo/node.js:561 msgid "encryption" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:709 -#: htdocs/luci-static/resources/view/fchomo/node.js:720 -#: htdocs/luci-static/resources/view/fchomo/node.js:725 -#: htdocs/luci-static/resources/view/fchomo/server.js:473 -#: htdocs/luci-static/resources/view/fchomo/server.js:484 -#: htdocs/luci-static/resources/view/fchomo/server.js:489 +#: htdocs/luci-static/resources/view/fchomo/node.js:738 +#: htdocs/luci-static/resources/view/fchomo/node.js:749 +#: htdocs/luci-static/resources/view/fchomo/node.js:754 +#: htdocs/luci-static/resources/view/fchomo/server.js:499 +#: htdocs/luci-static/resources/view/fchomo/server.js:510 +#: htdocs/luci-static/resources/view/fchomo/server.js:515 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:772 -#: htdocs/luci-static/resources/view/fchomo/server.js:508 +#: htdocs/luci-static/resources/view/fchomo/node.js:801 +#: htdocs/luci-static/resources/view/fchomo/server.js:534 msgid "gRPC service name" msgstr "" @@ -2880,11 +2949,11 @@ msgstr "" msgid "gVisor" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:809 +#: htdocs/luci-static/resources/view/fchomo/node.js:838 msgid "h2mux" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1362 +#: htdocs/luci-static/resources/fchomo.js:1370 msgid "least one keypair required" msgstr "" @@ -2897,17 +2966,17 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1218 #: htdocs/luci-static/resources/view/fchomo/client.js:1352 #: htdocs/luci-static/resources/view/fchomo/client.js:1574 -#: htdocs/luci-static/resources/view/fchomo/node.js:1006 +#: htdocs/luci-static/resources/view/fchomo/node.js:1035 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:228 msgid "mihomo config" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1035 +#: htdocs/luci-static/resources/fchomo.js:1043 msgid "mlkem768x25519plus" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:875 -#: htdocs/luci-static/resources/view/fchomo/node.js:1149 +#: htdocs/luci-static/resources/view/fchomo/node.js:904 +#: htdocs/luci-static/resources/view/fchomo/node.js:1178 msgid "mpTCP" msgstr "" @@ -2920,13 +2989,15 @@ msgstr "" msgid "no-resolve" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1551 -#: htdocs/luci-static/resources/fchomo.js:1605 -#: htdocs/luci-static/resources/fchomo.js:1636 +#: htdocs/luci-static/resources/fchomo.js:1559 +#: htdocs/luci-static/resources/fchomo.js:1601 +#: htdocs/luci-static/resources/fchomo.js:1623 +#: htdocs/luci-static/resources/fchomo.js:1654 msgid "non-empty value" msgstr "" #: htdocs/luci-static/resources/fchomo.js:268 +#: htdocs/luci-static/resources/fchomo.js:301 #: htdocs/luci-static/resources/view/fchomo/node.js:397 #: htdocs/luci-static/resources/view/fchomo/node.js:417 #: htdocs/luci-static/resources/view/fchomo/node.js:490 @@ -2951,7 +3022,7 @@ msgstr "" msgid "obfs-simple" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1129 +#: htdocs/luci-static/resources/view/fchomo/node.js:1158 msgid "override.proxy-name" msgstr "" @@ -2959,7 +3030,8 @@ msgstr "" msgid "packet addr (v2ray-core v5+)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:371 +#: htdocs/luci-static/resources/view/fchomo/node.js:682 +#: htdocs/luci-static/resources/view/fchomo/server.js:372 msgid "private key" msgstr "" @@ -2985,7 +3057,7 @@ msgstr "" msgid "shadow-tls" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:807 +#: htdocs/luci-static/resources/view/fchomo/node.js:836 msgid "smux" msgstr "" @@ -2997,78 +3069,78 @@ msgstr "" msgid "unchecked" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:345 +#: htdocs/luci-static/resources/fchomo.js:353 msgid "unique UCI identifier" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:348 +#: htdocs/luci-static/resources/fchomo.js:356 msgid "unique identifier" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1645 +#: htdocs/luci-static/resources/fchomo.js:1663 msgid "unique value" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1165 +#: htdocs/luci-static/resources/view/fchomo/node.js:1194 msgid "up" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:248 #: htdocs/luci-static/resources/view/fchomo/node.js:292 -#: htdocs/luci-static/resources/view/fchomo/node.js:521 -#: htdocs/luci-static/resources/view/fchomo/node.js:553 -#: htdocs/luci-static/resources/view/fchomo/server.js:286 +#: htdocs/luci-static/resources/view/fchomo/node.js:522 +#: htdocs/luci-static/resources/view/fchomo/node.js:554 +#: htdocs/luci-static/resources/view/fchomo/server.js:287 msgid "v1" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:249 -#: htdocs/luci-static/resources/view/fchomo/node.js:522 -#: htdocs/luci-static/resources/view/fchomo/node.js:554 -#: htdocs/luci-static/resources/view/fchomo/server.js:287 +#: htdocs/luci-static/resources/view/fchomo/node.js:523 +#: htdocs/luci-static/resources/view/fchomo/node.js:555 +#: htdocs/luci-static/resources/view/fchomo/server.js:288 msgid "v2" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:250 -#: htdocs/luci-static/resources/view/fchomo/node.js:523 -#: htdocs/luci-static/resources/view/fchomo/server.js:288 +#: htdocs/luci-static/resources/view/fchomo/node.js:524 +#: htdocs/luci-static/resources/view/fchomo/server.js:289 msgid "v3" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1579 -#: htdocs/luci-static/resources/fchomo.js:1582 +#: htdocs/luci-static/resources/fchomo.js:1587 +#: htdocs/luci-static/resources/fchomo.js:1590 msgid "valid JSON format" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:641 +#: htdocs/luci-static/resources/view/fchomo/node.js:642 msgid "valid SHA256 string with %d characters" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1657 -#: htdocs/luci-static/resources/fchomo.js:1660 +#: htdocs/luci-static/resources/fchomo.js:1675 +#: htdocs/luci-static/resources/fchomo.js:1678 msgid "valid URL" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1592 +#: htdocs/luci-static/resources/fchomo.js:1610 msgid "valid base64 key with %d characters" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1607 +#: htdocs/luci-static/resources/fchomo.js:1625 msgid "valid key length with %d characters" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1561 +#: htdocs/luci-static/resources/fchomo.js:1569 msgid "valid port value" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1670 +#: htdocs/luci-static/resources/fchomo.js:1688 msgid "valid uuid" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1059 +#: htdocs/luci-static/resources/fchomo.js:1067 msgid "vless-mlkem768" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1058 +#: htdocs/luci-static/resources/fchomo.js:1066 msgid "vless-x25519" msgstr "" @@ -3080,7 +3152,7 @@ msgstr "" msgid "yacd-meta" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:808 +#: htdocs/luci-static/resources/view/fchomo/node.js:837 msgid "yamux" msgstr "" @@ -3092,6 +3164,6 @@ msgstr "" msgid "zero" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:997 +#: htdocs/luci-static/resources/fchomo.js:1005 msgid "🡇" msgstr "" diff --git a/small/luci-app-fchomo/po/zh_Hans/fchomo.po b/small/luci-app-fchomo/po/zh_Hans/fchomo.po index 821408e388..ecc841f4ee 100644 --- a/small/luci-app-fchomo/po/zh_Hans/fchomo.po +++ b/small/luci-app-fchomo/po/zh_Hans/fchomo.po @@ -12,13 +12,25 @@ msgstr "" msgid "%s log" msgstr "%s 日志" -#: htdocs/luci-static/resources/fchomo.js:543 +#: htdocs/luci-static/resources/fchomo.js:551 #: htdocs/luci-static/resources/view/fchomo/client.js:237 #: htdocs/luci-static/resources/view/fchomo/client.js:267 #: htdocs/luci-static/resources/view/fchomo/client.js:363 msgid "(Imported)" msgstr "(已导入)" +#: htdocs/luci-static/resources/view/fchomo/global.js:549 +#: htdocs/luci-static/resources/view/fchomo/global.js:555 +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:671 +#: htdocs/luci-static/resources/view/fchomo/node.js:677 +#: htdocs/luci-static/resources/view/fchomo/server.js:375 +#: htdocs/luci-static/resources/view/fchomo/server.js:383 +#: htdocs/luci-static/resources/view/fchomo/server.js:392 +msgid "(mTLS)" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/client.js:924 #: htdocs/luci-static/resources/view/fchomo/client.js:925 #: htdocs/luci-static/resources/view/fchomo/client.js:938 @@ -26,19 +38,19 @@ msgstr "(已导入)" #: htdocs/luci-static/resources/view/fchomo/client.js:1151 #: htdocs/luci-static/resources/view/fchomo/client.js:1615 #: htdocs/luci-static/resources/view/fchomo/client.js:1616 -#: htdocs/luci-static/resources/view/fchomo/node.js:1336 -#: htdocs/luci-static/resources/view/fchomo/node.js:1344 -#: htdocs/luci-static/resources/view/fchomo/node.js:1358 -#: htdocs/luci-static/resources/view/fchomo/node.js:1366 +#: htdocs/luci-static/resources/view/fchomo/node.js:1365 +#: htdocs/luci-static/resources/view/fchomo/node.js:1373 +#: htdocs/luci-static/resources/view/fchomo/node.js:1387 +#: htdocs/luci-static/resources/view/fchomo/node.js:1395 msgid "-- Please choose --" msgstr "-- 请选择 --" -#: htdocs/luci-static/resources/fchomo.js:1048 +#: htdocs/luci-static/resources/fchomo.js:1056 msgid "0-RTT reuse." msgstr "0-RTT 重用。" -#: htdocs/luci-static/resources/fchomo.js:1045 -#: htdocs/luci-static/resources/fchomo.js:1049 +#: htdocs/luci-static/resources/fchomo.js:1053 +#: htdocs/luci-static/resources/fchomo.js:1057 msgid "1-RTT only." msgstr "仅限 1-RTT。" @@ -62,44 +74,55 @@ msgstr "" msgid "0 or 1 only." msgstr "仅限 01。" -#: htdocs/luci-static/resources/view/fchomo/server.js:352 -#: htdocs/luci-static/resources/view/fchomo/server.js:367 +#: htdocs/luci-static/resources/view/fchomo/node.js:664 +#: htdocs/luci-static/resources/view/fchomo/node.js:678 +#: htdocs/luci-static/resources/view/fchomo/server.js:353 +#: htdocs/luci-static/resources/view/fchomo/server.js:368 +#: htdocs/luci-static/resources/view/fchomo/server.js:393 msgid "Save your configuration before uploading files!" msgstr "上传文件前请先保存配置!" -#: htdocs/luci-static/resources/view/fchomo/global.js:590 +#: htdocs/luci-static/resources/view/fchomo/global.js:605 msgid "API" -msgstr "" +msgstr "API" -#: htdocs/luci-static/resources/view/fchomo/global.js:630 +#: htdocs/luci-static/resources/view/fchomo/global.js:555 +msgid "API Client Auth Certificate path" +msgstr "API 客户端认证证书路径" + +#: htdocs/luci-static/resources/view/fchomo/global.js:549 +msgid "API Client Auth type" +msgstr "API 客户端认证类型" + +#: htdocs/luci-static/resources/view/fchomo/global.js:645 msgid "API DoH service" msgstr "API DoH 服务器" -#: htdocs/luci-static/resources/view/fchomo/global.js:584 +#: htdocs/luci-static/resources/view/fchomo/global.js:599 msgid "API ECH config" msgstr "API ECH 配置" -#: htdocs/luci-static/resources/view/fchomo/global.js:545 +#: htdocs/luci-static/resources/view/fchomo/global.js:560 msgid "API ECH key" msgstr "API ECH 密钥" -#: htdocs/luci-static/resources/view/fchomo/global.js:621 +#: htdocs/luci-static/resources/view/fchomo/global.js:636 msgid "API HTTP port" msgstr "API HTTP 端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:625 +#: htdocs/luci-static/resources/view/fchomo/global.js:640 msgid "API HTTPS port" msgstr "API HTTPS 端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:537 +#: htdocs/luci-static/resources/view/fchomo/global.js:541 msgid "API TLS certificate path" msgstr "API TLS 证书路径" -#: htdocs/luci-static/resources/view/fchomo/global.js:541 +#: htdocs/luci-static/resources/view/fchomo/global.js:545 msgid "API TLS private key path" msgstr "API TLS 私钥" -#: htdocs/luci-static/resources/view/fchomo/global.js:634 +#: htdocs/luci-static/resources/view/fchomo/global.js:649 msgid "API secret" msgstr "API 令牌" @@ -107,8 +130,8 @@ msgstr "API 令牌" msgid "ASN version" msgstr "ASN 版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:711 -#: htdocs/luci-static/resources/view/fchomo/global.js:761 +#: htdocs/luci-static/resources/view/fchomo/global.js:726 +#: htdocs/luci-static/resources/view/fchomo/global.js:776 msgid "Access Control" msgstr "访问控制" @@ -124,11 +147,11 @@ msgstr "新增 DNS 服务器" msgid "Add a Node" msgstr "新增 节点" -#: htdocs/luci-static/resources/view/fchomo/node.js:915 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 msgid "Add a provider" msgstr "新增 供应商" -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1322 msgid "Add a proxy chain" msgstr "新增 代理链" @@ -152,11 +175,11 @@ msgstr "新增 服务器" msgid "Add a sub rule" msgstr "新增 子规则" -#: htdocs/luci-static/resources/view/fchomo/node.js:1118 +#: htdocs/luci-static/resources/view/fchomo/node.js:1147 msgid "Add prefix" msgstr "添加前缀" -#: htdocs/luci-static/resources/view/fchomo/node.js:1122 +#: htdocs/luci-static/resources/view/fchomo/node.js:1151 msgid "Add suffix" msgstr "添加后缀" @@ -165,7 +188,7 @@ msgstr "添加后缀" msgid "Address" msgstr "地址" -#: htdocs/luci-static/resources/fchomo.js:1052 +#: htdocs/luci-static/resources/fchomo.js:1060 msgid "" "After the 1-RTT client/server hello, padding randomly 111-1111 bytes with " "100% probability." @@ -176,9 +199,9 @@ msgstr "" msgid "Aging time of NAT map maintained by client.
" msgstr "客户端维护的 NAT 映射 的老化时间。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:764 -#: htdocs/luci-static/resources/view/fchomo/global.js:827 -#: htdocs/luci-static/resources/view/fchomo/global.js:846 +#: htdocs/luci-static/resources/view/fchomo/global.js:779 +#: htdocs/luci-static/resources/view/fchomo/global.js:842 +#: htdocs/luci-static/resources/view/fchomo/global.js:861 msgid "All allowed" msgstr "允许所有" @@ -186,7 +209,7 @@ msgstr "允许所有" msgid "All ports" msgstr "所有端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:617 +#: htdocs/luci-static/resources/view/fchomo/global.js:632 msgid "" "Allow access from private network.
To access the API on a private " "network from a public website, it must be enabled." @@ -219,12 +242,12 @@ msgstr "" msgid "Application version" msgstr "应用版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:789 +#: htdocs/luci-static/resources/view/fchomo/global.js:804 msgid "As the TOP upstream of dnsmasq" msgstr "作为 dnsmasq 的最优先上游" -#: htdocs/luci-static/resources/view/fchomo/global.js:790 -#: htdocs/luci-static/resources/view/fchomo/global.js:797 +#: htdocs/luci-static/resources/view/fchomo/global.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:812 msgid "As the TOP upstream of dnsmasq." msgstr "作为 dnsmasq 的最优先上游。" @@ -273,23 +296,23 @@ msgstr "二进制格式仅支持 domain/ipcidr" msgid "Binary mrs" msgstr "二进制 mrs" -#: htdocs/luci-static/resources/view/fchomo/global.js:725 -#: htdocs/luci-static/resources/view/fchomo/node.js:885 -#: htdocs/luci-static/resources/view/fchomo/node.js:1191 +#: htdocs/luci-static/resources/view/fchomo/global.js:740 +#: htdocs/luci-static/resources/view/fchomo/node.js:914 +#: htdocs/luci-static/resources/view/fchomo/node.js:1220 msgid "Bind interface" msgstr "绑定接口" -#: htdocs/luci-static/resources/view/fchomo/node.js:886 -#: htdocs/luci-static/resources/view/fchomo/node.js:1192 +#: htdocs/luci-static/resources/view/fchomo/node.js:915 +#: htdocs/luci-static/resources/view/fchomo/node.js:1221 msgid "Bind outbound interface.
" msgstr "绑定出站接口。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:726 +#: htdocs/luci-static/resources/view/fchomo/global.js:741 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect.
" msgstr "绑定出站流量至指定接口。留空自动检测。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:766 +#: htdocs/luci-static/resources/view/fchomo/global.js:781 msgid "Black list" msgstr "黑名单" @@ -305,50 +328,51 @@ msgstr "引导 DNS 服务器" msgid "Bootstrap DNS server (Node)" msgstr "引导 DNS 服务器 (节点)" -#: htdocs/luci-static/resources/view/fchomo/global.js:828 +#: htdocs/luci-static/resources/view/fchomo/global.js:843 msgid "Bypass CN" msgstr "绕过 CN 流量" -#: htdocs/luci-static/resources/view/fchomo/global.js:847 +#: htdocs/luci-static/resources/view/fchomo/global.js:862 msgid "Bypass DSCP" msgstr "绕过 DSCP" -#: htdocs/luci-static/resources/view/fchomo/global.js:612 +#: htdocs/luci-static/resources/view/fchomo/global.js:627 msgid "CORS Allow origins" msgstr "CORS 允许的来源" -#: htdocs/luci-static/resources/view/fchomo/global.js:616 +#: htdocs/luci-static/resources/view/fchomo/global.js:631 msgid "CORS Allow private network" msgstr "CORS 允许私有网络" -#: htdocs/luci-static/resources/view/fchomo/global.js:613 +#: htdocs/luci-static/resources/view/fchomo/global.js:628 msgid "CORS allowed origins, * will be used if empty." msgstr "CORS 允许的来源,留空则使用 *。" -#: htdocs/luci-static/resources/fchomo.js:563 +#: htdocs/luci-static/resources/fchomo.js:571 msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/fchomo/node.js:635 +#: htdocs/luci-static/resources/view/fchomo/node.js:636 msgid "Cert fingerprint" msgstr "证书指纹" -#: htdocs/luci-static/resources/view/fchomo/node.js:636 +#: htdocs/luci-static/resources/view/fchomo/node.js:637 msgid "" "Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." msgstr "证书指纹。用于实现 SSL证书固定 并防止 MitM。" -#: htdocs/luci-static/resources/view/fchomo/server.js:344 +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +#: htdocs/luci-static/resources/view/fchomo/server.js:345 msgid "Certificate path" msgstr "证书路径" -#: htdocs/luci-static/resources/view/fchomo/node.js:1335 -#: htdocs/luci-static/resources/view/fchomo/node.js:1341 +#: htdocs/luci-static/resources/view/fchomo/node.js:1364 +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 msgid "Chain head" msgstr "链头" -#: htdocs/luci-static/resources/view/fchomo/node.js:1357 -#: htdocs/luci-static/resources/view/fchomo/node.js:1363 +#: htdocs/luci-static/resources/view/fchomo/node.js:1386 +#: htdocs/luci-static/resources/view/fchomo/node.js:1392 msgid "Chain tail" msgstr "链尾" @@ -395,12 +419,24 @@ msgstr "" "点击此处下载" "最新的初始包。" -#: htdocs/luci-static/resources/fchomo.js:1235 +#: htdocs/luci-static/resources/fchomo.js:1243 +#: htdocs/luci-static/resources/view/fchomo/global.js:556 +#: htdocs/luci-static/resources/view/fchomo/node.js:658 +#: htdocs/luci-static/resources/view/fchomo/node.js:672 +#: htdocs/luci-static/resources/view/fchomo/server.js:384 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:22 msgid "Client" msgstr "客户端" -#: htdocs/luci-static/resources/view/fchomo/node.js:669 +#: htdocs/luci-static/resources/view/fchomo/server.js:383 +msgid "Client Auth Certificate path" +msgstr "客户端认证证书路径" + +#: htdocs/luci-static/resources/view/fchomo/server.js:375 +msgid "Client Auth type" +msgstr "客户端认证类型" + +#: htdocs/luci-static/resources/view/fchomo/node.js:698 msgid "Client fingerprint" msgstr "客户端指纹" @@ -417,11 +453,11 @@ msgstr "收集数据中..." msgid "Common ports (bypass P2P traffic)" msgstr "常用端口(绕过 P2P 流量)" -#: htdocs/luci-static/resources/fchomo.js:1473 +#: htdocs/luci-static/resources/fchomo.js:1481 msgid "Complete" msgstr "完成" -#: htdocs/luci-static/resources/view/fchomo/node.js:1138 +#: htdocs/luci-static/resources/view/fchomo/node.js:1167 msgid "Configuration Items" msgstr "配置项" @@ -434,19 +470,19 @@ msgstr "拥塞控制器" msgid "Connection check" msgstr "连接检查" -#: htdocs/luci-static/resources/fchomo.js:1088 +#: htdocs/luci-static/resources/fchomo.js:1096 msgid "Content copied to clipboard!" msgstr "内容已复制到剪贴板!" #: htdocs/luci-static/resources/view/fchomo/client.js:598 -#: htdocs/luci-static/resources/view/fchomo/node.js:1060 -#: htdocs/luci-static/resources/view/fchomo/node.js:1074 +#: htdocs/luci-static/resources/view/fchomo/node.js:1089 +#: htdocs/luci-static/resources/view/fchomo/node.js:1103 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:328 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:342 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "内容将不会被验证,请确保输入正确。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1059 +#: htdocs/luci-static/resources/view/fchomo/node.js:1088 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:327 msgid "Contents" msgstr "内容" @@ -455,7 +491,7 @@ msgstr "内容" msgid "Contents have been saved." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1090 +#: htdocs/luci-static/resources/fchomo.js:1098 msgid "Copy" msgstr "复制" @@ -467,15 +503,15 @@ msgstr "核心版本" msgid "Cron expression" msgstr "Cron 表达式" -#: htdocs/luci-static/resources/view/fchomo/global.js:865 +#: htdocs/luci-static/resources/view/fchomo/global.js:880 msgid "Custom Direct List" msgstr "自定义直连列表" -#: htdocs/luci-static/resources/view/fchomo/node.js:1109 +#: htdocs/luci-static/resources/view/fchomo/node.js:1138 msgid "Custom HTTP header." msgstr "自定义 HTTP header。" -#: htdocs/luci-static/resources/view/fchomo/global.js:883 +#: htdocs/luci-static/resources/view/fchomo/global.js:898 msgid "Custom Proxy List" msgstr "自定义代理列表" @@ -508,7 +544,7 @@ msgstr "DNS 服务器" msgid "DNS settings" msgstr "DNS 设置" -#: htdocs/luci-static/resources/view/fchomo/global.js:850 +#: htdocs/luci-static/resources/view/fchomo/global.js:865 msgid "DSCP list" msgstr "DSCP 列表" @@ -536,8 +572,8 @@ msgstr "允许通过 WireGuard 转发的目的地址" msgid "Dial fields" msgstr "拨号字段" -#: htdocs/luci-static/resources/view/fchomo/node.js:1350 -#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1401 msgid "Different chain head/tail" msgstr "不同的链头/链尾" @@ -545,15 +581,15 @@ msgstr "不同的链头/链尾" msgid "Direct" msgstr "直连" -#: htdocs/luci-static/resources/view/fchomo/global.js:768 +#: htdocs/luci-static/resources/view/fchomo/global.js:783 msgid "Direct IPv4 IP-s" msgstr "直连 IPv4 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:771 +#: htdocs/luci-static/resources/view/fchomo/global.js:786 msgid "Direct IPv6 IP-s" msgstr "直连 IPv6 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:774 +#: htdocs/luci-static/resources/view/fchomo/global.js:789 msgid "Direct MAC-s" msgstr "直连 MAC 地址" @@ -563,11 +599,11 @@ msgstr "直连 MAC 地址" msgid "Disable" msgstr "禁用" -#: htdocs/luci-static/resources/view/fchomo/global.js:702 +#: htdocs/luci-static/resources/view/fchomo/global.js:717 msgid "Disable ECN of quic-go" msgstr "禁用 quic-go 的 显式拥塞通知(ECN)" -#: htdocs/luci-static/resources/view/fchomo/global.js:699 +#: htdocs/luci-static/resources/view/fchomo/global.js:714 msgid "Disable GSO of quic-go" msgstr "禁用 quic-go 的 通用分段卸载(GSO)" @@ -575,7 +611,7 @@ msgstr "禁用 quic-go 的 通用分段卸载(GSO)" msgid "Disable ICMP Forwarding" msgstr "禁用 ICMP 转发" -#: htdocs/luci-static/resources/view/fchomo/node.js:584 +#: htdocs/luci-static/resources/view/fchomo/node.js:585 msgid "Disable SNI" msgstr "禁用 SNI" @@ -583,7 +619,7 @@ msgstr "禁用 SNI" msgid "Disable UDP" msgstr "禁用 UDP" -#: htdocs/luci-static/resources/view/fchomo/global.js:696 +#: htdocs/luci-static/resources/view/fchomo/global.js:711 msgid "Disable safe path check" msgstr "禁用安全路径检查" @@ -611,29 +647,29 @@ msgstr "" msgid "Domain" msgstr "域名" -#: htdocs/luci-static/resources/view/fchomo/node.js:585 +#: htdocs/luci-static/resources/view/fchomo/node.js:586 msgid "Donot send server name in ClientHello." msgstr "不要在 ClientHello 中发送服务器名称。" #: htdocs/luci-static/resources/view/fchomo/client.js:1449 -#: htdocs/luci-static/resources/view/fchomo/node.js:649 -#: htdocs/luci-static/resources/view/fchomo/node.js:1178 +#: htdocs/luci-static/resources/view/fchomo/node.js:650 +#: htdocs/luci-static/resources/view/fchomo/node.js:1207 msgid "Donot verifying server certificate." msgstr "不验证服务器证书。" -#: htdocs/luci-static/resources/view/fchomo/node.js:864 +#: htdocs/luci-static/resources/view/fchomo/node.js:893 msgid "Download bandwidth" msgstr "下载带宽" -#: htdocs/luci-static/resources/view/fchomo/node.js:865 +#: htdocs/luci-static/resources/view/fchomo/node.js:894 msgid "Download bandwidth in Mbps." msgstr "下载带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/fchomo.js:992 +#: htdocs/luci-static/resources/fchomo.js:1000 msgid "Download failed: %s" msgstr "下载失败: %s" -#: htdocs/luci-static/resources/fchomo.js:990 +#: htdocs/luci-static/resources/fchomo.js:998 msgid "Download successful." msgstr "下载成功。" @@ -641,12 +677,12 @@ msgstr "下载成功。" msgid "Dual stack" msgstr "双栈" -#: htdocs/luci-static/resources/view/fchomo/node.js:662 -#: htdocs/luci-static/resources/view/fchomo/server.js:415 +#: htdocs/luci-static/resources/view/fchomo/node.js:691 +#: htdocs/luci-static/resources/view/fchomo/server.js:441 msgid "ECH config" msgstr "ECH 配置" -#: htdocs/luci-static/resources/view/fchomo/server.js:374 +#: htdocs/luci-static/resources/view/fchomo/server.js:400 msgid "ECH key" msgstr "ECH 密钥" @@ -662,11 +698,11 @@ msgstr "" msgid "ETag support" msgstr "ETag 支持" -#: htdocs/luci-static/resources/view/fchomo/node.js:777 +#: htdocs/luci-static/resources/view/fchomo/node.js:806 msgid "Early Data first packet length limit." msgstr "前置数据长度阈值" -#: htdocs/luci-static/resources/view/fchomo/node.js:783 +#: htdocs/luci-static/resources/view/fchomo/node.js:812 msgid "Early Data header name" msgstr "前置数据标头" @@ -678,12 +714,12 @@ msgstr "编辑节点" msgid "Edit ruleset" msgstr "编辑规则集" -#: htdocs/luci-static/resources/view/fchomo/node.js:1057 +#: htdocs/luci-static/resources/view/fchomo/node.js:1086 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:325 msgid "Editer" msgstr "编辑器" -#: htdocs/luci-static/resources/fchomo.js:1039 +#: htdocs/luci-static/resources/fchomo.js:1047 msgid "Eliminate encryption header characteristics" msgstr "消除加密头特征" @@ -694,11 +730,11 @@ msgstr "消除加密头特征" #: htdocs/luci-static/resources/view/fchomo/client.js:1365 #: htdocs/luci-static/resources/view/fchomo/client.js:1587 #: htdocs/luci-static/resources/view/fchomo/global.js:401 -#: htdocs/luci-static/resources/view/fchomo/global.js:671 +#: htdocs/luci-static/resources/view/fchomo/global.js:686 #: htdocs/luci-static/resources/view/fchomo/node.js:102 -#: htdocs/luci-static/resources/view/fchomo/node.js:1030 -#: htdocs/luci-static/resources/view/fchomo/node.js:1214 -#: htdocs/luci-static/resources/view/fchomo/node.js:1303 +#: htdocs/luci-static/resources/view/fchomo/node.js:1059 +#: htdocs/luci-static/resources/view/fchomo/node.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1332 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:253 #: htdocs/luci-static/resources/view/fchomo/server.js:50 #: htdocs/luci-static/resources/view/fchomo/server.js:77 @@ -718,7 +754,7 @@ msgstr "" msgid "Enable 0-RTT handshake" msgstr "启用 0-RTT 握手" -#: htdocs/luci-static/resources/view/fchomo/global.js:705 +#: htdocs/luci-static/resources/view/fchomo/global.js:720 msgid "" "Enable IP4P " "conversion for outbound connections" @@ -726,32 +762,32 @@ msgstr "" "为出站连接启用 IP4P 转换" -#: htdocs/luci-static/resources/view/fchomo/node.js:656 +#: htdocs/luci-static/resources/view/fchomo/node.js:685 msgid "Enable ECH" msgstr "启用 ECH" -#: htdocs/luci-static/resources/view/fchomo/node.js:852 +#: htdocs/luci-static/resources/view/fchomo/node.js:881 msgid "Enable TCP Brutal" msgstr "启用 TCP Brutal" -#: htdocs/luci-static/resources/view/fchomo/node.js:853 +#: htdocs/luci-static/resources/view/fchomo/node.js:882 msgid "Enable TCP Brutal congestion control algorithm" msgstr "启用 TCP Brutal 拥塞控制算法。" -#: htdocs/luci-static/resources/view/fchomo/node.js:841 +#: htdocs/luci-static/resources/view/fchomo/node.js:870 msgid "Enable multiplexing only for TCP." msgstr "仅为 TCP 启用多路复用。" -#: htdocs/luci-static/resources/view/fchomo/node.js:835 +#: htdocs/luci-static/resources/view/fchomo/node.js:864 msgid "Enable padding" msgstr "启用填充" -#: htdocs/luci-static/resources/view/fchomo/node.js:846 +#: htdocs/luci-static/resources/view/fchomo/node.js:875 msgid "Enable statistic" msgstr "启用统计" -#: htdocs/luci-static/resources/view/fchomo/node.js:547 -#: htdocs/luci-static/resources/view/fchomo/node.js:1160 +#: htdocs/luci-static/resources/view/fchomo/node.js:548 +#: htdocs/luci-static/resources/view/fchomo/node.js:1189 msgid "" "Enable the SUoT protocol, requires server support. Conflict with Multiplex." msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。" @@ -763,7 +799,7 @@ msgid "" "connections, losing the ability to masquerade with HTTP/3." msgstr "启用混淆将使服务器与标准的 QUIC 连接不兼容,失去 HTTP/3 伪装的能力。" -#: htdocs/luci-static/resources/fchomo.js:1200 +#: htdocs/luci-static/resources/fchomo.js:1208 msgid "Encryption method" msgstr "加密方法" @@ -786,7 +822,7 @@ msgid "" "if empty." msgstr "超过此限制将会触发强制健康检查。留空则使用 5。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1272 +#: htdocs/luci-static/resources/view/fchomo/node.js:1301 msgid "Exclude matched node types." msgstr "排除匹配的节点类型。" @@ -799,7 +835,7 @@ msgstr "" "rel=\"noreferrer noopener\">此处。" #: htdocs/luci-static/resources/view/fchomo/client.js:1043 -#: htdocs/luci-static/resources/view/fchomo/node.js:1265 +#: htdocs/luci-static/resources/view/fchomo/node.js:1294 msgid "Exclude nodes that meet keywords or regexps." msgstr "排除匹配关键词或表达式的节点。" @@ -808,59 +844,60 @@ msgid "Expand/Collapse result" msgstr "展开/收起 结果" #: htdocs/luci-static/resources/view/fchomo/client.js:1003 -#: htdocs/luci-static/resources/view/fchomo/node.js:1250 +#: htdocs/luci-static/resources/view/fchomo/node.js:1279 msgid "Expected HTTP code. 204 will be used if empty." msgstr "预期的 HTTP code。留空则使用 204。" #: htdocs/luci-static/resources/view/fchomo/client.js:1005 -#: htdocs/luci-static/resources/view/fchomo/node.js:1252 +#: htdocs/luci-static/resources/view/fchomo/node.js:1281 msgid "Expected status" msgstr "预期状态" -#: htdocs/luci-static/resources/fchomo.js:342 -#: htdocs/luci-static/resources/fchomo.js:345 -#: htdocs/luci-static/resources/fchomo.js:348 -#: htdocs/luci-static/resources/fchomo.js:1228 -#: htdocs/luci-static/resources/fchomo.js:1256 -#: htdocs/luci-static/resources/fchomo.js:1362 -#: htdocs/luci-static/resources/fchomo.js:1512 +#: htdocs/luci-static/resources/fchomo.js:350 +#: htdocs/luci-static/resources/fchomo.js:353 +#: htdocs/luci-static/resources/fchomo.js:356 +#: htdocs/luci-static/resources/fchomo.js:1236 +#: htdocs/luci-static/resources/fchomo.js:1264 +#: htdocs/luci-static/resources/fchomo.js:1370 #: htdocs/luci-static/resources/fchomo.js:1520 #: htdocs/luci-static/resources/fchomo.js:1528 -#: htdocs/luci-static/resources/fchomo.js:1551 -#: htdocs/luci-static/resources/fchomo.js:1554 -#: htdocs/luci-static/resources/fchomo.js:1561 -#: htdocs/luci-static/resources/fchomo.js:1579 -#: htdocs/luci-static/resources/fchomo.js:1582 -#: htdocs/luci-static/resources/fchomo.js:1592 -#: htdocs/luci-static/resources/fchomo.js:1605 -#: htdocs/luci-static/resources/fchomo.js:1607 -#: htdocs/luci-static/resources/fchomo.js:1620 -#: htdocs/luci-static/resources/fchomo.js:1629 -#: htdocs/luci-static/resources/fchomo.js:1636 -#: htdocs/luci-static/resources/fchomo.js:1645 -#: htdocs/luci-static/resources/fchomo.js:1657 -#: htdocs/luci-static/resources/fchomo.js:1660 -#: htdocs/luci-static/resources/fchomo.js:1670 +#: htdocs/luci-static/resources/fchomo.js:1536 +#: htdocs/luci-static/resources/fchomo.js:1559 +#: htdocs/luci-static/resources/fchomo.js:1562 +#: htdocs/luci-static/resources/fchomo.js:1569 +#: htdocs/luci-static/resources/fchomo.js:1587 +#: htdocs/luci-static/resources/fchomo.js:1590 +#: htdocs/luci-static/resources/fchomo.js:1601 +#: htdocs/luci-static/resources/fchomo.js:1610 +#: htdocs/luci-static/resources/fchomo.js:1623 +#: htdocs/luci-static/resources/fchomo.js:1625 +#: htdocs/luci-static/resources/fchomo.js:1638 +#: htdocs/luci-static/resources/fchomo.js:1647 +#: htdocs/luci-static/resources/fchomo.js:1654 +#: htdocs/luci-static/resources/fchomo.js:1663 +#: htdocs/luci-static/resources/fchomo.js:1675 +#: htdocs/luci-static/resources/fchomo.js:1678 +#: htdocs/luci-static/resources/fchomo.js:1688 #: htdocs/luci-static/resources/view/fchomo/client.js:66 #: htdocs/luci-static/resources/view/fchomo/client.js:900 #: htdocs/luci-static/resources/view/fchomo/client.js:1380 -#: htdocs/luci-static/resources/view/fchomo/global.js:856 -#: htdocs/luci-static/resources/view/fchomo/node.js:641 -#: htdocs/luci-static/resources/view/fchomo/node.js:1350 -#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/global.js:871 +#: htdocs/luci-static/resources/view/fchomo/node.js:642 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1401 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:280 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:294 msgid "Expecting: %s" msgstr "请输入:%s" -#: htdocs/luci-static/resources/view/fchomo/node.js:718 -#: htdocs/luci-static/resources/view/fchomo/node.js:725 -#: htdocs/luci-static/resources/view/fchomo/server.js:482 -#: htdocs/luci-static/resources/view/fchomo/server.js:489 +#: htdocs/luci-static/resources/view/fchomo/node.js:747 +#: htdocs/luci-static/resources/view/fchomo/node.js:754 +#: htdocs/luci-static/resources/view/fchomo/server.js:508 +#: htdocs/luci-static/resources/view/fchomo/server.js:515 msgid "Expecting: only support %s." msgstr "请输入:仅支援 %s." -#: htdocs/luci-static/resources/view/fchomo/global.js:690 +#: htdocs/luci-static/resources/view/fchomo/global.js:705 msgid "Experimental" msgstr "实验性" @@ -875,19 +912,19 @@ msgstr "实验性" msgid "Factor" msgstr "条件" -#: htdocs/luci-static/resources/fchomo.js:1431 +#: htdocs/luci-static/resources/fchomo.js:1439 msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s" msgstr "无法执行 \"/etc/init.d/fchomo %s %s\" 原因: %s" -#: htdocs/luci-static/resources/fchomo.js:1390 +#: htdocs/luci-static/resources/fchomo.js:1398 msgid "Failed to generate %s, error: %s." msgstr "生成 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/fchomo.js:1770 +#: htdocs/luci-static/resources/fchomo.js:1788 msgid "Failed to upload %s, error: %s." msgstr "上传 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/fchomo.js:1789 +#: htdocs/luci-static/resources/fchomo.js:1807 msgid "Failed to upload, error: %s." msgstr "上传失败,错误:%s。" @@ -906,7 +943,7 @@ msgid "Fallback filter" msgstr "後備过滤器" #: htdocs/luci-static/resources/view/fchomo/client.js:1038 -#: htdocs/luci-static/resources/view/fchomo/node.js:1259 +#: htdocs/luci-static/resources/view/fchomo/node.js:1288 msgid "Filter nodes that meet keywords or regexps." msgstr "过滤匹配关键字或表达式的节点。" @@ -943,8 +980,8 @@ msgstr "" "noopener\">%s." #: htdocs/luci-static/resources/view/fchomo/client.js:1004 -#: htdocs/luci-static/resources/view/fchomo/node.js:1128 -#: htdocs/luci-static/resources/view/fchomo/node.js:1251 +#: htdocs/luci-static/resources/view/fchomo/node.js:1157 +#: htdocs/luci-static/resources/view/fchomo/node.js:1280 msgid "" "For format see %s." @@ -956,7 +993,7 @@ msgstr "" msgid "Force DNS remote resolution." msgstr "强制 DNS 远程解析。" -#: htdocs/luci-static/resources/view/fchomo/global.js:650 +#: htdocs/luci-static/resources/view/fchomo/global.js:665 msgid "Forced sniffing domain" msgstr "强制嗅探域名" @@ -971,7 +1008,7 @@ msgstr "格式" msgid "FullCombo Shark!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:744 +#: htdocs/luci-static/resources/view/fchomo/node.js:773 msgid "GET" msgstr "" @@ -985,7 +1022,7 @@ msgstr "常规" #: htdocs/luci-static/resources/view/fchomo/client.js:891 #: htdocs/luci-static/resources/view/fchomo/node.js:90 -#: htdocs/luci-static/resources/view/fchomo/node.js:1020 +#: htdocs/luci-static/resources/view/fchomo/node.js:1049 #: htdocs/luci-static/resources/view/fchomo/server.js:64 msgid "General fields" msgstr "常规字段" @@ -994,13 +1031,13 @@ msgstr "常规字段" msgid "General settings" msgstr "常规设置" -#: htdocs/luci-static/resources/fchomo.js:443 -#: htdocs/luci-static/resources/fchomo.js:445 -#: htdocs/luci-static/resources/fchomo.js:459 -#: htdocs/luci-static/resources/fchomo.js:461 -#: htdocs/luci-static/resources/fchomo.js:1331 -#: htdocs/luci-static/resources/view/fchomo/global.js:578 -#: htdocs/luci-static/resources/view/fchomo/server.js:407 +#: htdocs/luci-static/resources/fchomo.js:451 +#: htdocs/luci-static/resources/fchomo.js:453 +#: htdocs/luci-static/resources/fchomo.js:467 +#: htdocs/luci-static/resources/fchomo.js:469 +#: htdocs/luci-static/resources/fchomo.js:1339 +#: htdocs/luci-static/resources/view/fchomo/global.js:593 +#: htdocs/luci-static/resources/view/fchomo/server.js:433 msgid "Generate" msgstr "生成" @@ -1043,7 +1080,7 @@ msgstr "全局" msgid "Global Authentication" msgstr "全局认证" -#: htdocs/luci-static/resources/view/fchomo/global.js:531 +#: htdocs/luci-static/resources/view/fchomo/global.js:535 msgid "Global client fingerprint" msgstr "全局客户端指纹" @@ -1069,20 +1106,20 @@ msgstr "组" #: htdocs/luci-static/resources/fchomo.js:124 #: htdocs/luci-static/resources/fchomo.js:154 -#: htdocs/luci-static/resources/view/fchomo/node.js:500 -#: htdocs/luci-static/resources/view/fchomo/node.js:707 -#: htdocs/luci-static/resources/view/fchomo/node.js:718 -#: htdocs/luci-static/resources/view/fchomo/server.js:482 +#: htdocs/luci-static/resources/view/fchomo/node.js:501 +#: htdocs/luci-static/resources/view/fchomo/node.js:736 +#: htdocs/luci-static/resources/view/fchomo/node.js:747 +#: htdocs/luci-static/resources/view/fchomo/server.js:508 msgid "HTTP" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:135 -#: htdocs/luci-static/resources/view/fchomo/node.js:766 -#: htdocs/luci-static/resources/view/fchomo/node.js:1108 +#: htdocs/luci-static/resources/view/fchomo/node.js:795 +#: htdocs/luci-static/resources/view/fchomo/node.js:1137 msgid "HTTP header" msgstr "HTTP header" -#: htdocs/luci-static/resources/view/fchomo/node.js:743 +#: htdocs/luci-static/resources/view/fchomo/node.js:772 msgid "HTTP request method" msgstr "HTTP 请求方法" @@ -1096,13 +1133,13 @@ msgid "" "returned if empty." msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。" -#: htdocs/luci-static/resources/view/fchomo/node.js:708 -#: htdocs/luci-static/resources/view/fchomo/node.js:719 -#: htdocs/luci-static/resources/view/fchomo/server.js:483 +#: htdocs/luci-static/resources/view/fchomo/node.js:737 +#: htdocs/luci-static/resources/view/fchomo/node.js:748 +#: htdocs/luci-static/resources/view/fchomo/server.js:509 msgid "HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:831 +#: htdocs/luci-static/resources/view/fchomo/global.js:846 msgid "Handle domain" msgstr "处理域名" @@ -1110,32 +1147,32 @@ msgstr "处理域名" msgid "Handshake mode" msgstr "握手模式" -#: htdocs/luci-static/resources/view/fchomo/server.js:272 +#: htdocs/luci-static/resources/view/fchomo/server.js:273 msgid "Handshake target that supports TLS 1.3" msgstr "握手目标 (支援 TLS 1.3)" #: htdocs/luci-static/resources/view/fchomo/client.js:973 -#: htdocs/luci-static/resources/view/fchomo/node.js:1219 +#: htdocs/luci-static/resources/view/fchomo/node.js:1248 msgid "Health check URL" msgstr "健康检查 URL" #: htdocs/luci-static/resources/view/fchomo/client.js:1002 -#: htdocs/luci-static/resources/view/fchomo/node.js:1249 +#: htdocs/luci-static/resources/view/fchomo/node.js:1278 msgid "Health check expected status" msgstr "健康检查预期状态" #: htdocs/luci-static/resources/view/fchomo/client.js:982 -#: htdocs/luci-static/resources/view/fchomo/node.js:1229 +#: htdocs/luci-static/resources/view/fchomo/node.js:1258 msgid "Health check interval" msgstr "健康检查间隔" #: htdocs/luci-static/resources/view/fchomo/client.js:989 -#: htdocs/luci-static/resources/view/fchomo/node.js:1236 +#: htdocs/luci-static/resources/view/fchomo/node.js:1265 msgid "Health check timeout" msgstr "健康检查超时" #: htdocs/luci-static/resources/view/fchomo/client.js:893 -#: htdocs/luci-static/resources/view/fchomo/node.js:1022 +#: htdocs/luci-static/resources/view/fchomo/node.js:1051 msgid "Health fields" msgstr "健康字段" @@ -1147,7 +1184,7 @@ msgstr "心跳间隔" msgid "Hidden" msgstr "隐藏" -#: htdocs/luci-static/resources/view/fchomo/node.js:506 +#: htdocs/luci-static/resources/view/fchomo/node.js:507 msgid "Host that supports TLS 1.3" msgstr "主机名称 (支援 TLS 1.3)" @@ -1182,8 +1219,8 @@ msgstr "" msgid "IP override" msgstr "IP 覆写" -#: htdocs/luci-static/resources/view/fchomo/node.js:897 -#: htdocs/luci-static/resources/view/fchomo/node.js:1205 +#: htdocs/luci-static/resources/view/fchomo/node.js:926 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 msgid "IP version" msgstr "IP 版本" @@ -1216,7 +1253,7 @@ msgstr "闲置会话超时" msgid "Idle timeout" msgstr "闲置超时" -#: htdocs/luci-static/resources/fchomo.js:1554 +#: htdocs/luci-static/resources/fchomo.js:1562 msgid "If All ports is selected, uncheck others" msgstr "如果选择了“所有端口”,则取消选中“其他”" @@ -1228,7 +1265,7 @@ msgstr "如果选择了“阻止”,则取消选中“其他”" msgid "Ignore client bandwidth" msgstr "忽略客户端带宽" -#: htdocs/luci-static/resources/fchomo.js:568 +#: htdocs/luci-static/resources/fchomo.js:576 msgid "Import" msgstr "导入" @@ -1242,8 +1279,8 @@ msgstr "导入" #: htdocs/luci-static/resources/view/fchomo/client.js:1354 #: htdocs/luci-static/resources/view/fchomo/client.js:1551 #: htdocs/luci-static/resources/view/fchomo/client.js:1576 -#: htdocs/luci-static/resources/view/fchomo/node.js:922 -#: htdocs/luci-static/resources/view/fchomo/node.js:1008 +#: htdocs/luci-static/resources/view/fchomo/node.js:951 +#: htdocs/luci-static/resources/view/fchomo/node.js:1037 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:142 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:230 msgid "Import mihomo config" @@ -1257,14 +1294,14 @@ msgstr "导入规则集链接" #: htdocs/luci-static/resources/view/fchomo/node.js:148 #: htdocs/luci-static/resources/view/fchomo/node.js:154 -#: htdocs/luci-static/resources/view/fchomo/node.js:1166 -#: htdocs/luci-static/resources/view/fchomo/node.js:1172 +#: htdocs/luci-static/resources/view/fchomo/node.js:1195 +#: htdocs/luci-static/resources/view/fchomo/node.js:1201 #: htdocs/luci-static/resources/view/fchomo/server.js:124 #: htdocs/luci-static/resources/view/fchomo/server.js:130 msgid "In Mbps." msgstr "单位为 Mbps。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1086 +#: htdocs/luci-static/resources/view/fchomo/node.js:1115 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:354 msgid "In bytes. %s will be used if empty." msgstr "单位为字节。留空则使用 %s。" @@ -1276,7 +1313,7 @@ msgstr "单位为毫秒。" #: htdocs/luci-static/resources/view/fchomo/client.js:990 #: htdocs/luci-static/resources/view/fchomo/client.js:1019 -#: htdocs/luci-static/resources/view/fchomo/node.js:1237 +#: htdocs/luci-static/resources/view/fchomo/node.js:1266 msgid "In millisecond. %s will be used if empty." msgstr "单位为毫秒。留空则使用 %s。" @@ -1291,18 +1328,19 @@ msgstr "单位为秒。" #: htdocs/luci-static/resources/view/fchomo/global.js:425 #: htdocs/luci-static/resources/view/fchomo/global.js:430 #: htdocs/luci-static/resources/view/fchomo/global.js:515 -#: htdocs/luci-static/resources/view/fchomo/node.js:1092 -#: htdocs/luci-static/resources/view/fchomo/node.js:1230 +#: htdocs/luci-static/resources/view/fchomo/node.js:1121 +#: htdocs/luci-static/resources/view/fchomo/node.js:1259 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:360 msgid "In seconds. %s will be used if empty." msgstr "单位为秒。留空则使用 %s。" -#: htdocs/luci-static/resources/fchomo.js:1246 +#: htdocs/luci-static/resources/fchomo.js:1254 msgid "" "In the order of one Padding-Length and one Padding-" "Interval, infinite concatenation." msgstr "" -"按照一个 Padding-Length 一个 Padding-Interval 的顺序,无限连接。" +"按照一个 Padding-Length 一个 Padding-Interval 的顺" +"序,无限连接。" #: htdocs/luci-static/resources/view/fchomo/global.js:449 msgid "Inbound" @@ -1336,12 +1374,12 @@ msgstr "引入所有代理节点。" msgid "Info" msgstr "信息" -#: htdocs/luci-static/resources/view/fchomo/node.js:1037 +#: htdocs/luci-static/resources/view/fchomo/node.js:1066 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:268 msgid "Inline" msgstr "内嵌" -#: htdocs/luci-static/resources/view/fchomo/global.js:718 +#: htdocs/luci-static/resources/view/fchomo/global.js:733 msgid "Interface Control" msgstr "接口控制" @@ -1349,11 +1387,12 @@ msgstr "接口控制" msgid "Keep default" msgstr "保持缺省" -#: htdocs/luci-static/resources/view/fchomo/server.js:359 +#: htdocs/luci-static/resources/view/fchomo/node.js:671 +#: htdocs/luci-static/resources/view/fchomo/server.js:360 msgid "Key path" msgstr "证书路径" -#: htdocs/luci-static/resources/fchomo.js:1266 +#: htdocs/luci-static/resources/fchomo.js:1274 msgid "Keypairs" msgstr "密钥对" @@ -1363,15 +1402,15 @@ msgstr "密钥对" #: htdocs/luci-static/resources/view/fchomo/client.js:1360 #: htdocs/luci-static/resources/view/fchomo/client.js:1582 #: htdocs/luci-static/resources/view/fchomo/node.js:97 -#: htdocs/luci-static/resources/view/fchomo/node.js:1025 -#: htdocs/luci-static/resources/view/fchomo/node.js:1298 +#: htdocs/luci-static/resources/view/fchomo/node.js:1054 +#: htdocs/luci-static/resources/view/fchomo/node.js:1327 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:248 #: htdocs/luci-static/resources/view/fchomo/server.js:72 msgid "Label" msgstr "标签" #: htdocs/luci-static/resources/view/fchomo/client.js:996 -#: htdocs/luci-static/resources/view/fchomo/node.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1272 msgid "Lazy" msgstr "懒惰状态" @@ -1387,8 +1426,8 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" -#: htdocs/luci-static/resources/view/fchomo/node.js:597 -#: htdocs/luci-static/resources/view/fchomo/server.js:340 +#: htdocs/luci-static/resources/view/fchomo/node.js:598 +#: htdocs/luci-static/resources/view/fchomo/server.js:341 msgid "List of supported application level protocols, in order of preference." msgstr "支持的应用层协议协商列表,按顺序排列。" @@ -1400,7 +1439,7 @@ msgstr "监听地址" msgid "Listen fields" msgstr "监听字段" -#: htdocs/luci-static/resources/view/fchomo/global.js:720 +#: htdocs/luci-static/resources/view/fchomo/global.js:735 msgid "Listen interfaces" msgstr "监听接口" @@ -1417,7 +1456,7 @@ msgstr "监听端口" msgid "Load balance" msgstr "负载均衡" -#: htdocs/luci-static/resources/view/fchomo/node.js:1035 +#: htdocs/luci-static/resources/view/fchomo/node.js:1064 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:266 msgid "Local" msgstr "本地" @@ -1446,7 +1485,7 @@ msgstr "日志为空。" msgid "Log level" msgstr "日志等级" -#: htdocs/luci-static/resources/fchomo.js:342 +#: htdocs/luci-static/resources/fchomo.js:350 msgid "Lowercase only" msgstr "仅限小写" @@ -1487,7 +1526,7 @@ msgstr "匹配响应通过 ipcidr
" msgid "Match rule set." msgstr "匹配规则集。" -#: htdocs/luci-static/resources/view/fchomo/node.js:776 +#: htdocs/luci-static/resources/view/fchomo/node.js:805 msgid "Max Early Data" msgstr "前置数据最大值" @@ -1514,12 +1553,12 @@ msgstr "限制打开流的数量" msgid "Max upload speed" msgstr "最大上传速度" -#: htdocs/luci-static/resources/view/fchomo/node.js:813 -#: htdocs/luci-static/resources/view/fchomo/node.js:829 +#: htdocs/luci-static/resources/view/fchomo/node.js:842 +#: htdocs/luci-static/resources/view/fchomo/node.js:858 msgid "Maximum connections" msgstr "最大连接数" -#: htdocs/luci-static/resources/view/fchomo/node.js:827 +#: htdocs/luci-static/resources/view/fchomo/node.js:856 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." @@ -1527,7 +1566,7 @@ msgstr "" "在打开新连接之前,连接中的最大多路复用流数量。
%s 和 " "%s 冲突。" -#: htdocs/luci-static/resources/view/fchomo/node.js:826 +#: htdocs/luci-static/resources/view/fchomo/node.js:855 msgid "Maximum streams" msgstr "最大流数量" @@ -1551,13 +1590,13 @@ msgstr "Mihomo 服务端" msgid "Min of idle sessions to keep" msgstr "要保留的最少闲置会话数" -#: htdocs/luci-static/resources/view/fchomo/node.js:820 +#: htdocs/luci-static/resources/view/fchomo/node.js:849 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "在打开新连接之前,连接中的最小多路复用流数量。" -#: htdocs/luci-static/resources/view/fchomo/node.js:819 -#: htdocs/luci-static/resources/view/fchomo/node.js:829 +#: htdocs/luci-static/resources/view/fchomo/node.js:848 +#: htdocs/luci-static/resources/view/fchomo/node.js:858 msgid "Minimum streams" msgstr "最小流数量" @@ -1574,7 +1613,7 @@ msgstr "混合 系统 TCP 栈和 gVisor UDP 栈。" msgid "Mixed port" msgstr "混合端口" -#: htdocs/luci-static/resources/view/fchomo/node.js:799 +#: htdocs/luci-static/resources/view/fchomo/node.js:828 msgid "Multiplex" msgstr "多路复用" @@ -1592,7 +1631,7 @@ msgstr "多路复用" msgid "NOT" msgstr "NOT" -#: htdocs/luci-static/resources/view/fchomo/node.js:1098 +#: htdocs/luci-static/resources/view/fchomo/node.js:1127 msgid "Name of the Proxy group to download provider." msgstr "用于下载供应商订阅的代理组名称。" @@ -1604,7 +1643,7 @@ msgstr "用于下载规则集订阅的代理组名称。" msgid "Native" msgstr "原生" -#: htdocs/luci-static/resources/fchomo.js:1038 +#: htdocs/luci-static/resources/fchomo.js:1046 msgid "Native appearance" msgstr "原生外观" @@ -1617,11 +1656,11 @@ msgid "No add'l params" msgstr "无附加参数" #: htdocs/luci-static/resources/view/fchomo/client.js:997 -#: htdocs/luci-static/resources/view/fchomo/node.js:1244 +#: htdocs/luci-static/resources/view/fchomo/node.js:1273 msgid "No testing is performed when this provider node is not in use." msgstr "当此供应商的节点未使用时,不执行任何测试。" -#: htdocs/luci-static/resources/fchomo.js:519 +#: htdocs/luci-static/resources/fchomo.js:527 msgid "No valid %s found." msgstr "未找到有效的%s。" @@ -1636,17 +1675,17 @@ msgid "Node" msgstr "节点" #: htdocs/luci-static/resources/view/fchomo/client.js:1042 -#: htdocs/luci-static/resources/view/fchomo/node.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1293 msgid "Node exclude filter" msgstr "排除节点" #: htdocs/luci-static/resources/view/fchomo/client.js:1047 -#: htdocs/luci-static/resources/view/fchomo/node.js:1271 +#: htdocs/luci-static/resources/view/fchomo/node.js:1300 msgid "Node exclude type" msgstr "排除节点类型" #: htdocs/luci-static/resources/view/fchomo/client.js:1037 -#: htdocs/luci-static/resources/view/fchomo/node.js:1258 +#: htdocs/luci-static/resources/view/fchomo/node.js:1287 msgid "Node filter" msgstr "过滤节点" @@ -1654,19 +1693,19 @@ msgstr "过滤节点" msgid "Node switch tolerance" msgstr "节点切换容差" -#: htdocs/luci-static/resources/fchomo.js:313 +#: htdocs/luci-static/resources/fchomo.js:321 msgid "None" msgstr "无" -#: htdocs/luci-static/resources/view/fchomo/global.js:604 +#: htdocs/luci-static/resources/view/fchomo/global.js:619 msgid "Not Installed" msgstr "未安装" -#: htdocs/luci-static/resources/fchomo.js:950 +#: htdocs/luci-static/resources/fchomo.js:958 msgid "Not Running" msgstr "未在运行" -#: htdocs/luci-static/resources/view/fchomo/node.js:499 +#: htdocs/luci-static/resources/view/fchomo/node.js:500 msgid "Obfs Mode" msgstr "Obfs 模式" @@ -1680,15 +1719,15 @@ msgstr "混淆密码" msgid "Obfuscate type" msgstr "混淆类型" -#: htdocs/luci-static/resources/view/fchomo/global.js:856 +#: htdocs/luci-static/resources/view/fchomo/global.js:871 msgid "One or more numbers in the range 0-63 separated by commas" msgstr "0-63 范围内的一个或多个数字,以逗号分隔" -#: htdocs/luci-static/resources/view/fchomo/global.js:721 +#: htdocs/luci-static/resources/view/fchomo/global.js:736 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "只处理来自指定接口的流量。留空表示全部。" -#: htdocs/luci-static/resources/fchomo.js:944 +#: htdocs/luci-static/resources/fchomo.js:952 msgid "Open Dashboard" msgstr "打开面板" @@ -1696,13 +1735,13 @@ msgstr "打开面板" msgid "Operation mode" msgstr "运行模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:646 -#: htdocs/luci-static/resources/view/fchomo/global.js:684 +#: htdocs/luci-static/resources/view/fchomo/global.js:661 +#: htdocs/luci-static/resources/view/fchomo/global.js:699 msgid "Override destination" msgstr "覆盖目标地址" #: htdocs/luci-static/resources/view/fchomo/client.js:892 -#: htdocs/luci-static/resources/view/fchomo/node.js:1021 +#: htdocs/luci-static/resources/view/fchomo/node.js:1050 msgid "Override fields" msgstr "覆盖字段" @@ -1714,7 +1753,7 @@ msgstr "覆盖 DNS 回应的服务器的 IP 地址。" msgid "Override the Proxy group of DNS server." msgstr "覆盖 DNS 服务器所使用的代理组。" -#: htdocs/luci-static/resources/view/fchomo/global.js:647 +#: htdocs/luci-static/resources/view/fchomo/global.js:662 msgid "Override the connection destination address with the sniffed domain." msgstr "使用嗅探到的域名覆盖连接目标。" @@ -1726,11 +1765,11 @@ msgstr "覆盖原始请求中已有的 ECS。" msgid "Overview" msgstr "概览" -#: htdocs/luci-static/resources/view/fchomo/node.js:745 +#: htdocs/luci-static/resources/view/fchomo/node.js:774 msgid "POST" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:746 +#: htdocs/luci-static/resources/view/fchomo/node.js:775 msgid "PUT" msgstr "" @@ -1742,21 +1781,21 @@ msgstr "数据包编码" msgid "Padding scheme" msgstr "填充方案" -#: htdocs/luci-static/resources/fchomo.js:1244 +#: htdocs/luci-static/resources/fchomo.js:1252 msgid "Paddings" msgstr "填充 (Paddings)" #: htdocs/luci-static/resources/view/fchomo/node.js:129 #: htdocs/luci-static/resources/view/fchomo/node.js:202 -#: htdocs/luci-static/resources/view/fchomo/node.js:514 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 #: htdocs/luci-static/resources/view/fchomo/server.js:114 #: htdocs/luci-static/resources/view/fchomo/server.js:170 -#: htdocs/luci-static/resources/view/fchomo/server.js:279 +#: htdocs/luci-static/resources/view/fchomo/server.js:280 msgid "Password" msgstr "密码" -#: htdocs/luci-static/resources/fchomo.js:1183 -#: htdocs/luci-static/resources/view/fchomo/node.js:1073 +#: htdocs/luci-static/resources/fchomo.js:1191 +#: htdocs/luci-static/resources/view/fchomo/node.js:1102 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:341 msgid "Payload" msgstr "Payload" @@ -1775,7 +1814,7 @@ msgstr "性能可能会略有下降,建议仅在需要时开启。" msgid "Plain text" msgstr "纯文本 text" -#: htdocs/luci-static/resources/view/fchomo/global.js:833 +#: htdocs/luci-static/resources/view/fchomo/global.js:848 msgid "" "Please ensure that the DNS query of the domains to be processed in the DNS " "policy
are send via DIRECT/Proxy Node in the same semantics as Routing " @@ -1790,8 +1829,8 @@ msgid "" "standards." msgstr "链接格式标准请参考 %s。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1058 -#: htdocs/luci-static/resources/view/fchomo/node.js:1072 +#: htdocs/luci-static/resources/view/fchomo/node.js:1087 +#: htdocs/luci-static/resources/view/fchomo/node.js:1101 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:326 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:340 msgid "" @@ -1805,7 +1844,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1193 #: htdocs/luci-static/resources/view/fchomo/client.js:1315 #: htdocs/luci-static/resources/view/fchomo/client.js:1552 -#: htdocs/luci-static/resources/view/fchomo/node.js:923 +#: htdocs/luci-static/resources/view/fchomo/node.js:952 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:143 msgid "Please type %s fields of mihomo config.
" msgstr "请输入 mihomo 配置的 %s 字段。
" @@ -1815,15 +1854,15 @@ msgstr "请输入 mihomo 配置的 %s 字段。
" msgid "Plugin" msgstr "插件" -#: htdocs/luci-static/resources/view/fchomo/node.js:499 -#: htdocs/luci-static/resources/view/fchomo/node.js:506 -#: htdocs/luci-static/resources/view/fchomo/node.js:514 -#: htdocs/luci-static/resources/view/fchomo/node.js:520 -#: htdocs/luci-static/resources/view/fchomo/node.js:528 -#: htdocs/luci-static/resources/view/fchomo/node.js:534 -#: htdocs/luci-static/resources/view/fchomo/server.js:272 -#: htdocs/luci-static/resources/view/fchomo/server.js:279 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/node.js:500 +#: htdocs/luci-static/resources/view/fchomo/node.js:507 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 +#: htdocs/luci-static/resources/view/fchomo/node.js:521 +#: htdocs/luci-static/resources/view/fchomo/node.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:535 +#: htdocs/luci-static/resources/view/fchomo/server.js:273 +#: htdocs/luci-static/resources/view/fchomo/server.js:280 +#: htdocs/luci-static/resources/view/fchomo/server.js:286 msgid "Plugin:" msgstr "插件:" @@ -1831,15 +1870,16 @@ msgstr "插件:" msgid "Port" msgstr "端口" -#: htdocs/luci-static/resources/fchomo.js:1563 +#: htdocs/luci-static/resources/fchomo.js:1571 msgid "Port %s alrealy exists!" msgstr "端口 %s 已存在!" -#: htdocs/luci-static/resources/view/fchomo/global.js:681 +#: htdocs/luci-static/resources/view/fchomo/global.js:696 msgid "Ports" msgstr "端口" #: htdocs/luci-static/resources/view/fchomo/node.js:142 +#: htdocs/luci-static/resources/view/fchomo/node.js:212 #: htdocs/luci-static/resources/view/fchomo/server.js:97 msgid "Ports pool" msgstr "端口池" @@ -1860,14 +1900,14 @@ msgstr "优先 IPv6" #: htdocs/luci-static/resources/view/fchomo/global.js:524 msgid "" "Prevent ICMP loopback issues in some cases. Ping will not show real delay." -msgstr "在某些情况下防止 ICMP 环回问题。Ping 不会显示实际延迟。" +msgstr "防止某些情况下的 ICMP 环回问题。Ping 不会显示实际延迟。" -#: htdocs/luci-static/resources/view/fchomo/global.js:727 -#: htdocs/luci-static/resources/view/fchomo/global.js:744 -#: htdocs/luci-static/resources/view/fchomo/node.js:887 -#: htdocs/luci-static/resources/view/fchomo/node.js:893 -#: htdocs/luci-static/resources/view/fchomo/node.js:1193 -#: htdocs/luci-static/resources/view/fchomo/node.js:1200 +#: htdocs/luci-static/resources/view/fchomo/global.js:742 +#: htdocs/luci-static/resources/view/fchomo/global.js:759 +#: htdocs/luci-static/resources/view/fchomo/node.js:916 +#: htdocs/luci-static/resources/view/fchomo/node.js:922 +#: htdocs/luci-static/resources/view/fchomo/node.js:1222 +#: htdocs/luci-static/resources/view/fchomo/node.js:1229 msgid "Priority: Proxy Node > Global." msgstr "优先级: 代理节点 > 全局。" @@ -1887,8 +1927,8 @@ msgstr "私钥" msgid "Process matching mode" msgstr "进程匹配模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:675 -#: htdocs/luci-static/resources/view/fchomo/node.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:690 +#: htdocs/luci-static/resources/view/fchomo/node.js:834 msgid "Protocol" msgstr "协议" @@ -1903,13 +1943,13 @@ msgid "" msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。" #: htdocs/luci-static/resources/view/fchomo/client.js:937 -#: htdocs/luci-static/resources/view/fchomo/node.js:906 -#: htdocs/luci-static/resources/view/fchomo/node.js:915 -#: htdocs/luci-static/resources/view/fchomo/node.js:1309 +#: htdocs/luci-static/resources/view/fchomo/node.js:935 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 +#: htdocs/luci-static/resources/view/fchomo/node.js:1338 msgid "Provider" msgstr "供应商" -#: htdocs/luci-static/resources/view/fchomo/node.js:1079 +#: htdocs/luci-static/resources/view/fchomo/node.js:1108 msgid "Provider URL" msgstr "供应商订阅 URL" @@ -1918,31 +1958,31 @@ msgstr "供应商订阅 URL" msgid "Proxy Group" msgstr "代理组" -#: htdocs/luci-static/resources/view/fchomo/global.js:777 +#: htdocs/luci-static/resources/view/fchomo/global.js:792 msgid "Proxy IPv4 IP-s" msgstr "代理 IPv4 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:780 +#: htdocs/luci-static/resources/view/fchomo/global.js:795 msgid "Proxy IPv6 IP-s" msgstr "代理 IPv6 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:783 +#: htdocs/luci-static/resources/view/fchomo/global.js:798 msgid "Proxy MAC-s" msgstr "代理 MAC 地址" #: htdocs/luci-static/resources/view/fchomo/node.js:76 -#: htdocs/luci-static/resources/view/fchomo/node.js:1308 +#: htdocs/luci-static/resources/view/fchomo/node.js:1337 msgid "Proxy Node" msgstr "代理节点" -#: htdocs/luci-static/resources/view/fchomo/node.js:1284 -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1313 +#: htdocs/luci-static/resources/view/fchomo/node.js:1322 msgid "Proxy chain" msgstr "代理链" #: htdocs/luci-static/resources/view/fchomo/client.js:713 #: htdocs/luci-static/resources/view/fchomo/client.js:1415 -#: htdocs/luci-static/resources/view/fchomo/node.js:1097 +#: htdocs/luci-static/resources/view/fchomo/node.js:1126 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:365 msgid "Proxy group" msgstr "代理组" @@ -1955,7 +1995,7 @@ msgstr "代理组覆盖" msgid "Proxy mode" msgstr "代理模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:786 +#: htdocs/luci-static/resources/view/fchomo/global.js:801 msgid "Proxy routerself" msgstr "代理路由器自身" @@ -1973,52 +2013,52 @@ msgstr "QUIC 拥塞控制器。" msgid "Quick Reload" msgstr "快速重载" -#: htdocs/luci-static/resources/view/fchomo/node.js:678 -#: htdocs/luci-static/resources/view/fchomo/server.js:422 +#: htdocs/luci-static/resources/view/fchomo/node.js:707 +#: htdocs/luci-static/resources/view/fchomo/server.js:448 msgid "REALITY" msgstr "REALITY" -#: htdocs/luci-static/resources/view/fchomo/node.js:693 +#: htdocs/luci-static/resources/view/fchomo/node.js:722 msgid "REALITY X25519MLKEM768 PQC support" msgstr "REALITY X25519MLKEM768 后量子加密支持" -#: htdocs/luci-static/resources/view/fchomo/server.js:459 +#: htdocs/luci-static/resources/view/fchomo/server.js:485 msgid "REALITY certificate issued to" msgstr "REALITY 证书颁发给" -#: htdocs/luci-static/resources/view/fchomo/server.js:427 +#: htdocs/luci-static/resources/view/fchomo/server.js:453 msgid "REALITY handshake server" msgstr "REALITY 握手服务器" -#: htdocs/luci-static/resources/view/fchomo/server.js:434 +#: htdocs/luci-static/resources/view/fchomo/server.js:460 msgid "REALITY private key" msgstr "REALITY 私钥" -#: htdocs/luci-static/resources/view/fchomo/node.js:683 -#: htdocs/luci-static/resources/view/fchomo/server.js:449 +#: htdocs/luci-static/resources/view/fchomo/node.js:712 +#: htdocs/luci-static/resources/view/fchomo/server.js:475 msgid "REALITY public key" msgstr "REALITY 公钥" -#: htdocs/luci-static/resources/view/fchomo/node.js:688 -#: htdocs/luci-static/resources/view/fchomo/server.js:453 +#: htdocs/luci-static/resources/view/fchomo/node.js:717 +#: htdocs/luci-static/resources/view/fchomo/server.js:479 msgid "REALITY short ID" msgstr "REALITY 标识符" -#: htdocs/luci-static/resources/fchomo.js:1218 -#: htdocs/luci-static/resources/fchomo.js:1235 +#: htdocs/luci-static/resources/fchomo.js:1226 +#: htdocs/luci-static/resources/fchomo.js:1243 msgid "RTT" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:635 +#: htdocs/luci-static/resources/view/fchomo/global.js:650 msgid "Random will be used if empty." msgstr "留空将使用随机令牌。" -#: htdocs/luci-static/resources/fchomo.js:1040 +#: htdocs/luci-static/resources/fchomo.js:1048 msgid "Randomized traffic characteristics" msgstr "随机化流量特征" -#: htdocs/luci-static/resources/view/fchomo/node.js:1342 -#: htdocs/luci-static/resources/view/fchomo/node.js:1364 +#: htdocs/luci-static/resources/view/fchomo/node.js:1371 +#: htdocs/luci-static/resources/view/fchomo/node.js:1393 msgid "Recommended to use UoT node.
such as %s." msgstr "建议使用 UoT 节点。
例如%s。" @@ -2042,7 +2082,7 @@ msgstr "Redirect TCP + Tun UDP" msgid "Refresh every %s seconds." msgstr "每 %s 秒刷新。" -#: htdocs/luci-static/resources/fchomo.js:937 +#: htdocs/luci-static/resources/fchomo.js:945 #: htdocs/luci-static/resources/view/fchomo/client.js:805 #: htdocs/luci-static/resources/view/fchomo/global.js:193 #: htdocs/luci-static/resources/view/fchomo/server.js:46 @@ -2053,7 +2093,7 @@ msgstr "重载" msgid "Reload All" msgstr "重载所有" -#: htdocs/luci-static/resources/view/fchomo/node.js:1036 +#: htdocs/luci-static/resources/view/fchomo/node.js:1065 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:267 msgid "Remote" msgstr "远程" @@ -2062,29 +2102,33 @@ msgstr "远程" msgid "Remote DNS resolve" msgstr "远程 DNS 解析" -#: htdocs/luci-static/resources/fchomo.js:1462 +#: htdocs/luci-static/resources/fchomo.js:1470 msgid "Remove" msgstr "移除" -#: htdocs/luci-static/resources/fchomo.js:1467 -#: htdocs/luci-static/resources/view/fchomo/node.js:1012 -#: htdocs/luci-static/resources/view/fchomo/node.js:1014 +#: htdocs/luci-static/resources/fchomo.js:1475 +#: htdocs/luci-static/resources/view/fchomo/node.js:1041 +#: htdocs/luci-static/resources/view/fchomo/node.js:1043 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:240 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:242 msgid "Remove idles" msgstr "移除闲置" -#: htdocs/luci-static/resources/view/fchomo/node.js:1126 +#: htdocs/luci-static/resources/view/fchomo/node.js:1155 msgid "Replace name" msgstr "名称替换" -#: htdocs/luci-static/resources/view/fchomo/node.js:1127 +#: htdocs/luci-static/resources/view/fchomo/node.js:1156 msgid "Replace node name." msgstr "替换节点名称" -#: htdocs/luci-static/resources/view/fchomo/node.js:752 -#: htdocs/luci-static/resources/view/fchomo/node.js:759 -#: htdocs/luci-static/resources/view/fchomo/server.js:501 +#: htdocs/luci-static/resources/fchomo.js:302 +msgid "Request" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:781 +#: htdocs/luci-static/resources/view/fchomo/node.js:788 +#: htdocs/luci-static/resources/view/fchomo/server.js:527 msgid "Request path" msgstr "请求路径" @@ -2092,8 +2136,16 @@ msgstr "请求路径" msgid "Request timeout" msgstr "请求超时" -#: htdocs/luci-static/resources/fchomo.js:1048 -#: htdocs/luci-static/resources/view/fchomo/node.js:694 +#: htdocs/luci-static/resources/fchomo.js:305 +msgid "Require and verify" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:303 +msgid "Require any" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:1056 +#: htdocs/luci-static/resources/view/fchomo/node.js:723 msgid "Requires server support." msgstr "需要服务器支持。" @@ -2105,7 +2157,7 @@ msgstr "保留字段字节" msgid "Resources management" msgstr "资源管理" -#: htdocs/luci-static/resources/view/fchomo/node.js:534 +#: htdocs/luci-static/resources/view/fchomo/node.js:535 msgid "Restls script" msgstr "Restls 剧本" @@ -2119,39 +2171,39 @@ msgid "" "Returns the string input for icon in the API to display in this proxy group." msgstr "在 API 返回 icon 所输入的字符串,以在该代理组显示。" -#: htdocs/luci-static/resources/view/fchomo/global.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:820 msgid "Routing Control" msgstr "路由控制" -#: htdocs/luci-static/resources/view/fchomo/global.js:845 -#: htdocs/luci-static/resources/view/fchomo/global.js:848 +#: htdocs/luci-static/resources/view/fchomo/global.js:860 +#: htdocs/luci-static/resources/view/fchomo/global.js:863 msgid "Routing DSCP" msgstr "路由 DSCP" -#: htdocs/luci-static/resources/view/fchomo/global.js:829 +#: htdocs/luci-static/resources/view/fchomo/global.js:844 msgid "Routing GFW" msgstr "路由 GFW 流量" -#: htdocs/luci-static/resources/view/fchomo/global.js:743 -#: htdocs/luci-static/resources/view/fchomo/node.js:892 -#: htdocs/luci-static/resources/view/fchomo/node.js:1199 +#: htdocs/luci-static/resources/view/fchomo/global.js:758 +#: htdocs/luci-static/resources/view/fchomo/node.js:921 +#: htdocs/luci-static/resources/view/fchomo/node.js:1228 msgid "Routing mark" msgstr "路由标记" -#: htdocs/luci-static/resources/view/fchomo/global.js:825 +#: htdocs/luci-static/resources/view/fchomo/global.js:840 msgid "Routing mode" msgstr "路由模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:826 +#: htdocs/luci-static/resources/view/fchomo/global.js:841 msgid "Routing mode of the traffic enters mihomo via firewall rules." msgstr "流量通过防火墙规则进入 mihomo 的路由模式。" -#: htdocs/luci-static/resources/view/fchomo/global.js:832 +#: htdocs/luci-static/resources/view/fchomo/global.js:847 msgid "Routing mode will be handle domain." msgstr "路由模式将处理域名。" -#: htdocs/luci-static/resources/view/fchomo/global.js:807 -#: htdocs/luci-static/resources/view/fchomo/global.js:816 +#: htdocs/luci-static/resources/view/fchomo/global.js:822 +#: htdocs/luci-static/resources/view/fchomo/global.js:831 msgid "Routing ports" msgstr "路由端口" @@ -2160,11 +2212,11 @@ msgstr "路由端口" msgid "Routing rule" msgstr "路由规则" -#: htdocs/luci-static/resources/view/fchomo/global.js:737 +#: htdocs/luci-static/resources/view/fchomo/global.js:752 msgid "Routing rule priority" msgstr "路由规则优先权" -#: htdocs/luci-static/resources/view/fchomo/global.js:731 +#: htdocs/luci-static/resources/view/fchomo/global.js:746 msgid "Routing table ID" msgstr "路由表 ID" @@ -2190,7 +2242,7 @@ msgstr "规则集" msgid "Ruleset-URI-Scheme" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:950 +#: htdocs/luci-static/resources/fchomo.js:958 msgid "Running" msgstr "正在运行" @@ -2214,7 +2266,7 @@ msgstr "STUN 端口" msgid "SUB-RULE" msgstr "SUB-RULE" -#: htdocs/luci-static/resources/view/fchomo/node.js:552 +#: htdocs/luci-static/resources/view/fchomo/node.js:553 msgid "SUoT version" msgstr "SUoT 版本" @@ -2239,21 +2291,23 @@ msgstr "分段最大尺寸" msgid "Select" msgstr "手动选择" -#: htdocs/luci-static/resources/view/fchomo/global.js:596 +#: htdocs/luci-static/resources/view/fchomo/global.js:611 msgid "Select Dashboard" msgstr "选择面板" -#: htdocs/luci-static/resources/fchomo.js:1054 +#: htdocs/luci-static/resources/fchomo.js:1062 msgid "Send padding randomly 0-3333 bytes with 50% probability." msgstr "以 50% 的概率发送随机 0-3333 字节的填充。" -#: htdocs/luci-static/resources/fchomo.js:1043 -#: htdocs/luci-static/resources/fchomo.js:1044 +#: htdocs/luci-static/resources/fchomo.js:1051 +#: htdocs/luci-static/resources/fchomo.js:1052 msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse." msgstr "发送 300-600 秒的随机票证,以供客户端 0-RTT 重用。" -#: htdocs/luci-static/resources/fchomo.js:1218 +#: htdocs/luci-static/resources/fchomo.js:1226 #: htdocs/luci-static/resources/view/fchomo/server.js:59 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:54 msgid "Server" msgstr "服务端" @@ -2262,7 +2316,7 @@ msgstr "服务端" msgid "Server address" msgstr "服务器地址" -#: htdocs/luci-static/resources/view/fchomo/node.js:737 +#: htdocs/luci-static/resources/view/fchomo/node.js:766 msgid "Server hostname" msgstr "服务器主机名称" @@ -2294,7 +2348,7 @@ msgstr "Shadowsocks 加密" msgid "Shadowsocks password" msgstr "Shadowsocks 密码" -#: htdocs/luci-static/resources/view/fchomo/node.js:847 +#: htdocs/luci-static/resources/view/fchomo/node.js:876 msgid "Show connections in the dashboard for breaking connections easier." msgstr "在面板中显示连接以便于打断连接。" @@ -2306,26 +2360,26 @@ msgstr "静音" msgid "Simple round-robin all nodes" msgstr "简单轮替所有节点" -#: htdocs/luci-static/resources/view/fchomo/node.js:1085 +#: htdocs/luci-static/resources/view/fchomo/node.js:1114 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:353 msgid "Size limit" msgstr "大小限制" #: htdocs/luci-static/resources/view/fchomo/client.js:1448 -#: htdocs/luci-static/resources/view/fchomo/node.js:648 -#: htdocs/luci-static/resources/view/fchomo/node.js:1177 +#: htdocs/luci-static/resources/view/fchomo/node.js:649 +#: htdocs/luci-static/resources/view/fchomo/node.js:1206 msgid "Skip cert verify" msgstr "跳过证书验证" -#: htdocs/luci-static/resources/view/fchomo/global.js:653 +#: htdocs/luci-static/resources/view/fchomo/global.js:668 msgid "Skiped sniffing domain" msgstr "跳过嗅探域名" -#: htdocs/luci-static/resources/view/fchomo/global.js:659 +#: htdocs/luci-static/resources/view/fchomo/global.js:674 msgid "Skiped sniffing dst address" msgstr "跳过嗅探目标地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:656 +#: htdocs/luci-static/resources/view/fchomo/global.js:671 msgid "Skiped sniffing src address" msgstr "跳过嗅探来源地址" @@ -2333,20 +2387,20 @@ msgstr "跳过嗅探来源地址" msgid "Snell" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:663 +#: htdocs/luci-static/resources/view/fchomo/global.js:678 msgid "Sniff protocol" msgstr "嗅探协议" -#: htdocs/luci-static/resources/view/fchomo/global.js:640 +#: htdocs/luci-static/resources/view/fchomo/global.js:655 msgid "Sniffer" msgstr "嗅探器" -#: htdocs/luci-static/resources/view/fchomo/global.js:643 +#: htdocs/luci-static/resources/view/fchomo/global.js:658 msgid "Sniffer settings" msgstr "嗅探器设置" -#: htdocs/luci-static/resources/view/fchomo/global.js:808 -#: htdocs/luci-static/resources/view/fchomo/global.js:817 +#: htdocs/luci-static/resources/view/fchomo/global.js:823 +#: htdocs/luci-static/resources/view/fchomo/global.js:832 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." @@ -2378,7 +2432,7 @@ msgstr "子规则" msgid "Sub rule group" msgstr "子规则组" -#: htdocs/luci-static/resources/fchomo.js:522 +#: htdocs/luci-static/resources/fchomo.js:530 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:211 msgid "Successfully imported %s %s of total %s." msgstr "已成功导入 %s 个%s (共 %s 个)。" @@ -2387,7 +2441,7 @@ msgstr "已成功导入 %s 个%s (共 %s 个)。" msgid "Successfully updated." msgstr "更新成功。" -#: htdocs/luci-static/resources/fchomo.js:1786 +#: htdocs/luci-static/resources/fchomo.js:1804 msgid "Successfully uploaded." msgstr "已成功上传。" @@ -2416,7 +2470,7 @@ msgstr "TCP" msgid "TCP concurrency" msgstr "TCP 并发" -#: htdocs/luci-static/resources/view/fchomo/node.js:840 +#: htdocs/luci-static/resources/view/fchomo/node.js:869 msgid "TCP only" msgstr "仅 TCP" @@ -2428,24 +2482,24 @@ msgstr "TCP-Keep-Alive 闲置超时" msgid "TCP-Keep-Alive interval" msgstr "TCP-Keep-Alive 间隔" -#: htdocs/luci-static/resources/view/fchomo/node.js:871 -#: htdocs/luci-static/resources/view/fchomo/node.js:1144 +#: htdocs/luci-static/resources/view/fchomo/node.js:900 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 msgid "TFO" msgstr "TCP 快速打开 (TFO)" -#: htdocs/luci-static/resources/view/fchomo/global.js:525 -#: htdocs/luci-static/resources/view/fchomo/node.js:501 -#: htdocs/luci-static/resources/view/fchomo/node.js:565 -#: htdocs/luci-static/resources/view/fchomo/server.js:308 +#: htdocs/luci-static/resources/view/fchomo/global.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:502 +#: htdocs/luci-static/resources/view/fchomo/node.js:566 +#: htdocs/luci-static/resources/view/fchomo/server.js:309 msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/view/fchomo/node.js:596 -#: htdocs/luci-static/resources/view/fchomo/server.js:339 +#: htdocs/luci-static/resources/view/fchomo/node.js:597 +#: htdocs/luci-static/resources/view/fchomo/server.js:340 msgid "TLS ALPN" msgstr "TLS ALPN" -#: htdocs/luci-static/resources/view/fchomo/node.js:590 +#: htdocs/luci-static/resources/view/fchomo/node.js:591 msgid "TLS SNI" msgstr "" @@ -2473,7 +2527,19 @@ msgstr "让客户端使用 BBR 流控算法。" msgid "The %s address used by local machine in the Wireguard network." msgstr "WireGuard 网络中使用的本机 %s 地址。" -#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:672 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 +msgid "The %s private key, in PEM format." +msgstr "%s私钥,需要 PEM 格式。" + +#: htdocs/luci-static/resources/view/fchomo/global.js:556 +#: htdocs/luci-static/resources/view/fchomo/node.js:658 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:384 +msgid "The %s public key, in PEM format." +msgstr "%s公钥,需要 PEM 格式。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:692 msgid "" "The ECH parameter of the HTTPS record for the domain. Leave empty to resolve " "via DNS." @@ -2483,7 +2549,7 @@ msgstr "域名的 HTTPS 记录的 ECH 参数。留空则通过 DNS 解析。" msgid "The default value is 2:00 every day." msgstr "默认值为每天 2:00。" -#: htdocs/luci-static/resources/fchomo.js:1247 +#: htdocs/luci-static/resources/fchomo.js:1255 msgid "" "The first padding must have a probability of 100% and at least 35 bytes." msgstr "首个填充必须为 100% 的概率并且至少 35 字节。" @@ -2498,26 +2564,18 @@ msgstr "匹配 %s 的将被视为未被投毒污染。" msgid "The matching %s will be deemed as poisoned." msgstr "匹配 %s 的将被视为已被投毒污染。" -#: htdocs/luci-static/resources/fchomo.js:1245 +#: htdocs/luci-static/resources/fchomo.js:1253 msgid "The server and client can set different padding parameters." msgstr "服务器和客户端可以设置不同的填充参数。" -#: htdocs/luci-static/resources/view/fchomo/server.js:360 -msgid "The server private key, in PEM format." -msgstr "服务端私钥,需要 PEM 格式。" - -#: htdocs/luci-static/resources/view/fchomo/server.js:345 -msgid "The server public key, in PEM format." -msgstr "服务端公钥,需要 PEM 格式。" - -#: htdocs/luci-static/resources/view/fchomo/global.js:585 -#: htdocs/luci-static/resources/view/fchomo/server.js:416 +#: htdocs/luci-static/resources/view/fchomo/global.js:600 +#: htdocs/luci-static/resources/view/fchomo/server.js:442 msgid "This ECH parameter needs to be added to the HTTPS record of the domain." msgstr "此 ECH 参数需要添加到域名的 HTTPS 记录中。" #: htdocs/luci-static/resources/view/fchomo/client.js:1451 -#: htdocs/luci-static/resources/view/fchomo/node.js:651 -#: htdocs/luci-static/resources/view/fchomo/node.js:1180 +#: htdocs/luci-static/resources/view/fchomo/node.js:652 +#: htdocs/luci-static/resources/view/fchomo/node.js:1209 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" @@ -2544,11 +2602,11 @@ msgid "" msgstr "" "要启用 Tun 支持,您需要安装 ip-fullkmod-tun。" -#: htdocs/luci-static/resources/view/fchomo/global.js:837 +#: htdocs/luci-static/resources/view/fchomo/global.js:852 msgid "To enable, you need to install dnsmasq-full." msgstr "要启用,您需要安装 dnsmasq-full。" -#: htdocs/luci-static/resources/view/fchomo/global.js:750 +#: htdocs/luci-static/resources/view/fchomo/global.js:765 msgid "Tproxy Fwmark" msgstr "Tproxy 标记" @@ -2557,8 +2615,8 @@ msgid "Tproxy port" msgstr "Tproxy 端口" #: htdocs/luci-static/resources/view/fchomo/node.js:217 -#: htdocs/luci-static/resources/view/fchomo/node.js:700 -#: htdocs/luci-static/resources/view/fchomo/server.js:467 +#: htdocs/luci-static/resources/view/fchomo/node.js:729 +#: htdocs/luci-static/resources/view/fchomo/server.js:493 msgid "Transport" msgstr "传输层" @@ -2567,8 +2625,8 @@ msgstr "传输层" msgid "Transport fields" msgstr "传输层字段" -#: htdocs/luci-static/resources/view/fchomo/node.js:705 -#: htdocs/luci-static/resources/view/fchomo/server.js:472 +#: htdocs/luci-static/resources/view/fchomo/node.js:734 +#: htdocs/luci-static/resources/view/fchomo/server.js:498 msgid "Transport type" msgstr "传输层类型" @@ -2581,7 +2639,7 @@ msgstr "将 目标 IP 视为 来源 IP。" msgid "Trojan" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:755 +#: htdocs/luci-static/resources/view/fchomo/global.js:770 msgid "Tun Fwmark" msgstr "Tun 标记" @@ -2603,8 +2661,8 @@ msgstr "Tun 堆栈" #: htdocs/luci-static/resources/view/fchomo/client.js:910 #: htdocs/luci-static/resources/view/fchomo/client.js:1597 #: htdocs/luci-static/resources/view/fchomo/node.js:106 -#: htdocs/luci-static/resources/view/fchomo/node.js:1034 -#: htdocs/luci-static/resources/view/fchomo/node.js:1307 +#: htdocs/luci-static/resources/view/fchomo/node.js:1063 +#: htdocs/luci-static/resources/view/fchomo/node.js:1336 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:265 #: htdocs/luci-static/resources/view/fchomo/server.js:86 msgid "Type" @@ -2612,9 +2670,9 @@ msgstr "类型" #: htdocs/luci-static/resources/view/fchomo/client.js:516 #: htdocs/luci-static/resources/view/fchomo/client.js:606 -#: htdocs/luci-static/resources/view/fchomo/node.js:541 -#: htdocs/luci-static/resources/view/fchomo/node.js:1154 -#: htdocs/luci-static/resources/view/fchomo/server.js:294 +#: htdocs/luci-static/resources/view/fchomo/node.js:542 +#: htdocs/luci-static/resources/view/fchomo/node.js:1183 +#: htdocs/luci-static/resources/view/fchomo/server.js:295 msgid "UDP" msgstr "UDP" @@ -2649,7 +2707,7 @@ msgstr "自动选择" msgid "UUID" msgstr "UUID" -#: htdocs/luci-static/resources/fchomo.js:995 +#: htdocs/luci-static/resources/fchomo.js:1003 msgid "Unable to download unsupported type: %s" msgstr "无法下载不支持的类型: %s" @@ -2674,8 +2732,8 @@ msgstr "未知错误。" msgid "Unknown error: %s" msgstr "未知错误:%s" -#: htdocs/luci-static/resources/view/fchomo/node.js:546 -#: htdocs/luci-static/resources/view/fchomo/node.js:1159 +#: htdocs/luci-static/resources/view/fchomo/node.js:547 +#: htdocs/luci-static/resources/view/fchomo/node.js:1188 msgid "UoT" msgstr "UDP over TCP (UoT)" @@ -2683,20 +2741,22 @@ msgstr "UDP over TCP (UoT)" msgid "Update failed." msgstr "更新失败。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1091 +#: htdocs/luci-static/resources/view/fchomo/node.js:1120 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:359 msgid "Update interval" msgstr "更新间隔" -#: htdocs/luci-static/resources/view/fchomo/node.js:858 +#: htdocs/luci-static/resources/view/fchomo/node.js:887 msgid "Upload bandwidth" msgstr "上传带宽" -#: htdocs/luci-static/resources/view/fchomo/node.js:859 +#: htdocs/luci-static/resources/view/fchomo/node.js:888 msgid "Upload bandwidth in Mbps." msgstr "上传带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/view/fchomo/server.js:351 +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/server.js:352 +#: htdocs/luci-static/resources/view/fchomo/server.js:392 msgid "Upload certificate" msgstr "上传证书" @@ -2704,13 +2764,17 @@ msgstr "上传证书" msgid "Upload initial package" msgstr "上传初始资源包" -#: htdocs/luci-static/resources/view/fchomo/server.js:366 +#: htdocs/luci-static/resources/view/fchomo/node.js:677 +#: htdocs/luci-static/resources/view/fchomo/server.js:367 msgid "Upload key" msgstr "上传密钥" #: htdocs/luci-static/resources/view/fchomo/global.js:306 -#: htdocs/luci-static/resources/view/fchomo/server.js:354 -#: htdocs/luci-static/resources/view/fchomo/server.js:369 +#: htdocs/luci-static/resources/view/fchomo/node.js:666 +#: htdocs/luci-static/resources/view/fchomo/node.js:680 +#: htdocs/luci-static/resources/view/fchomo/server.js:355 +#: htdocs/luci-static/resources/view/fchomo/server.js:370 +#: htdocs/luci-static/resources/view/fchomo/server.js:395 msgid "Upload..." msgstr "上传..." @@ -2722,7 +2786,7 @@ msgstr "用于解析 DNS 服务器的域名。必须是 IP。" msgid "Used to resolve the domain of the Proxy node." msgstr "用于解析代理节点的域名。" -#: htdocs/luci-static/resources/view/fchomo/node.js:591 +#: htdocs/luci-static/resources/view/fchomo/node.js:592 msgid "Used to verify the hostname on the returned certificates." msgstr "用于验证返回的证书上的主机名。" @@ -2735,15 +2799,15 @@ msgstr "用户认证" msgid "Username" msgstr "用户名" -#: htdocs/luci-static/resources/view/fchomo/global.js:763 +#: htdocs/luci-static/resources/view/fchomo/global.js:778 msgid "Users filter mode" msgstr "使用者过滤模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:788 +#: htdocs/luci-static/resources/view/fchomo/node.js:817 msgid "V2ray HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:793 +#: htdocs/luci-static/resources/view/fchomo/node.js:822 msgid "V2ray HTTPUpgrade fast open" msgstr "" @@ -2757,19 +2821,23 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1040 -#: htdocs/luci-static/resources/view/fchomo/node.js:1313 +#: htdocs/luci-static/resources/view/fchomo/node.js:1069 +#: htdocs/luci-static/resources/view/fchomo/node.js:1342 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:308 msgid "Value" msgstr "可视化值" +#: htdocs/luci-static/resources/fchomo.js:304 +msgid "Verify if given" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/node.js:247 -#: htdocs/luci-static/resources/view/fchomo/node.js:520 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/node.js:521 +#: htdocs/luci-static/resources/view/fchomo/server.js:286 msgid "Version" msgstr "版本" -#: htdocs/luci-static/resources/view/fchomo/node.js:528 +#: htdocs/luci-static/resources/view/fchomo/node.js:529 msgid "Version hint" msgstr "" @@ -2778,7 +2846,7 @@ msgstr "" msgid "Vless Encryption fields" msgstr "Vless Encryption 字段" -#: htdocs/luci-static/resources/fchomo.js:1053 +#: htdocs/luci-static/resources/fchomo.js:1061 msgid "Wait a random 0-111 milliseconds with 75% probability." msgstr "以 75% 的概率等待随机 0-111 毫秒。" @@ -2786,12 +2854,12 @@ msgstr "以 75% 的概率等待随机 0-111 毫秒。" msgid "Warning" msgstr "警告" -#: htdocs/luci-static/resources/view/fchomo/node.js:710 -#: htdocs/luci-static/resources/view/fchomo/node.js:721 -#: htdocs/luci-static/resources/view/fchomo/node.js:726 -#: htdocs/luci-static/resources/view/fchomo/server.js:474 -#: htdocs/luci-static/resources/view/fchomo/server.js:485 -#: htdocs/luci-static/resources/view/fchomo/server.js:490 +#: htdocs/luci-static/resources/view/fchomo/node.js:739 +#: htdocs/luci-static/resources/view/fchomo/node.js:750 +#: htdocs/luci-static/resources/view/fchomo/node.js:755 +#: htdocs/luci-static/resources/view/fchomo/server.js:500 +#: htdocs/luci-static/resources/view/fchomo/server.js:511 +#: htdocs/luci-static/resources/view/fchomo/server.js:516 msgid "WebSocket" msgstr "" @@ -2799,7 +2867,7 @@ msgstr "" msgid "When used as a server, HomeProxy is a better choice." msgstr "用作服务端时,HomeProxy 是更好的选择。" -#: htdocs/luci-static/resources/view/fchomo/global.js:765 +#: htdocs/luci-static/resources/view/fchomo/global.js:780 msgid "White list" msgstr "白名单" @@ -2819,7 +2887,7 @@ msgstr "WireGuard 预共享密钥。" msgid "WireGuard requires base64-encoded private keys." msgstr "WireGuard 要求 base64 编码的私钥。" -#: htdocs/luci-static/resources/fchomo.js:1209 +#: htdocs/luci-static/resources/fchomo.js:1217 msgid "XOR mode" msgstr "XOR 模式" @@ -2835,7 +2903,7 @@ msgstr "Yaml 格式文本" msgid "YouTube" msgstr "油管" -#: htdocs/luci-static/resources/fchomo.js:1768 +#: htdocs/luci-static/resources/fchomo.js:1786 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "您的 %s 已成功上传。大小:%sB。" @@ -2863,7 +2931,9 @@ msgstr "自动" msgid "bbr" msgstr "bbr" -#: htdocs/luci-static/resources/view/fchomo/server.js:356 +#: htdocs/luci-static/resources/view/fchomo/node.js:668 +#: htdocs/luci-static/resources/view/fchomo/server.js:357 +#: htdocs/luci-static/resources/view/fchomo/server.js:397 msgid "certificate" msgstr "证书" @@ -2881,35 +2951,35 @@ msgstr "" msgid "cubic" msgstr "cubic" -#: htdocs/luci-static/resources/fchomo.js:1189 -#: htdocs/luci-static/resources/view/fchomo/server.js:300 +#: htdocs/luci-static/resources/fchomo.js:1197 +#: htdocs/luci-static/resources/view/fchomo/server.js:301 msgid "decryption" msgstr "decryption" -#: htdocs/luci-static/resources/view/fchomo/global.js:799 +#: htdocs/luci-static/resources/view/fchomo/global.js:814 msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)" msgstr "dnsmasq 自行选择上游服务器。 (可能影响 CDN 准确性)" -#: htdocs/luci-static/resources/view/fchomo/node.js:1171 +#: htdocs/luci-static/resources/view/fchomo/node.js:1200 msgid "down" msgstr "Hysteria 下载速率" -#: htdocs/luci-static/resources/fchomo.js:1194 -#: htdocs/luci-static/resources/view/fchomo/node.js:560 +#: htdocs/luci-static/resources/fchomo.js:1202 +#: htdocs/luci-static/resources/view/fchomo/node.js:561 msgid "encryption" msgstr "encryption" -#: htdocs/luci-static/resources/view/fchomo/node.js:709 -#: htdocs/luci-static/resources/view/fchomo/node.js:720 -#: htdocs/luci-static/resources/view/fchomo/node.js:725 -#: htdocs/luci-static/resources/view/fchomo/server.js:473 -#: htdocs/luci-static/resources/view/fchomo/server.js:484 -#: htdocs/luci-static/resources/view/fchomo/server.js:489 +#: htdocs/luci-static/resources/view/fchomo/node.js:738 +#: htdocs/luci-static/resources/view/fchomo/node.js:749 +#: htdocs/luci-static/resources/view/fchomo/node.js:754 +#: htdocs/luci-static/resources/view/fchomo/server.js:499 +#: htdocs/luci-static/resources/view/fchomo/server.js:510 +#: htdocs/luci-static/resources/view/fchomo/server.js:515 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:772 -#: htdocs/luci-static/resources/view/fchomo/server.js:508 +#: htdocs/luci-static/resources/view/fchomo/node.js:801 +#: htdocs/luci-static/resources/view/fchomo/server.js:534 msgid "gRPC service name" msgstr "gRPC 服务名称" @@ -2917,11 +2987,11 @@ msgstr "gRPC 服务名称" msgid "gVisor" msgstr "gVisor" -#: htdocs/luci-static/resources/view/fchomo/node.js:809 +#: htdocs/luci-static/resources/view/fchomo/node.js:838 msgid "h2mux" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1362 +#: htdocs/luci-static/resources/fchomo.js:1370 msgid "least one keypair required" msgstr "至少需要一对密钥" @@ -2934,17 +3004,17 @@ msgstr "metacubexd" #: htdocs/luci-static/resources/view/fchomo/client.js:1218 #: htdocs/luci-static/resources/view/fchomo/client.js:1352 #: htdocs/luci-static/resources/view/fchomo/client.js:1574 -#: htdocs/luci-static/resources/view/fchomo/node.js:1006 +#: htdocs/luci-static/resources/view/fchomo/node.js:1035 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:228 msgid "mihomo config" msgstr "mihomo 配置" -#: htdocs/luci-static/resources/fchomo.js:1035 +#: htdocs/luci-static/resources/fchomo.js:1043 msgid "mlkem768x25519plus" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:875 -#: htdocs/luci-static/resources/view/fchomo/node.js:1149 +#: htdocs/luci-static/resources/view/fchomo/node.js:904 +#: htdocs/luci-static/resources/view/fchomo/node.js:1178 msgid "mpTCP" msgstr "多路径 TCP (mpTCP)" @@ -2957,13 +3027,15 @@ msgstr "new_reno" msgid "no-resolve" msgstr "no-resolve" -#: htdocs/luci-static/resources/fchomo.js:1551 -#: htdocs/luci-static/resources/fchomo.js:1605 -#: htdocs/luci-static/resources/fchomo.js:1636 +#: htdocs/luci-static/resources/fchomo.js:1559 +#: htdocs/luci-static/resources/fchomo.js:1601 +#: htdocs/luci-static/resources/fchomo.js:1623 +#: htdocs/luci-static/resources/fchomo.js:1654 msgid "non-empty value" msgstr "非空值" #: htdocs/luci-static/resources/fchomo.js:268 +#: htdocs/luci-static/resources/fchomo.js:301 #: htdocs/luci-static/resources/view/fchomo/node.js:397 #: htdocs/luci-static/resources/view/fchomo/node.js:417 #: htdocs/luci-static/resources/view/fchomo/node.js:490 @@ -2988,7 +3060,7 @@ msgstr "" msgid "obfs-simple" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1129 +#: htdocs/luci-static/resources/view/fchomo/node.js:1158 msgid "override.proxy-name" msgstr "" @@ -2996,7 +3068,8 @@ msgstr "" msgid "packet addr (v2ray-core v5+)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:371 +#: htdocs/luci-static/resources/view/fchomo/node.js:682 +#: htdocs/luci-static/resources/view/fchomo/server.js:372 msgid "private key" msgstr "私钥" @@ -3022,7 +3095,7 @@ msgstr "规则集" msgid "shadow-tls" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:807 +#: htdocs/luci-static/resources/view/fchomo/node.js:836 msgid "smux" msgstr "" @@ -3034,78 +3107,78 @@ msgstr "src" msgid "unchecked" msgstr "未检查" -#: htdocs/luci-static/resources/fchomo.js:345 +#: htdocs/luci-static/resources/fchomo.js:353 msgid "unique UCI identifier" msgstr "独立 UCI 标识" -#: htdocs/luci-static/resources/fchomo.js:348 +#: htdocs/luci-static/resources/fchomo.js:356 msgid "unique identifier" msgstr "独立标识" -#: htdocs/luci-static/resources/fchomo.js:1645 +#: htdocs/luci-static/resources/fchomo.js:1663 msgid "unique value" msgstr "独立值" -#: htdocs/luci-static/resources/view/fchomo/node.js:1165 +#: htdocs/luci-static/resources/view/fchomo/node.js:1194 msgid "up" msgstr "Hysteria 上传速率" #: htdocs/luci-static/resources/view/fchomo/node.js:248 #: htdocs/luci-static/resources/view/fchomo/node.js:292 -#: htdocs/luci-static/resources/view/fchomo/node.js:521 -#: htdocs/luci-static/resources/view/fchomo/node.js:553 -#: htdocs/luci-static/resources/view/fchomo/server.js:286 +#: htdocs/luci-static/resources/view/fchomo/node.js:522 +#: htdocs/luci-static/resources/view/fchomo/node.js:554 +#: htdocs/luci-static/resources/view/fchomo/server.js:287 msgid "v1" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:249 -#: htdocs/luci-static/resources/view/fchomo/node.js:522 -#: htdocs/luci-static/resources/view/fchomo/node.js:554 -#: htdocs/luci-static/resources/view/fchomo/server.js:287 +#: htdocs/luci-static/resources/view/fchomo/node.js:523 +#: htdocs/luci-static/resources/view/fchomo/node.js:555 +#: htdocs/luci-static/resources/view/fchomo/server.js:288 msgid "v2" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:250 -#: htdocs/luci-static/resources/view/fchomo/node.js:523 -#: htdocs/luci-static/resources/view/fchomo/server.js:288 +#: htdocs/luci-static/resources/view/fchomo/node.js:524 +#: htdocs/luci-static/resources/view/fchomo/server.js:289 msgid "v3" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1579 -#: htdocs/luci-static/resources/fchomo.js:1582 +#: htdocs/luci-static/resources/fchomo.js:1587 +#: htdocs/luci-static/resources/fchomo.js:1590 msgid "valid JSON format" msgstr "有效的 JSON 格式" -#: htdocs/luci-static/resources/view/fchomo/node.js:641 +#: htdocs/luci-static/resources/view/fchomo/node.js:642 msgid "valid SHA256 string with %d characters" msgstr "包含 %d 个字符的有效 SHA256 字符串" -#: htdocs/luci-static/resources/fchomo.js:1657 -#: htdocs/luci-static/resources/fchomo.js:1660 +#: htdocs/luci-static/resources/fchomo.js:1675 +#: htdocs/luci-static/resources/fchomo.js:1678 msgid "valid URL" msgstr "有效网址" -#: htdocs/luci-static/resources/fchomo.js:1592 +#: htdocs/luci-static/resources/fchomo.js:1610 msgid "valid base64 key with %d characters" msgstr "包含 %d 个字符的有效 base64 密钥" -#: htdocs/luci-static/resources/fchomo.js:1607 +#: htdocs/luci-static/resources/fchomo.js:1625 msgid "valid key length with %d characters" msgstr "包含 %d 个字符的有效密钥" -#: htdocs/luci-static/resources/fchomo.js:1561 +#: htdocs/luci-static/resources/fchomo.js:1569 msgid "valid port value" msgstr "有效端口值" -#: htdocs/luci-static/resources/fchomo.js:1670 +#: htdocs/luci-static/resources/fchomo.js:1688 msgid "valid uuid" msgstr "有效 uuid" -#: htdocs/luci-static/resources/fchomo.js:1059 +#: htdocs/luci-static/resources/fchomo.js:1067 msgid "vless-mlkem768" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1058 +#: htdocs/luci-static/resources/fchomo.js:1066 msgid "vless-x25519" msgstr "" @@ -3117,7 +3190,7 @@ msgstr "" msgid "yacd-meta" msgstr "yacd-meta" -#: htdocs/luci-static/resources/view/fchomo/node.js:808 +#: htdocs/luci-static/resources/view/fchomo/node.js:837 msgid "yamux" msgstr "" @@ -3129,7 +3202,7 @@ msgstr "" msgid "zero" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:997 +#: htdocs/luci-static/resources/fchomo.js:1005 msgid "🡇" msgstr "" diff --git a/small/luci-app-fchomo/po/zh_Hant/fchomo.po b/small/luci-app-fchomo/po/zh_Hant/fchomo.po index 8333a6fbf6..1d0a8d70e5 100644 --- a/small/luci-app-fchomo/po/zh_Hant/fchomo.po +++ b/small/luci-app-fchomo/po/zh_Hant/fchomo.po @@ -12,13 +12,25 @@ msgstr "" msgid "%s log" msgstr "%s 日誌" -#: htdocs/luci-static/resources/fchomo.js:543 +#: htdocs/luci-static/resources/fchomo.js:551 #: htdocs/luci-static/resources/view/fchomo/client.js:237 #: htdocs/luci-static/resources/view/fchomo/client.js:267 #: htdocs/luci-static/resources/view/fchomo/client.js:363 msgid "(Imported)" msgstr "(已導入)" +#: htdocs/luci-static/resources/view/fchomo/global.js:549 +#: htdocs/luci-static/resources/view/fchomo/global.js:555 +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:671 +#: htdocs/luci-static/resources/view/fchomo/node.js:677 +#: htdocs/luci-static/resources/view/fchomo/server.js:375 +#: htdocs/luci-static/resources/view/fchomo/server.js:383 +#: htdocs/luci-static/resources/view/fchomo/server.js:392 +msgid "(mTLS)" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/client.js:924 #: htdocs/luci-static/resources/view/fchomo/client.js:925 #: htdocs/luci-static/resources/view/fchomo/client.js:938 @@ -26,19 +38,19 @@ msgstr "(已導入)" #: htdocs/luci-static/resources/view/fchomo/client.js:1151 #: htdocs/luci-static/resources/view/fchomo/client.js:1615 #: htdocs/luci-static/resources/view/fchomo/client.js:1616 -#: htdocs/luci-static/resources/view/fchomo/node.js:1336 -#: htdocs/luci-static/resources/view/fchomo/node.js:1344 -#: htdocs/luci-static/resources/view/fchomo/node.js:1358 -#: htdocs/luci-static/resources/view/fchomo/node.js:1366 +#: htdocs/luci-static/resources/view/fchomo/node.js:1365 +#: htdocs/luci-static/resources/view/fchomo/node.js:1373 +#: htdocs/luci-static/resources/view/fchomo/node.js:1387 +#: htdocs/luci-static/resources/view/fchomo/node.js:1395 msgid "-- Please choose --" msgstr "-- 請選擇 --" -#: htdocs/luci-static/resources/fchomo.js:1048 +#: htdocs/luci-static/resources/fchomo.js:1056 msgid "0-RTT reuse." msgstr "0-RTT 重用。" -#: htdocs/luci-static/resources/fchomo.js:1045 -#: htdocs/luci-static/resources/fchomo.js:1049 +#: htdocs/luci-static/resources/fchomo.js:1053 +#: htdocs/luci-static/resources/fchomo.js:1057 msgid "1-RTT only." msgstr "僅限 1-RTT。" @@ -62,44 +74,55 @@ msgstr "" msgid "0 or 1 only." msgstr "僅限 01。" -#: htdocs/luci-static/resources/view/fchomo/server.js:352 -#: htdocs/luci-static/resources/view/fchomo/server.js:367 +#: htdocs/luci-static/resources/view/fchomo/node.js:664 +#: htdocs/luci-static/resources/view/fchomo/node.js:678 +#: htdocs/luci-static/resources/view/fchomo/server.js:353 +#: htdocs/luci-static/resources/view/fchomo/server.js:368 +#: htdocs/luci-static/resources/view/fchomo/server.js:393 msgid "Save your configuration before uploading files!" msgstr "上傳文件前請先保存配置!" -#: htdocs/luci-static/resources/view/fchomo/global.js:590 +#: htdocs/luci-static/resources/view/fchomo/global.js:605 msgid "API" -msgstr "" +msgstr "API" -#: htdocs/luci-static/resources/view/fchomo/global.js:630 +#: htdocs/luci-static/resources/view/fchomo/global.js:555 +msgid "API Client Auth Certificate path" +msgstr "API 客戶端認證憑證路徑" + +#: htdocs/luci-static/resources/view/fchomo/global.js:549 +msgid "API Client Auth type" +msgstr "API 客戶端認證類型" + +#: htdocs/luci-static/resources/view/fchomo/global.js:645 msgid "API DoH service" msgstr "API DoH 伺服器" -#: htdocs/luci-static/resources/view/fchomo/global.js:584 +#: htdocs/luci-static/resources/view/fchomo/global.js:599 msgid "API ECH config" msgstr "API ECH 配置" -#: htdocs/luci-static/resources/view/fchomo/global.js:545 +#: htdocs/luci-static/resources/view/fchomo/global.js:560 msgid "API ECH key" msgstr "API ECH 密鑰" -#: htdocs/luci-static/resources/view/fchomo/global.js:621 +#: htdocs/luci-static/resources/view/fchomo/global.js:636 msgid "API HTTP port" msgstr "API HTTP 連接埠" -#: htdocs/luci-static/resources/view/fchomo/global.js:625 +#: htdocs/luci-static/resources/view/fchomo/global.js:640 msgid "API HTTPS port" msgstr "API HTTPS 連接埠" -#: htdocs/luci-static/resources/view/fchomo/global.js:537 +#: htdocs/luci-static/resources/view/fchomo/global.js:541 msgid "API TLS certificate path" msgstr "API TLS 憑證路徑" -#: htdocs/luci-static/resources/view/fchomo/global.js:541 +#: htdocs/luci-static/resources/view/fchomo/global.js:545 msgid "API TLS private key path" msgstr "API TLS 私鑰" -#: htdocs/luci-static/resources/view/fchomo/global.js:634 +#: htdocs/luci-static/resources/view/fchomo/global.js:649 msgid "API secret" msgstr "API 令牌" @@ -107,8 +130,8 @@ msgstr "API 令牌" msgid "ASN version" msgstr "ASN 版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:711 -#: htdocs/luci-static/resources/view/fchomo/global.js:761 +#: htdocs/luci-static/resources/view/fchomo/global.js:726 +#: htdocs/luci-static/resources/view/fchomo/global.js:776 msgid "Access Control" msgstr "訪問控制" @@ -124,11 +147,11 @@ msgstr "新增 DNS 伺服器" msgid "Add a Node" msgstr "新增 節點" -#: htdocs/luci-static/resources/view/fchomo/node.js:915 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 msgid "Add a provider" msgstr "新增 供應商" -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1322 msgid "Add a proxy chain" msgstr "新增 代理鏈" @@ -152,11 +175,11 @@ msgstr "新增 伺服器" msgid "Add a sub rule" msgstr "新增 子規則" -#: htdocs/luci-static/resources/view/fchomo/node.js:1118 +#: htdocs/luci-static/resources/view/fchomo/node.js:1147 msgid "Add prefix" msgstr "添加前綴" -#: htdocs/luci-static/resources/view/fchomo/node.js:1122 +#: htdocs/luci-static/resources/view/fchomo/node.js:1151 msgid "Add suffix" msgstr "添加後綴" @@ -165,7 +188,7 @@ msgstr "添加後綴" msgid "Address" msgstr "位址" -#: htdocs/luci-static/resources/fchomo.js:1052 +#: htdocs/luci-static/resources/fchomo.js:1060 msgid "" "After the 1-RTT client/server hello, padding randomly 111-1111 bytes with " "100% probability." @@ -176,9 +199,9 @@ msgstr "" msgid "Aging time of NAT map maintained by client.
" msgstr "客戶端維護的 NAT 映射 的老化時間。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:764 -#: htdocs/luci-static/resources/view/fchomo/global.js:827 -#: htdocs/luci-static/resources/view/fchomo/global.js:846 +#: htdocs/luci-static/resources/view/fchomo/global.js:779 +#: htdocs/luci-static/resources/view/fchomo/global.js:842 +#: htdocs/luci-static/resources/view/fchomo/global.js:861 msgid "All allowed" msgstr "允許所有" @@ -186,7 +209,7 @@ msgstr "允許所有" msgid "All ports" msgstr "所有連接埠" -#: htdocs/luci-static/resources/view/fchomo/global.js:617 +#: htdocs/luci-static/resources/view/fchomo/global.js:632 msgid "" "Allow access from private network.
To access the API on a private " "network from a public website, it must be enabled." @@ -219,12 +242,12 @@ msgstr "" msgid "Application version" msgstr "應用版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:789 +#: htdocs/luci-static/resources/view/fchomo/global.js:804 msgid "As the TOP upstream of dnsmasq" msgstr "作為 dnsmasq 的最優先上游" -#: htdocs/luci-static/resources/view/fchomo/global.js:790 -#: htdocs/luci-static/resources/view/fchomo/global.js:797 +#: htdocs/luci-static/resources/view/fchomo/global.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:812 msgid "As the TOP upstream of dnsmasq." msgstr "作為 dnsmasq 的最優先上游。" @@ -273,23 +296,23 @@ msgstr "二進位格式僅支持 domain/ipcidr" msgid "Binary mrs" msgstr "二進位 mrs" -#: htdocs/luci-static/resources/view/fchomo/global.js:725 -#: htdocs/luci-static/resources/view/fchomo/node.js:885 -#: htdocs/luci-static/resources/view/fchomo/node.js:1191 +#: htdocs/luci-static/resources/view/fchomo/global.js:740 +#: htdocs/luci-static/resources/view/fchomo/node.js:914 +#: htdocs/luci-static/resources/view/fchomo/node.js:1220 msgid "Bind interface" msgstr "綁定介面" -#: htdocs/luci-static/resources/view/fchomo/node.js:886 -#: htdocs/luci-static/resources/view/fchomo/node.js:1192 +#: htdocs/luci-static/resources/view/fchomo/node.js:915 +#: htdocs/luci-static/resources/view/fchomo/node.js:1221 msgid "Bind outbound interface.
" msgstr "綁定出站介面。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:726 +#: htdocs/luci-static/resources/view/fchomo/global.js:741 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect.
" msgstr "綁定出站流量至指定介面。留空自動檢測。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:766 +#: htdocs/luci-static/resources/view/fchomo/global.js:781 msgid "Black list" msgstr "黑名單" @@ -305,50 +328,51 @@ msgstr "引導 DNS 伺服器" msgid "Bootstrap DNS server (Node)" msgstr "引導 DNS 伺服器 (節點)" -#: htdocs/luci-static/resources/view/fchomo/global.js:828 +#: htdocs/luci-static/resources/view/fchomo/global.js:843 msgid "Bypass CN" msgstr "繞過 CN 流量" -#: htdocs/luci-static/resources/view/fchomo/global.js:847 +#: htdocs/luci-static/resources/view/fchomo/global.js:862 msgid "Bypass DSCP" msgstr "繞過 DSCP" -#: htdocs/luci-static/resources/view/fchomo/global.js:612 +#: htdocs/luci-static/resources/view/fchomo/global.js:627 msgid "CORS Allow origins" msgstr "CORS 允許的來源" -#: htdocs/luci-static/resources/view/fchomo/global.js:616 +#: htdocs/luci-static/resources/view/fchomo/global.js:631 msgid "CORS Allow private network" msgstr "CORS 允許私有網路" -#: htdocs/luci-static/resources/view/fchomo/global.js:613 +#: htdocs/luci-static/resources/view/fchomo/global.js:628 msgid "CORS allowed origins, * will be used if empty." msgstr "CORS 允許的來源,留空則使用 *。" -#: htdocs/luci-static/resources/fchomo.js:563 +#: htdocs/luci-static/resources/fchomo.js:571 msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/fchomo/node.js:635 +#: htdocs/luci-static/resources/view/fchomo/node.js:636 msgid "Cert fingerprint" msgstr "憑證指紋" -#: htdocs/luci-static/resources/view/fchomo/node.js:636 +#: htdocs/luci-static/resources/view/fchomo/node.js:637 msgid "" "Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." msgstr "憑證指紋。用於實現 SSL憑證固定 並防止 MitM。" -#: htdocs/luci-static/resources/view/fchomo/server.js:344 +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +#: htdocs/luci-static/resources/view/fchomo/server.js:345 msgid "Certificate path" msgstr "憑證路徑" -#: htdocs/luci-static/resources/view/fchomo/node.js:1335 -#: htdocs/luci-static/resources/view/fchomo/node.js:1341 +#: htdocs/luci-static/resources/view/fchomo/node.js:1364 +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 msgid "Chain head" msgstr "鏈頭" -#: htdocs/luci-static/resources/view/fchomo/node.js:1357 -#: htdocs/luci-static/resources/view/fchomo/node.js:1363 +#: htdocs/luci-static/resources/view/fchomo/node.js:1386 +#: htdocs/luci-static/resources/view/fchomo/node.js:1392 msgid "Chain tail" msgstr "鏈尾" @@ -395,12 +419,24 @@ msgstr "" "點擊此處下載" "最新的初始包。" -#: htdocs/luci-static/resources/fchomo.js:1235 +#: htdocs/luci-static/resources/fchomo.js:1243 +#: htdocs/luci-static/resources/view/fchomo/global.js:556 +#: htdocs/luci-static/resources/view/fchomo/node.js:658 +#: htdocs/luci-static/resources/view/fchomo/node.js:672 +#: htdocs/luci-static/resources/view/fchomo/server.js:384 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:22 msgid "Client" msgstr "客戶端" -#: htdocs/luci-static/resources/view/fchomo/node.js:669 +#: htdocs/luci-static/resources/view/fchomo/server.js:383 +msgid "Client Auth Certificate path" +msgstr "客戶端認證憑證路徑" + +#: htdocs/luci-static/resources/view/fchomo/server.js:375 +msgid "Client Auth type" +msgstr "客戶端認證類型" + +#: htdocs/luci-static/resources/view/fchomo/node.js:698 msgid "Client fingerprint" msgstr "客戶端指紋" @@ -417,11 +453,11 @@ msgstr "收集資料中..." msgid "Common ports (bypass P2P traffic)" msgstr "常用連接埠(繞過 P2P 流量)" -#: htdocs/luci-static/resources/fchomo.js:1473 +#: htdocs/luci-static/resources/fchomo.js:1481 msgid "Complete" msgstr "完成" -#: htdocs/luci-static/resources/view/fchomo/node.js:1138 +#: htdocs/luci-static/resources/view/fchomo/node.js:1167 msgid "Configuration Items" msgstr "配置項" @@ -434,19 +470,19 @@ msgstr "擁塞控制器" msgid "Connection check" msgstr "連接檢查" -#: htdocs/luci-static/resources/fchomo.js:1088 +#: htdocs/luci-static/resources/fchomo.js:1096 msgid "Content copied to clipboard!" msgstr "內容已複製到剪貼簿!" #: htdocs/luci-static/resources/view/fchomo/client.js:598 -#: htdocs/luci-static/resources/view/fchomo/node.js:1060 -#: htdocs/luci-static/resources/view/fchomo/node.js:1074 +#: htdocs/luci-static/resources/view/fchomo/node.js:1089 +#: htdocs/luci-static/resources/view/fchomo/node.js:1103 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:328 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:342 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "內容將不會被驗證,請確保輸入正確。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1059 +#: htdocs/luci-static/resources/view/fchomo/node.js:1088 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:327 msgid "Contents" msgstr "內容" @@ -455,7 +491,7 @@ msgstr "內容" msgid "Contents have been saved." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1090 +#: htdocs/luci-static/resources/fchomo.js:1098 msgid "Copy" msgstr "複製" @@ -467,15 +503,15 @@ msgstr "核心版本" msgid "Cron expression" msgstr "Cron 表達式" -#: htdocs/luci-static/resources/view/fchomo/global.js:865 +#: htdocs/luci-static/resources/view/fchomo/global.js:880 msgid "Custom Direct List" msgstr "自訂直連清單" -#: htdocs/luci-static/resources/view/fchomo/node.js:1109 +#: htdocs/luci-static/resources/view/fchomo/node.js:1138 msgid "Custom HTTP header." msgstr "自訂 HTTP header。" -#: htdocs/luci-static/resources/view/fchomo/global.js:883 +#: htdocs/luci-static/resources/view/fchomo/global.js:898 msgid "Custom Proxy List" msgstr "自訂代理清單" @@ -508,7 +544,7 @@ msgstr "DNS 伺服器" msgid "DNS settings" msgstr "DNS 設定" -#: htdocs/luci-static/resources/view/fchomo/global.js:850 +#: htdocs/luci-static/resources/view/fchomo/global.js:865 msgid "DSCP list" msgstr "DSCP 清單" @@ -536,8 +572,8 @@ msgstr "允許通過 WireGuard 轉發的目的位址" msgid "Dial fields" msgstr "撥號欄位" -#: htdocs/luci-static/resources/view/fchomo/node.js:1350 -#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1401 msgid "Different chain head/tail" msgstr "不同的鏈頭/鏈尾" @@ -545,15 +581,15 @@ msgstr "不同的鏈頭/鏈尾" msgid "Direct" msgstr "直連" -#: htdocs/luci-static/resources/view/fchomo/global.js:768 +#: htdocs/luci-static/resources/view/fchomo/global.js:783 msgid "Direct IPv4 IP-s" msgstr "直連 IPv4 位址" -#: htdocs/luci-static/resources/view/fchomo/global.js:771 +#: htdocs/luci-static/resources/view/fchomo/global.js:786 msgid "Direct IPv6 IP-s" msgstr "直連 IPv6 位址" -#: htdocs/luci-static/resources/view/fchomo/global.js:774 +#: htdocs/luci-static/resources/view/fchomo/global.js:789 msgid "Direct MAC-s" msgstr "直連 MAC 位址" @@ -563,11 +599,11 @@ msgstr "直連 MAC 位址" msgid "Disable" msgstr "停用" -#: htdocs/luci-static/resources/view/fchomo/global.js:702 +#: htdocs/luci-static/resources/view/fchomo/global.js:717 msgid "Disable ECN of quic-go" msgstr "停用 quic-go 的 明確壅塞通知(ECN)" -#: htdocs/luci-static/resources/view/fchomo/global.js:699 +#: htdocs/luci-static/resources/view/fchomo/global.js:714 msgid "Disable GSO of quic-go" msgstr "停用 quic-go 的 通用分段卸載(GSO)" @@ -575,7 +611,7 @@ msgstr "停用 quic-go 的 通用分段卸載(GSO)" msgid "Disable ICMP Forwarding" msgstr "禁用 ICMP 轉發" -#: htdocs/luci-static/resources/view/fchomo/node.js:584 +#: htdocs/luci-static/resources/view/fchomo/node.js:585 msgid "Disable SNI" msgstr "停用 SNI" @@ -583,7 +619,7 @@ msgstr "停用 SNI" msgid "Disable UDP" msgstr "停用 UDP" -#: htdocs/luci-static/resources/view/fchomo/global.js:696 +#: htdocs/luci-static/resources/view/fchomo/global.js:711 msgid "Disable safe path check" msgstr "禁用安全路徑檢查" @@ -611,29 +647,29 @@ msgstr "" msgid "Domain" msgstr "網域" -#: htdocs/luci-static/resources/view/fchomo/node.js:585 +#: htdocs/luci-static/resources/view/fchomo/node.js:586 msgid "Donot send server name in ClientHello." msgstr "不要在 ClientHello 中傳送伺服器名稱。" #: htdocs/luci-static/resources/view/fchomo/client.js:1449 -#: htdocs/luci-static/resources/view/fchomo/node.js:649 -#: htdocs/luci-static/resources/view/fchomo/node.js:1178 +#: htdocs/luci-static/resources/view/fchomo/node.js:650 +#: htdocs/luci-static/resources/view/fchomo/node.js:1207 msgid "Donot verifying server certificate." msgstr "不驗證伺服器憑證。" -#: htdocs/luci-static/resources/view/fchomo/node.js:864 +#: htdocs/luci-static/resources/view/fchomo/node.js:893 msgid "Download bandwidth" msgstr "下載頻寬" -#: htdocs/luci-static/resources/view/fchomo/node.js:865 +#: htdocs/luci-static/resources/view/fchomo/node.js:894 msgid "Download bandwidth in Mbps." msgstr "下載頻寬(單位:Mbps)。" -#: htdocs/luci-static/resources/fchomo.js:992 +#: htdocs/luci-static/resources/fchomo.js:1000 msgid "Download failed: %s" msgstr "下載失敗: %s" -#: htdocs/luci-static/resources/fchomo.js:990 +#: htdocs/luci-static/resources/fchomo.js:998 msgid "Download successful." msgstr "下載成功。" @@ -641,12 +677,12 @@ msgstr "下載成功。" msgid "Dual stack" msgstr "雙棧" -#: htdocs/luci-static/resources/view/fchomo/node.js:662 -#: htdocs/luci-static/resources/view/fchomo/server.js:415 +#: htdocs/luci-static/resources/view/fchomo/node.js:691 +#: htdocs/luci-static/resources/view/fchomo/server.js:441 msgid "ECH config" msgstr "ECH 配置" -#: htdocs/luci-static/resources/view/fchomo/server.js:374 +#: htdocs/luci-static/resources/view/fchomo/server.js:400 msgid "ECH key" msgstr "ECH 密鑰" @@ -662,11 +698,11 @@ msgstr "" msgid "ETag support" msgstr "ETag 支援" -#: htdocs/luci-static/resources/view/fchomo/node.js:777 +#: htdocs/luci-static/resources/view/fchomo/node.js:806 msgid "Early Data first packet length limit." msgstr "前置數據長度閾值" -#: htdocs/luci-static/resources/view/fchomo/node.js:783 +#: htdocs/luci-static/resources/view/fchomo/node.js:812 msgid "Early Data header name" msgstr "前置數據標頭" @@ -678,12 +714,12 @@ msgstr "編輯節點" msgid "Edit ruleset" msgstr "編輯規則集" -#: htdocs/luci-static/resources/view/fchomo/node.js:1057 +#: htdocs/luci-static/resources/view/fchomo/node.js:1086 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:325 msgid "Editer" msgstr "編輯器" -#: htdocs/luci-static/resources/fchomo.js:1039 +#: htdocs/luci-static/resources/fchomo.js:1047 msgid "Eliminate encryption header characteristics" msgstr "消除加密頭特徵" @@ -694,11 +730,11 @@ msgstr "消除加密頭特徵" #: htdocs/luci-static/resources/view/fchomo/client.js:1365 #: htdocs/luci-static/resources/view/fchomo/client.js:1587 #: htdocs/luci-static/resources/view/fchomo/global.js:401 -#: htdocs/luci-static/resources/view/fchomo/global.js:671 +#: htdocs/luci-static/resources/view/fchomo/global.js:686 #: htdocs/luci-static/resources/view/fchomo/node.js:102 -#: htdocs/luci-static/resources/view/fchomo/node.js:1030 -#: htdocs/luci-static/resources/view/fchomo/node.js:1214 -#: htdocs/luci-static/resources/view/fchomo/node.js:1303 +#: htdocs/luci-static/resources/view/fchomo/node.js:1059 +#: htdocs/luci-static/resources/view/fchomo/node.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1332 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:253 #: htdocs/luci-static/resources/view/fchomo/server.js:50 #: htdocs/luci-static/resources/view/fchomo/server.js:77 @@ -718,7 +754,7 @@ msgstr "" msgid "Enable 0-RTT handshake" msgstr "啟用 0-RTT 握手" -#: htdocs/luci-static/resources/view/fchomo/global.js:705 +#: htdocs/luci-static/resources/view/fchomo/global.js:720 msgid "" "Enable IP4P " "conversion for outbound connections" @@ -726,32 +762,32 @@ msgstr "" "為出站連線啟用 IP4P 轉換" -#: htdocs/luci-static/resources/view/fchomo/node.js:656 +#: htdocs/luci-static/resources/view/fchomo/node.js:685 msgid "Enable ECH" msgstr "啟用 ECH" -#: htdocs/luci-static/resources/view/fchomo/node.js:852 +#: htdocs/luci-static/resources/view/fchomo/node.js:881 msgid "Enable TCP Brutal" msgstr "啟用 TCP Brutal" -#: htdocs/luci-static/resources/view/fchomo/node.js:853 +#: htdocs/luci-static/resources/view/fchomo/node.js:882 msgid "Enable TCP Brutal congestion control algorithm" msgstr "啟用 TCP Brutal 擁塞控制演算法。" -#: htdocs/luci-static/resources/view/fchomo/node.js:841 +#: htdocs/luci-static/resources/view/fchomo/node.js:870 msgid "Enable multiplexing only for TCP." msgstr "僅為 TCP 啟用多路復用。" -#: htdocs/luci-static/resources/view/fchomo/node.js:835 +#: htdocs/luci-static/resources/view/fchomo/node.js:864 msgid "Enable padding" msgstr "啟用填充" -#: htdocs/luci-static/resources/view/fchomo/node.js:846 +#: htdocs/luci-static/resources/view/fchomo/node.js:875 msgid "Enable statistic" msgstr "啟用統計" -#: htdocs/luci-static/resources/view/fchomo/node.js:547 -#: htdocs/luci-static/resources/view/fchomo/node.js:1160 +#: htdocs/luci-static/resources/view/fchomo/node.js:548 +#: htdocs/luci-static/resources/view/fchomo/node.js:1189 msgid "" "Enable the SUoT protocol, requires server support. Conflict with Multiplex." msgstr "啟用 SUoT 協議,需要服務端支援。與多路復用衝突。" @@ -763,7 +799,7 @@ msgid "" "connections, losing the ability to masquerade with HTTP/3." msgstr "啟用混淆將使伺服器與標準的 QUIC 連線不相容,失去 HTTP/3 偽裝的能力。" -#: htdocs/luci-static/resources/fchomo.js:1200 +#: htdocs/luci-static/resources/fchomo.js:1208 msgid "Encryption method" msgstr "加密方法" @@ -786,7 +822,7 @@ msgid "" "if empty." msgstr "超過此限制將會觸發強制健康檢查。留空則使用 5。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1272 +#: htdocs/luci-static/resources/view/fchomo/node.js:1301 msgid "Exclude matched node types." msgstr "排除匹配的節點類型。" @@ -799,7 +835,7 @@ msgstr "" "rel=\"noreferrer noopener\">此處。" #: htdocs/luci-static/resources/view/fchomo/client.js:1043 -#: htdocs/luci-static/resources/view/fchomo/node.js:1265 +#: htdocs/luci-static/resources/view/fchomo/node.js:1294 msgid "Exclude nodes that meet keywords or regexps." msgstr "排除匹配關鍵字或表達式的節點。" @@ -808,59 +844,60 @@ msgid "Expand/Collapse result" msgstr "展開/收起 結果" #: htdocs/luci-static/resources/view/fchomo/client.js:1003 -#: htdocs/luci-static/resources/view/fchomo/node.js:1250 +#: htdocs/luci-static/resources/view/fchomo/node.js:1279 msgid "Expected HTTP code. 204 will be used if empty." msgstr "預期的 HTTP code。留空則使用 204。" #: htdocs/luci-static/resources/view/fchomo/client.js:1005 -#: htdocs/luci-static/resources/view/fchomo/node.js:1252 +#: htdocs/luci-static/resources/view/fchomo/node.js:1281 msgid "Expected status" msgstr "預期狀態" -#: htdocs/luci-static/resources/fchomo.js:342 -#: htdocs/luci-static/resources/fchomo.js:345 -#: htdocs/luci-static/resources/fchomo.js:348 -#: htdocs/luci-static/resources/fchomo.js:1228 -#: htdocs/luci-static/resources/fchomo.js:1256 -#: htdocs/luci-static/resources/fchomo.js:1362 -#: htdocs/luci-static/resources/fchomo.js:1512 +#: htdocs/luci-static/resources/fchomo.js:350 +#: htdocs/luci-static/resources/fchomo.js:353 +#: htdocs/luci-static/resources/fchomo.js:356 +#: htdocs/luci-static/resources/fchomo.js:1236 +#: htdocs/luci-static/resources/fchomo.js:1264 +#: htdocs/luci-static/resources/fchomo.js:1370 #: htdocs/luci-static/resources/fchomo.js:1520 #: htdocs/luci-static/resources/fchomo.js:1528 -#: htdocs/luci-static/resources/fchomo.js:1551 -#: htdocs/luci-static/resources/fchomo.js:1554 -#: htdocs/luci-static/resources/fchomo.js:1561 -#: htdocs/luci-static/resources/fchomo.js:1579 -#: htdocs/luci-static/resources/fchomo.js:1582 -#: htdocs/luci-static/resources/fchomo.js:1592 -#: htdocs/luci-static/resources/fchomo.js:1605 -#: htdocs/luci-static/resources/fchomo.js:1607 -#: htdocs/luci-static/resources/fchomo.js:1620 -#: htdocs/luci-static/resources/fchomo.js:1629 -#: htdocs/luci-static/resources/fchomo.js:1636 -#: htdocs/luci-static/resources/fchomo.js:1645 -#: htdocs/luci-static/resources/fchomo.js:1657 -#: htdocs/luci-static/resources/fchomo.js:1660 -#: htdocs/luci-static/resources/fchomo.js:1670 +#: htdocs/luci-static/resources/fchomo.js:1536 +#: htdocs/luci-static/resources/fchomo.js:1559 +#: htdocs/luci-static/resources/fchomo.js:1562 +#: htdocs/luci-static/resources/fchomo.js:1569 +#: htdocs/luci-static/resources/fchomo.js:1587 +#: htdocs/luci-static/resources/fchomo.js:1590 +#: htdocs/luci-static/resources/fchomo.js:1601 +#: htdocs/luci-static/resources/fchomo.js:1610 +#: htdocs/luci-static/resources/fchomo.js:1623 +#: htdocs/luci-static/resources/fchomo.js:1625 +#: htdocs/luci-static/resources/fchomo.js:1638 +#: htdocs/luci-static/resources/fchomo.js:1647 +#: htdocs/luci-static/resources/fchomo.js:1654 +#: htdocs/luci-static/resources/fchomo.js:1663 +#: htdocs/luci-static/resources/fchomo.js:1675 +#: htdocs/luci-static/resources/fchomo.js:1678 +#: htdocs/luci-static/resources/fchomo.js:1688 #: htdocs/luci-static/resources/view/fchomo/client.js:66 #: htdocs/luci-static/resources/view/fchomo/client.js:900 #: htdocs/luci-static/resources/view/fchomo/client.js:1380 -#: htdocs/luci-static/resources/view/fchomo/global.js:856 -#: htdocs/luci-static/resources/view/fchomo/node.js:641 -#: htdocs/luci-static/resources/view/fchomo/node.js:1350 -#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/global.js:871 +#: htdocs/luci-static/resources/view/fchomo/node.js:642 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1401 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:280 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:294 msgid "Expecting: %s" msgstr "請輸入:%s" -#: htdocs/luci-static/resources/view/fchomo/node.js:718 -#: htdocs/luci-static/resources/view/fchomo/node.js:725 -#: htdocs/luci-static/resources/view/fchomo/server.js:482 -#: htdocs/luci-static/resources/view/fchomo/server.js:489 +#: htdocs/luci-static/resources/view/fchomo/node.js:747 +#: htdocs/luci-static/resources/view/fchomo/node.js:754 +#: htdocs/luci-static/resources/view/fchomo/server.js:508 +#: htdocs/luci-static/resources/view/fchomo/server.js:515 msgid "Expecting: only support %s." msgstr "請輸入:僅支援 %s." -#: htdocs/luci-static/resources/view/fchomo/global.js:690 +#: htdocs/luci-static/resources/view/fchomo/global.js:705 msgid "Experimental" msgstr "實驗性" @@ -875,19 +912,19 @@ msgstr "實驗性" msgid "Factor" msgstr "條件" -#: htdocs/luci-static/resources/fchomo.js:1431 +#: htdocs/luci-static/resources/fchomo.js:1439 msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s" msgstr "無法執行 \"/etc/init.d/fchomo %s %s\" 原因: %s" -#: htdocs/luci-static/resources/fchomo.js:1390 +#: htdocs/luci-static/resources/fchomo.js:1398 msgid "Failed to generate %s, error: %s." msgstr "生成 %s 失敗,錯誤:%s。" -#: htdocs/luci-static/resources/fchomo.js:1770 +#: htdocs/luci-static/resources/fchomo.js:1788 msgid "Failed to upload %s, error: %s." msgstr "上傳 %s 失敗,錯誤:%s。" -#: htdocs/luci-static/resources/fchomo.js:1789 +#: htdocs/luci-static/resources/fchomo.js:1807 msgid "Failed to upload, error: %s." msgstr "上傳失敗,錯誤:%s。" @@ -906,7 +943,7 @@ msgid "Fallback filter" msgstr "後備過濾器" #: htdocs/luci-static/resources/view/fchomo/client.js:1038 -#: htdocs/luci-static/resources/view/fchomo/node.js:1259 +#: htdocs/luci-static/resources/view/fchomo/node.js:1288 msgid "Filter nodes that meet keywords or regexps." msgstr "過濾匹配關鍵字或表達式的節點。" @@ -943,8 +980,8 @@ msgstr "" "noopener\">%s." #: htdocs/luci-static/resources/view/fchomo/client.js:1004 -#: htdocs/luci-static/resources/view/fchomo/node.js:1128 -#: htdocs/luci-static/resources/view/fchomo/node.js:1251 +#: htdocs/luci-static/resources/view/fchomo/node.js:1157 +#: htdocs/luci-static/resources/view/fchomo/node.js:1280 msgid "" "For format see %s." @@ -956,7 +993,7 @@ msgstr "" msgid "Force DNS remote resolution." msgstr "強制 DNS 遠端解析。" -#: htdocs/luci-static/resources/view/fchomo/global.js:650 +#: htdocs/luci-static/resources/view/fchomo/global.js:665 msgid "Forced sniffing domain" msgstr "強制嗅探網域" @@ -971,7 +1008,7 @@ msgstr "格式" msgid "FullCombo Shark!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:744 +#: htdocs/luci-static/resources/view/fchomo/node.js:773 msgid "GET" msgstr "" @@ -985,7 +1022,7 @@ msgstr "常規" #: htdocs/luci-static/resources/view/fchomo/client.js:891 #: htdocs/luci-static/resources/view/fchomo/node.js:90 -#: htdocs/luci-static/resources/view/fchomo/node.js:1020 +#: htdocs/luci-static/resources/view/fchomo/node.js:1049 #: htdocs/luci-static/resources/view/fchomo/server.js:64 msgid "General fields" msgstr "常規欄位" @@ -994,13 +1031,13 @@ msgstr "常規欄位" msgid "General settings" msgstr "常規設定" -#: htdocs/luci-static/resources/fchomo.js:443 -#: htdocs/luci-static/resources/fchomo.js:445 -#: htdocs/luci-static/resources/fchomo.js:459 -#: htdocs/luci-static/resources/fchomo.js:461 -#: htdocs/luci-static/resources/fchomo.js:1331 -#: htdocs/luci-static/resources/view/fchomo/global.js:578 -#: htdocs/luci-static/resources/view/fchomo/server.js:407 +#: htdocs/luci-static/resources/fchomo.js:451 +#: htdocs/luci-static/resources/fchomo.js:453 +#: htdocs/luci-static/resources/fchomo.js:467 +#: htdocs/luci-static/resources/fchomo.js:469 +#: htdocs/luci-static/resources/fchomo.js:1339 +#: htdocs/luci-static/resources/view/fchomo/global.js:593 +#: htdocs/luci-static/resources/view/fchomo/server.js:433 msgid "Generate" msgstr "生成" @@ -1043,7 +1080,7 @@ msgstr "全域" msgid "Global Authentication" msgstr "全域認證" -#: htdocs/luci-static/resources/view/fchomo/global.js:531 +#: htdocs/luci-static/resources/view/fchomo/global.js:535 msgid "Global client fingerprint" msgstr "全域客戶端指紋" @@ -1069,20 +1106,20 @@ msgstr "組" #: htdocs/luci-static/resources/fchomo.js:124 #: htdocs/luci-static/resources/fchomo.js:154 -#: htdocs/luci-static/resources/view/fchomo/node.js:500 -#: htdocs/luci-static/resources/view/fchomo/node.js:707 -#: htdocs/luci-static/resources/view/fchomo/node.js:718 -#: htdocs/luci-static/resources/view/fchomo/server.js:482 +#: htdocs/luci-static/resources/view/fchomo/node.js:501 +#: htdocs/luci-static/resources/view/fchomo/node.js:736 +#: htdocs/luci-static/resources/view/fchomo/node.js:747 +#: htdocs/luci-static/resources/view/fchomo/server.js:508 msgid "HTTP" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:135 -#: htdocs/luci-static/resources/view/fchomo/node.js:766 -#: htdocs/luci-static/resources/view/fchomo/node.js:1108 +#: htdocs/luci-static/resources/view/fchomo/node.js:795 +#: htdocs/luci-static/resources/view/fchomo/node.js:1137 msgid "HTTP header" msgstr "HTTP header" -#: htdocs/luci-static/resources/view/fchomo/node.js:743 +#: htdocs/luci-static/resources/view/fchomo/node.js:772 msgid "HTTP request method" msgstr "HTTP 請求方法" @@ -1096,13 +1133,13 @@ msgid "" "returned if empty." msgstr "身份驗證失敗時的 HTTP3 伺服器回應。預設回傳 404 頁面。" -#: htdocs/luci-static/resources/view/fchomo/node.js:708 -#: htdocs/luci-static/resources/view/fchomo/node.js:719 -#: htdocs/luci-static/resources/view/fchomo/server.js:483 +#: htdocs/luci-static/resources/view/fchomo/node.js:737 +#: htdocs/luci-static/resources/view/fchomo/node.js:748 +#: htdocs/luci-static/resources/view/fchomo/server.js:509 msgid "HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:831 +#: htdocs/luci-static/resources/view/fchomo/global.js:846 msgid "Handle domain" msgstr "處理網域" @@ -1110,32 +1147,32 @@ msgstr "處理網域" msgid "Handshake mode" msgstr "握手模式" -#: htdocs/luci-static/resources/view/fchomo/server.js:272 +#: htdocs/luci-static/resources/view/fchomo/server.js:273 msgid "Handshake target that supports TLS 1.3" msgstr "握手目標 (支援 TLS 1.3)" #: htdocs/luci-static/resources/view/fchomo/client.js:973 -#: htdocs/luci-static/resources/view/fchomo/node.js:1219 +#: htdocs/luci-static/resources/view/fchomo/node.js:1248 msgid "Health check URL" msgstr "健康檢查 URL" #: htdocs/luci-static/resources/view/fchomo/client.js:1002 -#: htdocs/luci-static/resources/view/fchomo/node.js:1249 +#: htdocs/luci-static/resources/view/fchomo/node.js:1278 msgid "Health check expected status" msgstr "健康檢查预期状态" #: htdocs/luci-static/resources/view/fchomo/client.js:982 -#: htdocs/luci-static/resources/view/fchomo/node.js:1229 +#: htdocs/luci-static/resources/view/fchomo/node.js:1258 msgid "Health check interval" msgstr "健康檢查间隔" #: htdocs/luci-static/resources/view/fchomo/client.js:989 -#: htdocs/luci-static/resources/view/fchomo/node.js:1236 +#: htdocs/luci-static/resources/view/fchomo/node.js:1265 msgid "Health check timeout" msgstr "健康檢查超时" #: htdocs/luci-static/resources/view/fchomo/client.js:893 -#: htdocs/luci-static/resources/view/fchomo/node.js:1022 +#: htdocs/luci-static/resources/view/fchomo/node.js:1051 msgid "Health fields" msgstr "健康欄位" @@ -1147,7 +1184,7 @@ msgstr "心跳間隔" msgid "Hidden" msgstr "隱藏" -#: htdocs/luci-static/resources/view/fchomo/node.js:506 +#: htdocs/luci-static/resources/view/fchomo/node.js:507 msgid "Host that supports TLS 1.3" msgstr "主機名稱 (支援 TLS 1.3)" @@ -1182,8 +1219,8 @@ msgstr "" msgid "IP override" msgstr "IP 覆寫" -#: htdocs/luci-static/resources/view/fchomo/node.js:897 -#: htdocs/luci-static/resources/view/fchomo/node.js:1205 +#: htdocs/luci-static/resources/view/fchomo/node.js:926 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 msgid "IP version" msgstr "IP 版本" @@ -1216,7 +1253,7 @@ msgstr "閒置會話逾時" msgid "Idle timeout" msgstr "閒置逾時" -#: htdocs/luci-static/resources/fchomo.js:1554 +#: htdocs/luci-static/resources/fchomo.js:1562 msgid "If All ports is selected, uncheck others" msgstr "如果選擇了“所有連接埠”,則取消選取“其他”" @@ -1228,7 +1265,7 @@ msgstr "如果選擇了“封鎖”,則取消選取“其他”" msgid "Ignore client bandwidth" msgstr "忽略客戶端頻寬" -#: htdocs/luci-static/resources/fchomo.js:568 +#: htdocs/luci-static/resources/fchomo.js:576 msgid "Import" msgstr "導入" @@ -1242,8 +1279,8 @@ msgstr "導入" #: htdocs/luci-static/resources/view/fchomo/client.js:1354 #: htdocs/luci-static/resources/view/fchomo/client.js:1551 #: htdocs/luci-static/resources/view/fchomo/client.js:1576 -#: htdocs/luci-static/resources/view/fchomo/node.js:922 -#: htdocs/luci-static/resources/view/fchomo/node.js:1008 +#: htdocs/luci-static/resources/view/fchomo/node.js:951 +#: htdocs/luci-static/resources/view/fchomo/node.js:1037 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:142 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:230 msgid "Import mihomo config" @@ -1257,14 +1294,14 @@ msgstr "導入規則集連結" #: htdocs/luci-static/resources/view/fchomo/node.js:148 #: htdocs/luci-static/resources/view/fchomo/node.js:154 -#: htdocs/luci-static/resources/view/fchomo/node.js:1166 -#: htdocs/luci-static/resources/view/fchomo/node.js:1172 +#: htdocs/luci-static/resources/view/fchomo/node.js:1195 +#: htdocs/luci-static/resources/view/fchomo/node.js:1201 #: htdocs/luci-static/resources/view/fchomo/server.js:124 #: htdocs/luci-static/resources/view/fchomo/server.js:130 msgid "In Mbps." msgstr "單位為 Mbps。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1086 +#: htdocs/luci-static/resources/view/fchomo/node.js:1115 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:354 msgid "In bytes. %s will be used if empty." msgstr "單位為位元組。留空則使用 %s。" @@ -1276,7 +1313,7 @@ msgstr "單位為毫秒。" #: htdocs/luci-static/resources/view/fchomo/client.js:990 #: htdocs/luci-static/resources/view/fchomo/client.js:1019 -#: htdocs/luci-static/resources/view/fchomo/node.js:1237 +#: htdocs/luci-static/resources/view/fchomo/node.js:1266 msgid "In millisecond. %s will be used if empty." msgstr "單位為毫秒。留空則使用 %s。" @@ -1291,18 +1328,19 @@ msgstr "單位為秒。" #: htdocs/luci-static/resources/view/fchomo/global.js:425 #: htdocs/luci-static/resources/view/fchomo/global.js:430 #: htdocs/luci-static/resources/view/fchomo/global.js:515 -#: htdocs/luci-static/resources/view/fchomo/node.js:1092 -#: htdocs/luci-static/resources/view/fchomo/node.js:1230 +#: htdocs/luci-static/resources/view/fchomo/node.js:1121 +#: htdocs/luci-static/resources/view/fchomo/node.js:1259 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:360 msgid "In seconds. %s will be used if empty." msgstr "單位為秒。留空則使用 %s。" -#: htdocs/luci-static/resources/fchomo.js:1246 +#: htdocs/luci-static/resources/fchomo.js:1254 msgid "" "In the order of one Padding-Length and one Padding-" "Interval, infinite concatenation." msgstr "" -"依照一個 Padding-Length 一個 Padding-Interval 的順序,無限連接。" +"依照一個 Padding-Length 一個 Padding-Interval 的順" +"序,無限連接。" #: htdocs/luci-static/resources/view/fchomo/global.js:449 msgid "Inbound" @@ -1336,12 +1374,12 @@ msgstr "引入所有代理節點。" msgid "Info" msgstr "訊息" -#: htdocs/luci-static/resources/view/fchomo/node.js:1037 +#: htdocs/luci-static/resources/view/fchomo/node.js:1066 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:268 msgid "Inline" msgstr "內嵌" -#: htdocs/luci-static/resources/view/fchomo/global.js:718 +#: htdocs/luci-static/resources/view/fchomo/global.js:733 msgid "Interface Control" msgstr "介面控制" @@ -1349,11 +1387,12 @@ msgstr "介面控制" msgid "Keep default" msgstr "保持預設" -#: htdocs/luci-static/resources/view/fchomo/server.js:359 +#: htdocs/luci-static/resources/view/fchomo/node.js:671 +#: htdocs/luci-static/resources/view/fchomo/server.js:360 msgid "Key path" msgstr "憑證路徑" -#: htdocs/luci-static/resources/fchomo.js:1266 +#: htdocs/luci-static/resources/fchomo.js:1274 msgid "Keypairs" msgstr "密鑰對" @@ -1363,15 +1402,15 @@ msgstr "密鑰對" #: htdocs/luci-static/resources/view/fchomo/client.js:1360 #: htdocs/luci-static/resources/view/fchomo/client.js:1582 #: htdocs/luci-static/resources/view/fchomo/node.js:97 -#: htdocs/luci-static/resources/view/fchomo/node.js:1025 -#: htdocs/luci-static/resources/view/fchomo/node.js:1298 +#: htdocs/luci-static/resources/view/fchomo/node.js:1054 +#: htdocs/luci-static/resources/view/fchomo/node.js:1327 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:248 #: htdocs/luci-static/resources/view/fchomo/server.js:72 msgid "Label" msgstr "標籤" #: htdocs/luci-static/resources/view/fchomo/client.js:996 -#: htdocs/luci-static/resources/view/fchomo/node.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1272 msgid "Lazy" msgstr "懶惰狀態" @@ -1387,8 +1426,8 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "有時效能較好。" -#: htdocs/luci-static/resources/view/fchomo/node.js:597 -#: htdocs/luci-static/resources/view/fchomo/server.js:340 +#: htdocs/luci-static/resources/view/fchomo/node.js:598 +#: htdocs/luci-static/resources/view/fchomo/server.js:341 msgid "List of supported application level protocols, in order of preference." msgstr "支援的應用層協議協商清單,依序排列。" @@ -1400,7 +1439,7 @@ msgstr "監聽位址" msgid "Listen fields" msgstr "監聽欄位" -#: htdocs/luci-static/resources/view/fchomo/global.js:720 +#: htdocs/luci-static/resources/view/fchomo/global.js:735 msgid "Listen interfaces" msgstr "監聽介面" @@ -1417,7 +1456,7 @@ msgstr "監聽埠" msgid "Load balance" msgstr "負載均衡" -#: htdocs/luci-static/resources/view/fchomo/node.js:1035 +#: htdocs/luci-static/resources/view/fchomo/node.js:1064 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:266 msgid "Local" msgstr "本地" @@ -1446,7 +1485,7 @@ msgstr "日誌為空。" msgid "Log level" msgstr "日誌等級" -#: htdocs/luci-static/resources/fchomo.js:342 +#: htdocs/luci-static/resources/fchomo.js:350 msgid "Lowercase only" msgstr "僅限小寫" @@ -1487,7 +1526,7 @@ msgstr "匹配回應通過 ipcidr
" msgid "Match rule set." msgstr "匹配規則集。" -#: htdocs/luci-static/resources/view/fchomo/node.js:776 +#: htdocs/luci-static/resources/view/fchomo/node.js:805 msgid "Max Early Data" msgstr "前置數據最大值" @@ -1514,12 +1553,12 @@ msgstr "限制打開流的數量" msgid "Max upload speed" msgstr "最大上傳速度" -#: htdocs/luci-static/resources/view/fchomo/node.js:813 -#: htdocs/luci-static/resources/view/fchomo/node.js:829 +#: htdocs/luci-static/resources/view/fchomo/node.js:842 +#: htdocs/luci-static/resources/view/fchomo/node.js:858 msgid "Maximum connections" msgstr "最大連線數" -#: htdocs/luci-static/resources/view/fchomo/node.js:827 +#: htdocs/luci-static/resources/view/fchomo/node.js:856 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." @@ -1527,7 +1566,7 @@ msgstr "" "在開啟新連線之前,連線中的最大多路復用流數量。
%s 和 " "%s 衝突。" -#: htdocs/luci-static/resources/view/fchomo/node.js:826 +#: htdocs/luci-static/resources/view/fchomo/node.js:855 msgid "Maximum streams" msgstr "最大流數量" @@ -1551,13 +1590,13 @@ msgstr "Mihomo 服務端" msgid "Min of idle sessions to keep" msgstr "要保留的最少閒置會話數" -#: htdocs/luci-static/resources/view/fchomo/node.js:820 +#: htdocs/luci-static/resources/view/fchomo/node.js:849 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "在開啟新連線之前,連線中的最小多路復用流數量。" -#: htdocs/luci-static/resources/view/fchomo/node.js:819 -#: htdocs/luci-static/resources/view/fchomo/node.js:829 +#: htdocs/luci-static/resources/view/fchomo/node.js:848 +#: htdocs/luci-static/resources/view/fchomo/node.js:858 msgid "Minimum streams" msgstr "最小流數量" @@ -1574,7 +1613,7 @@ msgstr "混合 系統 TCP 堆栈和 gVisor UDP 堆栈 msgid "Mixed port" msgstr "混合連接埠" -#: htdocs/luci-static/resources/view/fchomo/node.js:799 +#: htdocs/luci-static/resources/view/fchomo/node.js:828 msgid "Multiplex" msgstr "多路復用" @@ -1592,7 +1631,7 @@ msgstr "多路復用" msgid "NOT" msgstr "NOT" -#: htdocs/luci-static/resources/view/fchomo/node.js:1098 +#: htdocs/luci-static/resources/view/fchomo/node.js:1127 msgid "Name of the Proxy group to download provider." msgstr "用於下載供應商訂閱的代理組名稱。" @@ -1604,7 +1643,7 @@ msgstr "用於下載規則集訂閱的代理組名稱。" msgid "Native" msgstr "原生" -#: htdocs/luci-static/resources/fchomo.js:1038 +#: htdocs/luci-static/resources/fchomo.js:1046 msgid "Native appearance" msgstr "原生外觀" @@ -1617,11 +1656,11 @@ msgid "No add'l params" msgstr "無附加參數" #: htdocs/luci-static/resources/view/fchomo/client.js:997 -#: htdocs/luci-static/resources/view/fchomo/node.js:1244 +#: htdocs/luci-static/resources/view/fchomo/node.js:1273 msgid "No testing is performed when this provider node is not in use." msgstr "當此供應商的節點未使用時,不執行任何測試。" -#: htdocs/luci-static/resources/fchomo.js:519 +#: htdocs/luci-static/resources/fchomo.js:527 msgid "No valid %s found." msgstr "未找到有效的%s。" @@ -1636,17 +1675,17 @@ msgid "Node" msgstr "節點" #: htdocs/luci-static/resources/view/fchomo/client.js:1042 -#: htdocs/luci-static/resources/view/fchomo/node.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1293 msgid "Node exclude filter" msgstr "排除節點" #: htdocs/luci-static/resources/view/fchomo/client.js:1047 -#: htdocs/luci-static/resources/view/fchomo/node.js:1271 +#: htdocs/luci-static/resources/view/fchomo/node.js:1300 msgid "Node exclude type" msgstr "排除節點類型" #: htdocs/luci-static/resources/view/fchomo/client.js:1037 -#: htdocs/luci-static/resources/view/fchomo/node.js:1258 +#: htdocs/luci-static/resources/view/fchomo/node.js:1287 msgid "Node filter" msgstr "過濾節點" @@ -1654,19 +1693,19 @@ msgstr "過濾節點" msgid "Node switch tolerance" msgstr "節點切換容差" -#: htdocs/luci-static/resources/fchomo.js:313 +#: htdocs/luci-static/resources/fchomo.js:321 msgid "None" msgstr "無" -#: htdocs/luci-static/resources/view/fchomo/global.js:604 +#: htdocs/luci-static/resources/view/fchomo/global.js:619 msgid "Not Installed" msgstr "未安裝" -#: htdocs/luci-static/resources/fchomo.js:950 +#: htdocs/luci-static/resources/fchomo.js:958 msgid "Not Running" msgstr "未在運作" -#: htdocs/luci-static/resources/view/fchomo/node.js:499 +#: htdocs/luci-static/resources/view/fchomo/node.js:500 msgid "Obfs Mode" msgstr "Obfs 模式" @@ -1680,15 +1719,15 @@ msgstr "混淆密碼" msgid "Obfuscate type" msgstr "混淆類型" -#: htdocs/luci-static/resources/view/fchomo/global.js:856 +#: htdocs/luci-static/resources/view/fchomo/global.js:871 msgid "One or more numbers in the range 0-63 separated by commas" msgstr "0-63 範圍內的一個或多個數字,以逗號分隔" -#: htdocs/luci-static/resources/view/fchomo/global.js:721 +#: htdocs/luci-static/resources/view/fchomo/global.js:736 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "只處理來自指定介面的流量。留空表示全部。" -#: htdocs/luci-static/resources/fchomo.js:944 +#: htdocs/luci-static/resources/fchomo.js:952 msgid "Open Dashboard" msgstr "打開面板" @@ -1696,13 +1735,13 @@ msgstr "打開面板" msgid "Operation mode" msgstr "運作模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:646 -#: htdocs/luci-static/resources/view/fchomo/global.js:684 +#: htdocs/luci-static/resources/view/fchomo/global.js:661 +#: htdocs/luci-static/resources/view/fchomo/global.js:699 msgid "Override destination" msgstr "覆蓋目標位址" #: htdocs/luci-static/resources/view/fchomo/client.js:892 -#: htdocs/luci-static/resources/view/fchomo/node.js:1021 +#: htdocs/luci-static/resources/view/fchomo/node.js:1050 msgid "Override fields" msgstr "覆蓋欄位" @@ -1714,7 +1753,7 @@ msgstr "覆蓋 DNS 回應的伺服器的 IP 位址。" msgid "Override the Proxy group of DNS server." msgstr "覆蓋 DNS 伺服器所使用的代理組。" -#: htdocs/luci-static/resources/view/fchomo/global.js:647 +#: htdocs/luci-static/resources/view/fchomo/global.js:662 msgid "Override the connection destination address with the sniffed domain." msgstr "使用嗅探到的網域覆寫連線目標。" @@ -1726,11 +1765,11 @@ msgstr "覆蓋原始請求中已有的 ECS。" msgid "Overview" msgstr "概覽" -#: htdocs/luci-static/resources/view/fchomo/node.js:745 +#: htdocs/luci-static/resources/view/fchomo/node.js:774 msgid "POST" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:746 +#: htdocs/luci-static/resources/view/fchomo/node.js:775 msgid "PUT" msgstr "" @@ -1742,21 +1781,21 @@ msgstr "數據包編碼" msgid "Padding scheme" msgstr "填充方案" -#: htdocs/luci-static/resources/fchomo.js:1244 +#: htdocs/luci-static/resources/fchomo.js:1252 msgid "Paddings" msgstr "填充 (Paddings)" #: htdocs/luci-static/resources/view/fchomo/node.js:129 #: htdocs/luci-static/resources/view/fchomo/node.js:202 -#: htdocs/luci-static/resources/view/fchomo/node.js:514 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 #: htdocs/luci-static/resources/view/fchomo/server.js:114 #: htdocs/luci-static/resources/view/fchomo/server.js:170 -#: htdocs/luci-static/resources/view/fchomo/server.js:279 +#: htdocs/luci-static/resources/view/fchomo/server.js:280 msgid "Password" msgstr "密碼" -#: htdocs/luci-static/resources/fchomo.js:1183 -#: htdocs/luci-static/resources/view/fchomo/node.js:1073 +#: htdocs/luci-static/resources/fchomo.js:1191 +#: htdocs/luci-static/resources/view/fchomo/node.js:1102 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:341 msgid "Payload" msgstr "Payload" @@ -1775,7 +1814,7 @@ msgstr "效能可能會略有下降,建議僅在需要時開啟。" msgid "Plain text" msgstr "純文本 text" -#: htdocs/luci-static/resources/view/fchomo/global.js:833 +#: htdocs/luci-static/resources/view/fchomo/global.js:848 msgid "" "Please ensure that the DNS query of the domains to be processed in the DNS " "policy
are send via DIRECT/Proxy Node in the same semantics as Routing " @@ -1790,8 +1829,8 @@ msgid "" "standards." msgstr "連結格式標準請參考 %s。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1058 -#: htdocs/luci-static/resources/view/fchomo/node.js:1072 +#: htdocs/luci-static/resources/view/fchomo/node.js:1087 +#: htdocs/luci-static/resources/view/fchomo/node.js:1101 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:326 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:340 msgid "" @@ -1805,7 +1844,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1193 #: htdocs/luci-static/resources/view/fchomo/client.js:1315 #: htdocs/luci-static/resources/view/fchomo/client.js:1552 -#: htdocs/luci-static/resources/view/fchomo/node.js:923 +#: htdocs/luci-static/resources/view/fchomo/node.js:952 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:143 msgid "Please type %s fields of mihomo config.
" msgstr "請輸入 mihomo 配置的 %s 欄位。
" @@ -1815,15 +1854,15 @@ msgstr "請輸入 mihomo 配置的 %s 欄位。
" msgid "Plugin" msgstr "插件" -#: htdocs/luci-static/resources/view/fchomo/node.js:499 -#: htdocs/luci-static/resources/view/fchomo/node.js:506 -#: htdocs/luci-static/resources/view/fchomo/node.js:514 -#: htdocs/luci-static/resources/view/fchomo/node.js:520 -#: htdocs/luci-static/resources/view/fchomo/node.js:528 -#: htdocs/luci-static/resources/view/fchomo/node.js:534 -#: htdocs/luci-static/resources/view/fchomo/server.js:272 -#: htdocs/luci-static/resources/view/fchomo/server.js:279 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/node.js:500 +#: htdocs/luci-static/resources/view/fchomo/node.js:507 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 +#: htdocs/luci-static/resources/view/fchomo/node.js:521 +#: htdocs/luci-static/resources/view/fchomo/node.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:535 +#: htdocs/luci-static/resources/view/fchomo/server.js:273 +#: htdocs/luci-static/resources/view/fchomo/server.js:280 +#: htdocs/luci-static/resources/view/fchomo/server.js:286 msgid "Plugin:" msgstr "插件:" @@ -1831,15 +1870,16 @@ msgstr "插件:" msgid "Port" msgstr "連接埠" -#: htdocs/luci-static/resources/fchomo.js:1563 +#: htdocs/luci-static/resources/fchomo.js:1571 msgid "Port %s alrealy exists!" msgstr "連接埠 %s 已存在!" -#: htdocs/luci-static/resources/view/fchomo/global.js:681 +#: htdocs/luci-static/resources/view/fchomo/global.js:696 msgid "Ports" msgstr "連接埠" #: htdocs/luci-static/resources/view/fchomo/node.js:142 +#: htdocs/luci-static/resources/view/fchomo/node.js:212 #: htdocs/luci-static/resources/view/fchomo/server.js:97 msgid "Ports pool" msgstr "連接埠池" @@ -1860,14 +1900,14 @@ msgstr "優先 IPv6" #: htdocs/luci-static/resources/view/fchomo/global.js:524 msgid "" "Prevent ICMP loopback issues in some cases. Ping will not show real delay." -msgstr "在某些情況下防止 ICMP 環回問題。 Ping 不會顯示實際延遲。" +msgstr "防止某些情況下的 ICMP 環回問題。 Ping 不會顯示實際延遲。" -#: htdocs/luci-static/resources/view/fchomo/global.js:727 -#: htdocs/luci-static/resources/view/fchomo/global.js:744 -#: htdocs/luci-static/resources/view/fchomo/node.js:887 -#: htdocs/luci-static/resources/view/fchomo/node.js:893 -#: htdocs/luci-static/resources/view/fchomo/node.js:1193 -#: htdocs/luci-static/resources/view/fchomo/node.js:1200 +#: htdocs/luci-static/resources/view/fchomo/global.js:742 +#: htdocs/luci-static/resources/view/fchomo/global.js:759 +#: htdocs/luci-static/resources/view/fchomo/node.js:916 +#: htdocs/luci-static/resources/view/fchomo/node.js:922 +#: htdocs/luci-static/resources/view/fchomo/node.js:1222 +#: htdocs/luci-static/resources/view/fchomo/node.js:1229 msgid "Priority: Proxy Node > Global." msgstr "優先權: 代理節點 > 全域。" @@ -1887,8 +1927,8 @@ msgstr "私鑰" msgid "Process matching mode" msgstr "進程匹配模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:675 -#: htdocs/luci-static/resources/view/fchomo/node.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:690 +#: htdocs/luci-static/resources/view/fchomo/node.js:834 msgid "Protocol" msgstr "協議" @@ -1903,13 +1943,13 @@ msgid "" msgstr "協議參數。 如啟用會隨機浪費流量(在 v2ray 中預設為啟用且無法停用)。" #: htdocs/luci-static/resources/view/fchomo/client.js:937 -#: htdocs/luci-static/resources/view/fchomo/node.js:906 -#: htdocs/luci-static/resources/view/fchomo/node.js:915 -#: htdocs/luci-static/resources/view/fchomo/node.js:1309 +#: htdocs/luci-static/resources/view/fchomo/node.js:935 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 +#: htdocs/luci-static/resources/view/fchomo/node.js:1338 msgid "Provider" msgstr "供應商" -#: htdocs/luci-static/resources/view/fchomo/node.js:1079 +#: htdocs/luci-static/resources/view/fchomo/node.js:1108 msgid "Provider URL" msgstr "供應商訂閱 URL" @@ -1918,31 +1958,31 @@ msgstr "供應商訂閱 URL" msgid "Proxy Group" msgstr "代理組" -#: htdocs/luci-static/resources/view/fchomo/global.js:777 +#: htdocs/luci-static/resources/view/fchomo/global.js:792 msgid "Proxy IPv4 IP-s" msgstr "代理 IPv4 位址" -#: htdocs/luci-static/resources/view/fchomo/global.js:780 +#: htdocs/luci-static/resources/view/fchomo/global.js:795 msgid "Proxy IPv6 IP-s" msgstr "代理 IPv6 位址" -#: htdocs/luci-static/resources/view/fchomo/global.js:783 +#: htdocs/luci-static/resources/view/fchomo/global.js:798 msgid "Proxy MAC-s" msgstr "代理 MAC 位址" #: htdocs/luci-static/resources/view/fchomo/node.js:76 -#: htdocs/luci-static/resources/view/fchomo/node.js:1308 +#: htdocs/luci-static/resources/view/fchomo/node.js:1337 msgid "Proxy Node" msgstr "代理節點" -#: htdocs/luci-static/resources/view/fchomo/node.js:1284 -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1313 +#: htdocs/luci-static/resources/view/fchomo/node.js:1322 msgid "Proxy chain" msgstr "代理鏈" #: htdocs/luci-static/resources/view/fchomo/client.js:713 #: htdocs/luci-static/resources/view/fchomo/client.js:1415 -#: htdocs/luci-static/resources/view/fchomo/node.js:1097 +#: htdocs/luci-static/resources/view/fchomo/node.js:1126 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:365 msgid "Proxy group" msgstr "代理組" @@ -1955,7 +1995,7 @@ msgstr "代理組覆蓋" msgid "Proxy mode" msgstr "代理模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:786 +#: htdocs/luci-static/resources/view/fchomo/global.js:801 msgid "Proxy routerself" msgstr "代理路由器自身" @@ -1973,52 +2013,52 @@ msgstr "QUIC 壅塞控制器。" msgid "Quick Reload" msgstr "快速重載" -#: htdocs/luci-static/resources/view/fchomo/node.js:678 -#: htdocs/luci-static/resources/view/fchomo/server.js:422 +#: htdocs/luci-static/resources/view/fchomo/node.js:707 +#: htdocs/luci-static/resources/view/fchomo/server.js:448 msgid "REALITY" msgstr "REALITY" -#: htdocs/luci-static/resources/view/fchomo/node.js:693 +#: htdocs/luci-static/resources/view/fchomo/node.js:722 msgid "REALITY X25519MLKEM768 PQC support" msgstr "REALITY X25519MLKEM768 後量子加密支援" -#: htdocs/luci-static/resources/view/fchomo/server.js:459 +#: htdocs/luci-static/resources/view/fchomo/server.js:485 msgid "REALITY certificate issued to" msgstr "REALITY 證書頒發給" -#: htdocs/luci-static/resources/view/fchomo/server.js:427 +#: htdocs/luci-static/resources/view/fchomo/server.js:453 msgid "REALITY handshake server" msgstr "REALITY 握手伺服器" -#: htdocs/luci-static/resources/view/fchomo/server.js:434 +#: htdocs/luci-static/resources/view/fchomo/server.js:460 msgid "REALITY private key" msgstr "REALITY 私鑰" -#: htdocs/luci-static/resources/view/fchomo/node.js:683 -#: htdocs/luci-static/resources/view/fchomo/server.js:449 +#: htdocs/luci-static/resources/view/fchomo/node.js:712 +#: htdocs/luci-static/resources/view/fchomo/server.js:475 msgid "REALITY public key" msgstr "REALITY 公鑰" -#: htdocs/luci-static/resources/view/fchomo/node.js:688 -#: htdocs/luci-static/resources/view/fchomo/server.js:453 +#: htdocs/luci-static/resources/view/fchomo/node.js:717 +#: htdocs/luci-static/resources/view/fchomo/server.js:479 msgid "REALITY short ID" msgstr "REALITY 標識符" -#: htdocs/luci-static/resources/fchomo.js:1218 -#: htdocs/luci-static/resources/fchomo.js:1235 +#: htdocs/luci-static/resources/fchomo.js:1226 +#: htdocs/luci-static/resources/fchomo.js:1243 msgid "RTT" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:635 +#: htdocs/luci-static/resources/view/fchomo/global.js:650 msgid "Random will be used if empty." msgstr "留空將使用隨機令牌。" -#: htdocs/luci-static/resources/fchomo.js:1040 +#: htdocs/luci-static/resources/fchomo.js:1048 msgid "Randomized traffic characteristics" msgstr "隨機化流量特徵" -#: htdocs/luci-static/resources/view/fchomo/node.js:1342 -#: htdocs/luci-static/resources/view/fchomo/node.js:1364 +#: htdocs/luci-static/resources/view/fchomo/node.js:1371 +#: htdocs/luci-static/resources/view/fchomo/node.js:1393 msgid "Recommended to use UoT node.
such as %s." msgstr "建議使用 UoT 節點。
例如%s。" @@ -2042,7 +2082,7 @@ msgstr "Redirect TCP + Tun UDP" msgid "Refresh every %s seconds." msgstr "每 %s 秒刷新。" -#: htdocs/luci-static/resources/fchomo.js:937 +#: htdocs/luci-static/resources/fchomo.js:945 #: htdocs/luci-static/resources/view/fchomo/client.js:805 #: htdocs/luci-static/resources/view/fchomo/global.js:193 #: htdocs/luci-static/resources/view/fchomo/server.js:46 @@ -2053,7 +2093,7 @@ msgstr "重載" msgid "Reload All" msgstr "重載所有" -#: htdocs/luci-static/resources/view/fchomo/node.js:1036 +#: htdocs/luci-static/resources/view/fchomo/node.js:1065 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:267 msgid "Remote" msgstr "遠端" @@ -2062,29 +2102,33 @@ msgstr "遠端" msgid "Remote DNS resolve" msgstr "遠端 DNS 解析" -#: htdocs/luci-static/resources/fchomo.js:1462 +#: htdocs/luci-static/resources/fchomo.js:1470 msgid "Remove" msgstr "移除" -#: htdocs/luci-static/resources/fchomo.js:1467 -#: htdocs/luci-static/resources/view/fchomo/node.js:1012 -#: htdocs/luci-static/resources/view/fchomo/node.js:1014 +#: htdocs/luci-static/resources/fchomo.js:1475 +#: htdocs/luci-static/resources/view/fchomo/node.js:1041 +#: htdocs/luci-static/resources/view/fchomo/node.js:1043 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:240 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:242 msgid "Remove idles" msgstr "移除閒置" -#: htdocs/luci-static/resources/view/fchomo/node.js:1126 +#: htdocs/luci-static/resources/view/fchomo/node.js:1155 msgid "Replace name" msgstr "名稱替換" -#: htdocs/luci-static/resources/view/fchomo/node.js:1127 +#: htdocs/luci-static/resources/view/fchomo/node.js:1156 msgid "Replace node name." msgstr "替換節點名稱" -#: htdocs/luci-static/resources/view/fchomo/node.js:752 -#: htdocs/luci-static/resources/view/fchomo/node.js:759 -#: htdocs/luci-static/resources/view/fchomo/server.js:501 +#: htdocs/luci-static/resources/fchomo.js:302 +msgid "Request" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:781 +#: htdocs/luci-static/resources/view/fchomo/node.js:788 +#: htdocs/luci-static/resources/view/fchomo/server.js:527 msgid "Request path" msgstr "請求路徑" @@ -2092,8 +2136,16 @@ msgstr "請求路徑" msgid "Request timeout" msgstr "請求逾時" -#: htdocs/luci-static/resources/fchomo.js:1048 -#: htdocs/luci-static/resources/view/fchomo/node.js:694 +#: htdocs/luci-static/resources/fchomo.js:305 +msgid "Require and verify" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:303 +msgid "Require any" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:1056 +#: htdocs/luci-static/resources/view/fchomo/node.js:723 msgid "Requires server support." msgstr "需要伺服器支援。" @@ -2105,7 +2157,7 @@ msgstr "保留字段位元組" msgid "Resources management" msgstr "資源管理" -#: htdocs/luci-static/resources/view/fchomo/node.js:534 +#: htdocs/luci-static/resources/view/fchomo/node.js:535 msgid "Restls script" msgstr "Restls 劇本" @@ -2119,39 +2171,39 @@ msgid "" "Returns the string input for icon in the API to display in this proxy group." msgstr "在 API 傳回 icon 所輸入的字串,以在該代理組顯示。" -#: htdocs/luci-static/resources/view/fchomo/global.js:805 +#: htdocs/luci-static/resources/view/fchomo/global.js:820 msgid "Routing Control" msgstr "路由控制" -#: htdocs/luci-static/resources/view/fchomo/global.js:845 -#: htdocs/luci-static/resources/view/fchomo/global.js:848 +#: htdocs/luci-static/resources/view/fchomo/global.js:860 +#: htdocs/luci-static/resources/view/fchomo/global.js:863 msgid "Routing DSCP" msgstr "路由 DSCP" -#: htdocs/luci-static/resources/view/fchomo/global.js:829 +#: htdocs/luci-static/resources/view/fchomo/global.js:844 msgid "Routing GFW" msgstr "路由 GFW 流量" -#: htdocs/luci-static/resources/view/fchomo/global.js:743 -#: htdocs/luci-static/resources/view/fchomo/node.js:892 -#: htdocs/luci-static/resources/view/fchomo/node.js:1199 +#: htdocs/luci-static/resources/view/fchomo/global.js:758 +#: htdocs/luci-static/resources/view/fchomo/node.js:921 +#: htdocs/luci-static/resources/view/fchomo/node.js:1228 msgid "Routing mark" msgstr "路由標記" -#: htdocs/luci-static/resources/view/fchomo/global.js:825 +#: htdocs/luci-static/resources/view/fchomo/global.js:840 msgid "Routing mode" msgstr "路由模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:826 +#: htdocs/luci-static/resources/view/fchomo/global.js:841 msgid "Routing mode of the traffic enters mihomo via firewall rules." msgstr "流量經由防火牆規則進入 mihomo 的路由模式。" -#: htdocs/luci-static/resources/view/fchomo/global.js:832 +#: htdocs/luci-static/resources/view/fchomo/global.js:847 msgid "Routing mode will be handle domain." msgstr "路由模式將處理網域。" -#: htdocs/luci-static/resources/view/fchomo/global.js:807 -#: htdocs/luci-static/resources/view/fchomo/global.js:816 +#: htdocs/luci-static/resources/view/fchomo/global.js:822 +#: htdocs/luci-static/resources/view/fchomo/global.js:831 msgid "Routing ports" msgstr "路由連接埠" @@ -2160,11 +2212,11 @@ msgstr "路由連接埠" msgid "Routing rule" msgstr "路由規則" -#: htdocs/luci-static/resources/view/fchomo/global.js:737 +#: htdocs/luci-static/resources/view/fchomo/global.js:752 msgid "Routing rule priority" msgstr "路由規則優先權" -#: htdocs/luci-static/resources/view/fchomo/global.js:731 +#: htdocs/luci-static/resources/view/fchomo/global.js:746 msgid "Routing table ID" msgstr "路由表 ID" @@ -2190,7 +2242,7 @@ msgstr "規則集" msgid "Ruleset-URI-Scheme" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:950 +#: htdocs/luci-static/resources/fchomo.js:958 msgid "Running" msgstr "正在運作" @@ -2214,7 +2266,7 @@ msgstr "STUN 連接埠" msgid "SUB-RULE" msgstr "SUB-RULE" -#: htdocs/luci-static/resources/view/fchomo/node.js:552 +#: htdocs/luci-static/resources/view/fchomo/node.js:553 msgid "SUoT version" msgstr "SUoT 版本" @@ -2239,21 +2291,23 @@ msgstr "分段最大尺寸" msgid "Select" msgstr "手動選擇" -#: htdocs/luci-static/resources/view/fchomo/global.js:596 +#: htdocs/luci-static/resources/view/fchomo/global.js:611 msgid "Select Dashboard" msgstr "選擇面板" -#: htdocs/luci-static/resources/fchomo.js:1054 +#: htdocs/luci-static/resources/fchomo.js:1062 msgid "Send padding randomly 0-3333 bytes with 50% probability." msgstr "以 50% 的機率發送隨機 0 到 3333 位元組的填充。" -#: htdocs/luci-static/resources/fchomo.js:1043 -#: htdocs/luci-static/resources/fchomo.js:1044 +#: htdocs/luci-static/resources/fchomo.js:1051 +#: htdocs/luci-static/resources/fchomo.js:1052 msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse." msgstr "發送 300-600 秒的隨機票證,以供客戶端 0-RTT 重用。" -#: htdocs/luci-static/resources/fchomo.js:1218 +#: htdocs/luci-static/resources/fchomo.js:1226 #: htdocs/luci-static/resources/view/fchomo/server.js:59 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:54 msgid "Server" msgstr "服務端" @@ -2262,7 +2316,7 @@ msgstr "服務端" msgid "Server address" msgstr "伺服器位址" -#: htdocs/luci-static/resources/view/fchomo/node.js:737 +#: htdocs/luci-static/resources/view/fchomo/node.js:766 msgid "Server hostname" msgstr "伺服器主機名稱" @@ -2294,7 +2348,7 @@ msgstr "Shadowsocks 加密" msgid "Shadowsocks password" msgstr "Shadowsocks 密碼" -#: htdocs/luci-static/resources/view/fchomo/node.js:847 +#: htdocs/luci-static/resources/view/fchomo/node.js:876 msgid "Show connections in the dashboard for breaking connections easier." msgstr "在面板中顯示連線以便於打斷連線。" @@ -2306,26 +2360,26 @@ msgstr "靜音" msgid "Simple round-robin all nodes" msgstr "簡單輪替所有節點" -#: htdocs/luci-static/resources/view/fchomo/node.js:1085 +#: htdocs/luci-static/resources/view/fchomo/node.js:1114 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:353 msgid "Size limit" msgstr "大小限制" #: htdocs/luci-static/resources/view/fchomo/client.js:1448 -#: htdocs/luci-static/resources/view/fchomo/node.js:648 -#: htdocs/luci-static/resources/view/fchomo/node.js:1177 +#: htdocs/luci-static/resources/view/fchomo/node.js:649 +#: htdocs/luci-static/resources/view/fchomo/node.js:1206 msgid "Skip cert verify" msgstr "跳過憑證驗證" -#: htdocs/luci-static/resources/view/fchomo/global.js:653 +#: htdocs/luci-static/resources/view/fchomo/global.js:668 msgid "Skiped sniffing domain" msgstr "跳過嗅探網域" -#: htdocs/luci-static/resources/view/fchomo/global.js:659 +#: htdocs/luci-static/resources/view/fchomo/global.js:674 msgid "Skiped sniffing dst address" msgstr "跳過嗅探目標位址" -#: htdocs/luci-static/resources/view/fchomo/global.js:656 +#: htdocs/luci-static/resources/view/fchomo/global.js:671 msgid "Skiped sniffing src address" msgstr "跳過嗅探來源位址" @@ -2333,20 +2387,20 @@ msgstr "跳過嗅探來源位址" msgid "Snell" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:663 +#: htdocs/luci-static/resources/view/fchomo/global.js:678 msgid "Sniff protocol" msgstr "嗅探協議" -#: htdocs/luci-static/resources/view/fchomo/global.js:640 +#: htdocs/luci-static/resources/view/fchomo/global.js:655 msgid "Sniffer" msgstr "嗅探器" -#: htdocs/luci-static/resources/view/fchomo/global.js:643 +#: htdocs/luci-static/resources/view/fchomo/global.js:658 msgid "Sniffer settings" msgstr "嗅探器設定" -#: htdocs/luci-static/resources/view/fchomo/global.js:808 -#: htdocs/luci-static/resources/view/fchomo/global.js:817 +#: htdocs/luci-static/resources/view/fchomo/global.js:823 +#: htdocs/luci-static/resources/view/fchomo/global.js:832 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." @@ -2378,7 +2432,7 @@ msgstr "子規則" msgid "Sub rule group" msgstr "子規則組" -#: htdocs/luci-static/resources/fchomo.js:522 +#: htdocs/luci-static/resources/fchomo.js:530 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:211 msgid "Successfully imported %s %s of total %s." msgstr "已成功匯入 %s 個%s (共 %s 個)。" @@ -2387,7 +2441,7 @@ msgstr "已成功匯入 %s 個%s (共 %s 個)。" msgid "Successfully updated." msgstr "更新成功。" -#: htdocs/luci-static/resources/fchomo.js:1786 +#: htdocs/luci-static/resources/fchomo.js:1804 msgid "Successfully uploaded." msgstr "已成功上傳。" @@ -2416,7 +2470,7 @@ msgstr "TCP" msgid "TCP concurrency" msgstr "TCP 併發" -#: htdocs/luci-static/resources/view/fchomo/node.js:840 +#: htdocs/luci-static/resources/view/fchomo/node.js:869 msgid "TCP only" msgstr "僅 TCP" @@ -2428,24 +2482,24 @@ msgstr "TCP-Keep-Alive 閒置逾時" msgid "TCP-Keep-Alive interval" msgstr "TCP-Keep-Alive 間隔" -#: htdocs/luci-static/resources/view/fchomo/node.js:871 -#: htdocs/luci-static/resources/view/fchomo/node.js:1144 +#: htdocs/luci-static/resources/view/fchomo/node.js:900 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 msgid "TFO" msgstr "TCP 快速開啟 (TFO)" -#: htdocs/luci-static/resources/view/fchomo/global.js:525 -#: htdocs/luci-static/resources/view/fchomo/node.js:501 -#: htdocs/luci-static/resources/view/fchomo/node.js:565 -#: htdocs/luci-static/resources/view/fchomo/server.js:308 +#: htdocs/luci-static/resources/view/fchomo/global.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:502 +#: htdocs/luci-static/resources/view/fchomo/node.js:566 +#: htdocs/luci-static/resources/view/fchomo/server.js:309 msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/view/fchomo/node.js:596 -#: htdocs/luci-static/resources/view/fchomo/server.js:339 +#: htdocs/luci-static/resources/view/fchomo/node.js:597 +#: htdocs/luci-static/resources/view/fchomo/server.js:340 msgid "TLS ALPN" msgstr "TLS ALPN" -#: htdocs/luci-static/resources/view/fchomo/node.js:590 +#: htdocs/luci-static/resources/view/fchomo/node.js:591 msgid "TLS SNI" msgstr "" @@ -2473,7 +2527,19 @@ msgstr "讓客戶端使用 BBR 流控演算法。" msgid "The %s address used by local machine in the Wireguard network." msgstr "WireGuard 網路中使用的本機 %s 位址。" -#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:672 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 +msgid "The %s private key, in PEM format." +msgstr "%s私鑰,需要 PEM 格式。" + +#: htdocs/luci-static/resources/view/fchomo/global.js:556 +#: htdocs/luci-static/resources/view/fchomo/node.js:658 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:384 +msgid "The %s public key, in PEM format." +msgstr "%s公鑰,需要 PEM 格式。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:692 msgid "" "The ECH parameter of the HTTPS record for the domain. Leave empty to resolve " "via DNS." @@ -2483,7 +2549,7 @@ msgstr "網域的 HTTPS 記錄的 ECH 參數。留空則透過 DNS 解析。" msgid "The default value is 2:00 every day." msgstr "預設值為每天 2:00。" -#: htdocs/luci-static/resources/fchomo.js:1247 +#: htdocs/luci-static/resources/fchomo.js:1255 msgid "" "The first padding must have a probability of 100% and at least 35 bytes." msgstr "首個填充必須為 100% 的機率並且至少 35 位元組。" @@ -2498,26 +2564,18 @@ msgstr "匹配 %s 的將被視為未被投毒汙染。" msgid "The matching %s will be deemed as poisoned." msgstr "匹配 %s 的將被視為已被投毒汙染。" -#: htdocs/luci-static/resources/fchomo.js:1245 +#: htdocs/luci-static/resources/fchomo.js:1253 msgid "The server and client can set different padding parameters." msgstr "伺服器和客戶端可以設定不同的填充參數。" -#: htdocs/luci-static/resources/view/fchomo/server.js:360 -msgid "The server private key, in PEM format." -msgstr "服務端私鑰,需要 PEM 格式。" - -#: htdocs/luci-static/resources/view/fchomo/server.js:345 -msgid "The server public key, in PEM format." -msgstr "服務端公鑰,需要 PEM 格式。" - -#: htdocs/luci-static/resources/view/fchomo/global.js:585 -#: htdocs/luci-static/resources/view/fchomo/server.js:416 +#: htdocs/luci-static/resources/view/fchomo/global.js:600 +#: htdocs/luci-static/resources/view/fchomo/server.js:442 msgid "This ECH parameter needs to be added to the HTTPS record of the domain." msgstr "此 ECH 參數需要加入到網域的 HTTPS 記錄中。" #: htdocs/luci-static/resources/view/fchomo/client.js:1451 -#: htdocs/luci-static/resources/view/fchomo/node.js:651 -#: htdocs/luci-static/resources/view/fchomo/node.js:1180 +#: htdocs/luci-static/resources/view/fchomo/node.js:652 +#: htdocs/luci-static/resources/view/fchomo/node.js:1209 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" @@ -2544,11 +2602,11 @@ msgid "" msgstr "" "要啟用 Tun 支持,您需要安裝 ip-fullkmod-tun。" -#: htdocs/luci-static/resources/view/fchomo/global.js:837 +#: htdocs/luci-static/resources/view/fchomo/global.js:852 msgid "To enable, you need to install dnsmasq-full." msgstr "要啟用,您需要安裝 dnsmasq-full。" -#: htdocs/luci-static/resources/view/fchomo/global.js:750 +#: htdocs/luci-static/resources/view/fchomo/global.js:765 msgid "Tproxy Fwmark" msgstr "Tproxy 標記" @@ -2557,8 +2615,8 @@ msgid "Tproxy port" msgstr "Tproxy 連接埠" #: htdocs/luci-static/resources/view/fchomo/node.js:217 -#: htdocs/luci-static/resources/view/fchomo/node.js:700 -#: htdocs/luci-static/resources/view/fchomo/server.js:467 +#: htdocs/luci-static/resources/view/fchomo/node.js:729 +#: htdocs/luci-static/resources/view/fchomo/server.js:493 msgid "Transport" msgstr "傳輸層" @@ -2567,8 +2625,8 @@ msgstr "傳輸層" msgid "Transport fields" msgstr "傳輸層欄位" -#: htdocs/luci-static/resources/view/fchomo/node.js:705 -#: htdocs/luci-static/resources/view/fchomo/server.js:472 +#: htdocs/luci-static/resources/view/fchomo/node.js:734 +#: htdocs/luci-static/resources/view/fchomo/server.js:498 msgid "Transport type" msgstr "傳輸層類型" @@ -2581,7 +2639,7 @@ msgstr "將 目標 IP 視為 來源 IP。" msgid "Trojan" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:755 +#: htdocs/luci-static/resources/view/fchomo/global.js:770 msgid "Tun Fwmark" msgstr "Tun 標記" @@ -2603,8 +2661,8 @@ msgstr "Tun 堆栈" #: htdocs/luci-static/resources/view/fchomo/client.js:910 #: htdocs/luci-static/resources/view/fchomo/client.js:1597 #: htdocs/luci-static/resources/view/fchomo/node.js:106 -#: htdocs/luci-static/resources/view/fchomo/node.js:1034 -#: htdocs/luci-static/resources/view/fchomo/node.js:1307 +#: htdocs/luci-static/resources/view/fchomo/node.js:1063 +#: htdocs/luci-static/resources/view/fchomo/node.js:1336 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:265 #: htdocs/luci-static/resources/view/fchomo/server.js:86 msgid "Type" @@ -2612,9 +2670,9 @@ msgstr "類型" #: htdocs/luci-static/resources/view/fchomo/client.js:516 #: htdocs/luci-static/resources/view/fchomo/client.js:606 -#: htdocs/luci-static/resources/view/fchomo/node.js:541 -#: htdocs/luci-static/resources/view/fchomo/node.js:1154 -#: htdocs/luci-static/resources/view/fchomo/server.js:294 +#: htdocs/luci-static/resources/view/fchomo/node.js:542 +#: htdocs/luci-static/resources/view/fchomo/node.js:1183 +#: htdocs/luci-static/resources/view/fchomo/server.js:295 msgid "UDP" msgstr "UDP" @@ -2649,7 +2707,7 @@ msgstr "自動選擇" msgid "UUID" msgstr "UUID" -#: htdocs/luci-static/resources/fchomo.js:995 +#: htdocs/luci-static/resources/fchomo.js:1003 msgid "Unable to download unsupported type: %s" msgstr "無法下載不支援的類型: %s" @@ -2674,8 +2732,8 @@ msgstr "未知錯誤。" msgid "Unknown error: %s" msgstr "未知錯誤:%s" -#: htdocs/luci-static/resources/view/fchomo/node.js:546 -#: htdocs/luci-static/resources/view/fchomo/node.js:1159 +#: htdocs/luci-static/resources/view/fchomo/node.js:547 +#: htdocs/luci-static/resources/view/fchomo/node.js:1188 msgid "UoT" msgstr "UDP over TCP (UoT)" @@ -2683,20 +2741,22 @@ msgstr "UDP over TCP (UoT)" msgid "Update failed." msgstr "更新失敗。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1091 +#: htdocs/luci-static/resources/view/fchomo/node.js:1120 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:359 msgid "Update interval" msgstr "更新間隔" -#: htdocs/luci-static/resources/view/fchomo/node.js:858 +#: htdocs/luci-static/resources/view/fchomo/node.js:887 msgid "Upload bandwidth" msgstr "上傳頻寬" -#: htdocs/luci-static/resources/view/fchomo/node.js:859 +#: htdocs/luci-static/resources/view/fchomo/node.js:888 msgid "Upload bandwidth in Mbps." msgstr "上傳頻寬(單位:Mbps)。" -#: htdocs/luci-static/resources/view/fchomo/server.js:351 +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +#: htdocs/luci-static/resources/view/fchomo/server.js:352 +#: htdocs/luci-static/resources/view/fchomo/server.js:392 msgid "Upload certificate" msgstr "上傳憑證" @@ -2704,13 +2764,17 @@ msgstr "上傳憑證" msgid "Upload initial package" msgstr "上傳初始資源包" -#: htdocs/luci-static/resources/view/fchomo/server.js:366 +#: htdocs/luci-static/resources/view/fchomo/node.js:677 +#: htdocs/luci-static/resources/view/fchomo/server.js:367 msgid "Upload key" msgstr "上傳金鑰" #: htdocs/luci-static/resources/view/fchomo/global.js:306 -#: htdocs/luci-static/resources/view/fchomo/server.js:354 -#: htdocs/luci-static/resources/view/fchomo/server.js:369 +#: htdocs/luci-static/resources/view/fchomo/node.js:666 +#: htdocs/luci-static/resources/view/fchomo/node.js:680 +#: htdocs/luci-static/resources/view/fchomo/server.js:355 +#: htdocs/luci-static/resources/view/fchomo/server.js:370 +#: htdocs/luci-static/resources/view/fchomo/server.js:395 msgid "Upload..." msgstr "上傳..." @@ -2722,7 +2786,7 @@ msgstr "用於解析 DNS 伺服器的網域。必須是 IP。" msgid "Used to resolve the domain of the Proxy node." msgstr "用於解析代理節點的網域。" -#: htdocs/luci-static/resources/view/fchomo/node.js:591 +#: htdocs/luci-static/resources/view/fchomo/node.js:592 msgid "Used to verify the hostname on the returned certificates." msgstr "用於驗證傳回的憑證上的主機名稱。" @@ -2735,15 +2799,15 @@ msgstr "使用者認證" msgid "Username" msgstr "使用者名稱" -#: htdocs/luci-static/resources/view/fchomo/global.js:763 +#: htdocs/luci-static/resources/view/fchomo/global.js:778 msgid "Users filter mode" msgstr "使用者過濾模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:788 +#: htdocs/luci-static/resources/view/fchomo/node.js:817 msgid "V2ray HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:793 +#: htdocs/luci-static/resources/view/fchomo/node.js:822 msgid "V2ray HTTPUpgrade fast open" msgstr "" @@ -2757,19 +2821,23 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1040 -#: htdocs/luci-static/resources/view/fchomo/node.js:1313 +#: htdocs/luci-static/resources/view/fchomo/node.js:1069 +#: htdocs/luci-static/resources/view/fchomo/node.js:1342 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:308 msgid "Value" msgstr "可視化值" +#: htdocs/luci-static/resources/fchomo.js:304 +msgid "Verify if given" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/node.js:247 -#: htdocs/luci-static/resources/view/fchomo/node.js:520 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/node.js:521 +#: htdocs/luci-static/resources/view/fchomo/server.js:286 msgid "Version" msgstr "版本" -#: htdocs/luci-static/resources/view/fchomo/node.js:528 +#: htdocs/luci-static/resources/view/fchomo/node.js:529 msgid "Version hint" msgstr "" @@ -2778,7 +2846,7 @@ msgstr "" msgid "Vless Encryption fields" msgstr "Vless Encryption 欄位" -#: htdocs/luci-static/resources/fchomo.js:1053 +#: htdocs/luci-static/resources/fchomo.js:1061 msgid "Wait a random 0-111 milliseconds with 75% probability." msgstr "以 75% 的機率等待隨機 0-111 毫秒。" @@ -2786,12 +2854,12 @@ msgstr "以 75% 的機率等待隨機 0-111 毫秒。" msgid "Warning" msgstr "警告" -#: htdocs/luci-static/resources/view/fchomo/node.js:710 -#: htdocs/luci-static/resources/view/fchomo/node.js:721 -#: htdocs/luci-static/resources/view/fchomo/node.js:726 -#: htdocs/luci-static/resources/view/fchomo/server.js:474 -#: htdocs/luci-static/resources/view/fchomo/server.js:485 -#: htdocs/luci-static/resources/view/fchomo/server.js:490 +#: htdocs/luci-static/resources/view/fchomo/node.js:739 +#: htdocs/luci-static/resources/view/fchomo/node.js:750 +#: htdocs/luci-static/resources/view/fchomo/node.js:755 +#: htdocs/luci-static/resources/view/fchomo/server.js:500 +#: htdocs/luci-static/resources/view/fchomo/server.js:511 +#: htdocs/luci-static/resources/view/fchomo/server.js:516 msgid "WebSocket" msgstr "" @@ -2799,7 +2867,7 @@ msgstr "" msgid "When used as a server, HomeProxy is a better choice." msgstr "用作服務端時,HomeProxy 是更好的選擇。" -#: htdocs/luci-static/resources/view/fchomo/global.js:765 +#: htdocs/luci-static/resources/view/fchomo/global.js:780 msgid "White list" msgstr "白名單" @@ -2819,7 +2887,7 @@ msgstr "WireGuard 預先共用金鑰。" msgid "WireGuard requires base64-encoded private keys." msgstr "WireGuard 要求 base64 編碼的私鑰。" -#: htdocs/luci-static/resources/fchomo.js:1209 +#: htdocs/luci-static/resources/fchomo.js:1217 msgid "XOR mode" msgstr "XOR 模式" @@ -2835,7 +2903,7 @@ msgstr "Yaml 格式文本" msgid "YouTube" msgstr "YouTube" -#: htdocs/luci-static/resources/fchomo.js:1768 +#: htdocs/luci-static/resources/fchomo.js:1786 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "您的 %s 已成功上傳。大小:%sB。" @@ -2863,7 +2931,9 @@ msgstr "自動" msgid "bbr" msgstr "bbr" -#: htdocs/luci-static/resources/view/fchomo/server.js:356 +#: htdocs/luci-static/resources/view/fchomo/node.js:668 +#: htdocs/luci-static/resources/view/fchomo/server.js:357 +#: htdocs/luci-static/resources/view/fchomo/server.js:397 msgid "certificate" msgstr "憑證" @@ -2881,35 +2951,35 @@ msgstr "" msgid "cubic" msgstr "cubic" -#: htdocs/luci-static/resources/fchomo.js:1189 -#: htdocs/luci-static/resources/view/fchomo/server.js:300 +#: htdocs/luci-static/resources/fchomo.js:1197 +#: htdocs/luci-static/resources/view/fchomo/server.js:301 msgid "decryption" msgstr "decryption" -#: htdocs/luci-static/resources/view/fchomo/global.js:799 +#: htdocs/luci-static/resources/view/fchomo/global.js:814 msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)" msgstr "dnsmasq 自行選擇上游服務器。 (可能影響 CDN 準確性)" -#: htdocs/luci-static/resources/view/fchomo/node.js:1171 +#: htdocs/luci-static/resources/view/fchomo/node.js:1200 msgid "down" msgstr "Hysteria 下載速率" -#: htdocs/luci-static/resources/fchomo.js:1194 -#: htdocs/luci-static/resources/view/fchomo/node.js:560 +#: htdocs/luci-static/resources/fchomo.js:1202 +#: htdocs/luci-static/resources/view/fchomo/node.js:561 msgid "encryption" msgstr "encryption" -#: htdocs/luci-static/resources/view/fchomo/node.js:709 -#: htdocs/luci-static/resources/view/fchomo/node.js:720 -#: htdocs/luci-static/resources/view/fchomo/node.js:725 -#: htdocs/luci-static/resources/view/fchomo/server.js:473 -#: htdocs/luci-static/resources/view/fchomo/server.js:484 -#: htdocs/luci-static/resources/view/fchomo/server.js:489 +#: htdocs/luci-static/resources/view/fchomo/node.js:738 +#: htdocs/luci-static/resources/view/fchomo/node.js:749 +#: htdocs/luci-static/resources/view/fchomo/node.js:754 +#: htdocs/luci-static/resources/view/fchomo/server.js:499 +#: htdocs/luci-static/resources/view/fchomo/server.js:510 +#: htdocs/luci-static/resources/view/fchomo/server.js:515 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:772 -#: htdocs/luci-static/resources/view/fchomo/server.js:508 +#: htdocs/luci-static/resources/view/fchomo/node.js:801 +#: htdocs/luci-static/resources/view/fchomo/server.js:534 msgid "gRPC service name" msgstr "gRPC 服務名稱" @@ -2917,11 +2987,11 @@ msgstr "gRPC 服務名稱" msgid "gVisor" msgstr "gVisor" -#: htdocs/luci-static/resources/view/fchomo/node.js:809 +#: htdocs/luci-static/resources/view/fchomo/node.js:838 msgid "h2mux" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1362 +#: htdocs/luci-static/resources/fchomo.js:1370 msgid "least one keypair required" msgstr "至少需要一對密鑰" @@ -2934,17 +3004,17 @@ msgstr "metacubexd" #: htdocs/luci-static/resources/view/fchomo/client.js:1218 #: htdocs/luci-static/resources/view/fchomo/client.js:1352 #: htdocs/luci-static/resources/view/fchomo/client.js:1574 -#: htdocs/luci-static/resources/view/fchomo/node.js:1006 +#: htdocs/luci-static/resources/view/fchomo/node.js:1035 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:228 msgid "mihomo config" msgstr "mihomo 配置" -#: htdocs/luci-static/resources/fchomo.js:1035 +#: htdocs/luci-static/resources/fchomo.js:1043 msgid "mlkem768x25519plus" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:875 -#: htdocs/luci-static/resources/view/fchomo/node.js:1149 +#: htdocs/luci-static/resources/view/fchomo/node.js:904 +#: htdocs/luci-static/resources/view/fchomo/node.js:1178 msgid "mpTCP" msgstr "多路徑 TCP (mpTCP)" @@ -2957,13 +3027,15 @@ msgstr "new_reno" msgid "no-resolve" msgstr "no-resolve" -#: htdocs/luci-static/resources/fchomo.js:1551 -#: htdocs/luci-static/resources/fchomo.js:1605 -#: htdocs/luci-static/resources/fchomo.js:1636 +#: htdocs/luci-static/resources/fchomo.js:1559 +#: htdocs/luci-static/resources/fchomo.js:1601 +#: htdocs/luci-static/resources/fchomo.js:1623 +#: htdocs/luci-static/resources/fchomo.js:1654 msgid "non-empty value" msgstr "非空值" #: htdocs/luci-static/resources/fchomo.js:268 +#: htdocs/luci-static/resources/fchomo.js:301 #: htdocs/luci-static/resources/view/fchomo/node.js:397 #: htdocs/luci-static/resources/view/fchomo/node.js:417 #: htdocs/luci-static/resources/view/fchomo/node.js:490 @@ -2988,7 +3060,7 @@ msgstr "" msgid "obfs-simple" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1129 +#: htdocs/luci-static/resources/view/fchomo/node.js:1158 msgid "override.proxy-name" msgstr "" @@ -2996,7 +3068,8 @@ msgstr "" msgid "packet addr (v2ray-core v5+)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:371 +#: htdocs/luci-static/resources/view/fchomo/node.js:682 +#: htdocs/luci-static/resources/view/fchomo/server.js:372 msgid "private key" msgstr "私鑰" @@ -3022,7 +3095,7 @@ msgstr "規則集" msgid "shadow-tls" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:807 +#: htdocs/luci-static/resources/view/fchomo/node.js:836 msgid "smux" msgstr "" @@ -3034,78 +3107,78 @@ msgstr "src" msgid "unchecked" msgstr "未檢查" -#: htdocs/luci-static/resources/fchomo.js:345 +#: htdocs/luci-static/resources/fchomo.js:353 msgid "unique UCI identifier" msgstr "獨立 UCI 識別" -#: htdocs/luci-static/resources/fchomo.js:348 +#: htdocs/luci-static/resources/fchomo.js:356 msgid "unique identifier" msgstr "獨立標識" -#: htdocs/luci-static/resources/fchomo.js:1645 +#: htdocs/luci-static/resources/fchomo.js:1663 msgid "unique value" msgstr "獨立值" -#: htdocs/luci-static/resources/view/fchomo/node.js:1165 +#: htdocs/luci-static/resources/view/fchomo/node.js:1194 msgid "up" msgstr "Hysteria 上傳速率" #: htdocs/luci-static/resources/view/fchomo/node.js:248 #: htdocs/luci-static/resources/view/fchomo/node.js:292 -#: htdocs/luci-static/resources/view/fchomo/node.js:521 -#: htdocs/luci-static/resources/view/fchomo/node.js:553 -#: htdocs/luci-static/resources/view/fchomo/server.js:286 +#: htdocs/luci-static/resources/view/fchomo/node.js:522 +#: htdocs/luci-static/resources/view/fchomo/node.js:554 +#: htdocs/luci-static/resources/view/fchomo/server.js:287 msgid "v1" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:249 -#: htdocs/luci-static/resources/view/fchomo/node.js:522 -#: htdocs/luci-static/resources/view/fchomo/node.js:554 -#: htdocs/luci-static/resources/view/fchomo/server.js:287 +#: htdocs/luci-static/resources/view/fchomo/node.js:523 +#: htdocs/luci-static/resources/view/fchomo/node.js:555 +#: htdocs/luci-static/resources/view/fchomo/server.js:288 msgid "v2" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:250 -#: htdocs/luci-static/resources/view/fchomo/node.js:523 -#: htdocs/luci-static/resources/view/fchomo/server.js:288 +#: htdocs/luci-static/resources/view/fchomo/node.js:524 +#: htdocs/luci-static/resources/view/fchomo/server.js:289 msgid "v3" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1579 -#: htdocs/luci-static/resources/fchomo.js:1582 +#: htdocs/luci-static/resources/fchomo.js:1587 +#: htdocs/luci-static/resources/fchomo.js:1590 msgid "valid JSON format" msgstr "有效的 JSON 格式" -#: htdocs/luci-static/resources/view/fchomo/node.js:641 +#: htdocs/luci-static/resources/view/fchomo/node.js:642 msgid "valid SHA256 string with %d characters" msgstr "包含 %d 個字元的有效 SHA256 字串" -#: htdocs/luci-static/resources/fchomo.js:1657 -#: htdocs/luci-static/resources/fchomo.js:1660 +#: htdocs/luci-static/resources/fchomo.js:1675 +#: htdocs/luci-static/resources/fchomo.js:1678 msgid "valid URL" msgstr "有效網址" -#: htdocs/luci-static/resources/fchomo.js:1592 +#: htdocs/luci-static/resources/fchomo.js:1610 msgid "valid base64 key with %d characters" msgstr "包含 %d 個字元的有效 base64 金鑰" -#: htdocs/luci-static/resources/fchomo.js:1607 +#: htdocs/luci-static/resources/fchomo.js:1625 msgid "valid key length with %d characters" msgstr "包含 %d 個字元的有效金鑰" -#: htdocs/luci-static/resources/fchomo.js:1561 +#: htdocs/luci-static/resources/fchomo.js:1569 msgid "valid port value" msgstr "有效連接埠值" -#: htdocs/luci-static/resources/fchomo.js:1670 +#: htdocs/luci-static/resources/fchomo.js:1688 msgid "valid uuid" msgstr "有效 uuid" -#: htdocs/luci-static/resources/fchomo.js:1059 +#: htdocs/luci-static/resources/fchomo.js:1067 msgid "vless-mlkem768" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:1058 +#: htdocs/luci-static/resources/fchomo.js:1066 msgid "vless-x25519" msgstr "" @@ -3117,7 +3190,7 @@ msgstr "" msgid "yacd-meta" msgstr "yacd-meta" -#: htdocs/luci-static/resources/view/fchomo/node.js:808 +#: htdocs/luci-static/resources/view/fchomo/node.js:837 msgid "yamux" msgstr "" @@ -3129,7 +3202,7 @@ msgstr "" msgid "zero" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:997 +#: htdocs/luci-static/resources/fchomo.js:1005 msgid "🡇" msgstr "" diff --git a/small/luci-app-fchomo/root/etc/init.d/fchomo b/small/luci-app-fchomo/root/etc/init.d/fchomo index e15303ae9e..fb61483d8b 100755 --- a/small/luci-app-fchomo/root/etc/init.d/fchomo +++ b/small/luci-app-fchomo/root/etc/init.d/fchomo @@ -135,8 +135,15 @@ start_service() { else # Set ENV variables for Client export SAFE_PATHS="$RUN_DIR$( - yq 'with(.tls; .[] |= sub("(/[^/]+$)", "")) - | [.external-ui, .tls.certificate, .tls.private-key] | unique | map(select(. != null)) + yq 'with(.external-ui; select(. != null) | . = sub("(/?$)", "/placeholder")) + | [.external-ui, .tls.certificate, .tls.private-key, .tls.client-auth-cert] | unique | map(select(. != null)) + | .[] |= sub("(/[^/]+$)", "") | unique + | .[] | sub("(^)", ":")' \ + "$RUN_DIR/mihomo-c.yaml" | tr -d '\n' + )" + export SAFE_PATHS="$SAFE_PATHS$( # mTLS + yq '.proxies | map([.certificate, .private-key][]) | unique | map(select(. != null)) + | .[] |= sub("(/[^/]+$)", "") | unique | .[] | sub("(^)", ":")' \ "$RUN_DIR/mihomo-c.yaml" | tr -d '\n' )" @@ -341,8 +348,8 @@ start_service() { else # Set ENV variables for Server export SAFE_PATHS="$RUN_DIR$( - yq '[.listeners[] | select(.certificate // .private-key) | [.certificate, .private-key][]] - | .[] |= sub("(/[^/]+$)", "") | unique | map(select(. != null)) + yq '.listeners | map([.certificate, .private-key, .client-auth-cert][]) | unique | map(select(. != null)) + | .[] |= sub("(/[^/]+$)", "") | unique | .[] | sub("(^)", ":")' \ "$RUN_DIR/mihomo-s.yaml" | tr -d '\n' )" diff --git a/small/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration b/small/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration index ef9b90990c..e4c094f933 100755 --- a/small/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration +++ b/small/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration @@ -4,6 +4,9 @@ sed -i 's|^FQDN:$|DOMAIN:|' "/etc/fchomo/resources/direct_list.yaml" 2>/dev/null sed -i 's|^FQDN:$|DOMAIN:|' "/etc/fchomo/resources/proxy_list.yaml" 2>/dev/null +# mieru_port_range -> mieru_ports +sed -i 's|^\toption mieru_port_range |\tlist mieru_ports |' /etc/config/fchomo 2>/dev/null + # default_proxy -> client_enabled and MATCH rule default_proxy=$(uci -q get fchomo.routing.default_proxy) if [ -n "$default_proxy" ]; then @@ -47,9 +50,6 @@ if [ -n "$dns_port" ]; then EOF fi -# mieru_port_range -> mieru_ports -sed -i 's|^\toption mieru_port_range |\tlist mieru_ports |' /etc/config/fchomo 2>/dev/null - uci commit fchomo exit 0 diff --git a/small/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc b/small/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc index 287b498314..628e281eb4 100644 --- a/small/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc +++ b/small/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc @@ -258,6 +258,8 @@ config["global-client-fingerprint"] = uci.get(uciconf, ucitls, 'global_client_fi config.tls = { "certificate": uci.get(uciconf, ucitls, 'tls_cert_path'), "private-key": uci.get(uciconf, ucitls, 'tls_key_path'), + "client-auth-type": uci.get(uciconf, ucitls, 'tls_client_auth_type'), + "client-auth-cert": uci.get(uciconf, ucitls, 'tls_client_auth_cert_path'), "ech-key": uci.get(uciconf, ucitls, 'tls_ech_key') }; /* TLS END */ @@ -591,6 +593,8 @@ uci.foreach(uciconf, ucinode, (cfg) => { fingerprint: cfg.tls_fingerprint, alpn: cfg.tls_alpn, // Array "skip-cert-verify": strToBool(cfg.tls_skip_cert_verify), + certificate: cfg.tls_cert_path, // mTLS + "private-key": cfg.tls_key_path, // mTLS "client-fingerprint": cfg.tls_client_fingerprint, "ech-opts": cfg.tls_ech === '1' ? { enable: true, diff --git a/small/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc b/small/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc index 7bf922648f..cbe1787cc8 100644 --- a/small/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc +++ b/small/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc @@ -159,6 +159,8 @@ uci.foreach(uciconf, uciserver, (cfg) => { certificate: cfg.tls_cert_path, "private-key": cfg.tls_key_path }), + "client-auth-type": cfg.tls_client_auth_type, + "client-auth-cert": cfg.tls_client_auth_cert_path, "ech-key": cfg.tls_ech_key, } : {}), diff --git a/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo b/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo index 79371a9cb7..322b448511 100644 --- a/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo +++ b/small/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo @@ -19,7 +19,7 @@ function wGET(url, header, filepath) { let ua = 'Wget/1.21 (FullCombo Shark!)'; if (header) { - header = json(trim(header) || {}); + header = json(trim(header) || '{}'); header = join(' ', filter(map(keys(header), (k) => { let v = join(', ', type(header[k]) === 'array' ? filter(header[k], v => v) : []); @@ -385,9 +385,11 @@ const methods = { switch (filename) { case 'client_ca': case 'server_publickey': + case 'client_publickey': return writeCertificate(filename, false); break; case 'server_privatekey': + case 'client_privatekey': return writeCertificate(filename, true); break; default: diff --git a/small/naiveproxy/Makefile b/small/naiveproxy/Makefile index 60a272a066..0021f64be6 100644 --- a/small/naiveproxy/Makefile +++ b/small/naiveproxy/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=naiveproxy -PKG_VERSION:=140.0.7339.123-1 +PKG_VERSION:=140.0.7339.123-2 PKG_RELEASE:=1 # intel 80386 & riscv64 & cortex-a76 @@ -24,11 +24,11 @@ ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53) else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72) PKG_HASH:=b4d31db433ff3b1e28b0a2d0393317b815a41bdaa69f841516086dcfa4ac52bb else ifeq ($(ARCH_PACKAGES),aarch64_generic) - PKG_HASH:=3d150e002b54bed3dcd8ee1b3f87ec7bd2142d3272fcd8e7a6615d33689da7ef + PKG_HASH:=eccb7341e5a2a2307e2c7b469adb271fcb76c9b7d96428b5d9216eb91f07bc04 else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp) PKG_HASH:=c90c564d09648ef7f7b83595b8a0a4635ea8b293c4bfb3ac432d0cc5d003719e else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s) - PKG_HASH:=8547ed89569709da3a2bfa5b90cad77c6c671da2d721b703a2b1707306013d2f + PKG_HASH:=e6b0f057b719fffd3bc5f201538767c69e6367a1e1480808efe62d4f093e4b55 else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4) PKG_HASH:=4e41da71ed4a588d9da6748857b7063f441275d573c8935b24b41adad6f92136 else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4) @@ -38,13 +38,13 @@ else ifeq ($(ARCH_PACKAGES),arm_cortex-a7) else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4) PKG_HASH:=a374076612e4ee741c60d57173771bb6b6f2a2710d4d9a637afb6e8ddce98e76 else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4) - PKG_HASH:=b2287851d25d4701c16add18a75d52f5ae14312da64b9240fecfd3d9625f973e + PKG_HASH:=0b335809706c8ecbd1a6680adad7f74a0877b74496d11a556dbe6ccb7ab3e7a4 else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3) PKG_HASH:=12cf7be62a5d5fd5c0e886e1a22db445b9ef5f34728c1c788e8a8632ae0105a9 else ifeq ($(ARCH_PACKAGES),arm_cortex-a9) PKG_HASH:=9977f8a2c023caa4d7a50b8e4f721f9de18879b74f246c050ea2b15b57e6ff3b else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon) - PKG_HASH:=9969a31508d64a3c396e3f825fa0ad6ca39609db2752069bfe490ad6455a0377 + PKG_HASH:=d72fd69a5a67ee38c066dbed077f93949b2224ea0a5b45271ef60aac838acb31 else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16) PKG_HASH:=3092b1a38b437aef76bbfee69d9a17fcf862907015ef1083e8b2695bfed92723 else ifeq ($(ARCH_PACKAGES),arm_mpcore) diff --git a/small/nikki/Makefile b/small/nikki/Makefile index dac0019189..1cf4250b3e 100644 --- a/small/nikki/Makefile +++ b/small/nikki/Makefile @@ -1,15 +1,15 @@ include $(TOPDIR)/rules.mk PKG_NAME:=nikki -PKG_VERSION:=2025.08.27 -PKG_RELEASE:=2 +PKG_VERSION:=2025.09.24 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git -PKG_SOURCE_VERSION:=v1.19.13 -PKG_MIRROR_HASH:=94fdba59d158a4ac28358ab87d6152fe581ed3fbff71ad56b4a2aba462a485d6 +PKG_SOURCE_VERSION:=v1.19.14 +PKG_MIRROR_HASH:=1b5ad012709ffe6f087a10769be6dea77b07bf8b866cdd9f8e6ab3d98c6d7986 PKG_LICENSE:=GPL3.0+ PKG_MAINTAINER:=Joseph Mory diff --git a/v2rayn/v2rayN/ServiceLib/Events/AppEvents.cs b/v2rayn/v2rayN/ServiceLib/Events/AppEvents.cs new file mode 100644 index 0000000000..45de4de1e8 --- /dev/null +++ b/v2rayn/v2rayN/ServiceLib/Events/AppEvents.cs @@ -0,0 +1,32 @@ +using System.Reactive; + +namespace ServiceLib.Events; + +public static class AppEvents +{ + public static readonly EventChannel ReloadRequested = new(); + public static readonly EventChannel ShowHideWindowRequested = new(); + public static readonly EventChannel AddServerViaScanRequested = new(); + public static readonly EventChannel AddServerViaClipboardRequested = new(); + public static readonly EventChannel SubscriptionsUpdateRequested = new(); + + public static readonly EventChannel ProfilesRefreshRequested = new(); + public static readonly EventChannel SubscriptionsRefreshRequested = new(); + public static readonly EventChannel ProxiesReloadRequested = new(); + public static readonly EventChannel DispatcherStatisticsRequested = new(); + + public static readonly EventChannel SendSnackMsgRequested = new(); + public static readonly EventChannel SendMsgViewRequested = new(); + + public static readonly EventChannel AppExitRequested = new(); + public static readonly EventChannel ShutdownRequested = new(); + + public static readonly EventChannel AdjustMainLvColWidthRequested = new(); + + public static readonly EventChannel SetDefaultServerRequested = new(); + + public static readonly EventChannel RoutingsMenuRefreshRequested = new(); + public static readonly EventChannel TestServerRequested = new(); + public static readonly EventChannel InboundDisplayRequested = new(); + public static readonly EventChannel SysProxyChangeRequested = new(); +} diff --git a/v2rayn/v2rayN/ServiceLib/Events/EventChannel.cs b/v2rayn/v2rayN/ServiceLib/Events/EventChannel.cs new file mode 100644 index 0000000000..c3c58f3eac --- /dev/null +++ b/v2rayn/v2rayN/ServiceLib/Events/EventChannel.cs @@ -0,0 +1,29 @@ +using System.Reactive; +using System.Reactive.Linq; +using System.Reactive.Subjects; + +namespace ServiceLib.Events; + +public sealed class EventChannel +{ + private readonly ISubject _subject = Subject.Synchronize(new Subject()); + + public IObservable AsObservable() + { + return _subject.AsObservable(); + } + + public void Publish(T value) + { + _subject.OnNext(value); + } + + public void Publish() + { + if (typeof(T) != typeof(Unit)) + { + throw new InvalidOperationException("Publish() without value is only valid for EventChannel."); + } + _subject.OnNext((T)(object)Unit.Default); + } +} diff --git a/v2rayn/v2rayN/ServiceLib/GlobalUsings.cs b/v2rayn/v2rayN/ServiceLib/GlobalUsings.cs index 9a78c73b4a..a952f4a8a8 100644 --- a/v2rayn/v2rayN/ServiceLib/GlobalUsings.cs +++ b/v2rayn/v2rayN/ServiceLib/GlobalUsings.cs @@ -1,6 +1,7 @@ global using ServiceLib.Base; global using ServiceLib.Common; global using ServiceLib.Enums; +global using ServiceLib.Events; global using ServiceLib.Handler; global using ServiceLib.Helper; global using ServiceLib.Manager; diff --git a/v2rayn/v2rayN/ServiceLib/Handler/AppEvents.cs b/v2rayn/v2rayN/ServiceLib/Handler/AppEvents.cs deleted file mode 100644 index bda78922e3..0000000000 --- a/v2rayn/v2rayN/ServiceLib/Handler/AppEvents.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reactive; -using System.Reactive.Subjects; - -namespace ServiceLib.Handler; - -public static class AppEvents -{ - public static readonly Subject ReloadRequested = new(); - public static readonly Subject ShowHideWindowRequested = new(); - public static readonly Subject AddServerViaScanRequested = new(); - public static readonly Subject AddServerViaClipboardRequested = new(); - public static readonly Subject SubscriptionsUpdateRequested = new(); - - public static readonly Subject ProfilesRefreshRequested = new(); - public static readonly Subject SubscriptionsRefreshRequested = new(); - public static readonly Subject ProxiesReloadRequested = new(); - public static readonly Subject DispatcherStatisticsRequested = new(); - - public static readonly Subject SendSnackMsgRequested = new(); - public static readonly Subject SendMsgViewRequested = new(); - - public static readonly Subject AppExitRequested = new(); - public static readonly Subject ShutdownRequested = new(); - - public static readonly Subject AdjustMainLvColWidthRequested = new(); - - public static readonly Subject SetDefaultServerRequested = new(); - - public static readonly Subject RoutingsMenuRefreshRequested = new(); - public static readonly Subject TestServerRequested = new(); - public static readonly Subject InboundDisplayRequested = new(); - public static readonly Subject SysProxyChangeRequested = new(); -} diff --git a/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs b/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs index 57238b15b7..a0518d2127 100644 --- a/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs @@ -96,7 +96,7 @@ public sealed class AppManager Logging.SaveLog("AppExitAsync Begin"); await SysProxyHandler.UpdateSysProxy(_config, true); - AppEvents.AppExitRequested.OnNext(Unit.Default); + AppEvents.AppExitRequested.Publish(); await Task.Delay(50); //Wait for AppExitRequested to be processed await ConfigHandler.SaveConfig(_config); @@ -119,7 +119,7 @@ public sealed class AppManager public void Shutdown(bool byUser) { - AppEvents.ShutdownRequested.OnNext(byUser); + AppEvents.ShutdownRequested.Publish(byUser); } public async Task RebootAsAdmin() diff --git a/v2rayn/v2rayN/ServiceLib/Manager/NoticeManager.cs b/v2rayn/v2rayN/ServiceLib/Manager/NoticeManager.cs index f9e149ed9d..da034f020f 100644 --- a/v2rayn/v2rayN/ServiceLib/Manager/NoticeManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Manager/NoticeManager.cs @@ -11,7 +11,7 @@ public class NoticeManager { return; } - AppEvents.SendSnackMsgRequested.OnNext(content); + AppEvents.SendSnackMsgRequested.Publish(content); } public void SendMessage(string? content) @@ -20,7 +20,7 @@ public class NoticeManager { return; } - AppEvents.SendMsgViewRequested.OnNext(content); + AppEvents.SendMsgViewRequested.Publish(content); } public void SendMessageEx(string? content) diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs index 171cb4676f..ade01d3c57 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs @@ -223,7 +223,7 @@ public class CheckUpdateViewModel : MyReactiveObject { if (blReload) { - AppEvents.ReloadRequested.OnNext(Unit.Default); + AppEvents.ReloadRequested.Publish(); } else { diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs index ba5de790ac..be8898aefd 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs @@ -292,7 +292,7 @@ public class MainWindowViewModel : MyReactiveObject } if (_config.UiItem.EnableAutoAdjustMainLvColWidth) { - AppEvents.AdjustMainLvColWidthRequested.OnNext(Unit.Default); + AppEvents.AdjustMainLvColWidthRequested.Publish(); } } } @@ -303,7 +303,7 @@ public class MainWindowViewModel : MyReactiveObject { return; } - AppEvents.DispatcherStatisticsRequested.OnNext(update); + AppEvents.DispatcherStatisticsRequested.Publish(update); } #endregion Actions @@ -312,14 +312,14 @@ public class MainWindowViewModel : MyReactiveObject private async Task RefreshServers() { - AppEvents.ProfilesRefreshRequested.OnNext(Unit.Default); + AppEvents.ProfilesRefreshRequested.Publish(); await Task.Delay(200); } private void RefreshSubscriptions() { - AppEvents.SubscriptionsRefreshRequested.OnNext(Unit.Default); + AppEvents.SubscriptionsRefreshRequested.Publish(); } #endregion Servers && Groups @@ -451,7 +451,7 @@ public class MainWindowViewModel : MyReactiveObject var ret = await _updateView?.Invoke(EViewAction.OptionSettingWindow, null); if (ret == true) { - AppEvents.InboundDisplayRequested.OnNext(Unit.Default); + AppEvents.InboundDisplayRequested.Publish(); await Reload(); } } @@ -462,7 +462,7 @@ public class MainWindowViewModel : MyReactiveObject if (ret == true) { await ConfigHandler.InitBuiltinRouting(_config); - AppEvents.RoutingsMenuRefreshRequested.OnNext(Unit.Default); + AppEvents.RoutingsMenuRefreshRequested.Publish(); await Reload(); } } @@ -530,12 +530,12 @@ public class MainWindowViewModel : MyReactiveObject await SysProxyHandler.UpdateSysProxy(_config, false); await Task.Delay(1000); }); - AppEvents.TestServerRequested.OnNext(Unit.Default); + AppEvents.TestServerRequested.Publish(); var showClashUI = _config.IsRunningCore(ECoreType.sing_box); if (showClashUI) { - AppEvents.ProxiesReloadRequested.OnNext(Unit.Default); + AppEvents.ProxiesReloadRequested.Publish(); } RxApp.MainThreadScheduler.Schedule(() => ReloadResult(showClashUI)); @@ -565,7 +565,7 @@ public class MainWindowViewModel : MyReactiveObject { if (_config.UiItem.AutoHideStartup) { - AppEvents.ShowHideWindowRequested.OnNext(false); + AppEvents.ShowHideWindowRequested.Publish(false); } await Task.CompletedTask; } @@ -578,7 +578,7 @@ public class MainWindowViewModel : MyReactiveObject { await ConfigHandler.ApplyRegionalPreset(_config, type); await ConfigHandler.InitRouting(_config); - AppEvents.RoutingsMenuRefreshRequested.OnNext(Unit.Default); + AppEvents.RoutingsMenuRefreshRequested.Publish(); await ConfigHandler.SaveConfig(_config); await new UpdateService().UpdateGeoFileAll(_config, UpdateTaskHandler); diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs index fcf3450d89..b36c933c1f 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs @@ -275,7 +275,7 @@ public class ProfilesViewModel : MyReactiveObject private void Reload() { - AppEvents.ReloadRequested.OnNext(Unit.Default); + AppEvents.ReloadRequested.Publish(); } public async Task SetSpeedTestResult(SpeedTestResult result) @@ -361,7 +361,7 @@ public class ProfilesViewModel : MyReactiveObject public async Task RefreshServers() { - AppEvents.ProfilesRefreshRequested.OnNext(Unit.Default); + AppEvents.ProfilesRefreshRequested.Publish(); await Task.Delay(200); } diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs index 6dc795efbe..26386e0f73 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs @@ -148,17 +148,17 @@ public class StatusBarViewModel : MyReactiveObject NotifyLeftClickCmd = ReactiveCommand.CreateFromTask(async () => { - AppEvents.ShowHideWindowRequested.OnNext(null); + AppEvents.ShowHideWindowRequested.Publish(null); await Task.CompletedTask; }); ShowWindowCmd = ReactiveCommand.CreateFromTask(async () => { - AppEvents.ShowHideWindowRequested.OnNext(true); + AppEvents.ShowHideWindowRequested.Publish(true); await Task.CompletedTask; }); HideWindowCmd = ReactiveCommand.CreateFromTask(async () => { - AppEvents.ShowHideWindowRequested.OnNext(false); + AppEvents.ShowHideWindowRequested.Publish(false); await Task.CompletedTask; }); @@ -274,19 +274,19 @@ public class StatusBarViewModel : MyReactiveObject private async Task AddServerViaClipboard() { - AppEvents.AddServerViaClipboardRequested.OnNext(Unit.Default); + AppEvents.AddServerViaClipboardRequested.Publish(); await Task.Delay(1000); } private async Task AddServerViaScan() { - AppEvents.AddServerViaScanRequested.OnNext(Unit.Default); + AppEvents.AddServerViaScanRequested.Publish(); await Task.Delay(1000); } private async Task UpdateSubscriptionProcess(bool blProxy) { - AppEvents.SubscriptionsUpdateRequested.OnNext(blProxy); + AppEvents.SubscriptionsUpdateRequested.Publish(blProxy); await Task.Delay(1000); } @@ -348,7 +348,7 @@ public class StatusBarViewModel : MyReactiveObject { return; } - AppEvents.SetDefaultServerRequested.OnNext(SelectedServer.ID); + AppEvents.SetDefaultServerRequested.Publish(SelectedServer.ID); } public async Task TestServerAvailability() @@ -449,7 +449,7 @@ public class StatusBarViewModel : MyReactiveObject if (await ConfigHandler.SetDefaultRouting(_config, item) == 0) { NoticeManager.Instance.SendMessageEx(ResUI.TipChangeRouting); - AppEvents.ReloadRequested.OnNext(Unit.Default); + AppEvents.ReloadRequested.Publish(); _updateView?.Invoke(EViewAction.DispatcherRefreshIcon, null); } } @@ -496,7 +496,7 @@ public class StatusBarViewModel : MyReactiveObject } } await ConfigHandler.SaveConfig(_config); - AppEvents.ReloadRequested.OnNext(Unit.Default); + AppEvents.ReloadRequested.Publish(); } private bool AllowEnableTun() diff --git a/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs index fa4779cf3c..a3468a01da 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs @@ -54,7 +54,7 @@ public partial class App : Application { if (desktop.MainWindow != null) { - AppEvents.AddServerViaClipboardRequested.OnNext(Unit.Default); + AppEvents.AddServerViaClipboardRequested.Publish(); await Task.Delay(1000); } } diff --git a/v2rayn/v2rayN/v2rayN.Desktop/GlobalUsings.cs b/v2rayn/v2rayN/v2rayN.Desktop/GlobalUsings.cs index 4f2b931de1..aede90ccbd 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/GlobalUsings.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/GlobalUsings.cs @@ -2,6 +2,7 @@ global using ServiceLib; global using ServiceLib.Base; global using ServiceLib.Common; global using ServiceLib.Enums; +global using ServiceLib.Events; global using ServiceLib.Handler; global using ServiceLib.Manager; global using ServiceLib.Models; diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs index 86bd5d7b08..6c56cefc0a 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs @@ -253,7 +253,7 @@ public partial class MainWindow : WindowBase case EGlobalHotkey.SystemProxySet: case EGlobalHotkey.SystemProxyUnchanged: case EGlobalHotkey.SystemProxyPac: - AppEvents.SysProxyChangeRequested.OnNext((ESysProxyType)((int)e - 1)); + AppEvents.SysProxyChangeRequested.Publish((ESysProxyType)((int)e - 1)); break; } } diff --git a/v2rayn/v2rayN/v2rayN/GlobalUsings.cs b/v2rayn/v2rayN/v2rayN/GlobalUsings.cs index 4f2b931de1..aede90ccbd 100644 --- a/v2rayn/v2rayN/v2rayN/GlobalUsings.cs +++ b/v2rayn/v2rayN/v2rayN/GlobalUsings.cs @@ -2,6 +2,7 @@ global using ServiceLib; global using ServiceLib.Base; global using ServiceLib.Common; global using ServiceLib.Enums; +global using ServiceLib.Events; global using ServiceLib.Handler; global using ServiceLib.Manager; global using ServiceLib.Models; diff --git a/v2rayn/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/MainWindow.xaml.cs index 1d0d530c91..39bc398589 100644 --- a/v2rayn/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -241,7 +241,7 @@ public partial class MainWindow case EGlobalHotkey.SystemProxySet: case EGlobalHotkey.SystemProxyUnchanged: case EGlobalHotkey.SystemProxyPac: - AppEvents.SysProxyChangeRequested.OnNext((ESysProxyType)((int)e - 1)); + AppEvents.SysProxyChangeRequested.Publish((ESysProxyType)((int)e - 1)); break; } }