chore: i18n for rule module

This commit is contained in:
Slinetrac
2025-10-31 18:31:00 +08:00
Unverified
parent 15e73c603b
commit f8cb88c3dd
16 changed files with 433 additions and 26 deletions

View File

@@ -462,10 +462,12 @@ export const RulesEditorViewer = (props: Props) => {
const validateRule = () => {
if ((ruleType.required ?? true) && !ruleContent) {
throw new Error(t("Rule Condition Required"));
throw new Error(
t("components.ruleEditor.form.validation.conditionRequired"),
);
}
if (ruleType.validator && !ruleType.validator(ruleContent)) {
throw new Error(t("Invalid Rule"));
throw new Error(t("components.ruleEditor.form.validation.invalidRule"));
}
const condition = (ruleType.required ?? true) ? ruleContent : "";
@@ -490,7 +492,7 @@ export const RulesEditorViewer = (props: Props) => {
<DialogTitle>
{
<Box display="flex" justifyContent="space-between">
{t("Edit Rules")}
{t("components.ruleEditor.title")}
<Box>
<Button
variant="contained"
@@ -518,7 +520,9 @@ export const RulesEditorViewer = (props: Props) => {
}}
>
<Item>
<ListItemText primary={t("Rule Type")} />
<ListItemText
primary={t("components.ruleEditor.form.labels.type")}
/>
<Autocomplete
size="small"
sx={{ minWidth: "240px" }}
@@ -527,7 +531,12 @@ export const RulesEditorViewer = (props: Props) => {
value={ruleType}
getOptionLabel={(option) => option.name}
renderOption={(props, option) => (
<li {...props} title={t(option.name)}>
<li
{...props}
title={t(
`components.ruleEditor.ruleTypes.${option.name}`,
)}
>
{option.name}
</li>
)}
@@ -537,7 +546,9 @@ export const RulesEditorViewer = (props: Props) => {
<Item
sx={{ display: !(ruleType.required ?? true) ? "none" : "" }}
>
<ListItemText primary={t("Rule Content")} />
<ListItemText
primary={t("components.ruleEditor.form.labels.content")}
/>
{ruleType.name === "RULE-SET" && (
<Autocomplete
@@ -574,7 +585,9 @@ export const RulesEditorViewer = (props: Props) => {
)}
</Item>
<Item>
<ListItemText primary={t("Proxy Policy")} />
<ListItemText
primary={t("components.ruleEditor.form.labels.proxyPolicy")}
/>
<Autocomplete
size="small"
sx={{ minWidth: "240px" }}
@@ -591,7 +604,9 @@ export const RulesEditorViewer = (props: Props) => {
</Item>
{ruleType.noResolve && (
<Item>
<ListItemText primary={t("No Resolve")} />
<ListItemText
primary={t("components.ruleEditor.form.toggles.noResolve")}
/>
<Switch
checked={noResolve}
onChange={() => setNoResolve(!noResolve)}
@@ -613,7 +628,7 @@ export const RulesEditorViewer = (props: Props) => {
}
}}
>
{t("Prepend Rule")}
{t("components.ruleEditor.form.actions.prependRule")}
</Button>
</Item>
<Item>
@@ -631,7 +646,7 @@ export const RulesEditorViewer = (props: Props) => {
}
}}
>
{t("Append Rule")}
{t("components.ruleEditor.form.actions.appendRule")}
</Button>
</Item>
</List>

View File

@@ -141,7 +141,7 @@ export const ProviderButton = () => {
startIcon={<StorageOutlined />}
onClick={() => setOpen(true)}
>
{t("Rule Provider")}
{t("pages.rules.provider.trigger")}
</Button>
<Dialog open={open} onClose={handleClose} maxWidth="sm" fullWidth>
@@ -151,7 +151,9 @@ export const ProviderButton = () => {
justifyContent="space-between"
alignItems="center"
>
<Typography variant="h6">{t("Rule Providers")}</Typography>
<Typography variant="h6">
{t("pages.rules.provider.dialogTitle")}
</Typography>
<Button
variant="contained"
size="small"

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "القواعد",
"provider": {
"trigger": "مزود القواعد",
"dialogTitle": "مزود القواعد"
}
}
},
"Label-Home": "Home",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "تعديل القواعد",
"form": {
"labels": {
"type": "نوع القاعدة",
"content": "محتوى القاعدة",
"proxyPolicy": "سياسة الوكيل"
},
"toggles": {
"noResolve": "لا يوجد حل"
},
"actions": {
"prependRule": "إضافة قاعدة في البداية",
"appendRule": "إضافة قاعدة في النهاية"
},
"validation": {
"conditionRequired": "شرط القاعدة مطلوب",
"invalidRule": "قاعدة غير صالحة"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "Regeln",
"provider": {
"trigger": "Regelsammlung",
"dialogTitle": "Regelsammlung"
}
}
},
"Label-Home": "Startseite",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "Regeln bearbeiten",
"form": {
"labels": {
"type": "Regeltyp",
"content": "Regelinhalt",
"proxyPolicy": "Proxy-Strategie"
},
"toggles": {
"noResolve": "DNS-Auflösung überspringen"
},
"actions": {
"prependRule": "Vorherige Regel hinzufügen",
"appendRule": "Nachfolgende Regel hinzufügen"
},
"validation": {
"conditionRequired": "Regelbedingung fehlt",
"invalidRule": "Ungültige Regel"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "Rules",
"provider": {
"trigger": "Rule Provider",
"dialogTitle": "Rule Providers"
}
}
},
"Label-Home": "Home",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "Edit Rules",
"form": {
"labels": {
"type": "Rule Type",
"content": "Rule Content",
"proxyPolicy": "Proxy Policy"
},
"toggles": {
"noResolve": "No Resolve"
},
"actions": {
"prependRule": "Prepend Rule",
"appendRule": "Append Rule"
},
"validation": {
"conditionRequired": "Rule Condition Required",
"invalidRule": "Invalid Rule"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "Reglas",
"provider": {
"trigger": "Proveedor de reglas",
"dialogTitle": "Proveedor de reglas"
}
}
},
"Label-Home": "Hogar",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "Editar reglas",
"form": {
"labels": {
"type": "Tipo de regla",
"content": "Contenido de la regla",
"proxyPolicy": "Política de proxy"
},
"toggles": {
"noResolve": "Omitir resolución DNS"
},
"actions": {
"prependRule": "Agregar regla previa",
"appendRule": "Agregar regla posterior"
},
"validation": {
"conditionRequired": "Falta la condición de la regla",
"invalidRule": "Regla no válida"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "قوانین",
"provider": {
"trigger": "تأمین‌کننده قانون",
"dialogTitle": "تأمین‌کننده قانون"
}
}
},
"Label-Home": "Home",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "ویرایش قوانین",
"form": {
"labels": {
"type": "نوع قانون",
"content": "محتوای قانون",
"proxyPolicy": "سیاست پروکسی"
},
"toggles": {
"noResolve": "بدون حل"
},
"actions": {
"prependRule": "اضافه کردن قانون به ابتدا",
"appendRule": "اضافه کردن قانون به انتها"
},
"validation": {
"conditionRequired": "شرط قانون الزامی است",
"invalidRule": "قانون نامعتبر"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "Aturan",
"provider": {
"trigger": "Penyedia Aturan",
"dialogTitle": "Penyedia Aturan"
}
}
},
"Label-Home": "Home",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "Ubah Aturan",
"form": {
"labels": {
"type": "Jenis Aturan",
"content": "Konten Aturan",
"proxyPolicy": "Kebijakan Proksi"
},
"toggles": {
"noResolve": "Tidak Menyelesaikan"
},
"actions": {
"prependRule": "Tambahkan Aturan di Awal",
"appendRule": "Tambahkan Aturan di Akhir"
},
"validation": {
"conditionRequired": "Kondisi Aturan Diperlukan",
"invalidRule": "Aturan Tidak Valid"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "ルール",
"provider": {
"trigger": "ルールプロバイダー",
"dialogTitle": "ルールプロバイダー"
}
}
},
"Label-Home": "ホーム",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "ルールを編集",
"form": {
"labels": {
"type": "ルールタイプ",
"content": "ルール内容",
"proxyPolicy": "プロキシポリシー"
},
"toggles": {
"noResolve": "DNS解決をスキップ"
},
"actions": {
"prependRule": "前置ルールを追加",
"appendRule": "後置ルールを追加"
},
"validation": {
"conditionRequired": "ルール条件が必要です",
"invalidRule": "無効なルール"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "규칙",
"provider": {
"trigger": "규칙 제공자",
"dialogTitle": "규칙 제공자"
}
}
},
"Label-Home": "홈",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "규칙 편집",
"form": {
"labels": {
"type": "규칙 유형",
"content": "규칙 내용",
"proxyPolicy": "프록시 정책"
},
"toggles": {
"noResolve": "해석 안함"
},
"actions": {
"prependRule": "규칙 앞에 추가",
"appendRule": "규칙 뒤에 추가"
},
"validation": {
"conditionRequired": "규칙 조건 필요",
"invalidRule": "잘못된 규칙"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "Правила",
"provider": {
"trigger": "Провайдеры правил",
"dialogTitle": "Провайдеры правил"
}
}
},
"Label-Home": "Главная",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "Редактировать правила",
"form": {
"labels": {
"type": "Тип правила",
"content": "Содержимое правила",
"proxyPolicy": "Политика прокси"
},
"toggles": {
"noResolve": "Без разрешения"
},
"actions": {
"prependRule": "Добавить правило в начало",
"appendRule": "Добавить правило в конец"
},
"validation": {
"conditionRequired": "Требуется условие правила",
"invalidRule": "Недействительное правило"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "Kurallar",
"provider": {
"trigger": "Kural Sağlayıcısı",
"dialogTitle": "Kural Sağlayıcısı"
}
}
},
"Label-Home": "Ana Sayfa",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "Kuralları Düzenle",
"form": {
"labels": {
"type": "Kural Tipi",
"content": "Kural İçeriği",
"proxyPolicy": "Vekil Politikası"
},
"toggles": {
"noResolve": "Çözümleme Yok"
},
"actions": {
"prependRule": "Kuralın Başına Ekle",
"appendRule": "Kuralın Sonuna Ekle"
},
"validation": {
"conditionRequired": "Kural Koşulu Gerekli",
"invalidRule": "Geçersiz Kural"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "Failed to disconnect from proxy chain",
"duplicateNode": "Proxy node already exists in chain"
}
},
"rules": {
"title": "Кагыйдәләр",
"provider": {
"trigger": "Кагыйдә провайдеры",
"dialogTitle": "Кагыйдә провайдеры"
}
}
},
"Label-Home": "Home",
@@ -773,5 +780,28 @@
"Unlock menu order": "Unlock menu order",
"Lock menu order": "Lock menu order",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "Кагыйдәләрне үзгәртү",
"form": {
"labels": {
"type": "Кагыйдә төре",
"content": "Кагыйдә эчтәлеге",
"proxyPolicy": "Прокси сәясәте"
},
"toggles": {
"noResolve": "Резолвсыз"
},
"actions": {
"prependRule": "Кагыйдәне өскә өстәү",
"appendRule": "Кагыйдәне аска өстәү"
},
"validation": {
"conditionRequired": "Кагыйдә шарты кирәк",
"invalidRule": "Яраксыз кагыйдә"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "断开链式代理失败",
"duplicateNode": "该节点已在链式代理表中"
}
},
"rules": {
"title": "规则",
"provider": {
"trigger": "规则集合",
"dialogTitle": "规则集合"
}
}
},
"Label-Home": "首 页",
@@ -773,5 +780,28 @@
"Unlock menu order": "解锁菜单排序",
"Lock menu order": "锁定菜单排序",
"Open App Log": "应用日志",
"Open Core Log": "内核日志"
"Open Core Log": "内核日志",
"components": {
"ruleEditor": {
"title": "编辑规则",
"form": {
"labels": {
"type": "规则类型",
"content": "规则内容",
"proxyPolicy": "代理策略"
},
"toggles": {
"noResolve": "跳过 DNS 解析"
},
"actions": {
"prependRule": "添加前置规则",
"appendRule": "添加后置规则"
},
"validation": {
"conditionRequired": "规则条件缺失",
"invalidRule": "无效规则"
}
}
}
}
}

View File

@@ -65,6 +65,13 @@
"disconnectFailed": "中斷鏈式代理失敗",
"duplicateNode": "該節點已在鏈式代理表中"
}
},
"rules": {
"title": "規則",
"provider": {
"trigger": "規則集合",
"dialogTitle": "規則集合"
}
}
},
"Label-Home": "首 頁",
@@ -773,5 +780,28 @@
"Unlock menu order": "解鎖選單排序",
"Lock menu order": "鎖定選單排序",
"Open App Log": "Open App Log",
"Open Core Log": "Open Core Log"
"Open Core Log": "Open Core Log",
"components": {
"ruleEditor": {
"title": "編輯規則",
"form": {
"labels": {
"type": "規則類型",
"content": "規則內容",
"proxyPolicy": "代理策略"
},
"toggles": {
"noResolve": "跳過 DNS 解析"
},
"actions": {
"prependRule": "新增前置規則",
"appendRule": "新增後置規則"
},
"validation": {
"conditionRequired": "規則條件為必填",
"invalidRule": "無效規則"
}
}
}
}
}

View File

@@ -48,7 +48,7 @@ const RulesPage = () => {
return (
<BasePage
full
title={t("Rules")}
title={t("pages.rules.title")}
contentStyle={{
height: "100%",
display: "flex",