chore: i18n for profile module
This commit is contained in:
@@ -42,7 +42,7 @@ export const FileInput = (props: Props) => {
|
||||
sx={{ flex: "none" }}
|
||||
onClick={() => inputRef.current?.click()}
|
||||
>
|
||||
{t("Choose File")}
|
||||
{t("components.profile.fileInput.chooseFile")}
|
||||
</Button>
|
||||
|
||||
<input
|
||||
|
||||
@@ -146,7 +146,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
// 首次创建/更新失败,尝试使用自身代理
|
||||
showNotice(
|
||||
"info",
|
||||
t("Profile creation failed, retrying with Clash proxy..."),
|
||||
t("components.profile.viewer.notifications.creationRetry"),
|
||||
);
|
||||
|
||||
// 使用自身代理的配置
|
||||
@@ -172,7 +172,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
|
||||
showNotice(
|
||||
"success",
|
||||
t("Profile creation succeeded with Clash proxy"),
|
||||
t("components.profile.viewer.notifications.creationSuccess"),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -220,10 +220,14 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
return (
|
||||
<BaseDialog
|
||||
open={open}
|
||||
title={openType === "new" ? t("Create Profile") : t("Edit Profile")}
|
||||
title={
|
||||
openType === "new"
|
||||
? t("components.profile.viewer.title.create")
|
||||
: t("components.profile.viewer.title.edit")
|
||||
}
|
||||
contentSx={{ width: 375, pb: 0, maxHeight: "80%" }}
|
||||
okBtn={t("Save")}
|
||||
cancelBtn={t("Cancel")}
|
||||
okBtn={t("components.profile.viewer.buttons.save")}
|
||||
cancelBtn={t("components.profile.viewer.buttons.cancel")}
|
||||
onClose={handleClose}
|
||||
onCancel={handleClose}
|
||||
onOk={handleOk}
|
||||
@@ -234,8 +238,14 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<FormControl size="small" fullWidth sx={{ mt: 1, mb: 1 }}>
|
||||
<InputLabel>{t("Type")}</InputLabel>
|
||||
<Select {...field} autoFocus label={t("Type")}>
|
||||
<InputLabel>
|
||||
{t("components.profile.viewer.fields.type")}
|
||||
</InputLabel>
|
||||
<Select
|
||||
{...field}
|
||||
autoFocus
|
||||
label={t("components.profile.viewer.fields.type")}
|
||||
>
|
||||
<MenuItem value="remote">Remote</MenuItem>
|
||||
<MenuItem value="local">Local</MenuItem>
|
||||
</Select>
|
||||
@@ -247,7 +257,11 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
name="name"
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<TextField {...text} {...field} label={t("Name")} />
|
||||
<TextField
|
||||
{...text}
|
||||
{...field}
|
||||
label={t("components.profile.viewer.fields.name")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@@ -255,7 +269,11 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
name="desc"
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<TextField {...text} {...field} label={t("Descriptions")} />
|
||||
<TextField
|
||||
{...text}
|
||||
{...field}
|
||||
label={t("components.profile.viewer.fields.description")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@@ -269,7 +287,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
{...text}
|
||||
{...field}
|
||||
multiline
|
||||
label={t("Subscription URL")}
|
||||
label={t("components.profile.viewer.fields.subscriptionUrl")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@@ -296,7 +314,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
{...field}
|
||||
type="number"
|
||||
placeholder="60"
|
||||
label={t("HTTP Request Timeout")}
|
||||
label={t("components.profile.viewer.fields.httpTimeout")}
|
||||
slotProps={{
|
||||
input: {
|
||||
endAdornment: (
|
||||
@@ -321,7 +339,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
{...text}
|
||||
{...field}
|
||||
type="number"
|
||||
label={t("Update Interval")}
|
||||
label={t("components.profile.viewer.fields.updateInterval")}
|
||||
slotProps={{
|
||||
input: {
|
||||
endAdornment: (
|
||||
@@ -350,7 +368,9 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>{t("Use System Proxy")}</InputLabel>
|
||||
<InputLabel>
|
||||
{t("components.profile.viewer.fields.useSystemProxy")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
)}
|
||||
@@ -361,7 +381,9 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>{t("Use Clash Proxy")}</InputLabel>
|
||||
<InputLabel>
|
||||
{t("components.profile.viewer.fields.useClashProxy")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
)}
|
||||
@@ -372,7 +394,9 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>{t("Accept Invalid Certs (Danger)")}</InputLabel>
|
||||
<InputLabel>
|
||||
{t("components.profile.viewer.fields.acceptInvalidCerts")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
)}
|
||||
@@ -383,7 +407,9 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>{t("Allow Auto Update")}</InputLabel>
|
||||
<InputLabel>
|
||||
{t("components.profile.viewer.fields.allowAutoUpdate")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
)}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "مزود القواعد",
|
||||
"dialogTitle": "مزود القواعد"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "الملفات الشخصية",
|
||||
"actions": {
|
||||
"updateAll": "تحديث جميع الملفات الشخصية",
|
||||
"viewRuntimeConfig": "عرض تكوين وقت التشغيل",
|
||||
"reactivate": "إعادة تنشيط الملفات الشخصية",
|
||||
"import": "استيراد",
|
||||
"new": "جديد"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "رابط الملف الشخصي",
|
||||
"paste": "لصق",
|
||||
"clear": "مسح"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "لا يتم دعم سوى ملفات YAML"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import failed, retrying with Clash proxy...",
|
||||
"importFail": "Import failed even with Clash proxy",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "تم التبديل إلى الملف الشخصي",
|
||||
"profileReactivated": "تم إعادة تنشيط الملف الشخصي",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Home",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "قاعدة غير صالحة"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "إنشاء ملف شخصي",
|
||||
"edit": "تعديل الملف الشخصي"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "حفظ",
|
||||
"cancel": "إلغاء"
|
||||
},
|
||||
"fields": {
|
||||
"type": "النوع",
|
||||
"name": "الاسم",
|
||||
"description": "الوصف",
|
||||
"subscriptionUrl": "رابط الاشتراك",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "فاصل التحديث",
|
||||
"useSystemProxy": "استخدام وكيل النظام",
|
||||
"useClashProxy": "استخدام وكيل Clash",
|
||||
"acceptInvalidCerts": "قبول الشهادات غير الصالحة (خطر)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "اختر ملف"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "Regelsammlung",
|
||||
"dialogTitle": "Regelsammlung"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "Abonnement",
|
||||
"actions": {
|
||||
"updateAll": "Alle Abonnements aktualisieren",
|
||||
"viewRuntimeConfig": "Laufzeit-Abonnement anzeigen",
|
||||
"reactivate": "Abonnement erneut aktivieren",
|
||||
"import": "Importieren",
|
||||
"new": "Neu"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "Abonnement-Datei-Link",
|
||||
"paste": "Einfügen",
|
||||
"clear": "Löschen"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "Nur YAML-Dateien werden unterstützt"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...",
|
||||
"importFail": "Import des Abonnements auch mit Clash-Proxy fehlgeschlagen",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Abonnement gewechselt",
|
||||
"profileReactivated": "Abonnement erneut aktiviert",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Startseite",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "Ungültige Regel"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Neue Konfiguration erstellen",
|
||||
"edit": "Konfiguration bearbeiten"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "Speichern",
|
||||
"cancel": "Abbrechen"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Typ",
|
||||
"name": "Name",
|
||||
"description": "Beschreibung",
|
||||
"subscriptionUrl": "Abonnement-Link",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Aktualisierungsintervall",
|
||||
"useSystemProxy": "Systemproxy zur Aktualisierung verwenden",
|
||||
"useClashProxy": "Kernel-Proxy zur Aktualisierung verwenden",
|
||||
"acceptInvalidCerts": "Allows Invalid Certificates (Danger)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Erstellung des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...",
|
||||
"creationSuccess": "Erstellung des Abonnements mit Clash-Proxy erfolgreich"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Datei auswählen"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "Rule Provider",
|
||||
"dialogTitle": "Rule Providers"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "Profiles",
|
||||
"actions": {
|
||||
"updateAll": "Update All Profiles",
|
||||
"viewRuntimeConfig": "View Runtime Config",
|
||||
"reactivate": "Reactivate Profiles",
|
||||
"import": "Import",
|
||||
"new": "New"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "Profile URL",
|
||||
"paste": "Paste",
|
||||
"clear": "Clear"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "Only YAML Files Supported"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import failed, retrying with Clash proxy...",
|
||||
"importFail": "Import failed even with Clash proxy",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Profile Switched",
|
||||
"profileReactivated": "Profile Reactivated",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Home",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "Invalid Rule"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Create Profile",
|
||||
"edit": "Edit Profile"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "Save",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Type",
|
||||
"name": "Name",
|
||||
"description": "Descriptions",
|
||||
"subscriptionUrl": "Subscription URL",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Update Interval",
|
||||
"useSystemProxy": "Use System Proxy",
|
||||
"useClashProxy": "Use Clash Proxy",
|
||||
"acceptInvalidCerts": "Allows Invalid Certificates (Danger)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Choose File"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "Proveedor de reglas",
|
||||
"dialogTitle": "Proveedor de reglas"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "Suscripciones",
|
||||
"actions": {
|
||||
"updateAll": "Actualizar todas las suscripciones",
|
||||
"viewRuntimeConfig": "Ver configuración en tiempo de ejecución",
|
||||
"reactivate": "Reactivar suscripciones",
|
||||
"import": "Importar",
|
||||
"new": "Nuevo"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "Enlace del archivo de suscripción",
|
||||
"paste": "Pegar",
|
||||
"clear": "Limpiar"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "Solo se admiten archivos YAML"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Error al importar la suscripción. Intentando con el proxy de Clash...",
|
||||
"importFail": "Error al importar incluso con el proxy de Clash",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Suscripción cambiada",
|
||||
"profileReactivated": "Suscripción reactivada",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Hogar",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "Regla no válida"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Crear configuración",
|
||||
"edit": "Editar configuración"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "Guardar",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Tipo",
|
||||
"name": "Nombre",
|
||||
"description": "Descripción",
|
||||
"subscriptionUrl": "Enlace de suscripción",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Intervalo de actualización",
|
||||
"useSystemProxy": "Usar proxy del sistema para actualizar",
|
||||
"useClashProxy": "Usar proxy del núcleo para actualizar",
|
||||
"acceptInvalidCerts": "Allows Invalid Certificates (Danger)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Error al crear la suscripción. Intentando con el proxy de Clash...",
|
||||
"creationSuccess": "Creación de la suscripción con el proxy de Clash exitosa"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Elegir archivo"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "تأمینکننده قانون",
|
||||
"dialogTitle": "تأمینکننده قانون"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "پروفایلها",
|
||||
"actions": {
|
||||
"updateAll": "بهروزرسانی همه پروفایلها",
|
||||
"viewRuntimeConfig": "مشاهده پیکربندی زمان اجرا",
|
||||
"reactivate": "فعالسازی مجدد پروفایلها",
|
||||
"import": "وارد کردن",
|
||||
"new": "جدید"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "آدرس پروفایل",
|
||||
"paste": "چسباندن",
|
||||
"clear": "پاک کردن"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "فقط فایلهای YAML پشتیبانی میشوند"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import failed, retrying with Clash proxy...",
|
||||
"importFail": "Import failed even with Clash proxy",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "پروفایل تغییر یافت",
|
||||
"profileReactivated": "پروفایل مجدداً فعال شد",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Home",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "قانون نامعتبر"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "ایجاد پروفایل",
|
||||
"edit": "ویرایش پروفایل"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "ذخیره",
|
||||
"cancel": "لغو"
|
||||
},
|
||||
"fields": {
|
||||
"type": "نوع",
|
||||
"name": "نام",
|
||||
"description": "توضیحات",
|
||||
"subscriptionUrl": "آدرس اشتراک",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "فاصله زمانی بهروزرسانی",
|
||||
"useSystemProxy": "استفاده از پراکسی سیستم",
|
||||
"useClashProxy": "استفاده از پراکسی Clash",
|
||||
"acceptInvalidCerts": "پذیرش گواهینامههای نامعتبر (خطرناک)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "انتخاب فایل"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "Penyedia Aturan",
|
||||
"dialogTitle": "Penyedia Aturan"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "Profil",
|
||||
"actions": {
|
||||
"updateAll": "Perbarui Semua Profil",
|
||||
"viewRuntimeConfig": "Lihat Konfigurasi Runtime",
|
||||
"reactivate": "Reaktivasi Profil",
|
||||
"import": "Impor",
|
||||
"new": "Baru"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "URL Profil",
|
||||
"paste": "Tempel",
|
||||
"clear": "Bersihkan"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "Hanya File YAML yang Didukung"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import failed, retrying with Clash proxy...",
|
||||
"importFail": "Import failed even with Clash proxy",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Profil Beralih",
|
||||
"profileReactivated": "Profil Diaktifkan Kembali",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Home",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "Aturan Tidak Valid"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Buat Profil",
|
||||
"edit": "Ubah Profil"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "Simpan",
|
||||
"cancel": "Batal"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Jenis",
|
||||
"name": "Nama",
|
||||
"description": "Deskripsi",
|
||||
"subscriptionUrl": "URL Langganan",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Interval Pembaruan",
|
||||
"useSystemProxy": "Gunakan Proksi Sistem",
|
||||
"useClashProxy": "Gunakan Proksi Clash",
|
||||
"acceptInvalidCerts": "Terima Sertifikat Tidak Valid (Bahaya)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Pilih Berkas"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "ルールプロバイダー",
|
||||
"dialogTitle": "ルールプロバイダー"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "プロファイル",
|
||||
"actions": {
|
||||
"updateAll": "すべてのプロファイルを更新",
|
||||
"viewRuntimeConfig": "実行時のプロファイルを表示",
|
||||
"reactivate": "プロファイルを再アクティブ化",
|
||||
"import": "インポート",
|
||||
"new": "新規作成"
|
||||
},
|
||||
"batch": {
|
||||
"title": "バッチ操作",
|
||||
"delete": "選択したプロファイルを削除",
|
||||
"selectAll": "すべて選択",
|
||||
"deselectAll": "すべての選択を解除",
|
||||
"done": "完了",
|
||||
"selected": "選択済み",
|
||||
"items": "アイテム"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "プロファイルファイルのURL",
|
||||
"paste": "貼り付け",
|
||||
"clear": "クリア"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "YAMLファイルのみサポートされています。"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "インポートに失敗しました。Clashプロキシを使用して再試行します...",
|
||||
"importFail": "Clashプロキシを使用してもインポートに失敗しました。",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "プロファイルが切り替えられました。",
|
||||
"profileReactivated": "プロファイルが再アクティブ化されました。",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "選択したプロファイルが正常に削除されました"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "ホーム",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "無効なルール"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新規プロファイルを作成",
|
||||
"edit": "プロファイルを編集"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "保存",
|
||||
"cancel": "キャンセル"
|
||||
},
|
||||
"fields": {
|
||||
"type": "タイプ",
|
||||
"name": "名前",
|
||||
"description": "説明",
|
||||
"subscriptionUrl": "サブスクリプションURL",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "更新間隔",
|
||||
"useSystemProxy": "システムプロキシを使用して更新",
|
||||
"useClashProxy": "クラッシュプロキシを使用して更新",
|
||||
"acceptInvalidCerts": "Allows Invalid Certificates (Danger)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "プロファイルの作成に失敗しました。Clashプロキシを使用して再試行します...",
|
||||
"creationSuccess": "Clashプロキシを使用してプロファイルの作成に成功しました。"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "ファイルを選択"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "규칙 제공자",
|
||||
"dialogTitle": "규칙 제공자"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "프로필",
|
||||
"actions": {
|
||||
"updateAll": "모든 프로필 업데이트",
|
||||
"viewRuntimeConfig": "런타임 설정 보기",
|
||||
"reactivate": "프로필 재활성화",
|
||||
"import": "가져오기",
|
||||
"new": "새로 만들기"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "프로필 URL",
|
||||
"paste": "붙여넣기",
|
||||
"clear": "지우기"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "Only YAML Files Supported"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import failed, retrying with Clash proxy...",
|
||||
"importFail": "Import failed even with Clash proxy",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Profile Switched",
|
||||
"profileReactivated": "Profile Reactivated",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "홈",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "잘못된 규칙"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "프로필 생성",
|
||||
"edit": "프로필 편집"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "저장",
|
||||
"cancel": "취소"
|
||||
},
|
||||
"fields": {
|
||||
"type": "유형",
|
||||
"name": "이름",
|
||||
"description": "설명",
|
||||
"subscriptionUrl": "구독 URL",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "업데이트 간격",
|
||||
"useSystemProxy": "시스템 프록시 사용",
|
||||
"useClashProxy": "Clash 프록시 사용",
|
||||
"acceptInvalidCerts": "잘못된 인증서 허용(위험)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "파일 선택"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "Провайдеры правил",
|
||||
"dialogTitle": "Провайдеры правил"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "Профили",
|
||||
"actions": {
|
||||
"updateAll": "Обновить все профили",
|
||||
"viewRuntimeConfig": "Просмотреть используемый конфиг",
|
||||
"reactivate": "Перезапустить профиль",
|
||||
"import": "Импорт",
|
||||
"new": "Новый"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Пакетные операции",
|
||||
"delete": "Удалить выбранные профили",
|
||||
"selectAll": "Выбрать все",
|
||||
"deselectAll": "Отменить выбор всех",
|
||||
"done": "Готово",
|
||||
"selected": "Выбрано",
|
||||
"items": "элементы"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "URL профиля",
|
||||
"paste": "Вставить",
|
||||
"clear": "Очистить"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Недопустимая ссылка на профиль, введите адрес, начинающийся с http:// или https://",
|
||||
"onlyYaml": "Поддерживаются только файлы YAML"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import failed, retrying with Clash proxy...",
|
||||
"importFail": "Import failed even with Clash proxy",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Профиль изменен",
|
||||
"profileReactivated": "Профиль перезапущен",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Выбранные профили успешно удалены"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Главная",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "Недействительное правило"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Создать профиль",
|
||||
"edit": "Изменить профиль"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "Сохранить",
|
||||
"cancel": "Отмена"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Тип",
|
||||
"name": "Название",
|
||||
"description": "Описание",
|
||||
"subscriptionUrl": "URL подписки",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Интервал обновления",
|
||||
"useSystemProxy": "Использовать системный прокси для обновления",
|
||||
"useClashProxy": "Использовать прокси Clash для обновления",
|
||||
"acceptInvalidCerts": "Принимать недействительные сертификаты (ОПАСНО)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Выбрать файл"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "Kural Sağlayıcısı",
|
||||
"dialogTitle": "Kural Sağlayıcısı"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "Profiller",
|
||||
"actions": {
|
||||
"updateAll": "Tüm Profilleri Güncelle",
|
||||
"viewRuntimeConfig": "Çalışma Zamanı Yapılandırmasını Görüntüle",
|
||||
"reactivate": "Profilleri Yeniden Etkinleştir",
|
||||
"import": "İçe Aktar",
|
||||
"new": "Yeni"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Toplu İşlemler",
|
||||
"delete": "Seçili Profilleri Sil",
|
||||
"selectAll": "Tümünü Seç",
|
||||
"deselectAll": "Tüm Seçimi Kaldır",
|
||||
"done": "Tamam",
|
||||
"selected": "Seçildi",
|
||||
"items": "öğeler"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "Profil URL'si",
|
||||
"paste": "Yapıştır",
|
||||
"clear": "Temizle"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "Yalnızca YAML Dosyaları Desteklenir"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "İçe aktarma başarısız oldu, Clash vekil ile yeniden deneniyor...",
|
||||
"importFail": "Clash vekil ile bile içe aktarma başarısız oldu",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Profil Değiştirildi",
|
||||
"profileReactivated": "Profil Yeniden Etkinleştirildi",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Seçili profiller başarıyla silindi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Ana Sayfa",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "Geçersiz Kural"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Profil Oluştur",
|
||||
"edit": "Profili Düzenle"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "Kaydet",
|
||||
"cancel": "İptal"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Tip",
|
||||
"name": "İsim",
|
||||
"description": "Açıklamalar",
|
||||
"subscriptionUrl": "Abonelik URL'si",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Güncelleme Aralığı",
|
||||
"useSystemProxy": "Sistem Vekil'ini Kullan",
|
||||
"useClashProxy": "Clash Vekil'ini Kullan",
|
||||
"acceptInvalidCerts": "Geçersiz Sertifikalara İzin Ver (Tehlikeli)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profil oluşturma başarısız oldu, Clash vekil ile yeniden deneniyor...",
|
||||
"creationSuccess": "Clash vekil ile profil oluşturma başarılı oldu"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Dosya Seç"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "Кагыйдә провайдеры",
|
||||
"dialogTitle": "Кагыйдә провайдеры"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "Профильләр",
|
||||
"actions": {
|
||||
"updateAll": "Барлык профильләрне яңарту",
|
||||
"viewRuntimeConfig": "Кулланылган конфигурацияне карау",
|
||||
"reactivate": "Профильләрне янәдән активлаштыру",
|
||||
"import": "Импорт",
|
||||
"new": "Яңа"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "Профиль URL-ы",
|
||||
"paste": "Кую",
|
||||
"clear": "Чистарту"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "Invalid profile URL. Please enter a URL starting with http:// or https://",
|
||||
"onlyYaml": "Фәкать YAML-файллар гына хуплана"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "Import failed, retrying with Clash proxy...",
|
||||
"importFail": "Import failed even with Clash proxy",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "Профиль алмаштырылды",
|
||||
"profileReactivated": "Профиль яңадан активлаштырылды",
|
||||
"switchInterrupted": "Profile switch interrupted by new selection",
|
||||
"batchDeleted": "Selected profiles deleted successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "Home",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "Яраксыз кагыйдә"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Профиль булдыру",
|
||||
"edit": "Профильне үзгәртү"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "Саклау",
|
||||
"cancel": "Баш тарту"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Төр",
|
||||
"name": "Исем",
|
||||
"description": "Тасвирламалар",
|
||||
"subscriptionUrl": "Подписка URL-ы",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Яңарту интервалы",
|
||||
"useSystemProxy": "Системалы проксины кулланып яңарту",
|
||||
"useClashProxy": "Clash прокси кулланып яңарту",
|
||||
"acceptInvalidCerts": "Дөрес булмаган сертификатларны кабул итү (Куркыныч)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Файл сайлау"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "规则集合",
|
||||
"dialogTitle": "规则集合"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "订阅",
|
||||
"actions": {
|
||||
"updateAll": "更新所有订阅",
|
||||
"viewRuntimeConfig": "查看运行时订阅",
|
||||
"reactivate": "重新激活订阅",
|
||||
"import": "导入",
|
||||
"new": "新建"
|
||||
},
|
||||
"batch": {
|
||||
"title": "批量操作",
|
||||
"delete": "删除选中订阅",
|
||||
"selectAll": "全选",
|
||||
"deselectAll": "取消全选",
|
||||
"done": "完成",
|
||||
"selected": "已选中",
|
||||
"items": "项目"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "订阅文件链接",
|
||||
"paste": "粘贴",
|
||||
"clear": "清除"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "无效的订阅链接,请输入以 http:// 或 https:// 开头的地址",
|
||||
"onlyYaml": "仅支持 YAML 文件"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "订阅导入失败,尝试使用 Clash 代理导入",
|
||||
"importFail": "使用 Clash 代理导入订阅也失败",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "订阅已切换",
|
||||
"profileReactivated": "订阅已激活",
|
||||
"switchInterrupted": "配置切换被新选择中断",
|
||||
"batchDeleted": "选中的订阅已成功删除"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "首 页",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "无效规则"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新建配置",
|
||||
"edit": "编辑配置"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "保存",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"fields": {
|
||||
"type": "类型",
|
||||
"name": "名称",
|
||||
"description": "描述",
|
||||
"subscriptionUrl": "订阅链接",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "更新间隔",
|
||||
"useSystemProxy": "使用系统代理更新",
|
||||
"useClashProxy": "使用内核代理更新",
|
||||
"acceptInvalidCerts": "允许无效证书(危险)",
|
||||
"allowAutoUpdate": "允许自动更新"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "订阅创建失败,尝试使用 Clash 代理创建",
|
||||
"creationSuccess": "使用 Clash 代理创建订阅成功"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "选择文件"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,44 @@
|
||||
"trigger": "規則集合",
|
||||
"dialogTitle": "規則集合"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"title": "訂閱",
|
||||
"actions": {
|
||||
"updateAll": "更新所有訂閱",
|
||||
"viewRuntimeConfig": "查看執行時訂閱",
|
||||
"reactivate": "重新啟用訂閱",
|
||||
"import": "匯入",
|
||||
"new": "新增"
|
||||
},
|
||||
"batch": {
|
||||
"title": "批次操作",
|
||||
"delete": "刪除選取訂閱",
|
||||
"selectAll": "全選",
|
||||
"deselectAll": "取消選取",
|
||||
"done": "完成",
|
||||
"selected": "已選取",
|
||||
"items": "項目"
|
||||
},
|
||||
"import": {
|
||||
"placeholder": "訂閱檔網址",
|
||||
"paste": "貼上",
|
||||
"clear": "清除"
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "無效的訂閱網址,請輸入以 http:// 或 https:// 開頭的位址",
|
||||
"onlyYaml": "僅支援 YAML 檔案"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "訂閱匯入失敗,嘗試使用 Clash 代理匯入",
|
||||
"importFail": "使用 Clash 代理匯入訂閱也失敗",
|
||||
"importNeedsRefresh": "Profile imported but may need manual refresh",
|
||||
"importSuccess": "Profile imported successfully, please restart if not visible",
|
||||
"profileSwitched": "訂閱已切換",
|
||||
"profileReactivated": "訂閱已啟用",
|
||||
"switchInterrupted": "配置切換被新的選擇中斷",
|
||||
"batchDeleted": "選取的訂閱已成功刪除"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Label-Home": "首 頁",
|
||||
@@ -802,6 +840,37 @@
|
||||
"invalidRule": "無效規則"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新增設定檔",
|
||||
"edit": "編輯設定檔"
|
||||
},
|
||||
"buttons": {
|
||||
"save": "儲存",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"fields": {
|
||||
"type": "類型",
|
||||
"name": "名稱",
|
||||
"description": "描述",
|
||||
"subscriptionUrl": "訂閱網址",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "更新間隔",
|
||||
"useSystemProxy": "使用系統代理更新",
|
||||
"useClashProxy": "使用內核代理更新",
|
||||
"acceptInvalidCerts": "允許無效憑證(危險)",
|
||||
"allowAutoUpdate": "允許自動更新"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "訂閱建立失敗,嘗試使用 Clash 代理建立",
|
||||
"creationSuccess": "使用 Clash 代理建立訂閱成功"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "選擇檔案"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,7 +253,7 @@ const ProfilePage = () => {
|
||||
setActivatings((prev) => prev.filter((id) => id !== previousSwitching));
|
||||
showNotice(
|
||||
"info",
|
||||
`${t("Profile switch interrupted by new selection")}: ${previousSwitching} → ${newProfile}`,
|
||||
`${t("pages.profiles.notifications.switchInterrupted")}: ${previousSwitching} → ${newProfile}`,
|
||||
3000,
|
||||
);
|
||||
},
|
||||
@@ -297,7 +297,7 @@ const ProfilePage = () => {
|
||||
|
||||
for (const file of paths) {
|
||||
if (!file.endsWith(".yaml") && !file.endsWith(".yml")) {
|
||||
showNotice("error", t("Only YAML Files Supported"));
|
||||
showNotice("error", t("pages.profiles.errors.onlyYaml"));
|
||||
continue;
|
||||
}
|
||||
const item = {
|
||||
@@ -385,7 +385,7 @@ const ProfilePage = () => {
|
||||
if (!url) return;
|
||||
// 校验url是否为http/https
|
||||
if (!/^https?:\/\//i.test(url)) {
|
||||
showNotice("error", t("Invalid Profile URL"));
|
||||
showNotice("error", t("pages.profiles.errors.invalidUrl"));
|
||||
return;
|
||||
}
|
||||
setLoading(true);
|
||||
@@ -439,7 +439,7 @@ const ProfilePage = () => {
|
||||
}
|
||||
|
||||
// 首次导入失败且未检测到数据变更,尝试使用自身代理
|
||||
showNotice("info", t("Import failed, retrying with Clash proxy..."));
|
||||
showNotice("info", t("pages.profiles.notifications.importRetry"));
|
||||
try {
|
||||
// 使用自身代理尝试导入
|
||||
await importProfile(url, {
|
||||
@@ -452,7 +452,7 @@ const ProfilePage = () => {
|
||||
const retryErrmsg = retryErr?.message || retryErr.toString();
|
||||
showNotice(
|
||||
"error",
|
||||
`${t("Import failed even with Clash proxy")}: ${retryErrmsg}`,
|
||||
`${t("pages.profiles.notifications.importFail")}: ${retryErrmsg}`,
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
@@ -524,14 +524,14 @@ const ProfilePage = () => {
|
||||
await onEnhance(false);
|
||||
showNotice(
|
||||
"error",
|
||||
t("Profile imported but may need manual refresh"),
|
||||
t("pages.profiles.notifications.importNeedsRefresh"),
|
||||
3000,
|
||||
);
|
||||
} catch (finalError) {
|
||||
console.error(`[导入刷新] 最终刷新尝试失败:`, finalError);
|
||||
showNotice(
|
||||
"error",
|
||||
t("Profile imported successfully, please restart if not visible"),
|
||||
t("pages.profiles.notifications.importSuccess"),
|
||||
5000,
|
||||
);
|
||||
}
|
||||
@@ -650,7 +650,11 @@ const ProfilePage = () => {
|
||||
closeAllConnections();
|
||||
|
||||
if (notifySuccess && success) {
|
||||
showNotice("success", t("Profile Switched"), 1000);
|
||||
showNotice(
|
||||
"success",
|
||||
t("pages.profiles.notifications.profileSwitched"),
|
||||
1000,
|
||||
);
|
||||
}
|
||||
|
||||
console.log(
|
||||
@@ -747,7 +751,11 @@ const ProfilePage = () => {
|
||||
await enhanceProfiles();
|
||||
mutateLogs();
|
||||
if (notifySuccess) {
|
||||
showNotice("success", t("Profile Reactivated"), 1000);
|
||||
showNotice(
|
||||
"success",
|
||||
t("pages.profiles.notifications.profileReactivated"),
|
||||
1000,
|
||||
);
|
||||
}
|
||||
} catch (err: any) {
|
||||
showNotice("error", err.message || err.toString(), 3000);
|
||||
@@ -886,7 +894,7 @@ const ProfilePage = () => {
|
||||
setSelectedProfiles(new Set());
|
||||
setBatchMode(false);
|
||||
|
||||
showNotice("success", t("Selected profiles deleted successfully"));
|
||||
showNotice("success", t("pages.profiles.notifications.batchDeleted"));
|
||||
} catch (err: any) {
|
||||
showNotice("error", err?.message || err.toString());
|
||||
} finally {
|
||||
@@ -966,7 +974,7 @@ const ProfilePage = () => {
|
||||
return (
|
||||
<BasePage
|
||||
full
|
||||
title={t("Profiles")}
|
||||
title={t("pages.profiles.title")}
|
||||
contentStyle={{ height: "100%" }}
|
||||
header={
|
||||
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
|
||||
@@ -976,7 +984,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="inherit"
|
||||
title={t("Batch Operations")}
|
||||
title={t("pages.profiles.batch.title")}
|
||||
onClick={toggleBatchMode}
|
||||
>
|
||||
<CheckBoxOutlineBlankRounded />
|
||||
@@ -985,7 +993,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="inherit"
|
||||
title={t("Update All Profiles")}
|
||||
title={t("pages.profiles.actions.updateAll")}
|
||||
onClick={onUpdateAll}
|
||||
>
|
||||
<RefreshRounded />
|
||||
@@ -994,7 +1002,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="inherit"
|
||||
title={t("View Runtime Config")}
|
||||
title={t("pages.profiles.actions.viewRuntimeConfig")}
|
||||
onClick={() => configRef.current?.open()}
|
||||
>
|
||||
<TextSnippetOutlined />
|
||||
@@ -1003,7 +1011,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="primary"
|
||||
title={t("Reactivate Profiles")}
|
||||
title={t("pages.profiles.actions.reactivate")}
|
||||
onClick={() => onEnhance(true)}
|
||||
>
|
||||
<LocalFireDepartmentRounded />
|
||||
@@ -1035,7 +1043,11 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="inherit"
|
||||
title={isAllSelected() ? t("Deselect All") : t("Select All")}
|
||||
title={
|
||||
isAllSelected()
|
||||
? t("pages.profiles.batch.deselectAll")
|
||||
: t("pages.profiles.batch.selectAll")
|
||||
}
|
||||
onClick={
|
||||
isAllSelected() ? clearAllSelections : selectAllProfiles
|
||||
}
|
||||
@@ -1051,19 +1063,20 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="error"
|
||||
title={t("Delete Selected Profiles")}
|
||||
title={t("pages.profiles.batch.delete")}
|
||||
onClick={deleteSelectedProfiles}
|
||||
disabled={selectedProfiles.size === 0}
|
||||
>
|
||||
<DeleteRounded />
|
||||
</IconButton>
|
||||
<Button size="small" variant="outlined" onClick={toggleBatchMode}>
|
||||
{t("Done")}
|
||||
{t("pages.profiles.batch.done")}
|
||||
</Button>
|
||||
<Box
|
||||
sx={{ flex: 1, textAlign: "right", color: "text.secondary" }}
|
||||
>
|
||||
{t("Selected")} {selectedProfiles.size} {t("items")}
|
||||
{t("pages.profiles.batch.selected")} {selectedProfiles.size}{" "}
|
||||
{t("pages.profiles.batch.items")}
|
||||
</Box>
|
||||
</Box>
|
||||
)}
|
||||
@@ -1096,7 +1109,7 @@ const ProfilePage = () => {
|
||||
event.preventDefault();
|
||||
void onImport();
|
||||
}}
|
||||
placeholder={t("Profile URL")}
|
||||
placeholder={t("pages.profiles.import.placeholder")}
|
||||
slotProps={{
|
||||
input: {
|
||||
sx: { pr: 1 },
|
||||
@@ -1104,7 +1117,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
sx={{ p: 0.5 }}
|
||||
title={t("Paste")}
|
||||
title={t("pages.profiles.import.paste")}
|
||||
onClick={onCopyLink}
|
||||
>
|
||||
<ContentPasteRounded fontSize="inherit" />
|
||||
@@ -1113,7 +1126,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
sx={{ p: 0.5 }}
|
||||
title={t("Clear")}
|
||||
title={t("pages.profiles.import.clear")}
|
||||
onClick={() => setUrl("")}
|
||||
>
|
||||
<ClearRounded fontSize="inherit" />
|
||||
@@ -1130,7 +1143,7 @@ const ProfilePage = () => {
|
||||
sx={{ borderRadius: "6px" }}
|
||||
onClick={onImport}
|
||||
>
|
||||
{t("Import")}
|
||||
{t("pages.profiles.actions.import")}
|
||||
</LoadingButton>
|
||||
<Button
|
||||
variant="contained"
|
||||
@@ -1138,7 +1151,7 @@ const ProfilePage = () => {
|
||||
sx={{ borderRadius: "6px" }}
|
||||
onClick={() => viewerRef.current?.create()}
|
||||
>
|
||||
{t("New")}
|
||||
{t("pages.profiles.actions.new")}
|
||||
</Button>
|
||||
</Stack>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user