diff --git a/apps/admin/app/dashboard/servers/form-schema.ts b/apps/admin/app/dashboard/servers/form-schema.ts index 7169e82..a211701 100644 --- a/apps/admin/app/dashboard/servers/form-schema.ts +++ b/apps/admin/app/dashboard/servers/form-schema.ts @@ -1,4 +1,6 @@ import { z } from 'zod'; +import { generatePassword, generateRealityKeyPair, generateRealityShortId } from './generate'; +import { generateVlessX25519Pair } from './generate/mlkem768x25519plus'; export const protocols = [ 'shadowsocks', @@ -25,9 +27,12 @@ export type FieldConfig = { max?: number; step?: number; suffix?: string; - password?: number; + generate?: { + function: () => any; + updateFields?: Record; + }; condition?: (protocol: any, values: any) => boolean; - group?: 'basic' | 'transport' | 'security' | 'reality' | 'plugin'; + group?: 'basic' | 'transport' | 'security' | 'reality' | 'obfs' | 'encryption'; gridSpan?: 1 | 2; }; @@ -55,13 +60,9 @@ export const LABELS = { '360': '360', 'qq': 'QQ', // multiplex - 'off': 'Off', 'low': 'Low', 'middle': 'Middle', 'high': 'High', - // ss plugins - 'v2ray-plugin': 'V2Ray Plugin', - 'simple-obfs': 'Simple Obfs', } as const; // Flat arrays for enum-like sets @@ -75,8 +76,6 @@ export const SS_CIPHERS = [ '2022-blake3-chacha20-poly1305', ] as const; -export const SS_PLUGINS = ['none', 'simple-obfs', 'v2ray-plugin'] as const; - export const TRANSPORTS = { vmess: ['tcp', 'websocket', 'grpc'] as const, vless: ['tcp', 'websocket', 'grpc', 'mkcp', 'httpupgrade', 'xhttp'] as const, @@ -101,6 +100,10 @@ export const FLOWS = { export const TUIC_UDP_RELAY_MODES = ['native', 'quic'] as const; export const TUIC_CONGESTION = ['bbr', 'cubic', 'new_reno'] as const; +export const XHTTP_MODES = ['auto', 'packet-up', 'stream-up', 'stream-one'] as const; +export const ENCRYPTION_TYPES = ['none', 'mlkem768x25519plus'] as const; +export const ENCRYPTION_MODES = ['native', 'xorpub', 'random'] as const; +export const ENCRYPTION_RTT = ['0rtt', '1rtt'] as const; export const FINGERPRINTS = [ 'chrome', 'firefox', @@ -112,7 +115,7 @@ export const FINGERPRINTS = [ 'qq', ] as const; -export const multiplexLevels = ['off', 'low', 'middle', 'high'] as const; +export const multiplexLevels = ['none', 'low', 'middle', 'high'] as const; export function getLabel(value: string): string { const label = (LABELS as Record)[value]; @@ -129,8 +132,9 @@ const ss = z.object({ port: nullablePort, cipher: z.enum(SS_CIPHERS as any).nullish(), server_key: nullableString, - plugin: z.enum(SS_PLUGINS as any).nullish(), - plugin_options: nullableString, + obfs: z.enum(['none', 'http', 'tls'] as const).nullish(), + obfs_host: nullableString, + obfs_path: nullableString, }); const vmess = z.object({ @@ -163,6 +167,16 @@ const vless = z.object({ reality_private_key: nullableString, reality_public_key: nullableString, reality_short_id: nullableString, + mode: nullableString, + extra: nullableString, + encryption: z.enum(ENCRYPTION_TYPES as any).nullish(), + encryption_mode: z.enum(ENCRYPTION_MODES as any).nullish(), + encryption_rtt: z.enum(ENCRYPTION_RTT as any).nullish(), + encryption_ticket: nullableString, + encryption_server_padding: nullableString, + encryption_private_key: nullableString, + encryption_client_padding: nullableString, + encryption_password: nullableString, }); const trojan = z.object({ @@ -183,6 +197,7 @@ const hysteria2 = z.object({ hop_ports: nullableString, hop_interval: z.number().nullish(), obfs_password: nullableString, + obfs: z.enum(['none', 'salamander'] as const).nullish(), port: nullablePort, security: z.enum(SECURITY.hysteria2 as any).nullish(), sni: nullableString, @@ -281,8 +296,9 @@ export function getProtocolDefaultConfig(proto: ProtocolType) { port: null, cipher: 'chacha20-ietf-poly1305', server_key: null, - plugin: 'none', - plugin_opts: null, + obfs: 'none', + obfs_host: null, + obfs_path: null, } as any; case 'vmess': return { type: 'vmess', port: null, transport: 'tcp', security: 'none' } as any; @@ -296,6 +312,7 @@ export function getProtocolDefaultConfig(proto: ProtocolType) { port: null, hop_ports: null, hop_interval: null, + obfs: 'none', obfs_password: null, security: 'tls', up_mbps: null, @@ -335,7 +352,7 @@ export function getProtocolDefaultConfig(proto: ProtocolType) { return { type: 'meru', port: null, - multiplex: 'off', + multiplex: 'none', transport: 'tcp', } as any; case 'anytls': @@ -367,7 +384,7 @@ export const PROTOCOL_FIELDS: Record = { { name: 'cipher', type: 'select', - label: 'encryption_method', + label: 'cipher', options: SS_CIPHERS, defaultValue: 'chacha20-ietf-poly1305', group: 'basic', @@ -376,7 +393,9 @@ export const PROTOCOL_FIELDS: Record = { name: 'server_key', type: 'input', label: 'server_key', - password: 32, + generate: { + function: () => generatePassword(32), + }, group: 'basic', condition: (p) => [ @@ -386,29 +405,28 @@ export const PROTOCOL_FIELDS: Record = { ].includes(p.cipher), }, { - name: 'plugin', + name: 'obfs', type: 'select', - label: 'plugin', - options: SS_PLUGINS, + label: 'obfs', + options: ['none', 'http', 'tls'], defaultValue: 'none', - group: 'plugin', + group: 'obfs', }, { - name: 'plugin_opts', - type: 'textarea', - label: 'plugin_opts', - placeholder: (t: (key: string) => string, p: any) => { - switch (p.plugin) { - case 'simple-obfs': - return 'obfs=http;obfs-host=www.bing.com;path=/'; - case 'v2ray-plugin': - return 'WebSocket: mode=websocket;host=mydomain.me;path=/;tls=true\n\nQUIC: mode=quic;host=mydomain.me'; - default: - return 'key=value;key2=value2'; - } - }, - group: 'plugin', - condition: (p) => ['simple-obfs', 'v2ray-plugin'].includes(p.plugin), + name: 'obfs_host', + type: 'input', + label: 'obfs_host', + placeholder: 'e.g. www.bing.com', + group: 'obfs', + condition: (p) => p.obfs && p.obfs !== 'none', + }, + { + name: 'obfs_path', + type: 'input', + label: 'obfs_path', + placeholder: 'e.g. /path/to/obfs', + group: 'obfs', + condition: (p) => p.obfs && p.obfs !== 'none', }, ], vmess: [ @@ -441,6 +459,7 @@ export const PROTOCOL_FIELDS: Record = { name: 'host', type: 'input', label: 'host', + placeholder: 'e.g. www.bing.com', group: 'transport', condition: (p) => ['websocket', 'xhttp', 'httpupgrade'].includes(p.transport), }, @@ -448,6 +467,7 @@ export const PROTOCOL_FIELDS: Record = { name: 'path', type: 'input', label: 'path', + placeholder: 'e.g. /path/to/obfs', group: 'transport', condition: (p) => ['websocket', 'xhttp', 'httpupgrade'].includes(p.transport), }, @@ -492,14 +512,6 @@ export const PROTOCOL_FIELDS: Record = { placeholder: '1-65535', group: 'basic', }, - { - name: 'flow', - type: 'select', - label: 'flow', - options: FLOWS.vless, - defaultValue: 'none', - group: 'basic', - }, { name: 'transport', type: 'select', @@ -508,6 +520,15 @@ export const PROTOCOL_FIELDS: Record = { defaultValue: 'tcp', group: 'transport', }, + { + name: 'flow', + type: 'select', + label: 'flow', + options: FLOWS.vless, + defaultValue: 'none', + group: 'transport', + condition: (p) => p.transport === 'tcp', + }, { name: 'security', type: 'select', @@ -520,6 +541,7 @@ export const PROTOCOL_FIELDS: Record = { name: 'host', type: 'input', label: 'host', + placeholder: 'e.g. www.bing.com', group: 'transport', condition: (p) => ['websocket', 'mkcp', 'httpupgrade', 'xhttp'].includes(p.transport), }, @@ -527,6 +549,7 @@ export const PROTOCOL_FIELDS: Record = { name: 'path', type: 'input', label: 'path', + placeholder: 'e.g. /path/to/obfs', group: 'transport', condition: (p) => ['websocket', 'mkcp', 'httpupgrade', 'xhttp'].includes(p.transport), }, @@ -537,6 +560,23 @@ export const PROTOCOL_FIELDS: Record = { group: 'transport', condition: (p) => p.transport === 'grpc', }, + { + name: 'mode', + type: 'select', + label: 'mode', + options: XHTTP_MODES, + defaultValue: 'auto', + group: 'transport', + condition: (p) => p.transport === 'xhttp', + }, + { + name: 'extra', + type: 'textarea', + label: 'extra', + placeholder: '{}', + group: 'transport', + condition: (p) => p.transport === 'xhttp', + }, { name: 'sni', type: 'input', @@ -584,6 +624,13 @@ export const PROTOCOL_FIELDS: Record = { label: 'security_private_key', placeholder: (t) => t('security_private_key_placeholder'), group: 'reality', + generate: { + function: generateRealityKeyPair, + updateFields: { + reality_private_key: 'privateKey', + reality_public_key: 'publicKey', + }, + }, condition: (p) => p.security === 'reality', }, { @@ -599,8 +646,84 @@ export const PROTOCOL_FIELDS: Record = { type: 'input', label: 'security_short_id', group: 'reality', + generate: { + function: generateRealityShortId, + }, condition: (p) => p.security === 'reality', }, + { + name: 'encryption', + type: 'select', + label: 'encryption', + options: ENCRYPTION_TYPES, + defaultValue: 'none', + group: 'encryption', + }, + { + name: 'encryption_mode', + type: 'select', + label: 'encryption_mode', + options: ENCRYPTION_MODES, + defaultValue: 'native', + group: 'encryption', + condition: (p) => p.encryption === 'mlkem768x25519plus', + }, + { + name: 'encryption_rtt', + type: 'select', + label: 'encryption_rtt', + options: ENCRYPTION_RTT, + defaultValue: '1rtt', + group: 'encryption', + condition: (p) => p.encryption === 'mlkem768x25519plus', + }, + { + name: 'encryption_ticket', + type: 'input', + label: 'encryption_ticket', + placeholder: 'e.g. 600s', + group: 'encryption', + condition: (p) => p.encryption === 'mlkem768x25519plus' && p.encryption_rtt === '0rtt', + }, + { + name: 'encryption_server_padding', + type: 'input', + label: 'encryption_server_padding', + placeholder: 'e.g. 100-111-1111.75-0-111.50-0-3333', + group: 'encryption', + condition: (p) => p.encryption === 'mlkem768x25519plus', + }, + { + name: 'encryption_private_key', + type: 'input', + label: 'encryption_private_key', + placeholder: (t) => t('encryption_private_key_placeholder'), + group: 'encryption', + generate: { + function: () => generateVlessX25519Pair(), + updateFields: { + encryption_private_key: 'privateKeyB64', + encryption_password: 'passwordB64', + }, + }, + condition: (p) => p.encryption === 'mlkem768x25519plus', + }, + { + name: 'encryption_client_padding', + type: 'input', + label: 'encryption_client_padding', + placeholder: 'e.g. 100-111-1111.75-0-111.50-0-3333', + group: 'encryption', + condition: (p) => p.encryption === 'mlkem768x25519plus', + }, + { + name: 'encryption_password', + type: 'input', + label: 'encryption_password', + placeholder: (t) => t('encryption_password_placeholder'), + group: 'encryption', + condition: (p) => p.encryption === 'mlkem768x25519plus', + }, ], trojan: [ { @@ -632,6 +755,7 @@ export const PROTOCOL_FIELDS: Record = { name: 'host', type: 'input', label: 'host', + placeholder: 'e.g. www.bing.com', group: 'transport', condition: (p) => ['websocket', 'xhttp', 'httpupgrade'].includes(p.transport), }, @@ -639,6 +763,7 @@ export const PROTOCOL_FIELDS: Record = { name: 'path', type: 'input', label: 'path', + placeholder: 'e.g. /path/to/obfs', group: 'transport', condition: (p) => ['websocket', 'xhttp', 'httpupgrade'].includes(p.transport), }, @@ -699,13 +824,24 @@ export const PROTOCOL_FIELDS: Record = { suffix: 'S', group: 'basic', }, + { + name: 'obfs', + type: 'select', + label: 'obfs', + options: ['none', 'salamander'], + defaultValue: 'none', + group: 'obfs', + }, { name: 'obfs_password', type: 'input', label: 'obfs_password', placeholder: (t) => t('obfs_password_placeholder'), - password: 16, - group: 'basic', + generate: { + function: () => generatePassword(16), + }, + group: 'obfs', + condition: (p) => p.obfs && p.obfs !== 'none', }, { name: 'up_mbps', diff --git a/apps/admin/app/dashboard/servers/generate/index.ts b/apps/admin/app/dashboard/servers/generate/index.ts new file mode 100644 index 0000000..7a5ddda --- /dev/null +++ b/apps/admin/app/dashboard/servers/generate/index.ts @@ -0,0 +1,6 @@ +export { generatePassword } from './random'; +export { + generateRealityKeyPair, + generateRealityShortId, + publicKeyFromPrivate, +} from './reality-key'; diff --git a/apps/admin/app/dashboard/servers/generate/mlkem768x25519plus.ts b/apps/admin/app/dashboard/servers/generate/mlkem768x25519plus.ts new file mode 100644 index 0000000..94c6b87 --- /dev/null +++ b/apps/admin/app/dashboard/servers/generate/mlkem768x25519plus.ts @@ -0,0 +1,21 @@ +import { x25519 } from '@noble/curves/ed25519'; + +const toB64 = (u8: Uint8Array): string => { + if (typeof Buffer !== 'undefined') return Buffer.from(u8).toString('base64'); + let s = ''; + for (const b of u8) s += String.fromCharCode(b); + return btoa(s); +}; + +export type VlessX25519Pair = { + passwordB64: string; + privateKeyB64: string; +}; + +export function generateVlessX25519Pair(): VlessX25519Pair { + const { secretKey, publicKey } = x25519.keygen(); + return { + passwordB64: toB64(publicKey), + privateKeyB64: toB64(secretKey), + }; +} diff --git a/apps/admin/app/dashboard/servers/generate/random.ts b/apps/admin/app/dashboard/servers/generate/random.ts new file mode 100644 index 0000000..0ba403a --- /dev/null +++ b/apps/admin/app/dashboard/servers/generate/random.ts @@ -0,0 +1,11 @@ +import { uid } from 'radash'; + +/** + * Generate a random password + * @param length Length of the password + * @param charset Character set to use (defaults to alphanumeric) + * @returns Randomly generated password + */ +export function generatePassword(length = 16, charset?: string) { + return uid(length, charset).toLowerCase(); +} diff --git a/apps/admin/app/dashboard/servers/generate/reality-key.ts b/apps/admin/app/dashboard/servers/generate/reality-key.ts new file mode 100644 index 0000000..6869e99 --- /dev/null +++ b/apps/admin/app/dashboard/servers/generate/reality-key.ts @@ -0,0 +1,49 @@ +import { x25519 } from '@noble/curves/ed25519.js'; + +function toB64Url(bytes: Uint8Array) { + return btoa(String.fromCharCode(...bytes)) + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=+$/g, ''); +} +function fromB64Url(s: string) { + const b64 = s + .replace(/-/g, '+') + .replace(/_/g, '/') + .padEnd(Math.ceil(s.length / 4) * 4, '='); + const bin = atob(b64); + return new Uint8Array([...bin].map((c) => c.charCodeAt(0))); +} +/** + * Generate a Reality key pair + * @returns An object containing the private and public keys in base64url format + */ +export function generateRealityKeyPair() { + const { secretKey, publicKey } = x25519.keygen(); + return { privateKey: toB64Url(secretKey), publicKey: toB64Url(publicKey) }; +} + +/** + * Derive public key from private key + * @param privateKeyB64Url Private key in base64url format + * @returns Public key in base64url format + */ +export function publicKeyFromPrivate(privateKeyB64Url: string) { + return toB64Url(x25519.getPublicKey(fromB64Url(privateKeyB64Url))); +} + +/** + * Generate a short ID for Reality + * @returns A random hexadecimal string of length 2, 4, 6, 8, 10, 12, 14, or 16 + */ +export function generateRealityShortId() { + const hex = '0123456789abcdef'; + const lengths = [2, 4, 6, 8, 10, 12, 14, 16]; + const idx = Math.floor(Math.random() * lengths.length); + const len = lengths[idx] ?? 16; + let out = ''; + for (let i = 0; i < len; i++) { + out += hex.charAt(Math.floor(Math.random() * hex.length)); + } + return out; +} diff --git a/apps/admin/app/dashboard/servers/server-form.tsx b/apps/admin/app/dashboard/servers/server-form.tsx index 9a499f1..882b0db 100644 --- a/apps/admin/app/dashboard/servers/server-form.tsx +++ b/apps/admin/app/dashboard/servers/server-form.tsx @@ -38,7 +38,6 @@ import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; import { Icon } from '@workspace/ui/custom-components/icon'; import { cn } from '@workspace/ui/lib/utils'; import { useTranslations } from 'next-intl'; -import { uid } from 'radash'; import { useEffect, useState } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { toast } from 'sonner'; @@ -55,12 +54,14 @@ import { function DynamicField({ field, control, + form, protocolIndex, protocolData, t, }: { field: FieldConfig; control: any; + form: any; protocolIndex: number; protocolData: any; t: (key: string) => string; @@ -97,17 +98,29 @@ function DynamicField({ } onValueChange={(v) => fieldProps.onChange(v)} suffix={ - field.password ? ( + field.generate ? ( ) : ( field.suffix @@ -225,7 +238,7 @@ function DynamicField({ field.placeholder ? typeof field.placeholder === 'function' ? field.placeholder(t, protocolData) - : t(field.placeholder) + : field.placeholder : undefined } onChange={(e) => fieldProps.onChange(e.target.value)} @@ -246,6 +259,7 @@ function renderFieldsByGroup( fields: FieldConfig[], group: string, control: any, + form: any, protocolIndex: number, protocolData: any, t: (key: string) => string, @@ -260,6 +274,7 @@ function renderFieldsByGroup( key={field.name} field={field} control={control} + form={form} protocolIndex={protocolIndex} protocolData={protocolData} t={t} @@ -274,6 +289,7 @@ function renderGroupCard( fields: FieldConfig[], group: string, control: any, + form: any, protocolIndex: number, protocolData: any, t: (key: string) => string, @@ -294,7 +310,7 @@ function renderGroupCard( {t(title)}
- {renderFieldsByGroup(fields, group, control, protocolIndex, protocolData, t)} + {renderFieldsByGroup(fields, group, control, form, protocolIndex, protocolData, t)}
@@ -541,19 +557,48 @@ export default function ServerForm(props: {
- {renderGroupCard('basic', fields, 'basic', control, i, current, t)} - {renderGroupCard('plugin', fields, 'plugin', control, i, current, t)} + {renderGroupCard('basic', fields, 'basic', control, form, i, current, t)} + {renderGroupCard('obfs', fields, 'obfs', control, form, i, current, t)} {renderGroupCard( 'transport', fields, 'transport', control, + form, + i, + current, + t, + )} + {renderGroupCard( + 'security', + fields, + 'security', + control, + form, + i, + current, + t, + )} + {renderGroupCard( + 'reality', + fields, + 'reality', + control, + form, + i, + current, + t, + )} + {renderGroupCard( + 'encryption', + fields, + 'encryption', + control, + form, i, current, t, )} - {renderGroupCard('security', fields, 'security', control, i, current, t)} - {renderGroupCard('reality', fields, 'reality', control, i, current, t)}
diff --git a/apps/admin/locales/cs-CZ/servers.json b/apps/admin/locales/cs-CZ/servers.json index 5a60806..80ab93f 100644 --- a/apps/admin/locales/cs-CZ/servers.json +++ b/apps/admin/locales/cs-CZ/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Zadejte šířku pásma, nechte prázdné pro BBR", "basic": "Základní konfigurace", "cancel": "Zrušit", + "cipher": "Šifrovací algoritmus", "city": "Město", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Upravit server", "edit": "Upravit", "enabled": "Povoleno", - "encryption_method": "Metoda šifrování", + "encryption": "Metoda šifrování", + "encryption_client_padding": "Padding klienta", + "encryption_mode": "Režim", + "encryption_password": "Heslo", + "encryption_password_placeholder": "Nechte prázdné pro automatickou generaci, nahraďte ručně pro postkvantové šifrování", + "encryption_private_key": "Soukromý klíč", + "encryption_private_key_placeholder": "Nechte prázdné pro automatickou generaci, nahraďte ručně pro postkvantové šifrování", + "encryption_rtt": "RTT", + "encryption_server_padding": "Padding serveru", + "encryption_ticket": "Čas lístku", "expireTime": "Čas vypršení", "expired": "Vypršelo", + "extra": "Další konfigurace", "flow": "Tok", "hop_interval": "Interval skoku", "hop_ports": "Porty skoku", @@ -64,12 +75,16 @@ "migrateFailed": "Migrace dat se nezdařila", "migrated": "Data byla úspěšně migrována", "migrating": "Probíhá migrace...", + "mode": "Režim", "multiplex": "Multiplex", "name": "Název", "noData": "Žádná data", "notAvailable": "Není k dispozici", + "obfs": "Obfuskování", + "obfs_host": "Obfs hostitel", "obfs_password": "Heslo pro obfuskaci", "obfs_password_placeholder": "Zadejte heslo pro obfuskaci", + "obfs_path": "Obfs cesta", "offline": "Offline", "online": "Online", "onlineUsers": "Online uživatelé", @@ -78,8 +93,6 @@ "pageTitle": "Servery", "path": "Cesta", "please_select": "Prosím vyberte", - "plugin": "Konfigurace pluginu", - "plugin_opts": "Možnosti pluginu", "port": "Port", "protocol_configurations": "Konfigurace protokolu", "protocol_configurations_desc": "Povolit a nakonfigurovat požadované typy protokolů", diff --git a/apps/admin/locales/de-DE/servers.json b/apps/admin/locales/de-DE/servers.json index 2cf5148..4633b3d 100644 --- a/apps/admin/locales/de-DE/servers.json +++ b/apps/admin/locales/de-DE/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Geben Sie die Bandbreite ein, lassen Sie das Feld leer für BBR", "basic": "Grundkonfiguration", "cancel": "Abbrechen", + "cipher": "Verschlüsselungsalgorithmus", "city": "Stadt", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Server bearbeiten", "edit": "Bearbeiten", "enabled": "Aktiviert", - "encryption_method": "Verschlüsselungsmethode", + "encryption": "Verschlüsselungsmethode", + "encryption_client_padding": "Client-Padding", + "encryption_mode": "Modus", + "encryption_password": "Passwort", + "encryption_password_placeholder": "Leer lassen für automatische Generierung, manuell ersetzen für post-quanten Verschlüsselung", + "encryption_private_key": "Privater Schlüssel", + "encryption_private_key_placeholder": "Leer lassen für automatische Generierung, manuell ersetzen für post-quanten Verschlüsselung", + "encryption_rtt": "RTT", + "encryption_server_padding": "Server-Padding", + "encryption_ticket": "Ticketzeit", "expireTime": "Ablaufzeit", "expired": "Abgelaufen", + "extra": "Zusätzliche Konfiguration", "flow": "Fluss", "hop_interval": "Hop-Intervall", "hop_ports": "Hop-Ports", @@ -64,12 +75,16 @@ "migrateFailed": "Datenmigration fehlgeschlagen", "migrated": "Daten erfolgreich migriert", "migrating": "Wird migriert...", + "mode": "Modus", "multiplex": "Multiplex", "name": "Name", "noData": "Keine Daten", "notAvailable": "Nicht verfügbar", + "obfs": "Obfuskation", + "obfs_host": "Obfs-Host", "obfs_password": "Obfuskationspasswort", "obfs_password_placeholder": "Obfuskationspasswort eingeben", + "obfs_path": "Obfs-Pfad", "offline": "Offline", "online": "Online", "onlineUsers": "Online-Benutzer", @@ -78,8 +93,6 @@ "pageTitle": "Server", "path": "Pfad", "please_select": "Bitte auswählen", - "plugin": "Plugin-Konfiguration", - "plugin_opts": "Plugin-Optionen", "port": "Port", "protocol_configurations": "Protokollkonfigurationen", "protocol_configurations_desc": "Aktivieren und konfigurieren Sie die erforderlichen Protokolltypen", diff --git a/apps/admin/locales/en-US/servers.json b/apps/admin/locales/en-US/servers.json index 77831f5..3a6d273 100644 --- a/apps/admin/locales/en-US/servers.json +++ b/apps/admin/locales/en-US/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Enter bandwidth, leave empty for BBR", "basic": "Basic Configuration", "cancel": "Cancel", + "cipher": "Encryption Algorithm", "city": "City", "config": { "title": "Node configuration", @@ -49,9 +50,19 @@ "drawerEditTitle": "Edit Server", "edit": "Edit", "enabled": "Enabled", - "encryption_method": "Encryption method", + "encryption": "Encryption Method", + "encryption_client_padding": "Client Padding", + "encryption_mode": "Mode", + "encryption_password": "Password", + "encryption_password_placeholder": "Leave empty for auto-generation, replace manually for post-quantum encryption", + "encryption_private_key": "Private Key", + "encryption_private_key_placeholder": "Leave empty for auto-generation, replace manually for post-quantum encryption", + "encryption_rtt": "RTT", + "encryption_server_padding": "Server Padding", + "encryption_ticket": "Ticket time", "expireTime": "Expire time", "expired": "Expired", + "extra": "Extra Configuration", "flow": "Flow", "hop_interval": "Hop interval", "hop_ports": "Hop ports", @@ -64,12 +75,16 @@ "migrateFailed": "Data migration failed", "migrated": "Data migrated successfully", "migrating": "Migrating...", + "mode": "Mode", "multiplex": "Multiplex", "name": "Name", "noData": "No data", "notAvailable": "N/A", + "obfs": "Obfuscation", + "obfs_host": "Obfs Host", "obfs_password": "Obfuscation password", "obfs_password_placeholder": "Enter obfuscation password", + "obfs_path": "Obfs Path", "offline": "Offline", "online": "Online", "onlineUsers": "Online users", @@ -78,8 +93,6 @@ "pageTitle": "Servers", "path": "Path", "please_select": "Please select", - "plugin": "Plugin Configuration", - "plugin_opts": "Plugin Options", "port": "Port", "protocol_configurations": "Protocol Configurations", "protocol_configurations_desc": "Enable and configure the required protocol types", diff --git a/apps/admin/locales/es-ES/servers.json b/apps/admin/locales/es-ES/servers.json index cc980b3..58a6c68 100644 --- a/apps/admin/locales/es-ES/servers.json +++ b/apps/admin/locales/es-ES/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Introduce el ancho de banda, deja vacío para BBR", "basic": "Configuración Básica", "cancel": "Cancelar", + "cipher": "Algoritmo de Cifrado", "city": "Ciudad", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Editar Servidor", "edit": "Editar", "enabled": "Habilitado", - "encryption_method": "Método de cifrado", + "encryption": "Método de Cifrado", + "encryption_client_padding": "Relleno del Cliente", + "encryption_mode": "Modo", + "encryption_password": "Contraseña", + "encryption_password_placeholder": "Dejar vacío para auto-generación, reemplazar manualmente para cifrado post-cuántico", + "encryption_private_key": "Clave Privada", + "encryption_private_key_placeholder": "Dejar vacío para auto-generación, reemplazar manualmente para cifrado post-cuántico", + "encryption_rtt": "RTT", + "encryption_server_padding": "Relleno del Servidor", + "encryption_ticket": "Tiempo de Ticket", "expireTime": "Tiempo de expiración", "expired": "Expirado", + "extra": "Configuración Extra", "flow": "Flujo", "hop_interval": "Intervalo de salto", "hop_ports": "Puertos de salto", @@ -64,12 +75,16 @@ "migrateFailed": "La migración de datos falló", "migrated": "Datos migrados con éxito", "migrating": "Migrando...", + "mode": "Modo", "multiplex": "Multiplex", "name": "Nombre", "noData": "Sin datos", "notAvailable": "N/A", + "obfs": "Ofuscación", + "obfs_host": "Host de Ofuscación", "obfs_password": "Contraseña de ofuscación", "obfs_password_placeholder": "Ingrese la contraseña de ofuscación", + "obfs_path": "Ruta de Ofuscación", "offline": "Desconectado", "online": "Conectado", "onlineUsers": "Usuarios en línea", @@ -78,8 +93,6 @@ "pageTitle": "Servidores", "path": "Ruta", "please_select": "Por favor seleccione", - "plugin": "Configuración del Plugin", - "plugin_opts": "Opciones del Plugin", "port": "Puerto", "protocol_configurations": "Configuraciones de Protocolo", "protocol_configurations_desc": "Habilitar y configurar los tipos de protocolo requeridos", diff --git a/apps/admin/locales/es-MX/servers.json b/apps/admin/locales/es-MX/servers.json index f1e7a77..b2bbe46 100644 --- a/apps/admin/locales/es-MX/servers.json +++ b/apps/admin/locales/es-MX/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Ingresa el ancho de banda, deja vacío para BBR", "basic": "Configuración Básica", "cancel": "Cancelar", + "cipher": "Algoritmo de Cifrado", "city": "Ciudad", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Editar Servidor", "edit": "Editar", "enabled": "Habilitado", - "encryption_method": "Método de encriptación", + "encryption": "Método de Cifrado", + "encryption_client_padding": "Relleno del Cliente", + "encryption_mode": "Modo", + "encryption_password": "Contraseña", + "encryption_password_placeholder": "Dejar vacío para auto-generación, reemplazar manualmente para cifrado post-cuántico", + "encryption_private_key": "Clave Privada", + "encryption_private_key_placeholder": "Dejar vacío para auto-generación, reemplazar manualmente para cifrado post-cuántico", + "encryption_rtt": "RTT", + "encryption_server_padding": "Relleno del Servidor", + "encryption_ticket": "Tiempo de Ticket", "expireTime": "Tiempo de expiración", "expired": "Expirado", + "extra": "Configuración Extra", "flow": "Flujo", "hop_interval": "Intervalo de salto", "hop_ports": "Puertos de salto", @@ -64,12 +75,16 @@ "migrateFailed": "La migración de datos falló", "migrated": "Datos migrados con éxito", "migrating": "Migrando...", + "mode": "Modo", "multiplex": "Multiplex", "name": "Nombre", "noData": "Sin datos", "notAvailable": "N/A", + "obfs": "Ofuscación", + "obfs_host": "Host de Ofuscación", "obfs_password": "Contraseña de ofuscación", "obfs_password_placeholder": "Ingresa la contraseña de ofuscación", + "obfs_path": "Ruta de Ofuscación", "offline": "Desconectado", "online": "Conectado", "onlineUsers": "Usuarios en línea", @@ -78,8 +93,6 @@ "pageTitle": "Servidores", "path": "Ruta", "please_select": "Por favor selecciona", - "plugin": "Configuración del Plugin", - "plugin_opts": "Opciones del Plugin", "port": "Puerto", "protocol_configurations": "Configuraciones de Protocolo", "protocol_configurations_desc": "Habilitar y configurar los tipos de protocolo requeridos", diff --git a/apps/admin/locales/fa-IR/servers.json b/apps/admin/locales/fa-IR/servers.json index 791f8ea..b169b2c 100644 --- a/apps/admin/locales/fa-IR/servers.json +++ b/apps/admin/locales/fa-IR/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "عرض پهنای باند، برای BBR خالی بگذارید", "basic": "پیکربندی پایه", "cancel": "لغو", + "cipher": "الگوریتم رمزنگاری", "city": "شهر", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "ویرایش سرور", "edit": "ویرایش", "enabled": "فعال", - "encryption_method": "روش رمزنگاری", + "encryption": "روش رمزنگاری", + "encryption_client_padding": "پدینگ کلاینت", + "encryption_mode": "حالت", + "encryption_password": "گذرواژه", + "encryption_password_placeholder": "برای تولید خودکار خالی بگذارید، به صورت دستی برای رمزنگاری پساکوانتومی جایگزین کنید", + "encryption_private_key": "کلید خصوصی", + "encryption_private_key_placeholder": "برای تولید خودکار خالی بگذارید، به صورت دستی برای رمزنگاری پساکوانتومی جایگزین کنید", + "encryption_rtt": "RTT", + "encryption_server_padding": "پدینگ سرور", + "encryption_ticket": "زمان بلیط", "expireTime": "زمان انقضا", "expired": "منقضی شده", + "extra": "پیکربندی اضافی", "flow": "جریان", "hop_interval": "فاصله پرش", "hop_ports": "پورت‌های پرش", @@ -64,12 +75,16 @@ "migrateFailed": "انتقال داده ناموفق بود", "migrated": "داده با موفقیت منتقل شد", "migrating": "در حال انتقال...", + "mode": "حالت", "multiplex": "چندمنظوره", "name": "نام", "noData": "هیچ داده‌ای", "notAvailable": "غیرقابل دسترسی", + "obfs": "پنهان‌سازی", + "obfs_host": "میزبان پنهان‌سازی", "obfs_password": "رمز عبور اختفا", "obfs_password_placeholder": "رمز عبور اختفا را وارد کنید", + "obfs_path": "مسیر پنهان‌سازی", "offline": "آفلاین", "online": "آنلاین", "onlineUsers": "کاربران آنلاین", @@ -78,8 +93,6 @@ "pageTitle": "سرورها", "path": "مسیر", "please_select": "لطفاً انتخاب کنید", - "plugin": "پیکربندی پلاگین", - "plugin_opts": "گزینه‌های پلاگین", "port": "پورت", "protocol_configurations": "پیکربندی‌های پروتکل", "protocol_configurations_desc": "پروتکل‌های مورد نیاز را فعال و پیکربندی کنید", diff --git a/apps/admin/locales/fi-FI/servers.json b/apps/admin/locales/fi-FI/servers.json index 354c96d..8de5434 100644 --- a/apps/admin/locales/fi-FI/servers.json +++ b/apps/admin/locales/fi-FI/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Syötä kaistanleveys, jätä tyhjäksi BBR:lle", "basic": "Perusasetukset", "cancel": "Peruuta", + "cipher": "Salausalgoritmi", "city": "Kaupunki", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Muokkaa palvelinta", "edit": "Muokkaa", "enabled": "Käytössä", - "encryption_method": "Salausmenetelmä", + "encryption": "Salausmenetelmä", + "encryption_client_padding": "Asiakkaan täyte", + "encryption_mode": "Tila", + "encryption_password": "Salasana", + "encryption_password_placeholder": "Jätä tyhjäksi automaattista generointia varten, vaihda manuaalisesti post-kvanttisalausta varten", + "encryption_private_key": "Yksityinen avain", + "encryption_private_key_placeholder": "Jätä tyhjäksi automaattista generointia varten, vaihda manuaalisesti post-kvanttisalausta varten", + "encryption_rtt": "RTT", + "encryption_server_padding": "Palvelimen täyte", + "encryption_ticket": "Lippuaika", "expireTime": "Voimassaoloaika", "expired": "Vanhentunut", + "extra": "Lisäasetukset", "flow": "Virta", "hop_interval": "Hyppyvälit", "hop_ports": "Hyppysatamat", @@ -64,12 +75,16 @@ "migrateFailed": "Tietojen siirto epäonnistui", "migrated": "Tiedot siirretty onnistuneesti", "migrating": "Siirretään...", + "mode": "Tila", "multiplex": "Monistamo", "name": "Nimi", "noData": "Ei tietoja", "notAvailable": "Ei saatavilla", + "obfs": "Häilytys", + "obfs_host": "Häilytys isäntä", "obfs_password": "Häilytyssalasana", "obfs_password_placeholder": "Syötä häilytyssalasana", + "obfs_path": "Häilytys polku", "offline": "Offline", "online": "Online", "onlineUsers": "Verkossa olevat käyttäjät", @@ -78,8 +93,6 @@ "pageTitle": "Palvelimet", "path": "Polku", "please_select": "Ole hyvä ja valitse", - "plugin": "Laajennuksen asetukset", - "plugin_opts": "Laajennusvaihtoehdot", "port": "Portti", "protocol_configurations": "Protokolla-asetukset", "protocol_configurations_desc": "Ota käyttöön ja määritä tarvittavat protokollatyypit", diff --git a/apps/admin/locales/fr-FR/servers.json b/apps/admin/locales/fr-FR/servers.json index c0e65cd..c4e4190 100644 --- a/apps/admin/locales/fr-FR/servers.json +++ b/apps/admin/locales/fr-FR/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Entrez la bande passante, laissez vide pour BBR", "basic": "Configuration de base", "cancel": "Annuler", + "cipher": "Algorithme de chiffrement", "city": "Ville", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Modifier le serveur", "edit": "Modifier", "enabled": "Activé", - "encryption_method": "Méthode de chiffrement", + "encryption": "Méthode de chiffrement", + "encryption_client_padding": "Remplissage client", + "encryption_mode": "Mode", + "encryption_password": "Mot de passe", + "encryption_password_placeholder": "Laissez vide pour une génération automatique, remplacez manuellement pour un chiffrement post-quantique", + "encryption_private_key": "Clé privée", + "encryption_private_key_placeholder": "Laissez vide pour une génération automatique, remplacez manuellement pour un chiffrement post-quantique", + "encryption_rtt": "RTT", + "encryption_server_padding": "Remplissage serveur", + "encryption_ticket": "Temps de ticket", "expireTime": "Temps d'expiration", "expired": "Expiré", + "extra": "Configuration supplémentaire", "flow": "Flux", "hop_interval": "Intervalle de saut", "hop_ports": "Ports de saut", @@ -64,12 +75,16 @@ "migrateFailed": "Échec de la migration des données", "migrated": "Données migrées avec succès", "migrating": "Migration en cours...", + "mode": "Mode", "multiplex": "Multiplex", "name": "Nom", "noData": "Aucune donnée", "notAvailable": "N/A", + "obfs": "Obfuscation", + "obfs_host": "Hôte Obfs", "obfs_password": "Mot de passe d'obfuscation", "obfs_password_placeholder": "Entrez le mot de passe d'obfuscation", + "obfs_path": "Chemin Obfs", "offline": "Hors ligne", "online": "En ligne", "onlineUsers": "Utilisateurs en ligne", @@ -78,8 +93,6 @@ "pageTitle": "Serveurs", "path": "Chemin", "please_select": "Veuillez sélectionner", - "plugin": "Configuration du plugin", - "plugin_opts": "Options du plugin", "port": "Port", "protocol_configurations": "Configurations de protocole", "protocol_configurations_desc": "Activer et configurer les types de protocole requis", diff --git a/apps/admin/locales/hi-IN/servers.json b/apps/admin/locales/hi-IN/servers.json index 3fd77ab..bca6873 100644 --- a/apps/admin/locales/hi-IN/servers.json +++ b/apps/admin/locales/hi-IN/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "बैंडविड्थ दर्ज करें, BBR के लिए खाली छोड़ें", "basic": "बुनियादी कॉन्फ़िगरेशन", "cancel": "रद्द करें", + "cipher": "एन्क्रिप्शन एल्गोरिदम", "city": "शहर", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "सर्वर संपादित करें", "edit": "संपादित करें", "enabled": "सक्षम", - "encryption_method": "एन्क्रिप्शन विधि", + "encryption": "एन्क्रिप्शन विधि", + "encryption_client_padding": "क्लाइंट पैडिंग", + "encryption_mode": "मोड", + "encryption_password": "पासवर्ड", + "encryption_password_placeholder": "स्वतः उत्पन्न करने के लिए खाली छोड़ें, पोस्ट-क्वांटम एन्क्रिप्शन के लिए मैन्युअल रूप से बदलें", + "encryption_private_key": "निजी कुंजी", + "encryption_private_key_placeholder": "स्वतः उत्पन्न करने के लिए खाली छोड़ें, पोस्ट-क्वांटम एन्क्रिप्शन के लिए मैन्युअल रूप से बदलें", + "encryption_rtt": "RTT", + "encryption_server_padding": "सर्वर पैडिंग", + "encryption_ticket": "टिकट समय", "expireTime": "समाप्ति समय", "expired": "समय समाप्त", + "extra": "अतिरिक्त कॉन्फ़िगरेशन", "flow": "प्रवाह", "hop_interval": "हॉप अंतराल", "hop_ports": "हॉप पोर्ट", @@ -64,12 +75,16 @@ "migrateFailed": "डेटा माइग्रेशन विफल", "migrated": "डेटा सफलतापूर्वक माइग्रेट किया गया", "migrating": "माइग्रेट किया जा रहा है...", + "mode": "मोड", "multiplex": "मल्टीप्लेक्स", "name": "नाम", "noData": "कोई डेटा नहीं", "notAvailable": "उपलब्ध नहीं", + "obfs": "ओबफस्केशन", + "obfs_host": "ओबफ्स होस्ट", "obfs_password": "अवशोषण पासवर्ड", "obfs_password_placeholder": "अवशोषण पासवर्ड दर्ज करें", + "obfs_path": "ओबफ्स पथ", "offline": "ऑफलाइन", "online": "ऑनलाइन", "onlineUsers": "ऑनलाइन उपयोगकर्ता", @@ -78,8 +93,6 @@ "pageTitle": "सर्वर", "path": "पथ", "please_select": "कृपया चुनें", - "plugin": "प्लगइन कॉन्फ़िगरेशन", - "plugin_opts": "प्लगइन विकल्प", "port": "पोर्ट", "protocol_configurations": "प्रोटोकॉल कॉन्फ़िगरेशन", "protocol_configurations_desc": "आवश्यक प्रोटोकॉल प्रकारों को सक्षम और कॉन्फ़िगर करें", diff --git a/apps/admin/locales/hu-HU/servers.json b/apps/admin/locales/hu-HU/servers.json index da6faa5..403bb04 100644 --- a/apps/admin/locales/hu-HU/servers.json +++ b/apps/admin/locales/hu-HU/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Adja meg a sávszélességet, hagyja üresen a BBR-hez", "basic": "Alapértelmezett Beállítások", "cancel": "Mégse", + "cipher": "Titkosítási algoritmus", "city": "Város", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Szerver szerkesztése", "edit": "Szerkesztés", "enabled": "Engedélyezve", - "encryption_method": "Titkosítási módszer", + "encryption": "Titkosítási módszer", + "encryption_client_padding": "Kliens kitöltés", + "encryption_mode": "Mód", + "encryption_password": "Jelszó", + "encryption_password_placeholder": "Hagyja üresen az automatikus generáláshoz, cserélje ki kézzel a poszt-kvantum titkosításhoz", + "encryption_private_key": "Privát kulcs", + "encryption_private_key_placeholder": "Hagyja üresen az automatikus generáláshoz, cserélje ki kézzel a poszt-kvantum titkosításhoz", + "encryption_rtt": "RTT", + "encryption_server_padding": "Szerver kitöltés", + "encryption_ticket": "Jegy idő", "expireTime": "Lejárati idő", "expired": "Lejárt", + "extra": "További konfiguráció", "flow": "Forgalom", "hop_interval": "Ugrás időköz", "hop_ports": "Ugrás portok", @@ -64,12 +75,16 @@ "migrateFailed": "Az adatok migrálása sikertelen", "migrated": "Az adatok sikeresen migrálva", "migrating": "Migrálás...", + "mode": "Mód", "multiplex": "Multiplex", "name": "Név", "noData": "Nincs adat", "notAvailable": "N/A", + "obfs": "Obfuszkálás", + "obfs_host": "Obfs gazda", "obfs_password": "Obfuszkálás jelszó", "obfs_password_placeholder": "Adja meg az obfuszkálás jelszót", + "obfs_path": "Obfs útvonal", "offline": "Offline", "online": "Online", "onlineUsers": "Online felhasználók", @@ -78,8 +93,6 @@ "pageTitle": "Szerverek", "path": "Útvonal", "please_select": "Kérjük, válasszon", - "plugin": "Bővítmény Beállítások", - "plugin_opts": "Bővítmény Opciók", "port": "Port", "protocol_configurations": "Protokoll Beállítások", "protocol_configurations_desc": "Engedélyezze és konfigurálja a szükséges protokolltípusokat", diff --git a/apps/admin/locales/ja-JP/servers.json b/apps/admin/locales/ja-JP/servers.json index 14a25e2..bf7e062 100644 --- a/apps/admin/locales/ja-JP/servers.json +++ b/apps/admin/locales/ja-JP/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "帯域幅を入力してください。BBRの場合は空白のままにしてください。", "basic": "基本設定", "cancel": "キャンセル", + "cipher": "暗号化アルゴリズム", "city": "都市", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "サーバーを編集", "edit": "編集", "enabled": "有効", - "encryption_method": "暗号化方式", + "encryption": "暗号化方式", + "encryption_client_padding": "クライアントパディング", + "encryption_mode": "モード", + "encryption_password": "パスワード", + "encryption_password_placeholder": "自動生成のために空白のままにし、ポスト量子暗号化のために手動で置き換えてください", + "encryption_private_key": "秘密鍵", + "encryption_private_key_placeholder": "自動生成のために空白のままにし、ポスト量子暗号化のために手動で置き換えてください", + "encryption_rtt": "RTT", + "encryption_server_padding": "サーバーパディング", + "encryption_ticket": "チケット時間", "expireTime": "有効期限", "expired": "期限切れ", + "extra": "追加設定", "flow": "フロー", "hop_interval": "ホップ間隔", "hop_ports": "ホップポート", @@ -64,12 +75,16 @@ "migrateFailed": "データの移行に失敗しました", "migrated": "データが正常に移行されました", "migrating": "移行中...", + "mode": "モード", "multiplex": "マルチプレックス", "name": "名前", "noData": "データなし", "notAvailable": "利用不可", + "obfs": "難読化", + "obfs_host": "難読化ホスト", "obfs_password": "難読化パスワード", "obfs_password_placeholder": "難読化パスワードを入力してください", + "obfs_path": "難読化パス", "offline": "オフライン", "online": "オンライン", "onlineUsers": "オンラインユーザー", @@ -78,8 +93,6 @@ "pageTitle": "サーバー", "path": "パス", "please_select": "選択してください", - "plugin": "プラグイン設定", - "plugin_opts": "プラグインオプション", "port": "ポート", "protocol_configurations": "プロトコル設定", "protocol_configurations_desc": "必要なプロトコルタイプを有効にして設定します", diff --git a/apps/admin/locales/ko-KR/servers.json b/apps/admin/locales/ko-KR/servers.json index 21602ae..4d0db1e 100644 --- a/apps/admin/locales/ko-KR/servers.json +++ b/apps/admin/locales/ko-KR/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "대역폭을 입력하세요. BBR을 사용하려면 비워 두세요.", "basic": "기본 설정", "cancel": "취소", + "cipher": "암호화 알고리즘", "city": "도시", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "서버 편집", "edit": "편집", "enabled": "활성화됨", - "encryption_method": "암호화 방법", + "encryption": "암호화 방법", + "encryption_client_padding": "클라이언트 패딩", + "encryption_mode": "모드", + "encryption_password": "비밀번호", + "encryption_password_placeholder": "자동 생성하려면 비워 두고, 포스트 양자 암호화를 위해 수동으로 교체하세요", + "encryption_private_key": "개인 키", + "encryption_private_key_placeholder": "자동 생성하려면 비워 두고, 포스트 양자 암호화를 위해 수동으로 교체하세요", + "encryption_rtt": "RTT", + "encryption_server_padding": "서버 패딩", + "encryption_ticket": "티켓 시간", "expireTime": "만료 시간", "expired": "만료됨", + "extra": "추가 구성", "flow": "흐름", "hop_interval": "홉 간격", "hop_ports": "홉 포트", @@ -64,12 +75,16 @@ "migrateFailed": "데이터 마이그레이션 실패", "migrated": "데이터가 성공적으로 마이그레이션되었습니다", "migrating": "마이그레이션 중...", + "mode": "모드", "multiplex": "멀티플렉스", "name": "이름", "noData": "데이터 없음", "notAvailable": "사용 불가", + "obfs": "난독화", + "obfs_host": "난독화 호스트", "obfs_password": "난독화 비밀번호", "obfs_password_placeholder": "난독화 비밀번호를 입력하세요", + "obfs_path": "난독화 경로", "offline": "오프라인", "online": "온라인", "onlineUsers": "온라인 사용자", @@ -78,8 +93,6 @@ "pageTitle": "서버", "path": "경로", "please_select": "선택해 주세요", - "plugin": "플러그인 설정", - "plugin_opts": "플러그인 옵션", "port": "포트", "protocol_configurations": "프로토콜 설정", "protocol_configurations_desc": "필요한 프로토콜 유형을 활성화하고 구성합니다", diff --git a/apps/admin/locales/no-NO/servers.json b/apps/admin/locales/no-NO/servers.json index da6ff9b..19cc720 100644 --- a/apps/admin/locales/no-NO/servers.json +++ b/apps/admin/locales/no-NO/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Skriv inn båndbredde, la stå tomt for BBR", "basic": "Grunnleggende Konfigurasjon", "cancel": "Avbryt", + "cipher": "Krypteringsalgoritme", "city": "By", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Rediger server", "edit": "Rediger", "enabled": "Aktivert", - "encryption_method": "Krypteringsmetode", + "encryption": "Krypteringsmetode", + "encryption_client_padding": "Klient Padding", + "encryption_mode": "Modus", + "encryption_password": "Passord", + "encryption_password_placeholder": "La stå tom for automatisk generering, erstatt manuelt for post-kvantum kryptering", + "encryption_private_key": "Privat nøkkel", + "encryption_private_key_placeholder": "La stå tom for automatisk generering, erstatt manuelt for post-kvantum kryptering", + "encryption_rtt": "RTT", + "encryption_server_padding": "Server Padding", + "encryption_ticket": "Billettid", "expireTime": "Utløpstid", "expired": "Utløpt", + "extra": "Ekstra konfigurasjon", "flow": "Flyt", "hop_interval": "Hoppintervall", "hop_ports": "Hoppporter", @@ -64,12 +75,16 @@ "migrateFailed": "Datamigrering mislyktes", "migrated": "Data migrert med suksess", "migrating": "Migrerer...", + "mode": "Modus", "multiplex": "Multiplex", "name": "Navn", "noData": "Ingen data", "notAvailable": "Ikke tilgjengelig", + "obfs": "Obfuskering", + "obfs_host": "Obfs Vert", "obfs_password": "Obfuskasjonspassord", "obfs_password_placeholder": "Skriv inn obfuskasjonspassord", + "obfs_path": "Obfs Sti", "offline": "Frakoblet", "online": "På nett", "onlineUsers": "Brukere på nett", @@ -78,8 +93,6 @@ "pageTitle": "Servere", "path": "Sti", "please_select": "Vennligst velg", - "plugin": "Plugin Konfigurasjon", - "plugin_opts": "Plugin Alternativer", "port": "Port", "protocol_configurations": "Protokoll Konfigurasjoner", "protocol_configurations_desc": "Aktiver og konfigurer de nødvendige protokolltypene", diff --git a/apps/admin/locales/pl-PL/servers.json b/apps/admin/locales/pl-PL/servers.json index 713fa6f..3721dc1 100644 --- a/apps/admin/locales/pl-PL/servers.json +++ b/apps/admin/locales/pl-PL/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Wprowadź przepustowość, pozostaw puste dla BBR", "basic": "Podstawowa konfiguracja", "cancel": "Anuluj", + "cipher": "Algorytm szyfrowania", "city": "Miasto", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Edytuj serwer", "edit": "Edytuj", "enabled": "Włączony", - "encryption_method": "Metoda szyfrowania", + "encryption": "Metoda szyfrowania", + "encryption_client_padding": "Padding klienta", + "encryption_mode": "Tryb", + "encryption_password": "Hasło", + "encryption_password_placeholder": "Pozostaw puste dla automatycznego generowania, zastąp ręcznie dla szyfrowania post-kwantowego", + "encryption_private_key": "Klucz prywatny", + "encryption_private_key_placeholder": "Pozostaw puste dla automatycznego generowania, zastąp ręcznie dla szyfrowania post-kwantowego", + "encryption_rtt": "RTT", + "encryption_server_padding": "Padding serwera", + "encryption_ticket": "Czas biletu", "expireTime": "Czas wygaśnięcia", "expired": "Wygasł", + "extra": "Dodatkowa konfiguracja", "flow": "Przepływ", "hop_interval": "Interwał skoku", "hop_ports": "Porty skoku", @@ -64,12 +75,16 @@ "migrateFailed": "Migracja danych nie powiodła się", "migrated": "Dane zostały pomyślnie zmigrowane", "migrating": "Migracja...", + "mode": "Tryb", "multiplex": "Multiplex", "name": "Nazwa", "noData": "Brak danych", "notAvailable": "N/D", + "obfs": "Obfuskacja", + "obfs_host": "Host obfuskacji", "obfs_password": "Hasło obfuskacji", "obfs_password_placeholder": "Wprowadź hasło obfuskacji", + "obfs_path": "Ścieżka obfuskacji", "offline": "Offline", "online": "Online", "onlineUsers": "Użytkownicy online", @@ -78,8 +93,6 @@ "pageTitle": "Serwery", "path": "Ścieżka", "please_select": "Proszę wybrać", - "plugin": "Konfiguracja wtyczki", - "plugin_opts": "Opcje wtyczki", "port": "Port", "protocol_configurations": "Konfiguracje protokołów", "protocol_configurations_desc": "Włącz i skonfiguruj wymagane typy protokołów", diff --git a/apps/admin/locales/pt-BR/servers.json b/apps/admin/locales/pt-BR/servers.json index 1443319..087c1aa 100644 --- a/apps/admin/locales/pt-BR/servers.json +++ b/apps/admin/locales/pt-BR/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Insira a largura de banda, deixe em branco para BBR", "basic": "Configuração Básica", "cancel": "Cancelar", + "cipher": "Algoritmo de Criptografia", "city": "Cidade", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Editar Servidor", "edit": "Editar", "enabled": "Ativado", - "encryption_method": "Método de criptografia", + "encryption": "Método de Criptografia", + "encryption_client_padding": "Preenchimento do Cliente", + "encryption_mode": "Modo", + "encryption_password": "Senha", + "encryption_password_placeholder": "Deixe em branco para auto-geração, substitua manualmente para criptografia pós-quântica", + "encryption_private_key": "Chave Privada", + "encryption_private_key_placeholder": "Deixe em branco para auto-geração, substitua manualmente para criptografia pós-quântica", + "encryption_rtt": "RTT", + "encryption_server_padding": "Preenchimento do Servidor", + "encryption_ticket": "Tempo do Ticket", "expireTime": "Tempo de expiração", "expired": "Expirado", + "extra": "Configuração Extra", "flow": "Fluxo", "hop_interval": "Intervalo de salto", "hop_ports": "Portas de salto", @@ -64,12 +75,16 @@ "migrateFailed": "A migração de dados falhou", "migrated": "Dados migrados com sucesso", "migrating": "Migrando...", + "mode": "Modo", "multiplex": "Multiplex", "name": "Nome", "noData": "Sem dados", "notAvailable": "N/D", + "obfs": "Ofuscação", + "obfs_host": "Host de Ofuscação", "obfs_password": "Senha de ofuscação", "obfs_password_placeholder": "Insira a senha de ofuscação", + "obfs_path": "Caminho de Ofuscação", "offline": "Offline", "online": "Online", "onlineUsers": "Usuários online", @@ -78,8 +93,6 @@ "pageTitle": "Servidores", "path": "Caminho", "please_select": "Por favor, selecione", - "plugin": "Configuração do Plugin", - "plugin_opts": "Opções do Plugin", "port": "Porta", "protocol_configurations": "Configurações de Protocolo", "protocol_configurations_desc": "Ative e configure os tipos de protocolo necessários", diff --git a/apps/admin/locales/ro-RO/servers.json b/apps/admin/locales/ro-RO/servers.json index 1da8eac..ed82e34 100644 --- a/apps/admin/locales/ro-RO/servers.json +++ b/apps/admin/locales/ro-RO/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Introduceți lățimea de bandă, lăsați liber pentru BBR", "basic": "Configurare de bază", "cancel": "Anulează", + "cipher": "Algoritm de criptare", "city": "Oraș", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Editează Server", "edit": "Editează", "enabled": "Activat", - "encryption_method": "Metodă de criptare", + "encryption": "Metodă de criptare", + "encryption_client_padding": "Padding client", + "encryption_mode": "Mod", + "encryption_password": "Parolă", + "encryption_password_placeholder": "Lăsați gol pentru generare automată, înlocuiți manual pentru criptare post-cuantică", + "encryption_private_key": "Cheie privată", + "encryption_private_key_placeholder": "Lăsați gol pentru generare automată, înlocuiți manual pentru criptare post-cuantică", + "encryption_rtt": "RTT", + "encryption_server_padding": "Padding server", + "encryption_ticket": "Timp bilet", "expireTime": "Timp de expirare", "expired": "Expirat", + "extra": "Configurație suplimentară", "flow": "Flux", "hop_interval": "Interval de hop", "hop_ports": "Porturi hop", @@ -64,12 +75,16 @@ "migrateFailed": "Migrarea datelor a eșuat", "migrated": "Datele au fost migrate cu succes", "migrating": "Se migrează...", + "mode": "Mod", "multiplex": "Multiplex", "name": "Nume", "noData": "Fără date", "notAvailable": "N/A", + "obfs": "Obfuscare", + "obfs_host": "Host Obfs", "obfs_password": "Parola de obfuscare", "obfs_password_placeholder": "Introdu parola de obfuscare", + "obfs_path": "Cale Obfs", "offline": "Offline", "online": "Online", "onlineUsers": "Utilizatori online", @@ -78,8 +93,6 @@ "pageTitle": "Servere", "path": "Cale", "please_select": "Te rog selectează", - "plugin": "Configurare plugin", - "plugin_opts": "Opțiuni plugin", "port": "Port", "protocol_configurations": "Configurări protocol", "protocol_configurations_desc": "Activează și configurează tipurile de protocol necesare", diff --git a/apps/admin/locales/ru-RU/servers.json b/apps/admin/locales/ru-RU/servers.json index c63d0bf..f4a5a4f 100644 --- a/apps/admin/locales/ru-RU/servers.json +++ b/apps/admin/locales/ru-RU/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Введите пропускную способность, оставьте пустым для BBR", "basic": "Базовая конфигурация", "cancel": "Отмена", + "cipher": "Алгоритм шифрования", "city": "Город", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Редактировать сервер", "edit": "Редактировать", "enabled": "Включено", - "encryption_method": "Метод шифрования", + "encryption": "Метод шифрования", + "encryption_client_padding": "Дополнение клиента", + "encryption_mode": "Режим", + "encryption_password": "Пароль", + "encryption_password_placeholder": "Оставьте пустым для авто-генерации, замените вручную для пост-квантового шифрования", + "encryption_private_key": "Закрытый ключ", + "encryption_private_key_placeholder": "Оставьте пустым для авто-генерации, замените вручную для пост-квантового шифрования", + "encryption_rtt": "RTT", + "encryption_server_padding": "Дополнение сервера", + "encryption_ticket": "Время билета", "expireTime": "Время истечения", "expired": "Истекло", + "extra": "Дополнительная конфигурация", "flow": "Поток", "hop_interval": "Интервал перехода", "hop_ports": "Порты перехода", @@ -64,12 +75,16 @@ "migrateFailed": "Ошибка при переносе данных", "migrated": "Данные успешно перенесены", "migrating": "Перенос данных...", + "mode": "Режим", "multiplex": "Мультиплекс", "name": "Имя", "noData": "Нет данных", "notAvailable": "Недоступно", + "obfs": "Обфускация", + "obfs_host": "Обфусцированный хост", "obfs_password": "Пароль обфускации", "obfs_password_placeholder": "Введите пароль обфускации", + "obfs_path": "Обфусцированный путь", "offline": "Офлайн", "online": "Онлайн", "onlineUsers": "Онлайн пользователи", @@ -78,8 +93,6 @@ "pageTitle": "Серверы", "path": "Путь", "please_select": "Пожалуйста, выберите", - "plugin": "Конфигурация плагина", - "plugin_opts": "Опции плагина", "port": "Порт", "protocol_configurations": "Конфигурации протоколов", "protocol_configurations_desc": "Включите и настройте необходимые типы протоколов", diff --git a/apps/admin/locales/th-TH/servers.json b/apps/admin/locales/th-TH/servers.json index 4915de0..a5916db 100644 --- a/apps/admin/locales/th-TH/servers.json +++ b/apps/admin/locales/th-TH/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "กรุณากรอกแบนด์วิธ ทิ้งว่างไว้สำหรับ BBR", "basic": "การตั้งค่าพื้นฐาน", "cancel": "ยกเลิก", + "cipher": "อัลกอริธึมการเข้ารหัส", "city": "เมือง", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "แก้ไขเซิร์ฟเวอร์", "edit": "แก้ไข", "enabled": "เปิดใช้งาน", - "encryption_method": "วิธีการเข้ารหัส", + "encryption": "วิธีการเข้ารหัส", + "encryption_client_padding": "การเติมข้อมูลของลูกค้า", + "encryption_mode": "โหมด", + "encryption_password": "รหัสผ่าน", + "encryption_password_placeholder": "ปล่อยว่างเพื่อสร้างอัตโนมัติ เปลี่ยนด้วยตนเองสำหรับการเข้ารหัสหลังควอนตัม", + "encryption_private_key": "กุญแจส่วนตัว", + "encryption_private_key_placeholder": "ปล่อยว่างเพื่อสร้างอัตโนมัติ เปลี่ยนด้วยตนเองสำหรับการเข้ารหัสหลังควอนตัม", + "encryption_rtt": "RTT", + "encryption_server_padding": "การเติมข้อมูลของเซิร์ฟเวอร์", + "encryption_ticket": "เวลาตั๋ว", "expireTime": "เวลาหมดอายุ", "expired": "หมดอายุ", + "extra": "การกำหนดค่าพิเศษ", "flow": "การไหล", "hop_interval": "ช่วงเวลาการกระโดด", "hop_ports": "พอร์ตการกระโดด", @@ -64,12 +75,16 @@ "migrateFailed": "การย้ายข้อมูลล้มเหลว", "migrated": "ย้ายข้อมูลสำเร็จ", "migrating": "กำลังย้ายข้อมูล...", + "mode": "โหมด", "multiplex": "หลายช่อง", "name": "ชื่อ", "noData": "ไม่มีข้อมูล", "notAvailable": "ไม่สามารถใช้ได้", + "obfs": "การทำให้ไม่สามารถอ่านได้", + "obfs_host": "โฮสต์การทำให้ไม่สามารถอ่านได้", "obfs_password": "รหัสผ่านการปกปิด", "obfs_password_placeholder": "กรอกรหัสผ่านการปกปิด", + "obfs_path": "เส้นทางการทำให้ไม่สามารถอ่านได้", "offline": "ออฟไลน์", "online": "ออนไลน์", "onlineUsers": "ผู้ใช้งานออนไลน์", @@ -78,8 +93,6 @@ "pageTitle": "เซิร์ฟเวอร์", "path": "เส้นทาง", "please_select": "กรุณาเลือก", - "plugin": "การตั้งค่าปลั๊กอิน", - "plugin_opts": "ตัวเลือกปลั๊กอิน", "port": "พอร์ต", "protocol_configurations": "การตั้งค่าโปรโตคอล", "protocol_configurations_desc": "เปิดใช้งานและกำหนดค่าประเภทโปรโตคอลที่ต้องการ", diff --git a/apps/admin/locales/tr-TR/servers.json b/apps/admin/locales/tr-TR/servers.json index ba20405..10ea350 100644 --- a/apps/admin/locales/tr-TR/servers.json +++ b/apps/admin/locales/tr-TR/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Bant genişliğini girin, BBR için boş bırakın", "basic": "Temel Yapılandırma", "cancel": "İptal", + "cipher": "Şifreleme Algoritması", "city": "Şehir", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Sunucuyu Düzenle", "edit": "Düzenle", "enabled": "Etkin", - "encryption_method": "Şifreleme yöntemi", + "encryption": "Şifreleme Yöntemi", + "encryption_client_padding": "İstemci Dolgusu", + "encryption_mode": "Mod", + "encryption_password": "Şifre", + "encryption_password_placeholder": "Otomatik oluşturma için boş bırakın, post-kuantum şifreleme için manuel olarak değiştirin", + "encryption_private_key": "Özel Anahtar", + "encryption_private_key_placeholder": "Otomatik oluşturma için boş bırakın, post-kuantum şifreleme için manuel olarak değiştirin", + "encryption_rtt": "RTT", + "encryption_server_padding": "Sunucu Dolgusu", + "encryption_ticket": "Bilet süresi", "expireTime": "Son kullanma zamanı", "expired": "Süresi dolmuş", + "extra": "Ek Yapılandırma", "flow": "Akış", "hop_interval": "Atlama aralığı", "hop_ports": "Atlama portları", @@ -64,12 +75,16 @@ "migrateFailed": "Veri taşıma işlemi başarısız oldu", "migrated": "Veri başarıyla taşındı", "migrating": "Taşınıyor...", + "mode": "Mod", "multiplex": "Çoklu Salon", "name": "İsim", "noData": "Veri yok", "notAvailable": "Mevcut değil", + "obfs": "Obfuscation", + "obfs_host": "Obfs Ana Bilgisi", "obfs_password": "Gizleme şifresi", "obfs_password_placeholder": "Gizleme şifresini girin", + "obfs_path": "Obfs Yolu", "offline": "Çevrimdışı", "online": "Çevrimiçi", "onlineUsers": "Çevrimiçi kullanıcılar", @@ -78,8 +93,6 @@ "pageTitle": "Sunucular", "path": "Yol", "please_select": "Lütfen seçin", - "plugin": "Eklenti Yapılandırması", - "plugin_opts": "Eklenti Seçenekleri", "port": "Port", "protocol_configurations": "Protokol Yapılandırmaları", "protocol_configurations_desc": "Gerekli protokol türlerini etkinleştir ve yapılandır", diff --git a/apps/admin/locales/uk-UA/servers.json b/apps/admin/locales/uk-UA/servers.json index ce94c2e..feac063 100644 --- a/apps/admin/locales/uk-UA/servers.json +++ b/apps/admin/locales/uk-UA/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Введіть пропускну здатність, залиште порожнім для BBR", "basic": "Базова конфігурація", "cancel": "Скасувати", + "cipher": "Алгоритм шифрування", "city": "Місто", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Редагувати сервер", "edit": "Редагувати", "enabled": "Увімкнено", - "encryption_method": "Метод шифрування", + "encryption": "Метод шифрування", + "encryption_client_padding": "Паддінг клієнта", + "encryption_mode": "Режим", + "encryption_password": "Пароль", + "encryption_password_placeholder": "Залиште порожнім для автоматичної генерації, замініть вручну для пост-квантового шифрування", + "encryption_private_key": "Приватний ключ", + "encryption_private_key_placeholder": "Залиште порожнім для автоматичної генерації, замініть вручну для пост-квантового шифрування", + "encryption_rtt": "RTT", + "encryption_server_padding": "Паддінг сервера", + "encryption_ticket": "Час квитка", "expireTime": "Час закінчення", "expired": "Термін дії закінчився", + "extra": "Додаткова конфігурація", "flow": "Потік", "hop_interval": "Інтервал стрибка", "hop_ports": "Порти стрибка", @@ -64,12 +75,16 @@ "migrateFailed": "Міграція даних не вдалася", "migrated": "Дані успішно мігрували", "migrating": "Міграція...", + "mode": "Режим", "multiplex": "Мультиплекс", "name": "Ім'я", "noData": "Немає даних", "notAvailable": "Н/Д", + "obfs": "Обфускація", + "obfs_host": "Обфускаційний хост", "obfs_password": "Пароль обфускації", "obfs_password_placeholder": "Введіть пароль обфускації", + "obfs_path": "Обфускаційний шлях", "offline": "Офлайн", "online": "Онлайн", "onlineUsers": "Онлайн користувачі", @@ -78,8 +93,6 @@ "pageTitle": "Сервери", "path": "Шлях", "please_select": "Будь ласка, виберіть", - "plugin": "Конфігурація плагіна", - "plugin_opts": "Опції плагіна", "port": "Порт", "protocol_configurations": "Конфігурації протоколів", "protocol_configurations_desc": "Увімкніть та налаштуйте необхідні типи протоколів", diff --git a/apps/admin/locales/vi-VN/servers.json b/apps/admin/locales/vi-VN/servers.json index e5cdede..94fd41d 100644 --- a/apps/admin/locales/vi-VN/servers.json +++ b/apps/admin/locales/vi-VN/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "Nhập băng thông, để trống cho BBR", "basic": "Cấu Hình Cơ Bản", "cancel": "Hủy", + "cipher": "Thuật toán Mã hóa", "city": "Thành phố", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "Chỉnh sửa Máy chủ", "edit": "Chỉnh sửa", "enabled": "Đã bật", - "encryption_method": "Phương pháp mã hóa", + "encryption": "Phương pháp Mã hóa", + "encryption_client_padding": "B padding của Client", + "encryption_mode": "Chế độ", + "encryption_password": "Mật khẩu", + "encryption_password_placeholder": "Để trống để tự động tạo, thay thế thủ công cho mã hóa sau lượng tử", + "encryption_private_key": "Khóa riêng", + "encryption_private_key_placeholder": "Để trống để tự động tạo, thay thế thủ công cho mã hóa sau lượng tử", + "encryption_rtt": "RTT", + "encryption_server_padding": "B padding của Server", + "encryption_ticket": "Thời gian vé", "expireTime": "Thời gian hết hạn", "expired": "Đã hết hạn", + "extra": "Cấu hình thêm", "flow": "Lưu lượng", "hop_interval": "Khoảng thời gian nhảy", "hop_ports": "Cổng nhảy", @@ -64,12 +75,16 @@ "migrateFailed": "Di chuyển dữ liệu thất bại", "migrated": "Dữ liệu đã được di chuyển thành công", "migrating": "Đang di chuyển...", + "mode": "Chế độ", "multiplex": "Rạp chiếu phim", "name": "Tên", "noData": "Không có dữ liệu", "notAvailable": "Không khả dụng", + "obfs": "Làm mờ", + "obfs_host": "Máy chủ Obfs", "obfs_password": "Mật khẩu làm mờ", "obfs_password_placeholder": "Nhập mật khẩu làm mờ", + "obfs_path": "Đường dẫn Obfs", "offline": "Ngoại tuyến", "online": "Trực tuyến", "onlineUsers": "Người dùng trực tuyến", @@ -78,8 +93,6 @@ "pageTitle": "Máy chủ", "path": "Đường dẫn", "please_select": "Vui lòng chọn", - "plugin": "Cấu Hình Plugin", - "plugin_opts": "Tùy Chọn Plugin", "port": "Cổng", "protocol_configurations": "Cấu Hình Giao Thức", "protocol_configurations_desc": "Kích hoạt và cấu hình các loại giao thức cần thiết", diff --git a/apps/admin/locales/zh-CN/servers.json b/apps/admin/locales/zh-CN/servers.json index 561ccc8..df4ca5e 100644 --- a/apps/admin/locales/zh-CN/servers.json +++ b/apps/admin/locales/zh-CN/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "请输入带宽,留空则使用BBR", "basic": "基础配置", "cancel": "取消", + "cipher": "加密算法", "city": "城市", "config": { "title": "节点配置", @@ -49,9 +50,19 @@ "drawerEditTitle": "编辑服务器", "edit": "编辑", "enabled": "启用", - "encryption_method": "加密方式", + "encryption": "加密方式", + "encryption_client_padding": "客户端填充", + "encryption_mode": "模式", + "encryption_password": "密码", + "encryption_password_placeholder": "留空自动生成,需抗量子加密请自行替换", + "encryption_private_key": "私钥", + "encryption_private_key_placeholder": "留空自动生成,需抗量子加密请自行替换", + "encryption_rtt": "RTT", + "encryption_server_padding": "服务器填充", + "encryption_ticket": "票据时间", "expireTime": "到期时间", "expired": "已过期", + "extra": "额外配置", "flow": "流控", "hop_interval": "跳跃端口间隔", "hop_ports": "跳跃端口", @@ -64,12 +75,16 @@ "migrateFailed": "数据迁移失败", "migrated": "数据迁移成功", "migrating": "迁移中...", + "mode": "模式", "multiplex": "多路复用", "name": "名称", "noData": "暂无数据", "notAvailable": "—", + "obfs": "混淆", + "obfs_host": "混淆主机", "obfs_password": "混淆密码", "obfs_password_placeholder": "输入混淆密码", + "obfs_path": "混淆路径", "offline": "离线", "online": "在线", "onlineUsers": "在线人数", @@ -78,8 +93,6 @@ "pageTitle": "服务器", "path": "路径", "please_select": "请选择", - "plugin": "插件配置", - "plugin_opts": "插件选项", "port": "端口", "protocol_configurations": "协议配置", "protocol_configurations_desc": "启用并配置所需的协议类型", diff --git a/apps/admin/locales/zh-HK/servers.json b/apps/admin/locales/zh-HK/servers.json index 687e248..d73591c 100644 --- a/apps/admin/locales/zh-HK/servers.json +++ b/apps/admin/locales/zh-HK/servers.json @@ -4,6 +4,7 @@ "bandwidth_placeholder": "輸入帶寬,留空以使用BBR", "basic": "基本配置", "cancel": "取消", + "cipher": "加密算法", "city": "城市", "config": { "actions": { @@ -49,9 +50,19 @@ "drawerEditTitle": "編輯伺服器", "edit": "編輯", "enabled": "已啟用", - "encryption_method": "加密方法", + "encryption": "加密方法", + "encryption_client_padding": "客戶端填充", + "encryption_mode": "模式", + "encryption_password": "密碼", + "encryption_password_placeholder": "留空以自動生成,手動替換以進行後量子加密", + "encryption_private_key": "私鑰", + "encryption_private_key_placeholder": "留空以自動生成,手動替換以進行後量子加密", + "encryption_rtt": "RTT", + "encryption_server_padding": "服務器填充", + "encryption_ticket": "票據時間", "expireTime": "過期時間", "expired": "已過期", + "extra": "額外配置", "flow": "流量", "hop_interval": "跳躍間隔", "hop_ports": "跳躍端口", @@ -64,12 +75,16 @@ "migrateFailed": "數據遷移失敗", "migrated": "數據已成功遷移", "migrating": "正在遷移...", + "mode": "模式", "multiplex": "多元影院", "name": "名稱", "noData": "無數據", "notAvailable": "不可用", + "obfs": "混淆", + "obfs_host": "混淆主機", "obfs_password": "混淆密碼", "obfs_password_placeholder": "輸入混淆密碼", + "obfs_path": "混淆路徑", "offline": "離線", "online": "在線", "onlineUsers": "在線用戶", @@ -78,8 +93,6 @@ "pageTitle": "伺服器", "path": "路徑", "please_select": "請選擇", - "plugin": "插件配置", - "plugin_opts": "插件選項", "port": "端口", "protocol_configurations": "協議配置", "protocol_configurations_desc": "啟用並配置所需的協議類型", diff --git a/apps/admin/package.json b/apps/admin/package.json index 4458130..b3180f9 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@lottiefiles/dotlottie-react": "^0.15.1", + "@noble/curves": "^2.0.0", "@tanstack/react-query": "^5.85.5", "@tanstack/react-query-next-experimental": "^5.85.5", "@workspace/ui": "workspace:*", diff --git a/bun.lockb b/bun.lockb index 1fa0dd1..ce1e00c 100755 Binary files a/bun.lockb and b/bun.lockb differ