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;
step?: number;
suffix?: string;
password?: number;
condition?: (protocol: any, values: any) => boolean;
group?: 'basic' | 'transport' | 'security' | 'reality' | 'plugin';
gridSpan?: 1 | 2;
@ -187,6 +188,8 @@ const hysteria2 = z.object({
sni: nullableString,
allow_insecure: nullableBool,
fingerprint: nullableString,
up_mbps: z.number().nullish(),
down_mbps: z.number().nullish(),
});
const tuic = z.object({
@ -295,6 +298,8 @@ export function getProtocolDefaultConfig(proto: ProtocolType) {
hop_interval: null,
obfs_password: null,
security: 'tls',
up_mbps: null,
down_mbps: null,
} as any;
case 'tuic':
return {
@ -371,6 +376,7 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
name: 'server_key',
type: 'input',
label: 'server_key',
password: 32,
group: 'basic',
condition: (p) =>
[
@ -677,13 +683,6 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
placeholder: '1-65535',
group: 'basic',
},
{
name: 'obfs_password',
type: 'input',
label: 'obfs_password',
placeholder: (t) => t('obfs_password_placeholder'),
group: 'basic',
},
{
name: 'hop_ports',
type: 'input',
@ -695,10 +694,37 @@ export const PROTOCOL_FIELDS: Record<string, FieldConfig[]> = {
name: 'hop_interval',
type: 'number',
label: 'hop_interval',
placeholder: 'e.g. 300',
min: 0,
suffix: 'S',
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: '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 { Icon } from '@workspace/ui/custom-components/icon';
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';
@ -85,6 +86,7 @@ function DynamicField({
<FormControl>
<EnhancedInput
{...fieldProps}
type='text'
placeholder={
field.placeholder
? typeof field.placeholder === 'function'
@ -93,6 +95,23 @@ function DynamicField({
: undefined
}
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>
<FormMessage />
@ -116,7 +135,13 @@ function DynamicField({
max={field.max}
step={field.step || 1}
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)}
/>
</FormControl>
@ -371,7 +396,7 @@ export default function ServerForm(props: {
{trigger}
</Button>
</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>
<SheetTitle>{title}</SheetTitle>
</SheetHeader>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,7 @@
{
"address": "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",
"cancel": "Mégse",
"city": "Város",
@ -43,6 +44,7 @@
"disable_sni": "SNI letiltása",
"disabled": "Letiltva",
"disk": "Lemez",
"down_mbps": "Letöltési sávszélesség",
"drawerCreateTitle": "Szerver létrehozása",
"drawerEditTitle": "Szerver szerkesztése",
"edit": "Szerkesztés",
@ -110,6 +112,7 @@
"udp_relay_mode": "UDP átjáró mód",
"unitSecondsShort": "S",
"unlimited": "Korlátlan",
"up_mbps": "Feltöltési sávszélesség",
"updated": "Sikeresen frissítve",
"user": "Felhasználó",
"validation_failed": "Érvényesítés sikertelen. Kérjük, ellenőrizze a űrlapot."

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,7 @@
{
"address": "Địa 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",
"cancel": "Hủy",
"city": "Thành phố",
@ -43,6 +44,7 @@
"disable_sni": "Vô hiệu hóa SNI",
"disabled": "Đã Vô Hiệu Hóa",
"disk": "Ổ đĩa",
"down_mbps": "Băng thông tải xuống",
"drawerCreateTitle": "Tạo Máy chủ",
"drawerEditTitle": "Chỉnh sửa Máy chủ",
"edit": "Chỉnh sửa",
@ -110,6 +112,7 @@
"udp_relay_mode": "Chế độ chuyển tiếp UDP",
"unitSecondsShort": "S",
"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",
"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."

View File

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

View File

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