feat: Add bandwidth fields and placeholders for upload and download in server configuration forms; update localization files for multiple languages

This commit is contained in:
web 2025-09-13 02:59:10 -07:00
parent c4a47a47dd
commit 3e5402f2fc
25 changed files with 129 additions and 9 deletions

View File

@ -25,6 +25,7 @@ export type FieldConfig = {
max?: number; max?: number;
step?: number; step?: number;
suffix?: string; suffix?: string;
password?: number;
condition?: (protocol: any, values: any) => boolean; condition?: (protocol: any, values: any) => boolean;
group?: 'basic' | 'transport' | 'security' | 'reality' | 'plugin'; group?: 'basic' | 'transport' | 'security' | 'reality' | 'plugin';
gridSpan?: 1 | 2; gridSpan?: 1 | 2;
@ -187,6 +188,8 @@ const hysteria2 = z.object({
sni: nullableString, sni: nullableString,
allow_insecure: nullableBool, allow_insecure: nullableBool,
fingerprint: nullableString, fingerprint: nullableString,
up_mbps: z.number().nullish(),
down_mbps: z.number().nullish(),
}); });
const tuic = z.object({ const tuic = z.object({
@ -295,6 +298,8 @@ export function getProtocolDefaultConfig(proto: ProtocolType) {
hop_interval: null, hop_interval: null,
obfs_password: null, obfs_password: null,
security: 'tls', security: 'tls',
up_mbps: null,
down_mbps: null,
} as any; } as any;
case 'tuic': case 'tuic':
return { return {
@ -371,6 +376,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
name: 'server_key', name: 'server_key',
type: 'input', type: 'input',
label: 'server_key', label: 'server_key',
password: 32,
group: 'basic', group: 'basic',
condition: (p) => condition: (p) =>
[ [
@ -677,13 +683,6 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
placeholder: '1-65535', placeholder: '1-65535',
group: 'basic', group: 'basic',
}, },
{
name: 'obfs_password',
type: 'input',
label: 'obfs_password',
placeholder: (t) => t('obfs_password_placeholder'),
group: 'basic',
},
{ {
name: 'hop_ports', name: 'hop_ports',
type: 'input', type: 'input',
@ -695,10 +694,37 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
name: 'hop_interval', name: 'hop_interval',
type: 'number', type: 'number',
label: 'hop_interval', label: 'hop_interval',
placeholder: 'e.g. 300',
min: 0, min: 0,
suffix: 'S', suffix: 'S',
group: 'basic', group: 'basic',
}, },
{
name: 'obfs_password',
type: 'input',
label: 'obfs_password',
placeholder: (t) => t('obfs_password_placeholder'),
password: 16,
group: 'basic',
},
{
name: 'up_mbps',
type: 'number',
label: 'up_mbps',
min: 0,
placeholder: (t) => t('bandwidth_placeholder'),
suffix: 'Mbps',
group: 'basic',
},
{
name: 'down_mbps',
type: 'number',
label: 'down_mbps',
min: 0,
placeholder: (t) => t('bandwidth_placeholder'),
suffix: 'Mbps',
group: 'basic',
},
{ name: 'sni', type: 'input', label: 'security_sni', group: 'security' }, { name: 'sni', type: 'input', label: 'security_sni', group: 'security' },
{ name: 'allow_insecure', type: 'switch', label: 'security_allow_insecure', group: 'security' }, { name: 'allow_insecure', type: 'switch', label: 'security_allow_insecure', group: 'security' },
{ {

View File

@ -37,6 +37,7 @@ import { Switch } from '@workspace/ui/components/switch';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { Icon } from '@workspace/ui/custom-components/icon'; import { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { uid } from 'radash';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useForm, useWatch } from 'react-hook-form'; import { useForm, useWatch } from 'react-hook-form';
import { toast } from 'sonner'; import { toast } from 'sonner';
@ -85,6 +86,7 @@ function DynamicField({
<FormControl> <FormControl>
<EnhancedInput <EnhancedInput
{...fieldProps} {...fieldProps}
type='text'
placeholder={ placeholder={
field.placeholder field.placeholder
? typeof field.placeholder === 'function' ? typeof field.placeholder === 'function'
@ -93,6 +95,23 @@ function DynamicField({
: undefined : undefined
} }
onValueChange={(v) => fieldProps.onChange(v)} onValueChange={(v) => fieldProps.onChange(v)}
suffix={
field.password ? (
<Button
type='button'
variant='ghost'
onClick={() => {
const length = field.password || 16;
const result = uid(length).toLowerCase();
fieldProps.onChange(result);
}}
>
<Icon icon='mdi:refresh' className='h-4 w-4' />
</Button>
) : (
field.suffix
)
}
/> />
</FormControl> </FormControl>
<FormMessage /> <FormMessage />
@ -116,7 +135,13 @@ function DynamicField({
max={field.max} max={field.max}
step={field.step || 1} step={field.step || 1}
suffix={field.suffix} suffix={field.suffix}
placeholder={field.placeholder as string} placeholder={
field.placeholder
? typeof field.placeholder === 'function'
? field.placeholder(t, protocolData)
: field.placeholder
: undefined
}
onValueChange={(v) => fieldProps.onChange(v)} onValueChange={(v) => fieldProps.onChange(v)}
/> />
</FormControl> </FormControl>
@ -371,7 +396,7 @@ export default function ServerForm(props: {
{trigger} {trigger}
</Button> </Button>
</SheetTrigger> </SheetTrigger>
<SheetContent className='w-[580px] max-w-full md:max-w-screen-md'> <SheetContent className='w-[700px] max-w-full md:max-w-screen-md'>
<SheetHeader> <SheetHeader>
<SheetTitle>{title}</SheetTitle> <SheetTitle>{title}</SheetTitle>
</SheetHeader> </SheetHeader>

View File

@ -1,6 +1,7 @@
{ {
"address": "Adresa", "address": "Adresa",
"address_placeholder": "Adresa serveru", "address_placeholder": "Adresa serveru",
"bandwidth_placeholder": "Zadejte šířku pásma, nechte prázdné pro BBR",
"basic": "Základní konfigurace", "basic": "Základní konfigurace",
"cancel": "Zrušit", "cancel": "Zrušit",
"city": "Město", "city": "Město",
@ -43,6 +44,7 @@
"disable_sni": "Zakázat SNI", "disable_sni": "Zakázat SNI",
"disabled": "Deaktivováno", "disabled": "Deaktivováno",
"disk": "Disk", "disk": "Disk",
"down_mbps": "Šířka pásma stahování",
"drawerCreateTitle": "Vytvořit server", "drawerCreateTitle": "Vytvořit server",
"drawerEditTitle": "Upravit server", "drawerEditTitle": "Upravit server",
"edit": "Upravit", "edit": "Upravit",
@ -110,6 +112,7 @@
"udp_relay_mode": "Režim UDP relé", "udp_relay_mode": "Režim UDP relé",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Neomezeno", "unlimited": "Neomezeno",
"up_mbps": "Šířka pásma nahrávání",
"updated": "Úspěšně aktualizováno", "updated": "Úspěšně aktualizováno",
"user": "Uživatel", "user": "Uživatel",
"validation_failed": "Ověření selhalo. Zkontrolujte formulář." "validation_failed": "Ověření selhalo. Zkontrolujte formulář."

View File

@ -1,6 +1,7 @@
{ {
"address": "Adresse", "address": "Adresse",
"address_placeholder": "Serveradresse", "address_placeholder": "Serveradresse",
"bandwidth_placeholder": "Geben Sie die Bandbreite ein, lassen Sie das Feld leer für BBR",
"basic": "Grundkonfiguration", "basic": "Grundkonfiguration",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"city": "Stadt", "city": "Stadt",
@ -43,6 +44,7 @@
"disable_sni": "SNI deaktivieren", "disable_sni": "SNI deaktivieren",
"disabled": "Deaktiviert", "disabled": "Deaktiviert",
"disk": "Festplatte", "disk": "Festplatte",
"down_mbps": "Download-Bandbreite",
"drawerCreateTitle": "Server erstellen", "drawerCreateTitle": "Server erstellen",
"drawerEditTitle": "Server bearbeiten", "drawerEditTitle": "Server bearbeiten",
"edit": "Bearbeiten", "edit": "Bearbeiten",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP-Relay-Modus", "udp_relay_mode": "UDP-Relay-Modus",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Unbegrenzt", "unlimited": "Unbegrenzt",
"up_mbps": "Upload-Bandbreite",
"updated": "Erfolgreich aktualisiert", "updated": "Erfolgreich aktualisiert",
"user": "Benutzer", "user": "Benutzer",
"validation_failed": "Validierung fehlgeschlagen. Bitte überprüfen Sie das Formular." "validation_failed": "Validierung fehlgeschlagen. Bitte überprüfen Sie das Formular."

View File

@ -1,6 +1,7 @@
{ {
"address": "Address", "address": "Address",
"address_placeholder": "Server address", "address_placeholder": "Server address",
"bandwidth_placeholder": "Enter bandwidth, leave empty for BBR",
"basic": "Basic Configuration", "basic": "Basic Configuration",
"cancel": "Cancel", "cancel": "Cancel",
"city": "City", "city": "City",
@ -43,6 +44,7 @@
"disable_sni": "Disable SNI", "disable_sni": "Disable SNI",
"disabled": "Disabled", "disabled": "Disabled",
"disk": "Disk", "disk": "Disk",
"down_mbps": "Download Bandwidth",
"drawerCreateTitle": "Create Server", "drawerCreateTitle": "Create Server",
"drawerEditTitle": "Edit Server", "drawerEditTitle": "Edit Server",
"edit": "Edit", "edit": "Edit",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP relay mode", "udp_relay_mode": "UDP relay mode",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Unlimited", "unlimited": "Unlimited",
"up_mbps": "Upload Bandwidth",
"updated": "Updated successfully", "updated": "Updated successfully",
"user": "User", "user": "User",
"validation_failed": "Validation failed. Please check the form." "validation_failed": "Validation failed. Please check the form."

View File

@ -1,6 +1,7 @@
{ {
"address": "Dirección", "address": "Dirección",
"address_placeholder": "Dirección del servidor", "address_placeholder": "Dirección del servidor",
"bandwidth_placeholder": "Introduce el ancho de banda, deja vacío para BBR",
"basic": "Configuración Básica", "basic": "Configuración Básica",
"cancel": "Cancelar", "cancel": "Cancelar",
"city": "Ciudad", "city": "Ciudad",
@ -43,6 +44,7 @@
"disable_sni": "Deshabilitar SNI", "disable_sni": "Deshabilitar SNI",
"disabled": "Deshabilitado", "disabled": "Deshabilitado",
"disk": "Disco", "disk": "Disco",
"down_mbps": "Ancho de banda de descarga",
"drawerCreateTitle": "Crear Servidor", "drawerCreateTitle": "Crear Servidor",
"drawerEditTitle": "Editar Servidor", "drawerEditTitle": "Editar Servidor",
"edit": "Editar", "edit": "Editar",
@ -110,6 +112,7 @@
"udp_relay_mode": "Modo de retransmisión UDP", "udp_relay_mode": "Modo de retransmisión UDP",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Ilimitado", "unlimited": "Ilimitado",
"up_mbps": "Ancho de banda de subida",
"updated": "Actualizado con éxito", "updated": "Actualizado con éxito",
"user": "Usuario", "user": "Usuario",
"validation_failed": "La validación falló. Por favor revise el formulario." "validation_failed": "La validación falló. Por favor revise el formulario."

View File

@ -1,6 +1,7 @@
{ {
"address": "Dirección", "address": "Dirección",
"address_placeholder": "Dirección del servidor", "address_placeholder": "Dirección del servidor",
"bandwidth_placeholder": "Ingresa el ancho de banda, deja vacío para BBR",
"basic": "Configuración Básica", "basic": "Configuración Básica",
"cancel": "Cancelar", "cancel": "Cancelar",
"city": "Ciudad", "city": "Ciudad",
@ -43,6 +44,7 @@
"disable_sni": "Deshabilitar SNI", "disable_sni": "Deshabilitar SNI",
"disabled": "Deshabilitado", "disabled": "Deshabilitado",
"disk": "Disco", "disk": "Disco",
"down_mbps": "Ancho de banda de descarga",
"drawerCreateTitle": "Crear Servidor", "drawerCreateTitle": "Crear Servidor",
"drawerEditTitle": "Editar Servidor", "drawerEditTitle": "Editar Servidor",
"edit": "Editar", "edit": "Editar",
@ -110,6 +112,7 @@
"udp_relay_mode": "Modo de retransmisión UDP", "udp_relay_mode": "Modo de retransmisión UDP",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Ilimitado", "unlimited": "Ilimitado",
"up_mbps": "Ancho de banda de carga",
"updated": "Actualizado con éxito", "updated": "Actualizado con éxito",
"user": "Usuario", "user": "Usuario",
"validation_failed": "La validación falló. Por favor verifica el formulario." "validation_failed": "La validación falló. Por favor verifica el formulario."

View File

@ -1,6 +1,7 @@
{ {
"address": "آدرس", "address": "آدرس",
"address_placeholder": "آدرس سرور", "address_placeholder": "آدرس سرور",
"bandwidth_placeholder": "عرض پهنای باند، برای BBR خالی بگذارید",
"basic": "پیکربندی پایه", "basic": "پیکربندی پایه",
"cancel": "لغو", "cancel": "لغو",
"city": "شهر", "city": "شهر",
@ -43,6 +44,7 @@
"disable_sni": "غیرفعال کردن SNI", "disable_sni": "غیرفعال کردن SNI",
"disabled": "غیرفعال", "disabled": "غیرفعال",
"disk": "دیسک", "disk": "دیسک",
"down_mbps": "پهنای باند دانلود",
"drawerCreateTitle": "ایجاد سرور", "drawerCreateTitle": "ایجاد سرور",
"drawerEditTitle": "ویرایش سرور", "drawerEditTitle": "ویرایش سرور",
"edit": "ویرایش", "edit": "ویرایش",
@ -110,6 +112,7 @@
"udp_relay_mode": "حالت رله UDP", "udp_relay_mode": "حالت رله UDP",
"unitSecondsShort": "ث", "unitSecondsShort": "ث",
"unlimited": "نامحدود", "unlimited": "نامحدود",
"up_mbps": "پهنای باند آپلود",
"updated": "با موفقیت به‌روزرسانی شد", "updated": "با موفقیت به‌روزرسانی شد",
"user": "کاربر", "user": "کاربر",
"validation_failed": "اعتبارسنجی ناموفق بود. لطفاً فرم را بررسی کنید." "validation_failed": "اعتبارسنجی ناموفق بود. لطفاً فرم را بررسی کنید."

View File

@ -1,6 +1,7 @@
{ {
"address": "Osoite", "address": "Osoite",
"address_placeholder": "Palvelimen osoite", "address_placeholder": "Palvelimen osoite",
"bandwidth_placeholder": "Syötä kaistanleveys, jätä tyhjäksi BBR:lle",
"basic": "Perusasetukset", "basic": "Perusasetukset",
"cancel": "Peruuta", "cancel": "Peruuta",
"city": "Kaupunki", "city": "Kaupunki",
@ -43,6 +44,7 @@
"disable_sni": "Poista SNI käytöstä", "disable_sni": "Poista SNI käytöstä",
"disabled": "Poissa käytöstä", "disabled": "Poissa käytöstä",
"disk": "Levy", "disk": "Levy",
"down_mbps": "Latauskaistanleveys",
"drawerCreateTitle": "Luo palvelin", "drawerCreateTitle": "Luo palvelin",
"drawerEditTitle": "Muokkaa palvelinta", "drawerEditTitle": "Muokkaa palvelinta",
"edit": "Muokkaa", "edit": "Muokkaa",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP-väylätila", "udp_relay_mode": "UDP-väylätila",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Rajoittamaton", "unlimited": "Rajoittamaton",
"up_mbps": "Lähetyskaistanleveys",
"updated": "Päivitetty onnistuneesti", "updated": "Päivitetty onnistuneesti",
"user": "Käyttäjä", "user": "Käyttäjä",
"validation_failed": "Vahvistus epäonnistui. Tarkista lomake." "validation_failed": "Vahvistus epäonnistui. Tarkista lomake."

View File

@ -1,6 +1,7 @@
{ {
"address": "Adresse", "address": "Adresse",
"address_placeholder": "Adresse du serveur", "address_placeholder": "Adresse du serveur",
"bandwidth_placeholder": "Entrez la bande passante, laissez vide pour BBR",
"basic": "Configuration de base", "basic": "Configuration de base",
"cancel": "Annuler", "cancel": "Annuler",
"city": "Ville", "city": "Ville",
@ -43,6 +44,7 @@
"disable_sni": "Désactiver SNI", "disable_sni": "Désactiver SNI",
"disabled": "Désactivé", "disabled": "Désactivé",
"disk": "Disque", "disk": "Disque",
"down_mbps": "Bande passante de téléchargement",
"drawerCreateTitle": "Créer un serveur", "drawerCreateTitle": "Créer un serveur",
"drawerEditTitle": "Modifier le serveur", "drawerEditTitle": "Modifier le serveur",
"edit": "Modifier", "edit": "Modifier",
@ -110,6 +112,7 @@
"udp_relay_mode": "Mode de relais UDP", "udp_relay_mode": "Mode de relais UDP",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Illimité", "unlimited": "Illimité",
"up_mbps": "Bande passante de téléversement",
"updated": "Mis à jour avec succès", "updated": "Mis à jour avec succès",
"user": "Utilisateur", "user": "Utilisateur",
"validation_failed": "Échec de la validation. Veuillez vérifier le formulaire." "validation_failed": "Échec de la validation. Veuillez vérifier le formulaire."

View File

@ -1,6 +1,7 @@
{ {
"address": "पता", "address": "पता",
"address_placeholder": "सर्वर का पता", "address_placeholder": "सर्वर का पता",
"bandwidth_placeholder": "बैंडविड्थ दर्ज करें, BBR के लिए खाली छोड़ें",
"basic": "बुनियादी कॉन्फ़िगरेशन", "basic": "बुनियादी कॉन्फ़िगरेशन",
"cancel": "रद्द करें", "cancel": "रद्द करें",
"city": "शहर", "city": "शहर",
@ -43,6 +44,7 @@
"disable_sni": "SNI अक्षम करें", "disable_sni": "SNI अक्षम करें",
"disabled": "अक्षम", "disabled": "अक्षम",
"disk": "डिस्क", "disk": "डिस्क",
"down_mbps": "डाउनलोड बैंडविड्थ",
"drawerCreateTitle": "सर्वर बनाएं", "drawerCreateTitle": "सर्वर बनाएं",
"drawerEditTitle": "सर्वर संपादित करें", "drawerEditTitle": "सर्वर संपादित करें",
"edit": "संपादित करें", "edit": "संपादित करें",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP रिले मोड", "udp_relay_mode": "UDP रिले मोड",
"unitSecondsShort": "सेकंड", "unitSecondsShort": "सेकंड",
"unlimited": "असीमित", "unlimited": "असीमित",
"up_mbps": "अपलोड बैंडविड्थ",
"updated": "सफलता से अपडेट किया गया", "updated": "सफलता से अपडेट किया गया",
"user": "उपयोगकर्ता", "user": "उपयोगकर्ता",
"validation_failed": "मान्यता विफल। कृपया फॉर्म की जांच करें।" "validation_failed": "मान्यता विफल। कृपया फॉर्म की जांच करें।"

View File

@ -1,6 +1,7 @@
{ {
"address": "Cím", "address": "Cím",
"address_placeholder": "Szerver cím", "address_placeholder": "Szerver cím",
"bandwidth_placeholder": "Adja meg a sávszélességet, hagyja üresen a BBR-hez",
"basic": "Alapértelmezett Beállítások", "basic": "Alapértelmezett Beállítások",
"cancel": "Mégse", "cancel": "Mégse",
"city": "Város", "city": "Város",
@ -43,6 +44,7 @@
"disable_sni": "SNI letiltása", "disable_sni": "SNI letiltása",
"disabled": "Letiltva", "disabled": "Letiltva",
"disk": "Lemez", "disk": "Lemez",
"down_mbps": "Letöltési sávszélesség",
"drawerCreateTitle": "Szerver létrehozása", "drawerCreateTitle": "Szerver létrehozása",
"drawerEditTitle": "Szerver szerkesztése", "drawerEditTitle": "Szerver szerkesztése",
"edit": "Szerkesztés", "edit": "Szerkesztés",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP átjáró mód", "udp_relay_mode": "UDP átjáró mód",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Korlátlan", "unlimited": "Korlátlan",
"up_mbps": "Feltöltési sávszélesség",
"updated": "Sikeresen frissítve", "updated": "Sikeresen frissítve",
"user": "Felhasználó", "user": "Felhasználó",
"validation_failed": "Érvényesítés sikertelen. Kérjük, ellenőrizze a űrlapot." "validation_failed": "Érvényesítés sikertelen. Kérjük, ellenőrizze a űrlapot."

View File

@ -1,6 +1,7 @@
{ {
"address": "アドレス", "address": "アドレス",
"address_placeholder": "サーバーアドレス", "address_placeholder": "サーバーアドレス",
"bandwidth_placeholder": "帯域幅を入力してください。BBRの場合は空白のままにしてください。",
"basic": "基本設定", "basic": "基本設定",
"cancel": "キャンセル", "cancel": "キャンセル",
"city": "都市", "city": "都市",
@ -43,6 +44,7 @@
"disable_sni": "SNIを無効にする", "disable_sni": "SNIを無効にする",
"disabled": "無効", "disabled": "無効",
"disk": "ディスク", "disk": "ディスク",
"down_mbps": "ダウンロード帯域幅",
"drawerCreateTitle": "サーバーを作成", "drawerCreateTitle": "サーバーを作成",
"drawerEditTitle": "サーバーを編集", "drawerEditTitle": "サーバーを編集",
"edit": "編集", "edit": "編集",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDPリレーモード", "udp_relay_mode": "UDPリレーモード",
"unitSecondsShort": "秒", "unitSecondsShort": "秒",
"unlimited": "無制限", "unlimited": "無制限",
"up_mbps": "アップロード帯域幅",
"updated": "更新に成功しました", "updated": "更新に成功しました",
"user": "ユーザー", "user": "ユーザー",
"validation_failed": "検証に失敗しました。フォームを確認してください。" "validation_failed": "検証に失敗しました。フォームを確認してください。"

View File

@ -1,6 +1,7 @@
{ {
"address": "주소", "address": "주소",
"address_placeholder": "서버 주소", "address_placeholder": "서버 주소",
"bandwidth_placeholder": "대역폭을 입력하세요. BBR을 사용하려면 비워 두세요.",
"basic": "기본 설정", "basic": "기본 설정",
"cancel": "취소", "cancel": "취소",
"city": "도시", "city": "도시",
@ -43,6 +44,7 @@
"disable_sni": "SNI 비활성화", "disable_sni": "SNI 비활성화",
"disabled": "비활성화됨", "disabled": "비활성화됨",
"disk": "디스크", "disk": "디스크",
"down_mbps": "다운로드 대역폭",
"drawerCreateTitle": "서버 생성", "drawerCreateTitle": "서버 생성",
"drawerEditTitle": "서버 편집", "drawerEditTitle": "서버 편집",
"edit": "편집", "edit": "편집",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP 릴레이 모드", "udp_relay_mode": "UDP 릴레이 모드",
"unitSecondsShort": "초", "unitSecondsShort": "초",
"unlimited": "무제한", "unlimited": "무제한",
"up_mbps": "업로드 대역폭",
"updated": "성공적으로 업데이트됨", "updated": "성공적으로 업데이트됨",
"user": "사용자", "user": "사용자",
"validation_failed": "유효성 검사 실패. 양식을 확인하세요." "validation_failed": "유효성 검사 실패. 양식을 확인하세요."

View File

@ -1,6 +1,7 @@
{ {
"address": "Adresse", "address": "Adresse",
"address_placeholder": "Serveradresse", "address_placeholder": "Serveradresse",
"bandwidth_placeholder": "Skriv inn båndbredde, la stå tomt for BBR",
"basic": "Grunnleggende Konfigurasjon", "basic": "Grunnleggende Konfigurasjon",
"cancel": "Avbryt", "cancel": "Avbryt",
"city": "By", "city": "By",
@ -43,6 +44,7 @@
"disable_sni": "Deaktiver SNI", "disable_sni": "Deaktiver SNI",
"disabled": "Deaktivert", "disabled": "Deaktivert",
"disk": "Disk", "disk": "Disk",
"down_mbps": "Nedlastingsbåndbredde",
"drawerCreateTitle": "Opprett server", "drawerCreateTitle": "Opprett server",
"drawerEditTitle": "Rediger server", "drawerEditTitle": "Rediger server",
"edit": "Rediger", "edit": "Rediger",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP relémodus", "udp_relay_mode": "UDP relémodus",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Ubegrenset", "unlimited": "Ubegrenset",
"up_mbps": "Opplastingsbåndbredde",
"updated": "Oppdatert vellykket", "updated": "Oppdatert vellykket",
"user": "Bruker", "user": "Bruker",
"validation_failed": "Validering feilet. Vennligst sjekk skjemaet." "validation_failed": "Validering feilet. Vennligst sjekk skjemaet."

View File

@ -1,6 +1,7 @@
{ {
"address": "Adres", "address": "Adres",
"address_placeholder": "Adres serwera", "address_placeholder": "Adres serwera",
"bandwidth_placeholder": "Wprowadź przepustowość, pozostaw puste dla BBR",
"basic": "Podstawowa konfiguracja", "basic": "Podstawowa konfiguracja",
"cancel": "Anuluj", "cancel": "Anuluj",
"city": "Miasto", "city": "Miasto",
@ -43,6 +44,7 @@
"disable_sni": "Wyłącz SNI", "disable_sni": "Wyłącz SNI",
"disabled": "Wyłączone", "disabled": "Wyłączone",
"disk": "Dysk", "disk": "Dysk",
"down_mbps": "Przepustowość pobierania",
"drawerCreateTitle": "Utwórz serwer", "drawerCreateTitle": "Utwórz serwer",
"drawerEditTitle": "Edytuj serwer", "drawerEditTitle": "Edytuj serwer",
"edit": "Edytuj", "edit": "Edytuj",
@ -110,6 +112,7 @@
"udp_relay_mode": "Tryb przekazywania UDP", "udp_relay_mode": "Tryb przekazywania UDP",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Nieograniczone", "unlimited": "Nieograniczone",
"up_mbps": "Przepustowość wysyłania",
"updated": "Zaktualizowano pomyślnie", "updated": "Zaktualizowano pomyślnie",
"user": "Użytkownik", "user": "Użytkownik",
"validation_failed": "Walidacja nie powiodła się. Proszę sprawdzić formularz." "validation_failed": "Walidacja nie powiodła się. Proszę sprawdzić formularz."

View File

@ -1,6 +1,7 @@
{ {
"address": "Endereço", "address": "Endereço",
"address_placeholder": "Endereço do servidor", "address_placeholder": "Endereço do servidor",
"bandwidth_placeholder": "Insira a largura de banda, deixe em branco para BBR",
"basic": "Configuração Básica", "basic": "Configuração Básica",
"cancel": "Cancelar", "cancel": "Cancelar",
"city": "Cidade", "city": "Cidade",
@ -43,6 +44,7 @@
"disable_sni": "Desativar SNI", "disable_sni": "Desativar SNI",
"disabled": "Desativado", "disabled": "Desativado",
"disk": "Disco", "disk": "Disco",
"down_mbps": "Largura de Banda de Download",
"drawerCreateTitle": "Criar Servidor", "drawerCreateTitle": "Criar Servidor",
"drawerEditTitle": "Editar Servidor", "drawerEditTitle": "Editar Servidor",
"edit": "Editar", "edit": "Editar",
@ -110,6 +112,7 @@
"udp_relay_mode": "Modo de retransmissão UDP", "udp_relay_mode": "Modo de retransmissão UDP",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Ilimitado", "unlimited": "Ilimitado",
"up_mbps": "Largura de Banda de Upload",
"updated": "Atualizado com sucesso", "updated": "Atualizado com sucesso",
"user": "Usuário", "user": "Usuário",
"validation_failed": "Validação falhou. Por favor, verifique o formulário." "validation_failed": "Validação falhou. Por favor, verifique o formulário."

View File

@ -1,6 +1,7 @@
{ {
"address": "Adresă", "address": "Adresă",
"address_placeholder": "Adresă server", "address_placeholder": "Adresă server",
"bandwidth_placeholder": "Introduceți lățimea de bandă, lăsați liber pentru BBR",
"basic": "Configurare de bază", "basic": "Configurare de bază",
"cancel": "Anulează", "cancel": "Anulează",
"city": "Oraș", "city": "Oraș",
@ -43,6 +44,7 @@
"disable_sni": "Dezactivează SNI", "disable_sni": "Dezactivează SNI",
"disabled": "Dezactivat", "disabled": "Dezactivat",
"disk": "Disc", "disk": "Disc",
"down_mbps": "Lățimea de bandă la descărcare",
"drawerCreateTitle": "Creează Server", "drawerCreateTitle": "Creează Server",
"drawerEditTitle": "Editează Server", "drawerEditTitle": "Editează Server",
"edit": "Editează", "edit": "Editează",
@ -110,6 +112,7 @@
"udp_relay_mode": "Mod relay UDP", "udp_relay_mode": "Mod relay UDP",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Nelimitat", "unlimited": "Nelimitat",
"up_mbps": "Lățimea de bandă la încărcare",
"updated": "Actualizat cu succes", "updated": "Actualizat cu succes",
"user": "Utilizator", "user": "Utilizator",
"validation_failed": "Validarea a eșuat. Te rog verifică formularul." "validation_failed": "Validarea a eșuat. Te rog verifică formularul."

View File

@ -1,6 +1,7 @@
{ {
"address": "Адрес", "address": "Адрес",
"address_placeholder": "Адрес сервера", "address_placeholder": "Адрес сервера",
"bandwidth_placeholder": "Введите пропускную способность, оставьте пустым для BBR",
"basic": "Базовая конфигурация", "basic": "Базовая конфигурация",
"cancel": "Отмена", "cancel": "Отмена",
"city": "Город", "city": "Город",
@ -43,6 +44,7 @@
"disable_sni": "Отключить SNI", "disable_sni": "Отключить SNI",
"disabled": "Отключено", "disabled": "Отключено",
"disk": "Диск", "disk": "Диск",
"down_mbps": "Скорость загрузки",
"drawerCreateTitle": "Создать сервер", "drawerCreateTitle": "Создать сервер",
"drawerEditTitle": "Редактировать сервер", "drawerEditTitle": "Редактировать сервер",
"edit": "Редактировать", "edit": "Редактировать",
@ -110,6 +112,7 @@
"udp_relay_mode": "Режим UDP ретрансляции", "udp_relay_mode": "Режим UDP ретрансляции",
"unitSecondsShort": "С", "unitSecondsShort": "С",
"unlimited": "Неограниченно", "unlimited": "Неограниченно",
"up_mbps": "Скорость выгрузки",
"updated": "Успешно обновлено", "updated": "Успешно обновлено",
"user": "Пользователь", "user": "Пользователь",
"validation_failed": "Ошибка валидации. Пожалуйста, проверьте форму." "validation_failed": "Ошибка валидации. Пожалуйста, проверьте форму."

View File

@ -1,6 +1,7 @@
{ {
"address": "ที่อยู่", "address": "ที่อยู่",
"address_placeholder": "ที่อยู่เซิร์ฟเวอร์", "address_placeholder": "ที่อยู่เซิร์ฟเวอร์",
"bandwidth_placeholder": "กรุณากรอกแบนด์วิธ ทิ้งว่างไว้สำหรับ BBR",
"basic": "การตั้งค่าพื้นฐาน", "basic": "การตั้งค่าพื้นฐาน",
"cancel": "ยกเลิก", "cancel": "ยกเลิก",
"city": "เมือง", "city": "เมือง",
@ -43,6 +44,7 @@
"disable_sni": "ปิดการใช้งาน SNI", "disable_sni": "ปิดการใช้งาน SNI",
"disabled": "ปิดใช้งาน", "disabled": "ปิดใช้งาน",
"disk": "ดิสก์", "disk": "ดิสก์",
"down_mbps": "แบนด์วิธการดาวน์โหลด",
"drawerCreateTitle": "สร้างเซิร์ฟเวอร์", "drawerCreateTitle": "สร้างเซิร์ฟเวอร์",
"drawerEditTitle": "แก้ไขเซิร์ฟเวอร์", "drawerEditTitle": "แก้ไขเซิร์ฟเวอร์",
"edit": "แก้ไข", "edit": "แก้ไข",
@ -110,6 +112,7 @@
"udp_relay_mode": "โหมดการส่งต่อ UDP", "udp_relay_mode": "โหมดการส่งต่อ UDP",
"unitSecondsShort": "ว", "unitSecondsShort": "ว",
"unlimited": "ไม่จำกัด", "unlimited": "ไม่จำกัด",
"up_mbps": "แบนด์วิธการอัปโหลด",
"updated": "อัปเดตสำเร็จ", "updated": "อัปเดตสำเร็จ",
"user": "ผู้ใช้", "user": "ผู้ใช้",
"validation_failed": "การตรวจสอบล้มเหลว กรุณาตรวจสอบแบบฟอร์ม" "validation_failed": "การตรวจสอบล้มเหลว กรุณาตรวจสอบแบบฟอร์ม"

View File

@ -1,6 +1,7 @@
{ {
"address": "Adres", "address": "Adres",
"address_placeholder": "Sunucu adresi", "address_placeholder": "Sunucu adresi",
"bandwidth_placeholder": "Bant genişliğini girin, BBR için boş bırakın",
"basic": "Temel Yapılandırma", "basic": "Temel Yapılandırma",
"cancel": "İptal", "cancel": "İptal",
"city": "Şehir", "city": "Şehir",
@ -43,6 +44,7 @@
"disable_sni": "SNI'yi devre dışı bırak", "disable_sni": "SNI'yi devre dışı bırak",
"disabled": "Devre Dışı", "disabled": "Devre Dışı",
"disk": "Disk", "disk": "Disk",
"down_mbps": "İndirme Bant Genişliği",
"drawerCreateTitle": "Sunucu Oluştur", "drawerCreateTitle": "Sunucu Oluştur",
"drawerEditTitle": "Sunucuyu Düzenle", "drawerEditTitle": "Sunucuyu Düzenle",
"edit": "Düzenle", "edit": "Düzenle",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP iletim modu", "udp_relay_mode": "UDP iletim modu",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Sınırsız", "unlimited": "Sınırsız",
"up_mbps": "Yükleme Bant Genişliği",
"updated": "Başarıyla güncellendi", "updated": "Başarıyla güncellendi",
"user": "Kullanıcı", "user": "Kullanıcı",
"validation_failed": "Doğrulama başarısız. Lütfen formu kontrol edin." "validation_failed": "Doğrulama başarısız. Lütfen formu kontrol edin."

View File

@ -1,6 +1,7 @@
{ {
"address": "Адреса", "address": "Адреса",
"address_placeholder": "Адреса сервера", "address_placeholder": "Адреса сервера",
"bandwidth_placeholder": "Введіть пропускну здатність, залиште порожнім для BBR",
"basic": "Базова конфігурація", "basic": "Базова конфігурація",
"cancel": "Скасувати", "cancel": "Скасувати",
"city": "Місто", "city": "Місто",
@ -43,6 +44,7 @@
"disable_sni": "Вимкнути SNI", "disable_sni": "Вимкнути SNI",
"disabled": "Вимкнено", "disabled": "Вимкнено",
"disk": "Диск", "disk": "Диск",
"down_mbps": "Пропускна здатність завантаження",
"drawerCreateTitle": "Створити сервер", "drawerCreateTitle": "Створити сервер",
"drawerEditTitle": "Редагувати сервер", "drawerEditTitle": "Редагувати сервер",
"edit": "Редагувати", "edit": "Редагувати",
@ -110,6 +112,7 @@
"udp_relay_mode": "Режим UDP ретрансляції", "udp_relay_mode": "Режим UDP ретрансляції",
"unitSecondsShort": "С", "unitSecondsShort": "С",
"unlimited": "Без обмежень", "unlimited": "Без обмежень",
"up_mbps": "Пропускна здатність вивантаження",
"updated": "Успішно оновлено", "updated": "Успішно оновлено",
"user": "Користувач", "user": "Користувач",
"validation_failed": "Перевірка не вдалася. Будь ласка, перевірте форму." "validation_failed": "Перевірка не вдалася. Будь ласка, перевірте форму."

View File

@ -1,6 +1,7 @@
{ {
"address": "Địa chỉ", "address": "Địa chỉ",
"address_placeholder": "Địa chỉ máy chủ", "address_placeholder": "Địa chỉ máy chủ",
"bandwidth_placeholder": "Nhập băng thông, để trống cho BBR",
"basic": "Cấu Hình Cơ Bản", "basic": "Cấu Hình Cơ Bản",
"cancel": "Hủy", "cancel": "Hủy",
"city": "Thành phố", "city": "Thành phố",
@ -43,6 +44,7 @@
"disable_sni": "Vô hiệu hóa SNI", "disable_sni": "Vô hiệu hóa SNI",
"disabled": "Đã Vô Hiệu Hóa", "disabled": "Đã Vô Hiệu Hóa",
"disk": "Ổ đĩa", "disk": "Ổ đĩa",
"down_mbps": "Băng thông tải xuống",
"drawerCreateTitle": "Tạo Máy chủ", "drawerCreateTitle": "Tạo Máy chủ",
"drawerEditTitle": "Chỉnh sửa Máy chủ", "drawerEditTitle": "Chỉnh sửa Máy chủ",
"edit": "Chỉnh sửa", "edit": "Chỉnh sửa",
@ -110,6 +112,7 @@
"udp_relay_mode": "Chế độ chuyển tiếp UDP", "udp_relay_mode": "Chế độ chuyển tiếp UDP",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "Không giới hạn", "unlimited": "Không giới hạn",
"up_mbps": "Băng thông tải lên",
"updated": "Cập nhật thành công", "updated": "Cập nhật thành công",
"user": "Người dùng", "user": "Người dùng",
"validation_failed": "Xác thực không thành công. Vui lòng kiểm tra biểu mẫu." "validation_failed": "Xác thực không thành công. Vui lòng kiểm tra biểu mẫu."

View File

@ -1,6 +1,7 @@
{ {
"address": "地址", "address": "地址",
"address_placeholder": "服务器地址", "address_placeholder": "服务器地址",
"bandwidth_placeholder": "请输入带宽留空则使用BBR",
"basic": "基础配置", "basic": "基础配置",
"cancel": "取消", "cancel": "取消",
"city": "城市", "city": "城市",
@ -43,6 +44,7 @@
"disable_sni": "禁用 SNI", "disable_sni": "禁用 SNI",
"disabled": "禁用", "disabled": "禁用",
"disk": "磁盘", "disk": "磁盘",
"down_mbps": "下行带宽",
"drawerCreateTitle": "新建服务器", "drawerCreateTitle": "新建服务器",
"drawerEditTitle": "编辑服务器", "drawerEditTitle": "编辑服务器",
"edit": "编辑", "edit": "编辑",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP 转发模式", "udp_relay_mode": "UDP 转发模式",
"unitSecondsShort": "S", "unitSecondsShort": "S",
"unlimited": "不限", "unlimited": "不限",
"up_mbps": "上行带宽",
"updated": "更新成功", "updated": "更新成功",
"user": "用户", "user": "用户",
"validation_failed": "校验失败,请检查表单。" "validation_failed": "校验失败,请检查表单。"

View File

@ -1,6 +1,7 @@
{ {
"address": "地址", "address": "地址",
"address_placeholder": "伺服器地址", "address_placeholder": "伺服器地址",
"bandwidth_placeholder": "輸入帶寬留空以使用BBR",
"basic": "基本配置", "basic": "基本配置",
"cancel": "取消", "cancel": "取消",
"city": "城市", "city": "城市",
@ -43,6 +44,7 @@
"disable_sni": "禁用 SNI", "disable_sni": "禁用 SNI",
"disabled": "已禁用", "disabled": "已禁用",
"disk": "磁碟", "disk": "磁碟",
"down_mbps": "下載帶寬",
"drawerCreateTitle": "創建伺服器", "drawerCreateTitle": "創建伺服器",
"drawerEditTitle": "編輯伺服器", "drawerEditTitle": "編輯伺服器",
"edit": "編輯", "edit": "編輯",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP 中繼模式", "udp_relay_mode": "UDP 中繼模式",
"unitSecondsShort": "秒", "unitSecondsShort": "秒",
"unlimited": "無限制", "unlimited": "無限制",
"up_mbps": "上傳帶寬",
"updated": "更新成功", "updated": "更新成功",
"user": "用戶", "user": "用戶",
"validation_failed": "驗證失敗。請檢查表單。" "validation_failed": "驗證失敗。請檢查表單。"