refactor(i18n): restructure feedback and profile namespaces for better organization
This commit is contained in:
@@ -177,7 +177,7 @@ const TrafficErrorFallback: React.FC<TrafficErrorFallbackProps> = ({
|
||||
<ErrorOutlineRounded sx={{ fontSize: 48, mb: 2, color: "error.main" }} />
|
||||
|
||||
<Typography variant="h6" gutterBottom>
|
||||
{t("shared.messages.errors.trafficStats")}
|
||||
{t("shared.feedback.errors.trafficStats")}
|
||||
</Typography>
|
||||
|
||||
<Typography
|
||||
@@ -186,7 +186,7 @@ const TrafficErrorFallback: React.FC<TrafficErrorFallbackProps> = ({
|
||||
textAlign="center"
|
||||
sx={{ mb: 2 }}
|
||||
>
|
||||
{t("shared.messages.errors.trafficStatsDescription")}
|
||||
{t("shared.feedback.errors.trafficStatsDescription")}
|
||||
</Typography>
|
||||
|
||||
<Alert severity="error" sx={{ mb: 2, maxWidth: 400 }}>
|
||||
|
||||
@@ -112,7 +112,7 @@ const ProfileDetails = ({
|
||||
sx={{ display: "flex", alignItems: "center" }}
|
||||
>
|
||||
<span style={{ flexShrink: 0 }}>
|
||||
{t("profiles.card.labels.from")}:{" "}
|
||||
{t("profiles.components.card.labels.from")}:{" "}
|
||||
</span>
|
||||
{current.home ? (
|
||||
<Link
|
||||
@@ -188,7 +188,7 @@ const ProfileDetails = ({
|
||||
sx={{ cursor: "pointer" }}
|
||||
onClick={onUpdateProfile}
|
||||
>
|
||||
{t("profiles.card.labels.updateTime")}:{" "}
|
||||
{t("profiles.components.card.labels.updateTime")}:{" "}
|
||||
<Box component="span" fontWeight="medium">
|
||||
{dayjs(current.updated * 1000).format("YYYY-MM-DD HH:mm")}
|
||||
</Box>
|
||||
@@ -201,7 +201,7 @@ const ProfileDetails = ({
|
||||
<Stack direction="row" alignItems="center" spacing={1}>
|
||||
<SpeedOutlined fontSize="small" color="action" />
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("profiles.card.labels.usedTotal")}:{" "}
|
||||
{t("profiles.components.card.labels.usedTotal")}:{" "}
|
||||
<Box component="span" fontWeight="medium">
|
||||
{parseTraffic(usedTraffic)} /{" "}
|
||||
{parseTraffic(current.extra.total)}
|
||||
@@ -213,7 +213,7 @@ const ProfileDetails = ({
|
||||
<Stack direction="row" alignItems="center" spacing={1}>
|
||||
<EventOutlined fontSize="small" color="action" />
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("profiles.card.labels.expireTime")}:{" "}
|
||||
{t("profiles.components.card.labels.expireTime")}:{" "}
|
||||
<Box component="span" fontWeight="medium">
|
||||
{parseExpire(current.extra.expire)}
|
||||
</Box>
|
||||
@@ -268,10 +268,10 @@ const EmptyProfile = ({ onClick }: { onClick: () => void }) => {
|
||||
sx={{ fontSize: 60, color: "primary.main", mb: 2 }}
|
||||
/>
|
||||
<Typography variant="h6" gutterBottom>
|
||||
{t("profiles.page.actions.import")} {t("profiles.page.title")}
|
||||
{t("profiles.page.actions.import")} {t("profiles.page.header.title")}
|
||||
</Typography>
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("profiles.card.labels.clickToImport")}
|
||||
{t("profiles.components.card.labels.clickToImport")}
|
||||
</Typography>
|
||||
</Box>
|
||||
);
|
||||
@@ -312,7 +312,7 @@ export const HomeProfileCard = ({
|
||||
|
||||
// 卡片标题
|
||||
const cardTitle = useMemo(() => {
|
||||
if (!current) return t("profiles.page.title");
|
||||
if (!current) return t("profiles.page.header.title");
|
||||
|
||||
if (!current.home) return current.name;
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ export const EditorViewer = <T extends Language>(props: Props<T>) => {
|
||||
onClose,
|
||||
} = props;
|
||||
|
||||
const resolvedTitle = title ?? t("profiles.menu.editFile");
|
||||
const resolvedTitle = title ?? t("profiles.components.menu.editFile");
|
||||
const resolvedInitialData = useMemo(
|
||||
() => initialData ?? Promise.resolve(""),
|
||||
[initialData],
|
||||
@@ -203,7 +203,7 @@ export const EditorViewer = <T extends Language>(props: Props<T>) => {
|
||||
mouseWheelZoom: true, // 按住Ctrl滚轮调节缩放比例
|
||||
readOnly: readOnly, // 只读模式
|
||||
readOnlyMessage: {
|
||||
value: t("profiles.editor.readOnlyMessage"),
|
||||
value: t("profiles.modals.editor.messages.readOnly"),
|
||||
}, // 只读模式尝试编辑时的提示信息
|
||||
renderValidationDecorations: "on", // 只读模式下显示校验信息
|
||||
quickSuggestions: {
|
||||
@@ -233,7 +233,7 @@ export const EditorViewer = <T extends Language>(props: Props<T>) => {
|
||||
size="medium"
|
||||
color="inherit"
|
||||
sx={{ display: readOnly ? "none" : "" }}
|
||||
title={t("profiles.editor.format")}
|
||||
title={t("profiles.modals.editor.actions.format")}
|
||||
onClick={() =>
|
||||
editorRef.current
|
||||
?.getAction("editor.action.formatDocument")
|
||||
|
||||
@@ -42,7 +42,7 @@ export const FileInput = (props: Props) => {
|
||||
sx={{ flex: "none" }}
|
||||
onClick={() => inputRef.current?.click()}
|
||||
>
|
||||
{t("profiles.fileInput.chooseFile")}
|
||||
{t("profiles.components.fileInput.chooseFile")}
|
||||
</Button>
|
||||
|
||||
<input
|
||||
|
||||
@@ -400,7 +400,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
const validateGroup = () => {
|
||||
const group = formIns.getValues();
|
||||
if (group.name === "") {
|
||||
throw new Error(t("profiles.groupsEditor.errors.nameRequired"));
|
||||
throw new Error(t("profiles.modals.groupsEditor.errors.nameRequired"));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -415,7 +415,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
}
|
||||
|
||||
await saveProfileFile(property, nextData);
|
||||
showNotice.success("profiles.notifications.saved");
|
||||
showNotice.success("shared.feedback.notifications.saved");
|
||||
setPrevData(nextData);
|
||||
onSave?.(prevData, nextData);
|
||||
onClose();
|
||||
@@ -429,7 +429,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<DialogTitle>
|
||||
{
|
||||
<Box display="flex" justifyContent="space-between">
|
||||
{t("profiles.groupsEditor.title")}
|
||||
{t("profiles.modals.groupsEditor.title")}
|
||||
<Box>
|
||||
<Button
|
||||
variant="contained"
|
||||
@@ -470,7 +470,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.type")}
|
||||
primary={t("profiles.modals.groupsEditor.fields.type")}
|
||||
/>
|
||||
<Autocomplete
|
||||
size="small"
|
||||
@@ -501,7 +501,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.name")}
|
||||
primary={t("profiles.modals.groupsEditor.fields.name")}
|
||||
/>
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
@@ -520,7 +520,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.icon")}
|
||||
primary={t("profiles.modals.groupsEditor.fields.icon")}
|
||||
/>
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
@@ -537,7 +537,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.proxies")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.proxies",
|
||||
)}
|
||||
/>
|
||||
<Autocomplete
|
||||
size="small"
|
||||
@@ -565,7 +567,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.provider")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.provider",
|
||||
)}
|
||||
/>
|
||||
<Autocomplete
|
||||
size="small"
|
||||
@@ -586,7 +590,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t(
|
||||
"profiles.groupsEditor.fields.healthCheckUrl",
|
||||
"profiles.modals.groupsEditor.fields.healthCheckUrl",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
@@ -606,7 +610,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t(
|
||||
"profiles.groupsEditor.fields.expectedStatus",
|
||||
"profiles.modals.groupsEditor.fields.expectedStatus",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
@@ -627,7 +631,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.interval")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.interval",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
@@ -657,7 +663,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.timeout")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.timeout",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
@@ -688,7 +696,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t(
|
||||
"profiles.groupsEditor.fields.maxFailedTimes",
|
||||
"profiles.modals.groupsEditor.fields.maxFailedTimes",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
@@ -711,7 +719,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t(
|
||||
"profiles.groupsEditor.fields.interfaceName",
|
||||
"profiles.modals.groupsEditor.fields.interfaceName",
|
||||
)}
|
||||
/>
|
||||
<Autocomplete
|
||||
@@ -731,7 +739,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.routingMark")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.routingMark",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
@@ -751,7 +761,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.filter")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.filter",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
@@ -769,7 +781,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t(
|
||||
"profiles.groupsEditor.fields.excludeFilter",
|
||||
"profiles.modals.groupsEditor.fields.excludeFilter",
|
||||
)}
|
||||
/>
|
||||
<TextField
|
||||
@@ -787,7 +799,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.excludeType")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.excludeType",
|
||||
)}
|
||||
/>
|
||||
<Autocomplete
|
||||
multiple
|
||||
@@ -835,7 +849,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.fields.includeAll")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.fields.includeAll",
|
||||
)}
|
||||
/>
|
||||
<Switch checked={field.value} {...field} />
|
||||
</Item>
|
||||
@@ -848,7 +864,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t(
|
||||
"profiles.groupsEditor.fields.includeAllProxies",
|
||||
"profiles.modals.groupsEditor.fields.includeAllProxies",
|
||||
)}
|
||||
/>
|
||||
<Switch checked={field.value} {...field} />
|
||||
@@ -862,7 +878,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t(
|
||||
"profiles.groupsEditor.fields.includeAllProviders",
|
||||
"profiles.modals.groupsEditor.fields.includeAllProviders",
|
||||
)}
|
||||
/>
|
||||
<Switch checked={field.value} {...field} />
|
||||
@@ -875,7 +891,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.toggles.lazy")}
|
||||
primary={t("profiles.modals.groupsEditor.toggles.lazy")}
|
||||
/>
|
||||
<Switch checked={field.value} {...field} />
|
||||
</Item>
|
||||
@@ -887,7 +903,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.toggles.disableUdp")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.toggles.disableUdp",
|
||||
)}
|
||||
/>
|
||||
<Switch checked={field.value} {...field} />
|
||||
</Item>
|
||||
@@ -899,7 +917,9 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
render={({ field }) => (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("profiles.groupsEditor.toggles.hidden")}
|
||||
primary={t(
|
||||
"profiles.modals.groupsEditor.toggles.hidden",
|
||||
)}
|
||||
/>
|
||||
<Switch checked={field.value} {...field} />
|
||||
</Item>
|
||||
@@ -917,7 +937,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
for (const item of [...prependSeq, ...groupList]) {
|
||||
if (item.name === formIns.getValues().name) {
|
||||
throw new Error(
|
||||
t("profiles.groupsEditor.errors.nameExists"),
|
||||
t("profiles.modals.groupsEditor.errors.nameExists"),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -927,7 +947,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
}
|
||||
}}
|
||||
>
|
||||
{t("profiles.groupsEditor.actions.prepend")}
|
||||
{t("profiles.modals.groupsEditor.actions.prepend")}
|
||||
</Button>
|
||||
</Item>
|
||||
<Item>
|
||||
@@ -941,7 +961,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
for (const item of [...appendSeq, ...groupList]) {
|
||||
if (item.name === formIns.getValues().name) {
|
||||
throw new Error(
|
||||
t("profiles.groupsEditor.errors.nameExists"),
|
||||
t("profiles.modals.groupsEditor.errors.nameExists"),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -951,7 +971,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
}
|
||||
}}
|
||||
>
|
||||
{t("profiles.groupsEditor.actions.append")}
|
||||
{t("profiles.modals.groupsEditor.actions.append")}
|
||||
</Button>
|
||||
</Item>
|
||||
</List>
|
||||
|
||||
@@ -26,7 +26,7 @@ export const LogViewer = (props: Props) => {
|
||||
|
||||
return (
|
||||
<Dialog open={open} onClose={onClose}>
|
||||
<DialogTitle>{t("profiles.logViewer.title")}</DialogTitle>
|
||||
<DialogTitle>{t("profiles.modals.logViewer.title")}</DialogTitle>
|
||||
|
||||
<DialogContent
|
||||
sx={{
|
||||
|
||||
@@ -120,38 +120,46 @@ export const ProfileItem = (props: Props) => {
|
||||
|
||||
// 如果已经过期,显示"更新失败"
|
||||
if (nextUpdateDate.isBefore(now)) {
|
||||
setNextUpdateTime(t("profiles.item.status.lastUpdateFailed"));
|
||||
setNextUpdateTime(
|
||||
t("profiles.components.profileItem.status.lastUpdateFailed"),
|
||||
);
|
||||
} else {
|
||||
// 否则显示剩余时间
|
||||
const diffMinutes = nextUpdateDate.diff(now, "minute");
|
||||
|
||||
if (diffMinutes < 60) {
|
||||
if (diffMinutes <= 0) {
|
||||
setNextUpdateTime(`${t("profiles.item.status.nextUp")} <1m`);
|
||||
setNextUpdateTime(
|
||||
`${t("profiles.components.profileItem.status.nextUp")} <1m`,
|
||||
);
|
||||
} else {
|
||||
setNextUpdateTime(
|
||||
`${t("profiles.item.status.nextUp")} ${diffMinutes}m`,
|
||||
`${t("profiles.components.profileItem.status.nextUp")} ${diffMinutes}m`,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
const hours = Math.floor(diffMinutes / 60);
|
||||
const mins = diffMinutes % 60;
|
||||
setNextUpdateTime(
|
||||
`${t("profiles.item.status.nextUp")} ${hours}h ${mins}m`,
|
||||
`${t("profiles.components.profileItem.status.nextUp")} ${hours}h ${mins}m`,
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log(`返回的下次更新时间为空`);
|
||||
setNextUpdateTime(t("profiles.item.status.noSchedule"));
|
||||
setNextUpdateTime(
|
||||
t("profiles.components.profileItem.status.noSchedule"),
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(`获取下次更新时间出错:`, err);
|
||||
setNextUpdateTime(t("profiles.item.status.unknown"));
|
||||
setNextUpdateTime(t("profiles.components.profileItem.status.unknown"));
|
||||
}
|
||||
} else {
|
||||
console.log(`该配置未设置更新间隔或间隔为0`);
|
||||
setNextUpdateTime(t("profiles.item.status.autoUpdateDisabled"));
|
||||
setNextUpdateTime(
|
||||
t("profiles.components.profileItem.status.autoUpdateDisabled"),
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -365,18 +373,18 @@ export const ProfileItem = (props: Props) => {
|
||||
};
|
||||
|
||||
const menuLabels = {
|
||||
home: "profiles.menu.home",
|
||||
select: "profiles.menu.select",
|
||||
editInfo: "profiles.menu.editInfo",
|
||||
editFile: "profiles.menu.editFile",
|
||||
editRules: "profiles.menu.editRules",
|
||||
editProxies: "profiles.menu.editProxies",
|
||||
editGroups: "profiles.menu.editGroups",
|
||||
extendConfig: "profiles.menu.extendConfig",
|
||||
extendScript: "profiles.menu.extendScript",
|
||||
openFile: "profiles.menu.openFile",
|
||||
update: "profiles.menu.update",
|
||||
updateViaProxy: "profiles.menu.updateViaProxy",
|
||||
home: "profiles.components.menu.home",
|
||||
select: "profiles.components.menu.select",
|
||||
editInfo: "profiles.components.menu.editInfo",
|
||||
editFile: "profiles.components.menu.editFile",
|
||||
editRules: "profiles.components.menu.editRules",
|
||||
editProxies: "profiles.components.menu.editProxies",
|
||||
editGroups: "profiles.components.menu.editGroups",
|
||||
extendConfig: "profiles.components.menu.extendConfig",
|
||||
extendScript: "profiles.components.menu.extendScript",
|
||||
openFile: "profiles.components.menu.openFile",
|
||||
update: "profiles.components.menu.update",
|
||||
updateViaProxy: "profiles.components.menu.updateViaProxy",
|
||||
delete: "shared.actions.delete",
|
||||
} as const;
|
||||
|
||||
@@ -733,8 +741,8 @@ export const ProfileItem = (props: Props) => {
|
||||
textAlign="right"
|
||||
title={
|
||||
showNextUpdate
|
||||
? t("profiles.item.tooltips.showLast")
|
||||
: `${t("shared.labels.updateTime")}: ${parseExpire(updated)}\n${t("profiles.item.tooltips.showNext")}`
|
||||
? t("profiles.components.profileItem.tooltips.showLast")
|
||||
: `${t("shared.labels.updateTime")}: ${parseExpire(updated)}\n${t("profiles.components.profileItem.tooltips.showNext")}`
|
||||
}
|
||||
sx={{
|
||||
cursor: "pointer",
|
||||
@@ -891,8 +899,8 @@ export const ProfileItem = (props: Props) => {
|
||||
)}
|
||||
|
||||
<ConfirmViewer
|
||||
title={t("profiles.confirm.delete.title")}
|
||||
message={t("profiles.confirm.delete.message")}
|
||||
title={t("profiles.modals.confirmDelete.title")}
|
||||
message={t("profiles.modals.confirmDelete.message")}
|
||||
open={confirmOpen}
|
||||
onClose={() => setConfirmOpen(false)}
|
||||
onConfirm={() => {
|
||||
|
||||
@@ -55,18 +55,18 @@ export const ProfileMore = (props: Props) => {
|
||||
const hasError = entries.some(([level]) => level === "exception");
|
||||
|
||||
const globalTitles: Record<Props["id"], string> = {
|
||||
Merge: "profiles.more.global.merge",
|
||||
Script: "profiles.more.global.script",
|
||||
Merge: "profiles.components.more.global.merge",
|
||||
Script: "profiles.components.more.global.script",
|
||||
};
|
||||
|
||||
const chipLabels: Record<Props["id"], string> = {
|
||||
Merge: "profiles.more.chips.merge",
|
||||
Script: "profiles.more.chips.script",
|
||||
Merge: "profiles.components.more.chips.merge",
|
||||
Script: "profiles.components.more.chips.script",
|
||||
};
|
||||
|
||||
const itemMenu = [
|
||||
{ label: "profiles.menu.editFile", handler: onEditFile },
|
||||
{ label: "profiles.menu.openFile", handler: onOpenFile },
|
||||
{ label: "profiles.components.menu.editFile", handler: onEditFile },
|
||||
{ label: "profiles.components.menu.openFile", handler: onOpenFile },
|
||||
];
|
||||
|
||||
const boxStyle = {
|
||||
@@ -121,7 +121,7 @@ export const ProfileMore = (props: Props) => {
|
||||
size="small"
|
||||
edge="start"
|
||||
color="error"
|
||||
title={t("profiles.logViewer.title")}
|
||||
title={t("profiles.modals.logViewer.title")}
|
||||
onClick={() => setLogOpen(true)}
|
||||
>
|
||||
<FeaturedPlayListRounded fontSize="inherit" />
|
||||
@@ -132,7 +132,7 @@ export const ProfileMore = (props: Props) => {
|
||||
size="small"
|
||||
edge="start"
|
||||
color="inherit"
|
||||
title={t("profiles.logViewer.title")}
|
||||
title={t("profiles.modals.logViewer.title")}
|
||||
onClick={() => setLogOpen(true)}
|
||||
>
|
||||
<FeaturedPlayListRounded fontSize="inherit" />
|
||||
|
||||
@@ -144,7 +144,9 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
}
|
||||
} catch {
|
||||
// 首次创建/更新失败,尝试使用自身代理
|
||||
showNotice.info("profiles.viewer.notifications.creationRetry");
|
||||
showNotice.info(
|
||||
"profiles.modals.profileForm.feedback.notifications.creationRetry",
|
||||
);
|
||||
|
||||
// 使用自身代理的配置
|
||||
const retryItem = {
|
||||
@@ -167,7 +169,9 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
await patchProfile(form.uid, { option: originalOptions });
|
||||
}
|
||||
|
||||
showNotice.success("profiles.viewer.notifications.creationSuccess");
|
||||
showNotice.success(
|
||||
"profiles.modals.profileForm.feedback.notifications.creationSuccess",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,8 +220,8 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
open={open}
|
||||
title={
|
||||
openType === "new"
|
||||
? t("profiles.viewer.title.create")
|
||||
: t("profiles.viewer.title.edit")
|
||||
? t("profiles.modals.profileForm.title.create")
|
||||
: t("profiles.modals.profileForm.title.edit")
|
||||
}
|
||||
contentSx={{ width: 375, pb: 0, maxHeight: "80%" }}
|
||||
okBtn={t("shared.actions.save")}
|
||||
@@ -232,11 +236,13 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<FormControl size="small" fullWidth sx={{ mt: 1, mb: 1 }}>
|
||||
<InputLabel>{t("profiles.viewer.fields.type")}</InputLabel>
|
||||
<InputLabel>
|
||||
{t("profiles.modals.profileForm.fields.type")}
|
||||
</InputLabel>
|
||||
<Select
|
||||
{...field}
|
||||
autoFocus
|
||||
label={t("profiles.viewer.fields.type")}
|
||||
label={t("profiles.modals.profileForm.fields.type")}
|
||||
>
|
||||
<MenuItem value="remote">Remote</MenuItem>
|
||||
<MenuItem value="local">Local</MenuItem>
|
||||
@@ -252,7 +258,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
<TextField
|
||||
{...text}
|
||||
{...field}
|
||||
label={t("profiles.viewer.fields.name")}
|
||||
label={t("profiles.modals.profileForm.fields.name")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@@ -264,7 +270,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
<TextField
|
||||
{...text}
|
||||
{...field}
|
||||
label={t("profiles.viewer.fields.description")}
|
||||
label={t("profiles.modals.profileForm.fields.description")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@@ -279,7 +285,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
{...text}
|
||||
{...field}
|
||||
multiline
|
||||
label={t("profiles.viewer.fields.subscriptionUrl")}
|
||||
label={t("profiles.modals.profileForm.fields.subscriptionUrl")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@@ -306,7 +312,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
{...field}
|
||||
type="number"
|
||||
placeholder="60"
|
||||
label={t("profiles.viewer.fields.httpTimeout")}
|
||||
label={t("profiles.modals.profileForm.fields.httpTimeout")}
|
||||
slotProps={{
|
||||
input: {
|
||||
endAdornment: (
|
||||
@@ -331,7 +337,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
{...text}
|
||||
{...field}
|
||||
type="number"
|
||||
label={t("profiles.viewer.fields.updateInterval")}
|
||||
label={t("profiles.modals.profileForm.fields.updateInterval")}
|
||||
slotProps={{
|
||||
input: {
|
||||
endAdornment: (
|
||||
@@ -363,7 +369,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>
|
||||
{t("profiles.viewer.fields.useSystemProxy")}
|
||||
{t("profiles.modals.profileForm.fields.useSystemProxy")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
@@ -376,7 +382,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>
|
||||
{t("profiles.viewer.fields.useClashProxy")}
|
||||
{t("profiles.modals.profileForm.fields.useClashProxy")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
@@ -389,7 +395,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>
|
||||
{t("profiles.viewer.fields.acceptInvalidCerts")}
|
||||
{t("profiles.modals.profileForm.fields.acceptInvalidCerts")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
@@ -402,7 +408,7 @@ export function ProfileViewer({ onChange, ref }: ProfileViewerProps) {
|
||||
render={({ field }) => (
|
||||
<StyledBox>
|
||||
<InputLabel>
|
||||
{t("profiles.viewer.fields.allowAutoUpdate")}
|
||||
{t("profiles.modals.profileForm.fields.allowAutoUpdate")}
|
||||
</InputLabel>
|
||||
<Switch checked={field.value} {...field} color="primary" />
|
||||
</StyledBox>
|
||||
|
||||
@@ -263,7 +263,7 @@ export const ProxiesEditorViewer = (props: Props) => {
|
||||
const handleSave = useLockFn(async () => {
|
||||
try {
|
||||
await saveProfileFile(property, currData);
|
||||
showNotice.success("profiles.notifications.saved");
|
||||
showNotice.success("shared.feedback.notifications.saved");
|
||||
onSave?.(prevData, currData);
|
||||
onClose();
|
||||
} catch (err) {
|
||||
@@ -276,7 +276,7 @@ export const ProxiesEditorViewer = (props: Props) => {
|
||||
<DialogTitle>
|
||||
{
|
||||
<Box display="flex" justifyContent="space-between">
|
||||
{t("profiles.proxiesEditor.title")}
|
||||
{t("profiles.modals.proxiesEditor.title")}
|
||||
<Box>
|
||||
<Button
|
||||
variant="contained"
|
||||
@@ -315,7 +315,7 @@ export const ProxiesEditorViewer = (props: Props) => {
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
placeholder={t(
|
||||
"profiles.proxiesEditor.placeholders.multiUri",
|
||||
"profiles.modals.proxiesEditor.placeholders.multiUri",
|
||||
)}
|
||||
fullWidth
|
||||
rows={9}
|
||||
@@ -336,7 +336,7 @@ export const ProxiesEditorViewer = (props: Props) => {
|
||||
});
|
||||
}}
|
||||
>
|
||||
{t("profiles.proxiesEditor.actions.prepend")}
|
||||
{t("profiles.modals.proxiesEditor.actions.prepend")}
|
||||
</Button>
|
||||
</Item>
|
||||
<Item>
|
||||
@@ -350,7 +350,7 @@ export const ProxiesEditorViewer = (props: Props) => {
|
||||
});
|
||||
}}
|
||||
>
|
||||
{t("profiles.proxiesEditor.actions.append")}
|
||||
{t("profiles.modals.proxiesEditor.actions.append")}
|
||||
</Button>
|
||||
</Item>
|
||||
</List>
|
||||
|
||||
@@ -490,7 +490,7 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
const handleSave = useLockFn(async () => {
|
||||
try {
|
||||
await saveProfileFile(property, currData);
|
||||
showNotice.success("profiles.notifications.saved");
|
||||
showNotice.success("shared.feedback.notifications.saved");
|
||||
onSave?.(prevData, currData);
|
||||
onClose();
|
||||
} catch (err: any) {
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "تكبير",
|
||||
"minimize": "تصغير"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "تصور",
|
||||
"advanced": "متقدم"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "تم استيراد الملف الشخصي بنجاح",
|
||||
"importSubscriptionSuccess": "تم استيراد الاشتراك بنجاح",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "الملفات الشخصية",
|
||||
"header": {
|
||||
"title": "الملفات الشخصية"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "تحديث جميع الملفات الشخصية",
|
||||
"viewRuntimeConfig": "عرض تكوين وقت التشغيل",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "استيراد"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "رابط الملف الشخصي",
|
||||
"paste": "لصق",
|
||||
"clear": "مسح"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "تم استيراد الملف الشخصي بنجاح",
|
||||
"importSubscriptionSuccess": "تم استيراد الاشتراك بنجاح",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "إنشاء ملف شخصي",
|
||||
"edit": "تعديل الملف الشخصي"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "من",
|
||||
"updateTime": "وقت التحديث",
|
||||
"usedTotal": "المستخدم / الإجمالي",
|
||||
"expireTime": "وقت الانتهاء",
|
||||
"clickToImport": "Click to import subscription"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "النوع",
|
||||
"name": "الاسم",
|
||||
"description": "الوصف",
|
||||
"subscriptionUrl": "رابط الاشتراك",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "فاصل التحديث",
|
||||
"useSystemProxy": "استخدام وكيل النظام",
|
||||
"useClashProxy": "استخدام وكيل Clash",
|
||||
"acceptInvalidCerts": "قبول الشهادات غير الصالحة (خطر)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
"fileInput": {
|
||||
"chooseFile": "اختر ملف"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "اختيار",
|
||||
"editInfo": "تعديل المعلومات",
|
||||
"editFile": "تعديل الملف",
|
||||
"editRules": "تعديل القواعد",
|
||||
"editProxies": "تعديل الوكلاء",
|
||||
"editGroups": "تعديل مجموعات الوكلاء",
|
||||
"extendConfig": "توسيع الإعدادات",
|
||||
"extendScript": "توسيع السكربت",
|
||||
"openFile": "فتح الملف",
|
||||
"update": "تحديث",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "اختيار",
|
||||
"editInfo": "تعديل المعلومات",
|
||||
"editFile": "تعديل الملف",
|
||||
"editRules": "تعديل القواعد",
|
||||
"editProxies": "تعديل الوكلاء",
|
||||
"editGroups": "تعديل مجموعات الوكلاء",
|
||||
"extendConfig": "توسيع الإعدادات",
|
||||
"extendScript": "توسيع السكربت",
|
||||
"openFile": "فتح الملف",
|
||||
"update": "تحديث",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "تعديل الوكلاء",
|
||||
"placeholders": {
|
||||
"multiUri": "استخدم أسطرًا جديدة لعدّة عناوين URI (يدعم التشفير Base64)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "إنشاء ملف شخصي",
|
||||
"edit": "تعديل الملف الشخصي"
|
||||
},
|
||||
"fields": {
|
||||
"type": "النوع",
|
||||
"name": "الاسم",
|
||||
"description": "الوصف",
|
||||
"subscriptionUrl": "رابط الاشتراك",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "فاصل التحديث",
|
||||
"useSystemProxy": "استخدام وكيل النظام",
|
||||
"useClashProxy": "استخدام وكيل Clash",
|
||||
"acceptInvalidCerts": "قبول الشهادات غير الصالحة (خطر)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "إضافة وكيل في البداية",
|
||||
"append": "إضافة وكيل في النهاية"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "تعديل مجموعات الوكلاء",
|
||||
"errors": {
|
||||
"nameRequired": "اسم المجموعة مطلوب",
|
||||
"nameExists": "اسم المجموعة موجود بالفعل"
|
||||
"proxiesEditor": {
|
||||
"title": "تعديل الوكلاء",
|
||||
"placeholders": {
|
||||
"multiUri": "استخدم أسطرًا جديدة لعدّة عناوين URI (يدعم التشفير Base64)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "إضافة وكيل في البداية",
|
||||
"append": "إضافة وكيل في النهاية"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "نوع المجموعة",
|
||||
"name": "اسم المجموعة",
|
||||
"icon": "أيقونة مجموعة الوكلاء",
|
||||
"proxies": "استخدام الوكلاء",
|
||||
"provider": "استخدام المزود",
|
||||
"healthCheckUrl": "رابط فحص الصحة",
|
||||
"expectedStatus": "الحالة المتوقعة",
|
||||
"interval": "الفاصل الزمني",
|
||||
"timeout": "مهلة",
|
||||
"maxFailedTimes": "الحد الأقصى لمحاولات الفشل",
|
||||
"interfaceName": "اسم الواجهة",
|
||||
"routingMark": "علامة التوجيه",
|
||||
"filter": "تصفية",
|
||||
"excludeFilter": "استبعاد المرشح",
|
||||
"excludeType": "استبعاد النوع",
|
||||
"includeAll": "تضمين جميع الوكلاء والمزودين",
|
||||
"includeAllProxies": "تضمين جميع الوكلاء",
|
||||
"includeAllProviders": "تضمين جميع المزودين"
|
||||
"groupsEditor": {
|
||||
"title": "تعديل مجموعات الوكلاء",
|
||||
"errors": {
|
||||
"nameRequired": "اسم المجموعة مطلوب",
|
||||
"nameExists": "اسم المجموعة موجود بالفعل"
|
||||
},
|
||||
"fields": {
|
||||
"type": "نوع المجموعة",
|
||||
"name": "اسم المجموعة",
|
||||
"icon": "أيقونة مجموعة الوكلاء",
|
||||
"proxies": "استخدام الوكلاء",
|
||||
"provider": "استخدام المزود",
|
||||
"healthCheckUrl": "رابط فحص الصحة",
|
||||
"expectedStatus": "الحالة المتوقعة",
|
||||
"interval": "الفاصل الزمني",
|
||||
"timeout": "مهلة",
|
||||
"maxFailedTimes": "الحد الأقصى لمحاولات الفشل",
|
||||
"interfaceName": "اسم الواجهة",
|
||||
"routingMark": "علامة التوجيه",
|
||||
"filter": "تصفية",
|
||||
"excludeFilter": "استبعاد المرشح",
|
||||
"excludeType": "استبعاد النوع",
|
||||
"includeAll": "تضمين جميع الوكلاء والمزودين",
|
||||
"includeAllProxies": "تضمين جميع الوكلاء",
|
||||
"includeAllProviders": "تضمين جميع المزودين"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "كسول",
|
||||
"disableUdp": "تعطيل UDP",
|
||||
"hidden": "مخفي"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "إضافة مجموعة في البداية",
|
||||
"append": "إضافة مجموعة في النهاية"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "كسول",
|
||||
"disableUdp": "تعطيل UDP",
|
||||
"hidden": "مخفي"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "تنسيق المستند"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "لا يمكن التعديل في محرر القراءة فقط"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "إضافة مجموعة في البداية",
|
||||
"append": "إضافة مجموعة في النهاية"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "اختر ملف"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "تأكيد الحذف",
|
||||
"message": "لا يمكن التراجع عن هذه العملية"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "تنسيق المستند",
|
||||
"readOnlyMessage": "لا يمكن التعديل في محرر القراءة فقط"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "وحدة التحكم للسكريبت"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "من",
|
||||
"updateTime": "وقت التحديث",
|
||||
"usedTotal": "المستخدم / الإجمالي",
|
||||
"expireTime": "وقت الانتهاء",
|
||||
"clickToImport": "Click to import subscription"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "وحدة التحكم للسكريبت"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "Maximieren",
|
||||
"minimize": "Minimieren"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "Visualisierung",
|
||||
"advanced": "Erweitert"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Abonnement erfolgreich importiert",
|
||||
"importSubscriptionSuccess": "Abonnement erfolgreich importiert",
|
||||
"importWithClashProxy": "Abonnement mit Clash-Proxy importiert",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "Abonnement",
|
||||
"header": {
|
||||
"title": "Abonnement"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "Alle Abonnements aktualisieren",
|
||||
"viewRuntimeConfig": "Laufzeit-Abonnement anzeigen",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "Importieren"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "Abonnement-Datei-Link",
|
||||
"paste": "Einfügen",
|
||||
"clear": "Löschen"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Abonnement erfolgreich importiert",
|
||||
"importSubscriptionSuccess": "Abonnement erfolgreich importiert",
|
||||
"importWithClashProxy": "Abonnement mit Clash-Proxy importiert",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Neue Konfiguration erstellen",
|
||||
"edit": "Konfiguration bearbeiten"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Von",
|
||||
"updateTime": "Aktualisierungszeit",
|
||||
"usedTotal": "Verwendet / Gesamt",
|
||||
"expireTime": "Ablaufzeit",
|
||||
"clickToImport": "Klicken Sie hier, um ein Abonnement zu importieren."
|
||||
}
|
||||
},
|
||||
"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"
|
||||
"fileInput": {
|
||||
"chooseFile": "Datei auswählen"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Erstellung des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...",
|
||||
"creationSuccess": "Erstellung des Abonnements mit Clash-Proxy erfolgreich"
|
||||
"menu": {
|
||||
"home": "Startseite",
|
||||
"select": "Verwenden",
|
||||
"editInfo": "Informationen bearbeiten",
|
||||
"editFile": "Datei bearbeiten",
|
||||
"editRules": "Regeln bearbeiten",
|
||||
"editProxies": "Knoten bearbeiten",
|
||||
"editGroups": "Proxy-Gruppen bearbeiten",
|
||||
"extendConfig": "Erweiterte Überdeckungskonfiguration",
|
||||
"extendScript": "Erweitertes Skript",
|
||||
"openFile": "Datei öffnen",
|
||||
"update": "Aktualisieren",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Letzte Aktualisierung fehlgeschlagen",
|
||||
"nextUp": "Nächste Aktualisierung",
|
||||
"noSchedule": "Kein Zeitplan",
|
||||
"unknown": "Unbekannt",
|
||||
"autoUpdateDisabled": "Automatische Aktualisierung deaktiviert"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Startseite",
|
||||
"select": "Verwenden",
|
||||
"editInfo": "Informationen bearbeiten",
|
||||
"editFile": "Datei bearbeiten",
|
||||
"editRules": "Regeln bearbeiten",
|
||||
"editProxies": "Knoten bearbeiten",
|
||||
"editGroups": "Proxy-Gruppen bearbeiten",
|
||||
"extendConfig": "Erweiterte Überdeckungskonfiguration",
|
||||
"extendScript": "Erweitertes Skript",
|
||||
"openFile": "Datei öffnen",
|
||||
"update": "Aktualisieren",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "Knoten bearbeiten",
|
||||
"placeholders": {
|
||||
"multiUri": "Für mehrere URI verwenden Sie Zeilenumbrüche (Base64-Codierung wird unterstützt)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "Neue Konfiguration erstellen",
|
||||
"edit": "Konfiguration bearbeiten"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Erstellung des Abonnements fehlgeschlagen. Versuche es mit dem Clash-Proxy erneut...",
|
||||
"creationSuccess": "Erstellung des Abonnements mit Clash-Proxy erfolgreich"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Vorherigen Proxy-Knoten hinzufügen",
|
||||
"append": "Nachfolgenden Proxy-Knoten hinzufügen"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "Proxy-Gruppen bearbeiten",
|
||||
"errors": {
|
||||
"nameRequired": "Der Proxy-Gruppenname darf nicht leer sein",
|
||||
"nameExists": "Der Proxy-Gruppenname existiert bereits"
|
||||
"proxiesEditor": {
|
||||
"title": "Knoten bearbeiten",
|
||||
"placeholders": {
|
||||
"multiUri": "Für mehrere URI verwenden Sie Zeilenumbrüche (Base64-Codierung wird unterstützt)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Vorherigen Proxy-Knoten hinzufügen",
|
||||
"append": "Nachfolgenden Proxy-Knoten hinzufügen"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Proxy-Gruppentyp",
|
||||
"name": "Proxy-Gruppenname",
|
||||
"icon": "Proxy-Gruppen-Symbol",
|
||||
"proxies": "Proxy einführen",
|
||||
"provider": "Proxy-Sammlung einführen",
|
||||
"healthCheckUrl": "URL für Gesundheitstest",
|
||||
"expectedStatus": "Erwarteter Statuscode",
|
||||
"interval": "Prüfintervall",
|
||||
"timeout": "Timeout",
|
||||
"maxFailedTimes": "Maximale Anzahl fehlgeschlagener Versuche",
|
||||
"interfaceName": "Ausgangsschnittstelle",
|
||||
"routingMark": "Routierungsmarkierung",
|
||||
"filter": "Knoten filtern",
|
||||
"excludeFilter": "Knoten ausschließen",
|
||||
"excludeType": "Typ der auszuschließenden Knoten",
|
||||
"includeAll": "Alle Ausgangsproxy und Proxy-Sammlungen einführen",
|
||||
"includeAllProxies": "Alle Ausgangsproxy einführen",
|
||||
"includeAllProviders": "Alle Proxy-Sammlungen einführen"
|
||||
"groupsEditor": {
|
||||
"title": "Proxy-Gruppen bearbeiten",
|
||||
"errors": {
|
||||
"nameRequired": "Der Proxy-Gruppenname darf nicht leer sein",
|
||||
"nameExists": "Der Proxy-Gruppenname existiert bereits"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Proxy-Gruppentyp",
|
||||
"name": "Proxy-Gruppenname",
|
||||
"icon": "Proxy-Gruppen-Symbol",
|
||||
"proxies": "Proxy einführen",
|
||||
"provider": "Proxy-Sammlung einführen",
|
||||
"healthCheckUrl": "URL für Gesundheitstest",
|
||||
"expectedStatus": "Erwarteter Statuscode",
|
||||
"interval": "Prüfintervall",
|
||||
"timeout": "Timeout",
|
||||
"maxFailedTimes": "Maximale Anzahl fehlgeschlagener Versuche",
|
||||
"interfaceName": "Ausgangsschnittstelle",
|
||||
"routingMark": "Routierungsmarkierung",
|
||||
"filter": "Knoten filtern",
|
||||
"excludeFilter": "Knoten ausschließen",
|
||||
"excludeType": "Typ der auszuschließenden Knoten",
|
||||
"includeAll": "Alle Ausgangsproxy und Proxy-Sammlungen einführen",
|
||||
"includeAllProxies": "Alle Ausgangsproxy einführen",
|
||||
"includeAllProviders": "Alle Proxy-Sammlungen einführen"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Lazy-Status",
|
||||
"disableUdp": "UDP deaktivieren",
|
||||
"hidden": "Proxy-Gruppe ausblenden"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Vorherige Proxy-Gruppe hinzufügen",
|
||||
"append": "Nachfolgende Proxy-Gruppe hinzufügen"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Lazy-Status",
|
||||
"disableUdp": "UDP deaktivieren",
|
||||
"hidden": "Proxy-Gruppe ausblenden"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "Dokument formatieren"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "Bearbeitung im schreibgeschützten Modus nicht möglich"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Vorherige Proxy-Gruppe hinzufügen",
|
||||
"append": "Nachfolgende Proxy-Gruppe hinzufügen"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Datei auswählen"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Letzte Aktualisierung fehlgeschlagen",
|
||||
"nextUp": "Nächste Aktualisierung",
|
||||
"noSchedule": "Kein Zeitplan",
|
||||
"unknown": "Unbekannt",
|
||||
"autoUpdateDisabled": "Automatische Aktualisierung deaktiviert"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "Löschung bestätigen",
|
||||
"message": "Diese Operation kann nicht rückgängig gemacht werden"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "Dokument formatieren",
|
||||
"readOnlyMessage": "Bearbeitung im schreibgeschützten Modus nicht möglich"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Skript-Konsole-Ausgabe"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Von",
|
||||
"updateTime": "Aktualisierungszeit",
|
||||
"usedTotal": "Verwendet / Gesamt",
|
||||
"expireTime": "Ablaufzeit",
|
||||
"clickToImport": "Klicken Sie hier, um ein Abonnement zu importieren."
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Skript-Konsole-Ausgabe"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "Maximize",
|
||||
"minimize": "Minimize"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "Visualization",
|
||||
"advanced": "Advanced"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profile Imported Successfully",
|
||||
"importSubscriptionSuccess": "Import subscription successful",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "Profiles",
|
||||
"header": {
|
||||
"title": "Profiles"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "Update All Profiles",
|
||||
"viewRuntimeConfig": "View Runtime Config",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "Import"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "Profile URL",
|
||||
"paste": "Paste",
|
||||
"clear": "Clear"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profile Imported Successfully",
|
||||
"importSubscriptionSuccess": "Import subscription successful",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Create Profile",
|
||||
"edit": "Edit Profile"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "From",
|
||||
"updateTime": "Update Time",
|
||||
"usedTotal": "Used / Total",
|
||||
"expireTime": "Expire Time",
|
||||
"clickToImport": "Click to import subscription"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
"fileInput": {
|
||||
"chooseFile": "Choose File"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "Select",
|
||||
"editInfo": "Edit Info",
|
||||
"editFile": "Edit File",
|
||||
"editRules": "Edit Rules",
|
||||
"editProxies": "Edit Proxies",
|
||||
"editGroups": "Edit Proxy Groups",
|
||||
"extendConfig": "Extend Config",
|
||||
"extendScript": "Extend Script",
|
||||
"openFile": "Open File",
|
||||
"update": "Update",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "Select",
|
||||
"editInfo": "Edit Info",
|
||||
"editFile": "Edit File",
|
||||
"editRules": "Edit Rules",
|
||||
"editProxies": "Edit Proxies",
|
||||
"editGroups": "Edit Proxy Groups",
|
||||
"extendConfig": "Extend Config",
|
||||
"extendScript": "Extend Script",
|
||||
"openFile": "Open File",
|
||||
"update": "Update",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "Edit Proxies",
|
||||
"placeholders": {
|
||||
"multiUri": "Use newlines for multiple uri(Base64 encoding supported)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "Create Profile",
|
||||
"edit": "Edit Profile"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Prepend Proxy",
|
||||
"append": "Append Proxy"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "Edit Proxy Groups",
|
||||
"errors": {
|
||||
"nameRequired": "Group Name Required",
|
||||
"nameExists": "Group Name Already Exists"
|
||||
"proxiesEditor": {
|
||||
"title": "Edit Proxies",
|
||||
"placeholders": {
|
||||
"multiUri": "Use newlines for multiple uri(Base64 encoding supported)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Prepend Proxy",
|
||||
"append": "Append Proxy"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Group Type",
|
||||
"name": "Group Name",
|
||||
"icon": "Proxy Group Icon",
|
||||
"proxies": "Use Proxies",
|
||||
"provider": "Use Provider",
|
||||
"healthCheckUrl": "Health Check Url",
|
||||
"expectedStatus": "Expected Status",
|
||||
"interval": "Interval",
|
||||
"timeout": "Timeout",
|
||||
"maxFailedTimes": "Max Failed Times",
|
||||
"interfaceName": "Interface Name",
|
||||
"routingMark": "Routing Mark",
|
||||
"filter": "Filter",
|
||||
"excludeFilter": "Exclude Filter",
|
||||
"excludeType": "Exclude Type",
|
||||
"includeAll": "Include All Proxies and Providers",
|
||||
"includeAllProxies": "Include All Proxies",
|
||||
"includeAllProviders": "Include All Providers"
|
||||
"groupsEditor": {
|
||||
"title": "Edit Proxy Groups",
|
||||
"errors": {
|
||||
"nameRequired": "Group Name Required",
|
||||
"nameExists": "Group Name Already Exists"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Group Type",
|
||||
"name": "Group Name",
|
||||
"icon": "Proxy Group Icon",
|
||||
"proxies": "Use Proxies",
|
||||
"provider": "Use Provider",
|
||||
"healthCheckUrl": "Health Check Url",
|
||||
"expectedStatus": "Expected Status",
|
||||
"interval": "Interval",
|
||||
"timeout": "Timeout",
|
||||
"maxFailedTimes": "Max Failed Times",
|
||||
"interfaceName": "Interface Name",
|
||||
"routingMark": "Routing Mark",
|
||||
"filter": "Filter",
|
||||
"excludeFilter": "Exclude Filter",
|
||||
"excludeType": "Exclude Type",
|
||||
"includeAll": "Include All Proxies and Providers",
|
||||
"includeAllProxies": "Include All Proxies",
|
||||
"includeAllProviders": "Include All Providers"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Lazy",
|
||||
"disableUdp": "Disable UDP",
|
||||
"hidden": "Hidden"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Prepend Group",
|
||||
"append": "Append Group"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Lazy",
|
||||
"disableUdp": "Disable UDP",
|
||||
"hidden": "Hidden"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "Format document"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "Cannot edit in read-only editor"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Prepend Group",
|
||||
"append": "Append Group"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Choose File"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "Confirm deletion",
|
||||
"message": "This operation is not reversible"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "Format document",
|
||||
"readOnlyMessage": "Cannot edit in read-only editor"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Script Console"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "From",
|
||||
"updateTime": "Update Time",
|
||||
"usedTotal": "Used / Total",
|
||||
"expireTime": "Expire Time",
|
||||
"clickToImport": "Click to import subscription"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Script Console"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "Maximizar",
|
||||
"minimize": "Minimizar"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "Visualización",
|
||||
"advanced": "Avanzado"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Suscripción importada con éxito",
|
||||
"importSubscriptionSuccess": "Suscripción importada con éxito",
|
||||
"importWithClashProxy": "Suscripción importada con el proxy de Clash",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "Suscripciones",
|
||||
"header": {
|
||||
"title": "Suscripciones"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "Actualizar todas las suscripciones",
|
||||
"viewRuntimeConfig": "Ver configuración en tiempo de ejecución",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "Importar"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "Enlace del archivo de suscripción",
|
||||
"paste": "Pegar",
|
||||
"clear": "Limpiar"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Suscripción importada con éxito",
|
||||
"importSubscriptionSuccess": "Suscripción importada con éxito",
|
||||
"importWithClashProxy": "Suscripción importada con el proxy de Clash",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Crear configuración",
|
||||
"edit": "Editar configuración"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "De",
|
||||
"updateTime": "Hora de actualización",
|
||||
"usedTotal": "Utilizado / Total",
|
||||
"expireTime": "Tiempo de expiración",
|
||||
"clickToImport": "Haga clic para importar una suscripción"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
"fileInput": {
|
||||
"chooseFile": "Elegir archivo"
|
||||
},
|
||||
"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"
|
||||
"menu": {
|
||||
"home": "Hogar",
|
||||
"select": "Usar",
|
||||
"editInfo": "Editar información",
|
||||
"editFile": "Editar archivo",
|
||||
"editRules": "Editar reglas",
|
||||
"editProxies": "Editar nodos",
|
||||
"editGroups": "Editar grupos de proxy",
|
||||
"extendConfig": "Configurar sobrescritura extendida",
|
||||
"extendScript": "Script extendido",
|
||||
"openFile": "Abrir archivo",
|
||||
"update": "Actualizar",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "La última actualización falló",
|
||||
"nextUp": "Próxima actualización",
|
||||
"noSchedule": "Sin programación",
|
||||
"unknown": "Desconocido",
|
||||
"autoUpdateDisabled": "La actualización automática está deshabilitada"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Hogar",
|
||||
"select": "Usar",
|
||||
"editInfo": "Editar información",
|
||||
"editFile": "Editar archivo",
|
||||
"editRules": "Editar reglas",
|
||||
"editProxies": "Editar nodos",
|
||||
"editGroups": "Editar grupos de proxy",
|
||||
"extendConfig": "Configurar sobrescritura extendida",
|
||||
"extendScript": "Script extendido",
|
||||
"openFile": "Abrir archivo",
|
||||
"update": "Actualizar",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "Editar nodos",
|
||||
"placeholders": {
|
||||
"multiUri": "Para múltiples URI, utilice saltos de línea (se admite la codificación Base64)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "Crear configuración",
|
||||
"edit": "Editar configuración"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"feedback": {
|
||||
"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"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Agregar nodo de proxy previo",
|
||||
"append": "Agregar nodo de proxy posterior"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "Editar grupos de proxy",
|
||||
"errors": {
|
||||
"nameRequired": "El nombre del grupo de proxy no puede estar vacío",
|
||||
"nameExists": "El nombre del grupo de proxy ya existe"
|
||||
"proxiesEditor": {
|
||||
"title": "Editar nodos",
|
||||
"placeholders": {
|
||||
"multiUri": "Para múltiples URI, utilice saltos de línea (se admite la codificación Base64)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Agregar nodo de proxy previo",
|
||||
"append": "Agregar nodo de proxy posterior"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Tipo de grupo de proxy",
|
||||
"name": "Nombre del grupo de proxy",
|
||||
"icon": "Icono del grupo de proxy",
|
||||
"proxies": "Incluir proxies",
|
||||
"provider": "Incluir proveedor de proxies",
|
||||
"healthCheckUrl": "URL de prueba de salud",
|
||||
"expectedStatus": "Código de estado esperado",
|
||||
"interval": "Intervalo de comprobación",
|
||||
"timeout": "Tiempo de espera",
|
||||
"maxFailedTimes": "Número máximo de fallos",
|
||||
"interfaceName": "Nombre de la interfaz de salida",
|
||||
"routingMark": "Marca de enrutamiento",
|
||||
"filter": "Filtrar nodos",
|
||||
"excludeFilter": "Excluir nodos",
|
||||
"excludeType": "Tipo de nodo a excluir",
|
||||
"includeAll": "Incluir todos los proxies de salida y proveedores de proxies",
|
||||
"includeAllProxies": "Incluir todos los proxies de salida",
|
||||
"includeAllProviders": "Incluir todos los proveedores de proxies"
|
||||
"groupsEditor": {
|
||||
"title": "Editar grupos de proxy",
|
||||
"errors": {
|
||||
"nameRequired": "El nombre del grupo de proxy no puede estar vacío",
|
||||
"nameExists": "El nombre del grupo de proxy ya existe"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Tipo de grupo de proxy",
|
||||
"name": "Nombre del grupo de proxy",
|
||||
"icon": "Icono del grupo de proxy",
|
||||
"proxies": "Incluir proxies",
|
||||
"provider": "Incluir proveedor de proxies",
|
||||
"healthCheckUrl": "URL de prueba de salud",
|
||||
"expectedStatus": "Código de estado esperado",
|
||||
"interval": "Intervalo de comprobación",
|
||||
"timeout": "Tiempo de espera",
|
||||
"maxFailedTimes": "Número máximo de fallos",
|
||||
"interfaceName": "Nombre de la interfaz de salida",
|
||||
"routingMark": "Marca de enrutamiento",
|
||||
"filter": "Filtrar nodos",
|
||||
"excludeFilter": "Excluir nodos",
|
||||
"excludeType": "Tipo de nodo a excluir",
|
||||
"includeAll": "Incluir todos los proxies de salida y proveedores de proxies",
|
||||
"includeAllProxies": "Incluir todos los proxies de salida",
|
||||
"includeAllProviders": "Incluir todos los proveedores de proxies"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Estado de inactividad",
|
||||
"disableUdp": "Deshabilitar UDP",
|
||||
"hidden": "Ocultar grupo de proxy"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Agregar grupo de proxy previo",
|
||||
"append": "Agregar grupo de proxy posterior"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Estado de inactividad",
|
||||
"disableUdp": "Deshabilitar UDP",
|
||||
"hidden": "Ocultar grupo de proxy"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "Formatear documento"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "No se puede editar en modo de solo lectura"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Agregar grupo de proxy previo",
|
||||
"append": "Agregar grupo de proxy posterior"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Elegir archivo"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "La última actualización falló",
|
||||
"nextUp": "Próxima actualización",
|
||||
"noSchedule": "Sin programación",
|
||||
"unknown": "Desconocido",
|
||||
"autoUpdateDisabled": "La actualización automática está deshabilitada"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "Confirmar eliminación",
|
||||
"message": "Esta operación no se puede deshacer"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "Formatear documento",
|
||||
"readOnlyMessage": "No se puede editar en modo de solo lectura"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Salida de la consola del script"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "De",
|
||||
"updateTime": "Hora de actualización",
|
||||
"usedTotal": "Utilizado / Total",
|
||||
"expireTime": "Tiempo de expiración",
|
||||
"clickToImport": "Haga clic para importar una suscripción"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Salida de la consola del script"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "بزرگنمایی",
|
||||
"minimize": "کوچکنمایی"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "تجسم",
|
||||
"advanced": "پیشرفته"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "پروفایل با موفقیت وارد شد",
|
||||
"importSubscriptionSuccess": "وارد کردن اشتراک با موفقیت انجام شد",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "پروفایلها",
|
||||
"header": {
|
||||
"title": "پروفایلها"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "بهروزرسانی همه پروفایلها",
|
||||
"viewRuntimeConfig": "مشاهده پیکربندی زمان اجرا",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "وارد کردن"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "آدرس پروفایل",
|
||||
"paste": "چسباندن",
|
||||
"clear": "پاک کردن"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "پروفایل با موفقیت وارد شد",
|
||||
"importSubscriptionSuccess": "وارد کردن اشتراک با موفقیت انجام شد",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "ایجاد پروفایل",
|
||||
"edit": "ویرایش پروفایل"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "از",
|
||||
"updateTime": "زمان بهروزرسانی",
|
||||
"usedTotal": "استفادهشده / کل",
|
||||
"expireTime": "زمان انقضا",
|
||||
"clickToImport": "Click to import subscription"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "نوع",
|
||||
"name": "نام",
|
||||
"description": "توضیحات",
|
||||
"subscriptionUrl": "آدرس اشتراک",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "فاصله زمانی بهروزرسانی",
|
||||
"useSystemProxy": "استفاده از پراکسی سیستم",
|
||||
"useClashProxy": "استفاده از پراکسی Clash",
|
||||
"acceptInvalidCerts": "پذیرش گواهینامههای نامعتبر (خطرناک)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
"fileInput": {
|
||||
"chooseFile": "انتخاب فایل"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "انتخاب",
|
||||
"editInfo": "ویرایش اطلاعات",
|
||||
"editFile": "ویرایش فایل",
|
||||
"editRules": "ویرایش قوانین",
|
||||
"editProxies": "ویرایش پروکسیها",
|
||||
"editGroups": "ویرایش گروههای پروکسی",
|
||||
"extendConfig": "توسعه پیکربندی",
|
||||
"extendScript": "ادغام اسکریپت",
|
||||
"openFile": "باز کردن فایل",
|
||||
"update": "بهروزرسانی",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "انتخاب",
|
||||
"editInfo": "ویرایش اطلاعات",
|
||||
"editFile": "ویرایش فایل",
|
||||
"editRules": "ویرایش قوانین",
|
||||
"editProxies": "ویرایش پروکسیها",
|
||||
"editGroups": "ویرایش گروههای پروکسی",
|
||||
"extendConfig": "توسعه پیکربندی",
|
||||
"extendScript": "ادغام اسکریپت",
|
||||
"openFile": "باز کردن فایل",
|
||||
"update": "بهروزرسانی",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "ویرایش پروکسیها",
|
||||
"placeholders": {
|
||||
"multiUri": "استفاده از خطوط جدید برای چندین آدرس (پشتیبانی از رمزگذاری Base64)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "ایجاد پروفایل",
|
||||
"edit": "ویرایش پروفایل"
|
||||
},
|
||||
"fields": {
|
||||
"type": "نوع",
|
||||
"name": "نام",
|
||||
"description": "توضیحات",
|
||||
"subscriptionUrl": "آدرس اشتراک",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "فاصله زمانی بهروزرسانی",
|
||||
"useSystemProxy": "استفاده از پراکسی سیستم",
|
||||
"useClashProxy": "استفاده از پراکسی Clash",
|
||||
"acceptInvalidCerts": "پذیرش گواهینامههای نامعتبر (خطرناک)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "پیشافزودن پراکسی",
|
||||
"append": "پسافزودن پراکسی"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "ویرایش گروههای پروکسی",
|
||||
"errors": {
|
||||
"nameRequired": "نام گروه مورد نیاز است",
|
||||
"nameExists": "نام گروه قبلا وجود دارد"
|
||||
"proxiesEditor": {
|
||||
"title": "ویرایش پروکسیها",
|
||||
"placeholders": {
|
||||
"multiUri": "استفاده از خطوط جدید برای چندین آدرس (پشتیبانی از رمزگذاری Base64)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "پیشافزودن پراکسی",
|
||||
"append": "پسافزودن پراکسی"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "نوع گروه",
|
||||
"name": "نام گروه",
|
||||
"icon": "آیکون گروه پراکسی",
|
||||
"proxies": "استفاده از پروکسیها",
|
||||
"provider": "استفاده از ارائهدهنده",
|
||||
"healthCheckUrl": "آدرس بررسی سلامت",
|
||||
"expectedStatus": "وضعیت مورد انتظار",
|
||||
"interval": "فاصله زمانی",
|
||||
"timeout": "زمان قطع",
|
||||
"maxFailedTimes": "حداکثر تعداد شکستها",
|
||||
"interfaceName": "نام رابط",
|
||||
"routingMark": "علامت مسیریابی",
|
||||
"filter": "فیلتر",
|
||||
"excludeFilter": "فیلتر استثناء",
|
||||
"excludeType": "نوع استثناء",
|
||||
"includeAll": "شامل همه پروکسیها و ارائهدهندهها",
|
||||
"includeAllProxies": "شامل همه پروکسیها",
|
||||
"includeAllProviders": "شامل همه ارائهدهندهها"
|
||||
"groupsEditor": {
|
||||
"title": "ویرایش گروههای پروکسی",
|
||||
"errors": {
|
||||
"nameRequired": "نام گروه مورد نیاز است",
|
||||
"nameExists": "نام گروه قبلا وجود دارد"
|
||||
},
|
||||
"fields": {
|
||||
"type": "نوع گروه",
|
||||
"name": "نام گروه",
|
||||
"icon": "آیکون گروه پراکسی",
|
||||
"proxies": "استفاده از پروکسیها",
|
||||
"provider": "استفاده از ارائهدهنده",
|
||||
"healthCheckUrl": "آدرس بررسی سلامت",
|
||||
"expectedStatus": "وضعیت مورد انتظار",
|
||||
"interval": "فاصله زمانی",
|
||||
"timeout": "زمان قطع",
|
||||
"maxFailedTimes": "حداکثر تعداد شکستها",
|
||||
"interfaceName": "نام رابط",
|
||||
"routingMark": "علامت مسیریابی",
|
||||
"filter": "فیلتر",
|
||||
"excludeFilter": "فیلتر استثناء",
|
||||
"excludeType": "نوع استثناء",
|
||||
"includeAll": "شامل همه پروکسیها و ارائهدهندهها",
|
||||
"includeAllProxies": "شامل همه پروکسیها",
|
||||
"includeAllProviders": "شامل همه ارائهدهندهها"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "تنبل",
|
||||
"disableUdp": "غیرفعال کردن UDP",
|
||||
"hidden": "مخفی"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "اضافه کردن گروه به ابتدا",
|
||||
"append": "اضافه کردن گروه به انتها"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "تنبل",
|
||||
"disableUdp": "غیرفعال کردن UDP",
|
||||
"hidden": "مخفی"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "فرمتبندی سند"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "نمیتوان در ویرایشگر فقط خواندنی ویرایش کرد"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "اضافه کردن گروه به ابتدا",
|
||||
"append": "اضافه کردن گروه به انتها"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "انتخاب فایل"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "تأیید حذف",
|
||||
"message": "این عملیات قابل برگشت نیست"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "فرمتبندی سند",
|
||||
"readOnlyMessage": "نمیتوان در ویرایشگر فقط خواندنی ویرایش کرد"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "کنسول اسکریپت"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "از",
|
||||
"updateTime": "زمان بهروزرسانی",
|
||||
"usedTotal": "استفادهشده / کل",
|
||||
"expireTime": "زمان انقضا",
|
||||
"clickToImport": "Click to import subscription"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "کنسول اسکریپت"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "Maksimalkan",
|
||||
"minimize": "Minimalkan"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "Visualisasi",
|
||||
"advanced": "Lanjutan"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profil Berhasil Diimpor",
|
||||
"importSubscriptionSuccess": "Berlangganan Berhasil Diimpor",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "Profil",
|
||||
"header": {
|
||||
"title": "Profil"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "Perbarui Semua Profil",
|
||||
"viewRuntimeConfig": "Lihat Konfigurasi Runtime",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "Impor"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "URL Profil",
|
||||
"paste": "Tempel",
|
||||
"clear": "Bersihkan"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profil Berhasil Diimpor",
|
||||
"importSubscriptionSuccess": "Berlangganan Berhasil Diimpor",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Buat Profil",
|
||||
"edit": "Ubah Profil"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Dari",
|
||||
"updateTime": "Waktu Pembaruan",
|
||||
"usedTotal": "Digunakan / Total",
|
||||
"expireTime": "Waktu Kedaluwarsa",
|
||||
"clickToImport": "Click to import subscription"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
"fileInput": {
|
||||
"chooseFile": "Pilih Berkas"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "Pilih",
|
||||
"editInfo": "Ubah Info",
|
||||
"editFile": "Ubah Berkas",
|
||||
"editRules": "Ubah Aturan",
|
||||
"editProxies": "Ubah Proksi",
|
||||
"editGroups": "Ubah Grup Proksi",
|
||||
"extendConfig": "Perluas Konfigurasi",
|
||||
"extendScript": "Perluas Skrip",
|
||||
"openFile": "Buka Berkas",
|
||||
"update": "Perbarui",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "Pilih",
|
||||
"editInfo": "Ubah Info",
|
||||
"editFile": "Ubah Berkas",
|
||||
"editRules": "Ubah Aturan",
|
||||
"editProxies": "Ubah Proksi",
|
||||
"editGroups": "Ubah Grup Proksi",
|
||||
"extendConfig": "Perluas Konfigurasi",
|
||||
"extendScript": "Perluas Skrip",
|
||||
"openFile": "Buka Berkas",
|
||||
"update": "Perbarui",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "Ubah Proksi",
|
||||
"placeholders": {
|
||||
"multiUri": "Gunakan baris baru untuk beberapa URI (mendukung pengkodean Base64)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "Buat Profil",
|
||||
"edit": "Ubah Profil"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Tambahkan Proksi di Awal",
|
||||
"append": "Tambahkan Proksi di Akhir"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "Ubah Grup Proksi",
|
||||
"errors": {
|
||||
"nameRequired": "Nama Grup Diperlukan",
|
||||
"nameExists": "Nama Grup Sudah Ada"
|
||||
"proxiesEditor": {
|
||||
"title": "Ubah Proksi",
|
||||
"placeholders": {
|
||||
"multiUri": "Gunakan baris baru untuk beberapa URI (mendukung pengkodean Base64)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Tambahkan Proksi di Awal",
|
||||
"append": "Tambahkan Proksi di Akhir"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Jenis Grup",
|
||||
"name": "Nama Grup",
|
||||
"icon": "Ikon Grup Proksi",
|
||||
"proxies": "Gunakan Proksi",
|
||||
"provider": "Gunakan Penyedia",
|
||||
"healthCheckUrl": "URL Pemeriksaan Kesehatan",
|
||||
"expectedStatus": "Status yang Diharapkan",
|
||||
"interval": "Interval",
|
||||
"timeout": "Waktu Habis",
|
||||
"maxFailedTimes": "Jumlah Gagal Maksimal",
|
||||
"interfaceName": "Nama Antarmuka",
|
||||
"routingMark": "Tanda Routing",
|
||||
"filter": "Filter",
|
||||
"excludeFilter": "Kecualikan Filter",
|
||||
"excludeType": "Kecualikan Jenis",
|
||||
"includeAll": "Sertakan Semua Proksi dan Penyedia",
|
||||
"includeAllProxies": "Sertakan Semua Proksi",
|
||||
"includeAllProviders": "Sertakan Semua Penyedia"
|
||||
"groupsEditor": {
|
||||
"title": "Ubah Grup Proksi",
|
||||
"errors": {
|
||||
"nameRequired": "Nama Grup Diperlukan",
|
||||
"nameExists": "Nama Grup Sudah Ada"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Jenis Grup",
|
||||
"name": "Nama Grup",
|
||||
"icon": "Ikon Grup Proksi",
|
||||
"proxies": "Gunakan Proksi",
|
||||
"provider": "Gunakan Penyedia",
|
||||
"healthCheckUrl": "URL Pemeriksaan Kesehatan",
|
||||
"expectedStatus": "Status yang Diharapkan",
|
||||
"interval": "Interval",
|
||||
"timeout": "Waktu Habis",
|
||||
"maxFailedTimes": "Jumlah Gagal Maksimal",
|
||||
"interfaceName": "Nama Antarmuka",
|
||||
"routingMark": "Tanda Routing",
|
||||
"filter": "Filter",
|
||||
"excludeFilter": "Kecualikan Filter",
|
||||
"excludeType": "Kecualikan Jenis",
|
||||
"includeAll": "Sertakan Semua Proksi dan Penyedia",
|
||||
"includeAllProxies": "Sertakan Semua Proksi",
|
||||
"includeAllProviders": "Sertakan Semua Penyedia"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Malas",
|
||||
"disableUdp": "Nonaktifkan UDP",
|
||||
"hidden": "Tersembunyi"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Tambahkan Grup di Awal",
|
||||
"append": "Tambahkan Grup di Akhir"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Malas",
|
||||
"disableUdp": "Nonaktifkan UDP",
|
||||
"hidden": "Tersembunyi"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "Format dokumen"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "Tidak dapat mengedit di editor hanya baca"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Tambahkan Grup di Awal",
|
||||
"append": "Tambahkan Grup di Akhir"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Pilih Berkas"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "Konfirmasi penghapusan",
|
||||
"message": "Operasi ini tidak dapat dibatalkan"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "Format dokumen",
|
||||
"readOnlyMessage": "Tidak dapat mengedit di editor hanya baca"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Konsol Skrip"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Dari",
|
||||
"updateTime": "Waktu Pembaruan",
|
||||
"usedTotal": "Digunakan / Total",
|
||||
"expireTime": "Waktu Kedaluwarsa",
|
||||
"clickToImport": "Click to import subscription"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Konsol Skrip"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "最大化",
|
||||
"minimize": "最小化"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "可視化",
|
||||
"advanced": "詳細設定"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "プロファイルのインポートに成功しました。",
|
||||
"importSubscriptionSuccess": "サブスクリプションのインポートに成功しました。",
|
||||
"importWithClashProxy": "Clashプロキシを使用してプロファイルのインポートに成功しました。",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "プロファイル",
|
||||
"header": {
|
||||
"title": "プロファイル"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "すべてのプロファイルを更新",
|
||||
"viewRuntimeConfig": "実行時のプロファイルを表示",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "インポート"
|
||||
},
|
||||
"batch": {
|
||||
"title": "バッチ操作",
|
||||
"delete": "選択したプロファイルを削除",
|
||||
"selectAll": "すべて選択",
|
||||
"deselectAll": "すべての選択を解除",
|
||||
"done": "完了",
|
||||
"selected": "選択済み",
|
||||
"items": "アイテム"
|
||||
"header": {
|
||||
"title": "バッチ操作"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "選択したプロファイルを削除",
|
||||
"selectAll": "すべて選択",
|
||||
"deselectAll": "すべての選択を解除",
|
||||
"done": "完了"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "選択済み",
|
||||
"items": "アイテム"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "プロファイルファイルのURL",
|
||||
"paste": "貼り付け",
|
||||
"clear": "クリア"
|
||||
"actions": {
|
||||
"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": "選択したプロファイルが正常に削除されました"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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": "選択したプロファイルが正常に削除されました"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "プロファイルのインポートに成功しました。",
|
||||
"importSubscriptionSuccess": "サブスクリプションのインポートに成功しました。",
|
||||
"importWithClashProxy": "Clashプロキシを使用してプロファイルのインポートに成功しました。",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新規プロファイルを作成",
|
||||
"edit": "プロファイルを編集"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "から",
|
||||
"updateTime": "更新時間",
|
||||
"usedTotal": "使用済み / 合計",
|
||||
"expireTime": "有効期限",
|
||||
"clickToImport": "クリックしてサブスクリプションをインポート"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "タイプ",
|
||||
"name": "名前",
|
||||
"description": "説明",
|
||||
"subscriptionUrl": "サブスクリプションURL",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "更新間隔",
|
||||
"useSystemProxy": "システムプロキシを使用して更新",
|
||||
"useClashProxy": "クラッシュプロキシを使用して更新",
|
||||
"acceptInvalidCerts": "Allows Invalid Certificates (Danger)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
"fileInput": {
|
||||
"chooseFile": "ファイルを選択"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "プロファイルの作成に失敗しました。Clashプロキシを使用して再試行します...",
|
||||
"creationSuccess": "Clashプロキシを使用してプロファイルの作成に成功しました。"
|
||||
"menu": {
|
||||
"home": "ホーム",
|
||||
"select": "使用する",
|
||||
"editInfo": "情報を編集",
|
||||
"editFile": "ファイルを編集",
|
||||
"editRules": "ルールを編集",
|
||||
"editProxies": "ノードを編集",
|
||||
"editGroups": "プロキシグループを編集",
|
||||
"extendConfig": "拡張上書き設定",
|
||||
"extendScript": "拡張スクリプト",
|
||||
"openFile": "ファイルを開く",
|
||||
"update": "更新",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "前回の更新に失敗しました。",
|
||||
"nextUp": "次回の更新",
|
||||
"noSchedule": "予定がありません。",
|
||||
"unknown": "不明",
|
||||
"autoUpdateDisabled": "自動更新が無効になっています。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "ホーム",
|
||||
"select": "使用する",
|
||||
"editInfo": "情報を編集",
|
||||
"editFile": "ファイルを編集",
|
||||
"editRules": "ルールを編集",
|
||||
"editProxies": "ノードを編集",
|
||||
"editGroups": "プロキシグループを編集",
|
||||
"extendConfig": "拡張上書き設定",
|
||||
"extendScript": "拡張スクリプト",
|
||||
"openFile": "ファイルを開く",
|
||||
"update": "更新",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "ノードを編集",
|
||||
"placeholders": {
|
||||
"multiUri": "複数のURIは改行で区切ってください(Base64エンコードに対応)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "新規プロファイルを作成",
|
||||
"edit": "プロファイルを編集"
|
||||
},
|
||||
"fields": {
|
||||
"type": "タイプ",
|
||||
"name": "名前",
|
||||
"description": "説明",
|
||||
"subscriptionUrl": "サブスクリプションURL",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "更新間隔",
|
||||
"useSystemProxy": "システムプロキシを使用して更新",
|
||||
"useClashProxy": "クラッシュプロキシを使用して更新",
|
||||
"acceptInvalidCerts": "Allows Invalid Certificates (Danger)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "プロファイルの作成に失敗しました。Clashプロキシを使用して再試行します...",
|
||||
"creationSuccess": "Clashプロキシを使用してプロファイルの作成に成功しました。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "前置プロキシノードを追加",
|
||||
"append": "後置プロキシノードを追加"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "プロキシグループを編集",
|
||||
"errors": {
|
||||
"nameRequired": "プロキシグループ名は必須です",
|
||||
"nameExists": "プロキシグループ名はすでに存在します"
|
||||
"proxiesEditor": {
|
||||
"title": "ノードを編集",
|
||||
"placeholders": {
|
||||
"multiUri": "複数のURIは改行で区切ってください(Base64エンコードに対応)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "前置プロキシノードを追加",
|
||||
"append": "後置プロキシノードを追加"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "プロキシグループタイプ",
|
||||
"name": "プロキシグループ名",
|
||||
"icon": "プロキシグループアイコン",
|
||||
"proxies": "プロキシを導入",
|
||||
"provider": "プロキシプロバイダーを導入",
|
||||
"healthCheckUrl": "ヘルスチェックURL",
|
||||
"expectedStatus": "期待するステータスコード",
|
||||
"interval": "チェック間隔",
|
||||
"timeout": "タイムアウト時間",
|
||||
"maxFailedTimes": "最大失敗回数",
|
||||
"interfaceName": "出力インターフェース",
|
||||
"routingMark": "ルーティングマーク",
|
||||
"filter": "ノードをフィルタリング",
|
||||
"excludeFilter": "除外ノード",
|
||||
"excludeType": "除外ノードタイプ",
|
||||
"includeAll": "すべての出力プロキシ、プロキシプロバイダーを導入",
|
||||
"includeAllProxies": "すべての出力プロキシを導入",
|
||||
"includeAllProviders": "すべてのプロキシプロバイダーを導入"
|
||||
"groupsEditor": {
|
||||
"title": "プロキシグループを編集",
|
||||
"errors": {
|
||||
"nameRequired": "プロキシグループ名は必須です",
|
||||
"nameExists": "プロキシグループ名はすでに存在します"
|
||||
},
|
||||
"fields": {
|
||||
"type": "プロキシグループタイプ",
|
||||
"name": "プロキシグループ名",
|
||||
"icon": "プロキシグループアイコン",
|
||||
"proxies": "プロキシを導入",
|
||||
"provider": "プロキシプロバイダーを導入",
|
||||
"healthCheckUrl": "ヘルスチェックURL",
|
||||
"expectedStatus": "期待するステータスコード",
|
||||
"interval": "チェック間隔",
|
||||
"timeout": "タイムアウト時間",
|
||||
"maxFailedTimes": "最大失敗回数",
|
||||
"interfaceName": "出力インターフェース",
|
||||
"routingMark": "ルーティングマーク",
|
||||
"filter": "ノードをフィルタリング",
|
||||
"excludeFilter": "除外ノード",
|
||||
"excludeType": "除外ノードタイプ",
|
||||
"includeAll": "すべての出力プロキシ、プロキシプロバイダーを導入",
|
||||
"includeAllProxies": "すべての出力プロキシを導入",
|
||||
"includeAllProviders": "すべてのプロキシプロバイダーを導入"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "遅延モード",
|
||||
"disableUdp": "UDPを無効にする",
|
||||
"hidden": "プロキシグループを隠す"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "前置プロキシグループを追加",
|
||||
"append": "後置プロキシグループを追加"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "遅延モード",
|
||||
"disableUdp": "UDPを無効にする",
|
||||
"hidden": "プロキシグループを隠す"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "文書を整形する"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "読み取り専用モードでは編集できません。"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "前置プロキシグループを追加",
|
||||
"append": "後置プロキシグループを追加"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "ファイルを選択"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "前回の更新に失敗しました。",
|
||||
"nextUp": "次回の更新",
|
||||
"noSchedule": "予定がありません。",
|
||||
"unknown": "不明",
|
||||
"autoUpdateDisabled": "自動更新が無効になっています。"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "削除を確認",
|
||||
"message": "この操作は元に戻せません"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "文書を整形する",
|
||||
"readOnlyMessage": "読み取り専用モードでは編集できません。"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "スクリプトコンソール出力"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "から",
|
||||
"updateTime": "更新時間",
|
||||
"usedTotal": "使用済み / 合計",
|
||||
"expireTime": "有効期限",
|
||||
"clickToImport": "クリックしてサブスクリプションをインポート"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "スクリプトコンソール出力"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "최대화",
|
||||
"minimize": "최소화"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "시각화",
|
||||
"advanced": "고급"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profile Imported Successfully",
|
||||
"importSubscriptionSuccess": "구독 가져오기 성공",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "프로필",
|
||||
"header": {
|
||||
"title": "프로필"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "모든 프로필 업데이트",
|
||||
"viewRuntimeConfig": "런타임 설정 보기",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "가져오기"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "프로필 URL",
|
||||
"paste": "붙여넣기",
|
||||
"clear": "지우기"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profile Imported Successfully",
|
||||
"importSubscriptionSuccess": "구독 가져오기 성공",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "프로필 생성",
|
||||
"edit": "프로필 편집"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "출처",
|
||||
"updateTime": "업데이트 시간",
|
||||
"usedTotal": "사용됨 / 전체",
|
||||
"expireTime": "만료 시간",
|
||||
"clickToImport": "Click to import subscription"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "유형",
|
||||
"name": "이름",
|
||||
"description": "설명",
|
||||
"subscriptionUrl": "구독 URL",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "업데이트 간격",
|
||||
"useSystemProxy": "시스템 프록시 사용",
|
||||
"useClashProxy": "Clash 프록시 사용",
|
||||
"acceptInvalidCerts": "잘못된 인증서 허용(위험)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
"fileInput": {
|
||||
"chooseFile": "파일 선택"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
"menu": {
|
||||
"home": "홈",
|
||||
"select": "선택",
|
||||
"editInfo": "정보 편집",
|
||||
"editFile": "파일 편집",
|
||||
"editRules": "규칙 편집",
|
||||
"editProxies": "프록시 편집",
|
||||
"editGroups": "프록시 그룹 편집",
|
||||
"extendConfig": "설정 확장",
|
||||
"extendScript": "스크립트 확장",
|
||||
"openFile": "파일 열기",
|
||||
"update": "업데이트",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "홈",
|
||||
"select": "선택",
|
||||
"editInfo": "정보 편집",
|
||||
"editFile": "파일 편집",
|
||||
"editRules": "규칙 편집",
|
||||
"editProxies": "프록시 편집",
|
||||
"editGroups": "프록시 그룹 편집",
|
||||
"extendConfig": "설정 확장",
|
||||
"extendScript": "스크립트 확장",
|
||||
"openFile": "파일 열기",
|
||||
"update": "업데이트",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "프록시 편집",
|
||||
"placeholders": {
|
||||
"multiUri": "여러 URI의 경우 줄바꿈 사용(Base64 인코딩 지원)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "프로필 생성",
|
||||
"edit": "프로필 편집"
|
||||
},
|
||||
"fields": {
|
||||
"type": "유형",
|
||||
"name": "이름",
|
||||
"description": "설명",
|
||||
"subscriptionUrl": "구독 URL",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "업데이트 간격",
|
||||
"useSystemProxy": "시스템 프록시 사용",
|
||||
"useClashProxy": "Clash 프록시 사용",
|
||||
"acceptInvalidCerts": "잘못된 인증서 허용(위험)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "프록시 앞에 추가",
|
||||
"append": "프록시 뒤에 추가"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "프록시 그룹 편집",
|
||||
"errors": {
|
||||
"nameRequired": "그룹 이름 필수",
|
||||
"nameExists": "그룹 이름이 이미 존재함"
|
||||
"proxiesEditor": {
|
||||
"title": "프록시 편집",
|
||||
"placeholders": {
|
||||
"multiUri": "여러 URI의 경우 줄바꿈 사용(Base64 인코딩 지원)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "프록시 앞에 추가",
|
||||
"append": "프록시 뒤에 추가"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "그룹 유형",
|
||||
"name": "그룹 이름",
|
||||
"icon": "Proxy Group Icon",
|
||||
"proxies": "프록시 사용",
|
||||
"provider": "제공자 사용",
|
||||
"healthCheckUrl": "상태 확인 URL",
|
||||
"expectedStatus": "예상 상태",
|
||||
"interval": "간격",
|
||||
"timeout": "타임아웃",
|
||||
"maxFailedTimes": "최대 실패 횟수",
|
||||
"interfaceName": "인터페이스 이름",
|
||||
"routingMark": "라우팅 마크",
|
||||
"filter": "필터",
|
||||
"excludeFilter": "제외 필터",
|
||||
"excludeType": "제외 유형",
|
||||
"includeAll": "모든 프록시 및 제공자 포함",
|
||||
"includeAllProxies": "모든 프록시 포함",
|
||||
"includeAllProviders": "모든 제공자 포함"
|
||||
"groupsEditor": {
|
||||
"title": "프록시 그룹 편집",
|
||||
"errors": {
|
||||
"nameRequired": "그룹 이름 필수",
|
||||
"nameExists": "그룹 이름이 이미 존재함"
|
||||
},
|
||||
"fields": {
|
||||
"type": "그룹 유형",
|
||||
"name": "그룹 이름",
|
||||
"icon": "Proxy Group Icon",
|
||||
"proxies": "프록시 사용",
|
||||
"provider": "제공자 사용",
|
||||
"healthCheckUrl": "상태 확인 URL",
|
||||
"expectedStatus": "예상 상태",
|
||||
"interval": "간격",
|
||||
"timeout": "타임아웃",
|
||||
"maxFailedTimes": "최대 실패 횟수",
|
||||
"interfaceName": "인터페이스 이름",
|
||||
"routingMark": "라우팅 마크",
|
||||
"filter": "필터",
|
||||
"excludeFilter": "제외 필터",
|
||||
"excludeType": "제외 유형",
|
||||
"includeAll": "모든 프록시 및 제공자 포함",
|
||||
"includeAllProxies": "모든 프록시 포함",
|
||||
"includeAllProviders": "모든 제공자 포함"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "지연 로딩",
|
||||
"disableUdp": "UDP 비활성화",
|
||||
"hidden": "숨김"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "그룹 앞에 추가",
|
||||
"append": "그룹 뒤에 추가"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "지연 로딩",
|
||||
"disableUdp": "UDP 비활성화",
|
||||
"hidden": "숨김"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "문서 포맷"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "Cannot edit in read-only editor"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "그룹 앞에 추가",
|
||||
"append": "그룹 뒤에 추가"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "파일 선택"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "삭제 확인",
|
||||
"message": "이 작업은 되돌릴 수 없습니다"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "문서 포맷",
|
||||
"readOnlyMessage": "Cannot edit in read-only editor"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "스크립트 콘솔"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "출처",
|
||||
"updateTime": "업데이트 시간",
|
||||
"usedTotal": "사용됨 / 전체",
|
||||
"expireTime": "만료 시간",
|
||||
"clickToImport": "Click to import subscription"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "스크립트 콘솔"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "Развернуть",
|
||||
"minimize": "Свернуть"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "Визуализация",
|
||||
"advanced": "Дополнительно"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Профиль успешно импортирован",
|
||||
"importSubscriptionSuccess": "Подписка успешно импортирована",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "Профили",
|
||||
"header": {
|
||||
"title": "Профили"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "Обновить все профили",
|
||||
"viewRuntimeConfig": "Просмотреть используемый конфиг",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "Импорт"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Пакетные операции",
|
||||
"delete": "Удалить выбранные профили",
|
||||
"selectAll": "Выбрать все",
|
||||
"deselectAll": "Отменить выбор всех",
|
||||
"done": "Готово",
|
||||
"selected": "Выбрано",
|
||||
"items": "элементы"
|
||||
"header": {
|
||||
"title": "Пакетные операции"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Удалить выбранные профили",
|
||||
"selectAll": "Выбрать все",
|
||||
"deselectAll": "Отменить выбор всех",
|
||||
"done": "Готово"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Выбрано",
|
||||
"items": "элементы"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "URL профиля",
|
||||
"paste": "Вставить",
|
||||
"clear": "Очистить"
|
||||
"actions": {
|
||||
"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": "Выбранные профили успешно удалены"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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": "Выбранные профили успешно удалены"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Профиль успешно импортирован",
|
||||
"importSubscriptionSuccess": "Подписка успешно импортирована",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Создать профиль",
|
||||
"edit": "Изменить профиль"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "От",
|
||||
"updateTime": "Время обновления",
|
||||
"usedTotal": "Использовано / Всего",
|
||||
"expireTime": "Время окончания",
|
||||
"clickToImport": "Нажмите, чтобы импортировать подписку"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Тип",
|
||||
"name": "Название",
|
||||
"description": "Описание",
|
||||
"subscriptionUrl": "URL подписки",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Интервал обновления",
|
||||
"useSystemProxy": "Использовать системный прокси для обновления",
|
||||
"useClashProxy": "Использовать прокси Clash для обновления",
|
||||
"acceptInvalidCerts": "Принимать недействительные сертификаты (ОПАСНО)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
"fileInput": {
|
||||
"chooseFile": "Выбрать файл"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
"menu": {
|
||||
"home": "Главная",
|
||||
"select": "Выбрать",
|
||||
"editInfo": "Изменить информацию",
|
||||
"editFile": "Изменить файл",
|
||||
"editRules": "Редактировать правила",
|
||||
"editProxies": "Редактировать прокси",
|
||||
"editGroups": "Редактировать группы прокси",
|
||||
"extendConfig": "Изменить Merge",
|
||||
"extendScript": "Изменить Script",
|
||||
"openFile": "Открыть файл",
|
||||
"update": "Обновить",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Главная",
|
||||
"select": "Выбрать",
|
||||
"editInfo": "Изменить информацию",
|
||||
"editFile": "Изменить файл",
|
||||
"editRules": "Редактировать правила",
|
||||
"editProxies": "Редактировать прокси",
|
||||
"editGroups": "Редактировать группы прокси",
|
||||
"extendConfig": "Изменить Merge",
|
||||
"extendScript": "Изменить Script",
|
||||
"openFile": "Открыть файл",
|
||||
"update": "Обновить",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "Редактировать прокси",
|
||||
"placeholders": {
|
||||
"multiUri": "Используйте символы новой строки для нескольких URI (поддерживается кодировка Base64)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "Создать профиль",
|
||||
"edit": "Изменить профиль"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Тип",
|
||||
"name": "Название",
|
||||
"description": "Описание",
|
||||
"subscriptionUrl": "URL подписки",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Интервал обновления",
|
||||
"useSystemProxy": "Использовать системный прокси для обновления",
|
||||
"useClashProxy": "Использовать прокси Clash для обновления",
|
||||
"acceptInvalidCerts": "Принимать недействительные сертификаты (ОПАСНО)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Добавить прокси в начало",
|
||||
"append": "Добавить прокси в конец"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "Редактировать группы прокси",
|
||||
"errors": {
|
||||
"nameRequired": "Требуется имя группы",
|
||||
"nameExists": "Имя группы уже существует"
|
||||
"proxiesEditor": {
|
||||
"title": "Редактировать прокси",
|
||||
"placeholders": {
|
||||
"multiUri": "Используйте символы новой строки для нескольких URI (поддерживается кодировка Base64)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Добавить прокси в начало",
|
||||
"append": "Добавить прокси в конец"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Тип группы",
|
||||
"name": "Имя группы",
|
||||
"icon": "Иконка Группы прокси",
|
||||
"proxies": "Использовать прокси",
|
||||
"provider": "Использовать провайдера",
|
||||
"healthCheckUrl": "URL проверки здоровья",
|
||||
"expectedStatus": "Ожидаемый статус",
|
||||
"interval": "Интервал",
|
||||
"timeout": "Таймаут",
|
||||
"maxFailedTimes": "Максимальное количество неудач",
|
||||
"interfaceName": "Имя интерфейса",
|
||||
"routingMark": "Марка маршрутизации",
|
||||
"filter": "Фильтр",
|
||||
"excludeFilter": "Исключить фильтр",
|
||||
"excludeType": "Тип исключения",
|
||||
"includeAll": "Включить все прокси и провайдеры",
|
||||
"includeAllProxies": "Включить все прокси",
|
||||
"includeAllProviders": "Включить всех провайдеров"
|
||||
"groupsEditor": {
|
||||
"title": "Редактировать группы прокси",
|
||||
"errors": {
|
||||
"nameRequired": "Требуется имя группы",
|
||||
"nameExists": "Имя группы уже существует"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Тип группы",
|
||||
"name": "Имя группы",
|
||||
"icon": "Иконка Группы прокси",
|
||||
"proxies": "Использовать прокси",
|
||||
"provider": "Использовать провайдера",
|
||||
"healthCheckUrl": "URL проверки здоровья",
|
||||
"expectedStatus": "Ожидаемый статус",
|
||||
"interval": "Интервал",
|
||||
"timeout": "Таймаут",
|
||||
"maxFailedTimes": "Максимальное количество неудач",
|
||||
"interfaceName": "Имя интерфейса",
|
||||
"routingMark": "Марка маршрутизации",
|
||||
"filter": "Фильтр",
|
||||
"excludeFilter": "Исключить фильтр",
|
||||
"excludeType": "Тип исключения",
|
||||
"includeAll": "Включить все прокси и провайдеры",
|
||||
"includeAllProxies": "Включить все прокси",
|
||||
"includeAllProviders": "Включить всех провайдеров"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Ленивый",
|
||||
"disableUdp": "Отключить UDP",
|
||||
"hidden": "Скрытый"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Добавить группу в начало",
|
||||
"append": "Добавить группу в конец"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Ленивый",
|
||||
"disableUdp": "Отключить UDP",
|
||||
"hidden": "Скрытый"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "Форматировать документ"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "Невозможно редактировать в режиме только для чтения"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Добавить группу в начало",
|
||||
"append": "Добавить группу в конец"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Выбрать файл"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "Подтвердите удаление",
|
||||
"message": "Эта операция необратима"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "Форматировать документ",
|
||||
"readOnlyMessage": "Невозможно редактировать в режиме только для чтения"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Консоль скрипта"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "От",
|
||||
"updateTime": "Время обновления",
|
||||
"usedTotal": "Использовано / Всего",
|
||||
"expireTime": "Время окончания",
|
||||
"clickToImport": "Нажмите, чтобы импортировать подписку"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Консоль скрипта"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "Büyüt",
|
||||
"minimize": "Küçült"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "Görselleştirme",
|
||||
"advanced": "Gelişmiş"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profil Başarıyla İçe Aktarıldı",
|
||||
"importSubscriptionSuccess": "Abonelik içe aktarımı başarılı",
|
||||
"importWithClashProxy": "Profil Clash vekil ile içe aktarıldı",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "Profiller",
|
||||
"header": {
|
||||
"title": "Profiller"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "Tüm Profilleri Güncelle",
|
||||
"viewRuntimeConfig": "Çalışma Zamanı Yapılandırmasını Görüntüle",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "İçe Aktar"
|
||||
},
|
||||
"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"
|
||||
"header": {
|
||||
"title": "Toplu İşlemler"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Seçili Profilleri Sil",
|
||||
"selectAll": "Tümünü Seç",
|
||||
"deselectAll": "Tüm Seçimi Kaldır",
|
||||
"done": "Tamam"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Seçildi",
|
||||
"items": "öğeler"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "Profil URL'si",
|
||||
"paste": "Yapıştır",
|
||||
"clear": "Temizle"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Profil Başarıyla İçe Aktarıldı",
|
||||
"importSubscriptionSuccess": "Abonelik içe aktarımı başarılı",
|
||||
"importWithClashProxy": "Profil Clash vekil ile içe aktarıldı",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Profil Oluştur",
|
||||
"edit": "Profili Düzenle"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Kaynak",
|
||||
"updateTime": "Güncelleme Zamanı",
|
||||
"usedTotal": "Kullanılan / Toplam",
|
||||
"expireTime": "Sona Erme Zamanı",
|
||||
"clickToImport": "Abonelik içe aktarmak için tıklayın"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
"fileInput": {
|
||||
"chooseFile": "Dosya Seç"
|
||||
},
|
||||
"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"
|
||||
"menu": {
|
||||
"home": "Ana Sayfa",
|
||||
"select": "Seç",
|
||||
"editInfo": "Bilgileri Düzenle",
|
||||
"editFile": "Dosyayı Düzenle",
|
||||
"editRules": "Kuralları Düzenle",
|
||||
"editProxies": "Vekil'leri Düzenle",
|
||||
"editGroups": "Vekil Gruplarını Düzenle",
|
||||
"extendConfig": "Yapılandırma Genişletme",
|
||||
"extendScript": "Betik Genişletme",
|
||||
"openFile": "Dosyayı Aç",
|
||||
"update": "Güncelle",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Son güncelleme başarısız oldu",
|
||||
"nextUp": "Sıradaki",
|
||||
"noSchedule": "Program yok",
|
||||
"unknown": "Bilinmiyor",
|
||||
"autoUpdateDisabled": "Otomatik güncelleme devre dışı"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Ana Sayfa",
|
||||
"select": "Seç",
|
||||
"editInfo": "Bilgileri Düzenle",
|
||||
"editFile": "Dosyayı Düzenle",
|
||||
"editRules": "Kuralları Düzenle",
|
||||
"editProxies": "Vekil'leri Düzenle",
|
||||
"editGroups": "Vekil Gruplarını Düzenle",
|
||||
"extendConfig": "Yapılandırma Genişletme",
|
||||
"extendScript": "Betik Genişletme",
|
||||
"openFile": "Dosyayı Aç",
|
||||
"update": "Güncelle",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "Vekil'leri Düzenle",
|
||||
"placeholders": {
|
||||
"multiUri": "Birden fazla URI için yeni satırlar kullanın (Base64 kodlaması desteklenir)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "Profil Oluştur",
|
||||
"edit": "Profili Düzenle"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"feedback": {
|
||||
"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"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Vekil'in Başına Ekle",
|
||||
"append": "Vekil'in Sonuna Ekle"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "Vekil Gruplarını Düzenle",
|
||||
"errors": {
|
||||
"nameRequired": "Grup Adı Gerekli",
|
||||
"nameExists": "Grup Adı Zaten Var"
|
||||
"proxiesEditor": {
|
||||
"title": "Vekil'leri Düzenle",
|
||||
"placeholders": {
|
||||
"multiUri": "Birden fazla URI için yeni satırlar kullanın (Base64 kodlaması desteklenir)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Vekil'in Başına Ekle",
|
||||
"append": "Vekil'in Sonuna Ekle"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Grup Tipi",
|
||||
"name": "Grup Adı",
|
||||
"icon": "Vekil Grup Simgesi",
|
||||
"proxies": "Vekil'leri Kullan",
|
||||
"provider": "Sağlayıcı Kullan",
|
||||
"healthCheckUrl": "Sağlık Kontrolü URL'si",
|
||||
"expectedStatus": "Beklenen Durum",
|
||||
"interval": "Aralık",
|
||||
"timeout": "Zaman Aşımı",
|
||||
"maxFailedTimes": "Maksimum Başarısız Deneme",
|
||||
"interfaceName": "Arayüz Adı",
|
||||
"routingMark": "Yönlendirme İşareti",
|
||||
"filter": "Filtre",
|
||||
"excludeFilter": "Hariç Tutma Filtresi",
|
||||
"excludeType": "Hariç Tutma Tipi",
|
||||
"includeAll": "Tüm Vekil'leri ve Sağlayıcıları Dahil Et",
|
||||
"includeAllProxies": "Tüm Vekil'leri Dahil Et",
|
||||
"includeAllProviders": "Tüm Sağlayıcıları Dahil Et"
|
||||
"groupsEditor": {
|
||||
"title": "Vekil Gruplarını Düzenle",
|
||||
"errors": {
|
||||
"nameRequired": "Grup Adı Gerekli",
|
||||
"nameExists": "Grup Adı Zaten Var"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Grup Tipi",
|
||||
"name": "Grup Adı",
|
||||
"icon": "Vekil Grup Simgesi",
|
||||
"proxies": "Vekil'leri Kullan",
|
||||
"provider": "Sağlayıcı Kullan",
|
||||
"healthCheckUrl": "Sağlık Kontrolü URL'si",
|
||||
"expectedStatus": "Beklenen Durum",
|
||||
"interval": "Aralık",
|
||||
"timeout": "Zaman Aşımı",
|
||||
"maxFailedTimes": "Maksimum Başarısız Deneme",
|
||||
"interfaceName": "Arayüz Adı",
|
||||
"routingMark": "Yönlendirme İşareti",
|
||||
"filter": "Filtre",
|
||||
"excludeFilter": "Hariç Tutma Filtresi",
|
||||
"excludeType": "Hariç Tutma Tipi",
|
||||
"includeAll": "Tüm Vekil'leri ve Sağlayıcıları Dahil Et",
|
||||
"includeAllProxies": "Tüm Vekil'leri Dahil Et",
|
||||
"includeAllProviders": "Tüm Sağlayıcıları Dahil Et"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Tembel",
|
||||
"disableUdp": "UDP'yi Devre Dışı Bırak",
|
||||
"hidden": "Gizli"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Grubun Başına Ekle",
|
||||
"append": "Grubun Sonuna Ekle"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Tembel",
|
||||
"disableUdp": "UDP'yi Devre Dışı Bırak",
|
||||
"hidden": "Gizli"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "Belgeyi biçimlendir"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "Salt okunur düzenleyicide düzenlenemez"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Grubun Başına Ekle",
|
||||
"append": "Grubun Sonuna Ekle"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Dosya Seç"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Son güncelleme başarısız oldu",
|
||||
"nextUp": "Sıradaki",
|
||||
"noSchedule": "Program yok",
|
||||
"unknown": "Bilinmiyor",
|
||||
"autoUpdateDisabled": "Otomatik güncelleme devre dışı"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "Silmeyi Onayla",
|
||||
"message": "Bu işlem geri alınamaz"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "Belgeyi biçimlendir",
|
||||
"readOnlyMessage": "Salt okunur düzenleyicide düzenlenemez"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Betik Konsolu"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Kaynak",
|
||||
"updateTime": "Güncelleme Zamanı",
|
||||
"usedTotal": "Kullanılan / Toplam",
|
||||
"expireTime": "Sona Erme Zamanı",
|
||||
"clickToImport": "Abonelik içe aktarmak için tıklayın"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Betik Konsolu"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "Invalid regular expression"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "Зурайту",
|
||||
"minimize": "Кечерәйтү"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "Визуализация",
|
||||
"advanced": "Өстәмә"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "Traffic Statistics Error",
|
||||
"trafficStatsDescription": "The traffic statistics component encountered an error and has been disabled to prevent crashes."
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Профиль уңышлы импортланды",
|
||||
"importSubscriptionSuccess": "Import subscription successful",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "Профильләр",
|
||||
"header": {
|
||||
"title": "Профильләр"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "Барлык профильләрне яңарту",
|
||||
"viewRuntimeConfig": "Кулланылган конфигурацияне карау",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "Импорт"
|
||||
},
|
||||
"batch": {
|
||||
"title": "Batch Operations",
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done",
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
"header": {
|
||||
"title": "Batch Operations"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "Delete Selected Profiles",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"done": "Done"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "Selected",
|
||||
"items": "items"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "Профиль URL-ы",
|
||||
"paste": "Кую",
|
||||
"clear": "Чистарту"
|
||||
"actions": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "Профиль уңышлы импортланды",
|
||||
"importSubscriptionSuccess": "Import subscription successful",
|
||||
"importWithClashProxy": "Profile Imported with Clash proxy",
|
||||
"saved": "Saved successfully"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Профиль булдыру",
|
||||
"edit": "Профильне үзгәртү"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Каян",
|
||||
"updateTime": "Яңарту вакыты",
|
||||
"usedTotal": "Кулланылган / Барлыгы",
|
||||
"expireTime": "Тамамлану вакыты",
|
||||
"clickToImport": "Click to import subscription"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Төр",
|
||||
"name": "Исем",
|
||||
"description": "Тасвирламалар",
|
||||
"subscriptionUrl": "Подписка URL-ы",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Яңарту интервалы",
|
||||
"useSystemProxy": "Системалы проксины кулланып яңарту",
|
||||
"useClashProxy": "Clash прокси кулланып яңарту",
|
||||
"acceptInvalidCerts": "Дөрес булмаган сертификатларны кабул итү (Куркыныч)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
"fileInput": {
|
||||
"chooseFile": "Файл сайлау"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "Сайлау",
|
||||
"editInfo": "Мәгълүматны үзгәртү",
|
||||
"editFile": "Файлны үзгәртү",
|
||||
"editRules": "Кагыйдәләрне үзгәртү",
|
||||
"editProxies": "Проксины үзгәртү",
|
||||
"editGroups": "Прокси төркемнәрен үзгәртү",
|
||||
"extendConfig": "Merge-ны үзгәртергә",
|
||||
"extendScript": "Script-ны үзгәртергә",
|
||||
"openFile": "Файлны ачу",
|
||||
"update": "Яңарту",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "Home",
|
||||
"select": "Сайлау",
|
||||
"editInfo": "Мәгълүматны үзгәртү",
|
||||
"editFile": "Файлны үзгәртү",
|
||||
"editRules": "Кагыйдәләрне үзгәртү",
|
||||
"editProxies": "Проксины үзгәртү",
|
||||
"editGroups": "Прокси төркемнәрен үзгәртү",
|
||||
"extendConfig": "Merge-ны үзгәртергә",
|
||||
"extendScript": "Script-ны үзгәртергә",
|
||||
"openFile": "Файлны ачу",
|
||||
"update": "Яңарту",
|
||||
"updateViaProxy": "Update via proxy"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "Проксины үзгәртү",
|
||||
"placeholders": {
|
||||
"multiUri": "Берничә URI өчен яңа юл символын кулланыгыз (Base64 кодлавы ярдәм ителә)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "Профиль булдыру",
|
||||
"edit": "Профильне үзгәртү"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Төр",
|
||||
"name": "Исем",
|
||||
"description": "Тасвирламалар",
|
||||
"subscriptionUrl": "Подписка URL-ы",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "Яңарту интервалы",
|
||||
"useSystemProxy": "Системалы проксины кулланып яңарту",
|
||||
"useClashProxy": "Clash прокси кулланып яңарту",
|
||||
"acceptInvalidCerts": "Дөрес булмаган сертификатларны кабул итү (Куркыныч)",
|
||||
"allowAutoUpdate": "Allow Auto Update"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "Profile creation failed, retrying with Clash proxy...",
|
||||
"creationSuccess": "Profile creation succeeded with Clash proxy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Проксины өскә өстәү",
|
||||
"append": "Проксины аска өстәү"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "Прокси төркемнәрен үзгәртү",
|
||||
"errors": {
|
||||
"nameRequired": "Төркем исеме кирәк",
|
||||
"nameExists": "Әлеге төркем исеме бар инде"
|
||||
"proxiesEditor": {
|
||||
"title": "Проксины үзгәртү",
|
||||
"placeholders": {
|
||||
"multiUri": "Берничә URI өчен яңа юл символын кулланыгыз (Base64 кодлавы ярдәм ителә)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Проксины өскә өстәү",
|
||||
"append": "Проксины аска өстәү"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "Төркем төре",
|
||||
"name": "Төркем исеме",
|
||||
"icon": "Прокси төркеме иконкасы",
|
||||
"proxies": "Прокси куллану",
|
||||
"provider": "Провайдер куллану",
|
||||
"healthCheckUrl": "Сәламәтлекне тикшерү URL-ы",
|
||||
"expectedStatus": "Көтелгән статус коды",
|
||||
"interval": "Интервал",
|
||||
"timeout": "Таймаут",
|
||||
"maxFailedTimes": "Иң күп хаталы тикшерү саны",
|
||||
"interfaceName": "Интерфейс исеме",
|
||||
"routingMark": "Маршрут билгесе",
|
||||
"filter": "Фильтр",
|
||||
"excludeFilter": "Фильтр аша чыгару",
|
||||
"excludeType": "Чыгару төре",
|
||||
"includeAll": "Барлык прокси һәм провайдерларны кертү",
|
||||
"includeAllProxies": "Барлык проксины кертү",
|
||||
"includeAllProviders": "Барлык провайдерларны кертү"
|
||||
"groupsEditor": {
|
||||
"title": "Прокси төркемнәрен үзгәртү",
|
||||
"errors": {
|
||||
"nameRequired": "Төркем исеме кирәк",
|
||||
"nameExists": "Әлеге төркем исеме бар инде"
|
||||
},
|
||||
"fields": {
|
||||
"type": "Төркем төре",
|
||||
"name": "Төркем исеме",
|
||||
"icon": "Прокси төркеме иконкасы",
|
||||
"proxies": "Прокси куллану",
|
||||
"provider": "Провайдер куллану",
|
||||
"healthCheckUrl": "Сәламәтлекне тикшерү URL-ы",
|
||||
"expectedStatus": "Көтелгән статус коды",
|
||||
"interval": "Интервал",
|
||||
"timeout": "Таймаут",
|
||||
"maxFailedTimes": "Иң күп хаталы тикшерү саны",
|
||||
"interfaceName": "Интерфейс исеме",
|
||||
"routingMark": "Маршрут билгесе",
|
||||
"filter": "Фильтр",
|
||||
"excludeFilter": "Фильтр аша чыгару",
|
||||
"excludeType": "Чыгару төре",
|
||||
"includeAll": "Барлык прокси һәм провайдерларны кертү",
|
||||
"includeAllProxies": "Барлык проксины кертү",
|
||||
"includeAllProviders": "Барлык провайдерларны кертү"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Сак режим (lazy)",
|
||||
"disableUdp": "UDP'ны сүндерү",
|
||||
"hidden": "Яшерен"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Төркемне өскә өстәү",
|
||||
"append": "Төркемне аска өстәү"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "Сак режим (lazy)",
|
||||
"disableUdp": "UDP'ны сүндерү",
|
||||
"hidden": "Яшерен"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "Документны форматлау"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "Уку режимында үзгәртү мөмкин түгел"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "Төркемне өскә өстәү",
|
||||
"append": "Төркемне аска өстәү"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "Файл сайлау"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "Last Update failed",
|
||||
"nextUp": "Next Up",
|
||||
"noSchedule": "No schedule",
|
||||
"unknown": "Unknown",
|
||||
"autoUpdateDisabled": "Auto update disabled"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "Бетерүне раслагыз",
|
||||
"message": "Бу гамәлне кире кайтарып булмый"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "Документны форматлау",
|
||||
"readOnlyMessage": "Уку режимында үзгәртү мөмкин түгел"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Скрипт консоле"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "Каян",
|
||||
"updateTime": "Яңарту вакыты",
|
||||
"usedTotal": "Кулланылган / Барлыгы",
|
||||
"expireTime": "Тамамлану вакыты",
|
||||
"clickToImport": "Click to import subscription"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "Скрипт консоле"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "无效的正则表达式"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "流量统计错误",
|
||||
"trafficStatsDescription": "流量统计组件发生错误,为防止崩溃已暂时停用。"
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "最大化",
|
||||
"minimize": "最小化"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "可视化",
|
||||
"advanced": "高级"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "流量统计错误",
|
||||
"trafficStatsDescription": "流量统计组件发生错误,为防止崩溃已暂时停用。"
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "导入订阅成功",
|
||||
"importSubscriptionSuccess": "导入订阅成功",
|
||||
"importWithClashProxy": "使用 Clash 代理导入订阅成功",
|
||||
"saved": "保存成功"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "订阅",
|
||||
"header": {
|
||||
"title": "订阅"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "更新所有订阅",
|
||||
"viewRuntimeConfig": "查看运行时订阅",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "导入"
|
||||
},
|
||||
"batch": {
|
||||
"title": "批量操作",
|
||||
"delete": "删除选中订阅",
|
||||
"selectAll": "全选",
|
||||
"deselectAll": "取消全选",
|
||||
"done": "完成",
|
||||
"selected": "已选中",
|
||||
"items": "项目"
|
||||
"header": {
|
||||
"title": "批量操作"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "删除选中订阅",
|
||||
"selectAll": "全选",
|
||||
"deselectAll": "取消全选",
|
||||
"done": "完成"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "已选中",
|
||||
"items": "项目"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "订阅文件链接",
|
||||
"paste": "粘贴",
|
||||
"clear": "清除"
|
||||
"actions": {
|
||||
"paste": "粘贴",
|
||||
"clear": "清除"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"invalidUrl": "无效的订阅链接,请输入以 http:// 或 https:// 开头的地址",
|
||||
"onlyYaml": "仅支持 YAML 文件"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "订阅导入失败,尝试使用 Clash 代理导入",
|
||||
"importFail": "使用 Clash 代理导入订阅也失败",
|
||||
"importNeedsRefresh": "订阅已导入,但可能需要手动刷新",
|
||||
"importSuccess": "订阅已成功导入,如未显示请重启应用",
|
||||
"profileSwitched": "订阅已切换",
|
||||
"profileReactivated": "订阅已激活",
|
||||
"switchInterrupted": "订阅切换被新选择中断",
|
||||
"batchDeleted": "选中的订阅已成功删除"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "数据已强制刷新",
|
||||
"emergencyRefreshFailed": "紧急刷新失败: {{message}}"
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"invalidUrl": "无效的订阅链接,请输入以 http:// 或 https:// 开头的地址",
|
||||
"onlyYaml": "仅支持 YAML 文件"
|
||||
},
|
||||
"notifications": {
|
||||
"importRetry": "订阅导入失败,尝试使用 Clash 代理导入",
|
||||
"importFail": "使用 Clash 代理导入订阅也失败",
|
||||
"importNeedsRefresh": "订阅已导入,但可能需要手动刷新",
|
||||
"importSuccess": "订阅已成功导入,如未显示请重启应用",
|
||||
"profileSwitched": "订阅已切换",
|
||||
"profileReactivated": "订阅已激活",
|
||||
"switchInterrupted": "订阅切换被新选择中断",
|
||||
"batchDeleted": "选中的订阅已成功删除"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "数据已强制刷新",
|
||||
"emergencyRefreshFailed": "紧急刷新失败: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "导入订阅成功",
|
||||
"importSubscriptionSuccess": "导入订阅成功",
|
||||
"importWithClashProxy": "使用 Clash 代理导入订阅成功",
|
||||
"saved": "保存成功"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新建配置",
|
||||
"edit": "编辑配置"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "来自",
|
||||
"updateTime": "更新时间",
|
||||
"usedTotal": "已使用 / 总量",
|
||||
"expireTime": "到期时间",
|
||||
"clickToImport": "点击导入订阅"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "类型",
|
||||
"name": "名称",
|
||||
"description": "描述",
|
||||
"subscriptionUrl": "订阅链接",
|
||||
"httpTimeout": "HTTP 请求超时",
|
||||
"updateInterval": "更新间隔",
|
||||
"useSystemProxy": "使用系统代理更新",
|
||||
"useClashProxy": "使用内核代理更新",
|
||||
"acceptInvalidCerts": "允许无效证书(危险)",
|
||||
"allowAutoUpdate": "允许自动更新"
|
||||
"fileInput": {
|
||||
"chooseFile": "选择文件"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "订阅创建失败,尝试使用 Clash 代理创建",
|
||||
"creationSuccess": "使用 Clash 代理创建订阅成功"
|
||||
"menu": {
|
||||
"home": "首 页",
|
||||
"select": "使用",
|
||||
"editInfo": "编辑信息",
|
||||
"editFile": "编辑文件",
|
||||
"editRules": "编辑规则",
|
||||
"editProxies": "编辑节点",
|
||||
"editGroups": "编辑代理组",
|
||||
"extendConfig": "扩展覆写配置",
|
||||
"extendScript": "扩展脚本",
|
||||
"openFile": "打开文件",
|
||||
"update": "更新",
|
||||
"updateViaProxy": "更新(代理)"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "全局扩展覆写配置",
|
||||
"script": "全局扩展脚本"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "点击查看上次更新时间",
|
||||
"showNext": "点击查看下一次更新"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "上次更新失败",
|
||||
"nextUp": "下次更新",
|
||||
"noSchedule": "没有计划",
|
||||
"unknown": "未知",
|
||||
"autoUpdateDisabled": "自动更新已禁用"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "首 页",
|
||||
"select": "使用",
|
||||
"editInfo": "编辑信息",
|
||||
"editFile": "编辑文件",
|
||||
"editRules": "编辑规则",
|
||||
"editProxies": "编辑节点",
|
||||
"editGroups": "编辑代理组",
|
||||
"extendConfig": "扩展覆写配置",
|
||||
"extendScript": "扩展脚本",
|
||||
"openFile": "打开文件",
|
||||
"update": "更新",
|
||||
"updateViaProxy": "更新(代理)"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "编辑节点",
|
||||
"placeholders": {
|
||||
"multiUri": "多条 URI 请使用换行分隔(支持 Base64 编码)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "新建配置",
|
||||
"edit": "编辑配置"
|
||||
},
|
||||
"fields": {
|
||||
"type": "类型",
|
||||
"name": "名称",
|
||||
"description": "描述",
|
||||
"subscriptionUrl": "订阅链接",
|
||||
"httpTimeout": "HTTP 请求超时",
|
||||
"updateInterval": "更新间隔",
|
||||
"useSystemProxy": "使用系统代理更新",
|
||||
"useClashProxy": "使用内核代理更新",
|
||||
"acceptInvalidCerts": "允许无效证书(危险)",
|
||||
"allowAutoUpdate": "允许自动更新"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "订阅创建失败,尝试使用 Clash 代理创建",
|
||||
"creationSuccess": "使用 Clash 代理创建订阅成功"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "添加前置代理节点",
|
||||
"append": "添加后置代理节点"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "编辑代理组",
|
||||
"errors": {
|
||||
"nameRequired": "代理组名称不能为空",
|
||||
"nameExists": "代理组名称已存在"
|
||||
"proxiesEditor": {
|
||||
"title": "编辑节点",
|
||||
"placeholders": {
|
||||
"multiUri": "多条 URI 请使用换行分隔(支持 Base64 编码)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "添加前置代理节点",
|
||||
"append": "添加后置代理节点"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "代理组类型",
|
||||
"name": "代理组组名",
|
||||
"icon": "代理组图标",
|
||||
"proxies": "引入代理",
|
||||
"provider": "引入代理集合",
|
||||
"healthCheckUrl": "健康检查测试地址",
|
||||
"expectedStatus": "期望状态码",
|
||||
"interval": "检查间隔",
|
||||
"timeout": "超时时间",
|
||||
"maxFailedTimes": "最大失败次数",
|
||||
"interfaceName": "出站接口",
|
||||
"routingMark": "路由标记",
|
||||
"filter": "过滤节点",
|
||||
"excludeFilter": "排除节点",
|
||||
"excludeType": "排除节点类型",
|
||||
"includeAll": "引入所有出站代理、代理集合",
|
||||
"includeAllProxies": "引入所有出站代理",
|
||||
"includeAllProviders": "引入所有代理集合"
|
||||
"groupsEditor": {
|
||||
"title": "编辑代理组",
|
||||
"errors": {
|
||||
"nameRequired": "代理组名称不能为空",
|
||||
"nameExists": "代理组名称已存在"
|
||||
},
|
||||
"fields": {
|
||||
"type": "代理组类型",
|
||||
"name": "代理组组名",
|
||||
"icon": "代理组图标",
|
||||
"proxies": "引入代理",
|
||||
"provider": "引入代理集合",
|
||||
"healthCheckUrl": "健康检查测试地址",
|
||||
"expectedStatus": "期望状态码",
|
||||
"interval": "检查间隔",
|
||||
"timeout": "超时时间",
|
||||
"maxFailedTimes": "最大失败次数",
|
||||
"interfaceName": "出站接口",
|
||||
"routingMark": "路由标记",
|
||||
"filter": "过滤节点",
|
||||
"excludeFilter": "排除节点",
|
||||
"excludeType": "排除节点类型",
|
||||
"includeAll": "引入所有出站代理、代理集合",
|
||||
"includeAllProxies": "引入所有出站代理",
|
||||
"includeAllProviders": "引入所有代理集合"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "懒惰状态",
|
||||
"disableUdp": "禁用 UDP",
|
||||
"hidden": "隐藏代理组"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "添加前置代理组",
|
||||
"append": "添加后置代理组"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "懒惰状态",
|
||||
"disableUdp": "禁用 UDP",
|
||||
"hidden": "隐藏代理组"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "格式化文档"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "无法在只读模式下编辑"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "添加前置代理组",
|
||||
"append": "添加后置代理组"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "选择文件"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "全局扩展覆写配置",
|
||||
"script": "全局扩展脚本"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "点击查看上次更新时间",
|
||||
"showNext": "点击查看下一次更新"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "上次更新失败",
|
||||
"nextUp": "下次更新",
|
||||
"noSchedule": "没有计划",
|
||||
"unknown": "未知",
|
||||
"autoUpdateDisabled": "自动更新已禁用"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "确认删除",
|
||||
"message": "此操作不可逆"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "格式化文档",
|
||||
"readOnlyMessage": "无法在只读模式下编辑"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "脚本控制台输出"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "来自",
|
||||
"updateTime": "更新时间",
|
||||
"usedTotal": "已使用 / 总量",
|
||||
"expireTime": "到期时间",
|
||||
"clickToImport": "点击导入订阅"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "脚本控制台输出"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -53,16 +53,6 @@
|
||||
"validation": {
|
||||
"invalidRegex": "無效的正規表示式"
|
||||
},
|
||||
"messages": {
|
||||
"errors": {
|
||||
"trafficStats": "流量統計錯誤",
|
||||
"trafficStatsDescription": "流量統計元件發生錯誤,已停用以避免當機。"
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
}
|
||||
},
|
||||
"window": {
|
||||
"maximize": "最大化",
|
||||
"minimize": "最小化"
|
||||
@@ -70,11 +60,29 @@
|
||||
"editorModes": {
|
||||
"visualization": "視覺化",
|
||||
"advanced": "進階"
|
||||
},
|
||||
"feedback": {
|
||||
"errors": {
|
||||
"trafficStats": "流量統計錯誤",
|
||||
"trafficStatsDescription": "流量統計元件發生錯誤,已停用以避免當機。"
|
||||
},
|
||||
"notices": {
|
||||
"raw": "{{message}}",
|
||||
"prefixedRaw": "{{prefix}} {{message}}"
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "匯入設定檔成功",
|
||||
"importSubscriptionSuccess": "匯入訂閱成功",
|
||||
"importWithClashProxy": "使用 Clash 代理匯入訂閱成功",
|
||||
"saved": "儲存成功"
|
||||
}
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"page": {
|
||||
"title": "訂閱",
|
||||
"header": {
|
||||
"title": "訂閱"
|
||||
},
|
||||
"actions": {
|
||||
"updateAll": "更新所有訂閱",
|
||||
"viewRuntimeConfig": "查看執行時訂閱",
|
||||
@@ -82,172 +90,184 @@
|
||||
"import": "匯入"
|
||||
},
|
||||
"batch": {
|
||||
"title": "批次操作",
|
||||
"delete": "刪除選取訂閱",
|
||||
"selectAll": "全選",
|
||||
"deselectAll": "取消選取",
|
||||
"done": "完成",
|
||||
"selected": "已選取",
|
||||
"items": "項目"
|
||||
"header": {
|
||||
"title": "批次操作"
|
||||
},
|
||||
"actions": {
|
||||
"delete": "刪除選取訂閱",
|
||||
"selectAll": "全選",
|
||||
"deselectAll": "取消選取",
|
||||
"done": "完成"
|
||||
},
|
||||
"summary": {
|
||||
"selected": "已選取",
|
||||
"items": "項目"
|
||||
}
|
||||
},
|
||||
"import": {
|
||||
"importForm": {
|
||||
"placeholder": "訂閱檔網址",
|
||||
"paste": "貼上",
|
||||
"clear": "清除"
|
||||
"actions": {
|
||||
"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": "選取的訂閱已成功刪除"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
"feedback": {
|
||||
"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": "選取的訂閱已成功刪除"
|
||||
},
|
||||
"notices": {
|
||||
"forceRefreshCompleted": "Force refresh completed",
|
||||
"emergencyRefreshFailed": "Emergency refresh failed: {{message}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"importSuccess": "匯入設定檔成功",
|
||||
"importSubscriptionSuccess": "匯入訂閱成功",
|
||||
"importWithClashProxy": "使用 Clash 代理匯入訂閱成功",
|
||||
"saved": "儲存成功"
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新增設定檔",
|
||||
"edit": "編輯設定檔"
|
||||
"components": {
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "來自",
|
||||
"updateTime": "更新時間",
|
||||
"usedTotal": "已使用 / 總量",
|
||||
"expireTime": "到期時間",
|
||||
"clickToImport": "點擊匯入訂閱"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "類型",
|
||||
"name": "名稱",
|
||||
"description": "描述",
|
||||
"subscriptionUrl": "訂閱網址",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "更新間隔",
|
||||
"useSystemProxy": "使用系統代理更新",
|
||||
"useClashProxy": "使用內核代理更新",
|
||||
"acceptInvalidCerts": "允許無效憑證(危險)",
|
||||
"allowAutoUpdate": "允許自動更新"
|
||||
"fileInput": {
|
||||
"chooseFile": "選擇檔案"
|
||||
},
|
||||
"notifications": {
|
||||
"creationRetry": "訂閱建立失敗,嘗試使用 Clash 代理建立",
|
||||
"creationSuccess": "使用 Clash 代理建立訂閱成功"
|
||||
"menu": {
|
||||
"home": "首 頁",
|
||||
"select": "使用",
|
||||
"editInfo": "編輯資訊",
|
||||
"editFile": "編輯檔案",
|
||||
"editRules": "編輯規則",
|
||||
"editProxies": "編輯節點",
|
||||
"editGroups": "編輯代理組",
|
||||
"extendConfig": "擴充覆寫設定",
|
||||
"extendScript": "擴充指令碼",
|
||||
"openFile": "開啟檔案",
|
||||
"update": "更新",
|
||||
"updateViaProxy": "更新(代理)"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"profileItem": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "上次更新失敗",
|
||||
"nextUp": "下次更新",
|
||||
"noSchedule": "沒有排程",
|
||||
"unknown": "未知",
|
||||
"autoUpdateDisabled": "自動更新已停用"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"home": "首 頁",
|
||||
"select": "使用",
|
||||
"editInfo": "編輯資訊",
|
||||
"editFile": "編輯檔案",
|
||||
"editRules": "編輯規則",
|
||||
"editProxies": "編輯節點",
|
||||
"editGroups": "編輯代理組",
|
||||
"extendConfig": "擴充覆寫設定",
|
||||
"extendScript": "擴充指令碼",
|
||||
"openFile": "開啟檔案",
|
||||
"update": "更新",
|
||||
"updateViaProxy": "更新(代理)"
|
||||
},
|
||||
"proxiesEditor": {
|
||||
"title": "編輯節點",
|
||||
"placeholders": {
|
||||
"multiUri": "多條網址,請使用換行分隔(支援 Base64 編碼)"
|
||||
"modals": {
|
||||
"profileForm": {
|
||||
"title": {
|
||||
"create": "新增設定檔",
|
||||
"edit": "編輯設定檔"
|
||||
},
|
||||
"fields": {
|
||||
"type": "類型",
|
||||
"name": "名稱",
|
||||
"description": "描述",
|
||||
"subscriptionUrl": "訂閱網址",
|
||||
"httpTimeout": "HTTP Request Timeout",
|
||||
"updateInterval": "更新間隔",
|
||||
"useSystemProxy": "使用系統代理更新",
|
||||
"useClashProxy": "使用內核代理更新",
|
||||
"acceptInvalidCerts": "允許無效憑證(危險)",
|
||||
"allowAutoUpdate": "允許自動更新"
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"creationRetry": "訂閱建立失敗,嘗試使用 Clash 代理建立",
|
||||
"creationSuccess": "使用 Clash 代理建立訂閱成功"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "新增前置代理節點",
|
||||
"append": "新增後置代理節點"
|
||||
}
|
||||
},
|
||||
"groupsEditor": {
|
||||
"title": "編輯代理組",
|
||||
"errors": {
|
||||
"nameRequired": "代理組名稱為必填",
|
||||
"nameExists": "代理組名稱已存在"
|
||||
"proxiesEditor": {
|
||||
"title": "編輯節點",
|
||||
"placeholders": {
|
||||
"multiUri": "多條網址,請使用換行分隔(支援 Base64 編碼)"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "新增前置代理節點",
|
||||
"append": "新增後置代理節點"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"type": "代理組類型",
|
||||
"name": "代理組名稱",
|
||||
"icon": "代理組圖示",
|
||||
"proxies": "使用代理",
|
||||
"provider": "使用代理集合",
|
||||
"healthCheckUrl": "健康檢查網址",
|
||||
"expectedStatus": "預期狀態碼",
|
||||
"interval": "檢查間隔",
|
||||
"timeout": "逾時",
|
||||
"maxFailedTimes": "最大失敗次數",
|
||||
"interfaceName": "輸出介面",
|
||||
"routingMark": "路由標記",
|
||||
"filter": "篩選節點",
|
||||
"excludeFilter": "排除節點",
|
||||
"excludeType": "排除節點類型",
|
||||
"includeAll": "包含所有輸出代理、代理集合",
|
||||
"includeAllProxies": "包含所有輸出代理",
|
||||
"includeAllProviders": "包含所有代理集合"
|
||||
"groupsEditor": {
|
||||
"title": "編輯代理組",
|
||||
"errors": {
|
||||
"nameRequired": "代理組名稱為必填",
|
||||
"nameExists": "代理組名稱已存在"
|
||||
},
|
||||
"fields": {
|
||||
"type": "代理組類型",
|
||||
"name": "代理組名稱",
|
||||
"icon": "代理組圖示",
|
||||
"proxies": "使用代理",
|
||||
"provider": "使用代理集合",
|
||||
"healthCheckUrl": "健康檢查網址",
|
||||
"expectedStatus": "預期狀態碼",
|
||||
"interval": "檢查間隔",
|
||||
"timeout": "逾時",
|
||||
"maxFailedTimes": "最大失敗次數",
|
||||
"interfaceName": "輸出介面",
|
||||
"routingMark": "路由標記",
|
||||
"filter": "篩選節點",
|
||||
"excludeFilter": "排除節點",
|
||||
"excludeType": "排除節點類型",
|
||||
"includeAll": "包含所有輸出代理、代理集合",
|
||||
"includeAllProxies": "包含所有輸出代理",
|
||||
"includeAllProviders": "包含所有代理集合"
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "延遲載入",
|
||||
"disableUdp": "停用 UDP",
|
||||
"hidden": "隱藏代理組"
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "新增前置代理組",
|
||||
"append": "新增後置代理組"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"lazy": "延遲載入",
|
||||
"disableUdp": "停用 UDP",
|
||||
"hidden": "隱藏代理組"
|
||||
"editor": {
|
||||
"actions": {
|
||||
"format": "格式化文件"
|
||||
},
|
||||
"messages": {
|
||||
"readOnly": "無法在唯讀模式下編輯"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"prepend": "新增前置代理組",
|
||||
"append": "新增後置代理組"
|
||||
}
|
||||
},
|
||||
"fileInput": {
|
||||
"chooseFile": "選擇檔案"
|
||||
},
|
||||
"more": {
|
||||
"global": {
|
||||
"merge": "Global Merge",
|
||||
"script": "Global Script"
|
||||
},
|
||||
"chips": {
|
||||
"merge": "Merge",
|
||||
"script": "Script"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"tooltips": {
|
||||
"showLast": "Click to show last update time",
|
||||
"showNext": "Click to show next update"
|
||||
},
|
||||
"status": {
|
||||
"lastUpdateFailed": "上次更新失敗",
|
||||
"nextUp": "下次更新",
|
||||
"noSchedule": "沒有排程",
|
||||
"unknown": "未知",
|
||||
"autoUpdateDisabled": "自動更新已停用"
|
||||
}
|
||||
},
|
||||
"confirm": {
|
||||
"delete": {
|
||||
"confirmDelete": {
|
||||
"title": "確認刪除",
|
||||
"message": "此操作無法復原"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"format": "格式化文件",
|
||||
"readOnlyMessage": "無法在唯讀模式下編輯"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "指令碼控制台輸出"
|
||||
},
|
||||
"card": {
|
||||
"labels": {
|
||||
"from": "來自",
|
||||
"updateTime": "更新時間",
|
||||
"usedTotal": "已使用 / 總量",
|
||||
"expireTime": "到期時間",
|
||||
"clickToImport": "點擊匯入訂閱"
|
||||
},
|
||||
"logViewer": {
|
||||
"title": "指令碼控制台輸出"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -12,7 +12,9 @@ export const handleNoticeMessage = (
|
||||
const handlers: Record<string, () => void> = {
|
||||
"import_sub_url::ok": () => {
|
||||
navigate("/profile", { state: { current: msg } });
|
||||
showNotice.success("profiles.notifications.importSubscriptionSuccess");
|
||||
showNotice.success(
|
||||
"shared.feedback.notifications.importSubscriptionSuccess",
|
||||
);
|
||||
},
|
||||
"import_sub_url::error": () => {
|
||||
navigate("/profile");
|
||||
|
||||
@@ -146,7 +146,7 @@ const ProfilePage = () => {
|
||||
|
||||
setActivatings((prev) => prev.filter((id) => id !== previousSwitching));
|
||||
showNotice.info(
|
||||
"profiles.page.notifications.switchInterrupted",
|
||||
"profiles.page.feedback.notifications.switchInterrupted",
|
||||
`${previousSwitching} → ${newProfile}`,
|
||||
3000,
|
||||
);
|
||||
@@ -191,7 +191,7 @@ const ProfilePage = () => {
|
||||
|
||||
for (const file of paths) {
|
||||
if (!file.endsWith(".yaml") && !file.endsWith(".yml")) {
|
||||
showNotice.error("profiles.page.errors.onlyYaml");
|
||||
showNotice.error("profiles.page.feedback.errors.onlyYaml");
|
||||
continue;
|
||||
}
|
||||
const item = {
|
||||
@@ -239,11 +239,14 @@ const ProfilePage = () => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
await onEnhance(false);
|
||||
|
||||
showNotice.success("profiles.page.notices.forceRefreshCompleted", 2000);
|
||||
showNotice.success(
|
||||
"profiles.page.feedback.notices.forceRefreshCompleted",
|
||||
2000,
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("[紧急刷新] 失败:", error);
|
||||
showNotice.error(
|
||||
"profiles.page.notices.emergencyRefreshFailed",
|
||||
"profiles.page.feedback.notices.emergencyRefreshFailed",
|
||||
{ message: String(error) },
|
||||
4000,
|
||||
);
|
||||
@@ -275,7 +278,7 @@ const ProfilePage = () => {
|
||||
if (!url) return;
|
||||
// 校验url是否为http/https
|
||||
if (!/^https?:\/\//i.test(url)) {
|
||||
showNotice.error("profiles.page.errors.invalidUrl");
|
||||
showNotice.error("profiles.page.feedback.errors.invalidUrl");
|
||||
return;
|
||||
}
|
||||
setLoading(true);
|
||||
@@ -289,11 +292,11 @@ const ProfilePage = () => {
|
||||
try {
|
||||
// 尝试正常导入
|
||||
await importProfile(url);
|
||||
await handleImportSuccess("profiles.notifications.importSuccess");
|
||||
await handleImportSuccess("shared.feedback.notifications.importSuccess");
|
||||
} catch (initialErr) {
|
||||
console.warn("[订阅导入] 首次导入失败:", initialErr);
|
||||
|
||||
showNotice.info("profiles.page.notifications.importRetry");
|
||||
showNotice.info("profiles.page.feedback.notifications.importRetry");
|
||||
try {
|
||||
// 使用自身代理尝试导入
|
||||
await importProfile(url, {
|
||||
@@ -301,12 +304,12 @@ const ProfilePage = () => {
|
||||
self_proxy: true,
|
||||
});
|
||||
await handleImportSuccess(
|
||||
"profiles.notifications.importWithClashProxy",
|
||||
"shared.feedback.notifications.importWithClashProxy",
|
||||
);
|
||||
} catch (retryErr) {
|
||||
// 回退导入也失败
|
||||
showNotice.error(
|
||||
"profiles.page.notifications.importFail",
|
||||
"profiles.page.feedback.notifications.importFail",
|
||||
String(retryErr),
|
||||
);
|
||||
}
|
||||
@@ -354,10 +357,16 @@ const ProfilePage = () => {
|
||||
// 清除SWR缓存并重新获取
|
||||
await mutate("getProfiles", getProfiles(), { revalidate: true });
|
||||
await onEnhance(false);
|
||||
showNotice.error("profiles.page.notifications.importNeedsRefresh", 3000);
|
||||
showNotice.error(
|
||||
"profiles.page.feedback.notifications.importNeedsRefresh",
|
||||
3000,
|
||||
);
|
||||
} catch (finalError) {
|
||||
console.error(`[导入刷新] 最终刷新尝试失败:`, finalError);
|
||||
showNotice.error("profiles.page.notifications.importSuccess", 5000);
|
||||
showNotice.error(
|
||||
"profiles.page.feedback.notifications.importSuccess",
|
||||
5000,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -475,7 +484,7 @@ const ProfilePage = () => {
|
||||
|
||||
if (notifySuccess && success) {
|
||||
showNotice.success(
|
||||
"profiles.page.notifications.profileSwitched",
|
||||
"profiles.page.feedback.notifications.profileSwitched",
|
||||
1000,
|
||||
);
|
||||
}
|
||||
@@ -574,7 +583,7 @@ const ProfilePage = () => {
|
||||
mutateLogs();
|
||||
if (notifySuccess) {
|
||||
showNotice.success(
|
||||
"profiles.page.notifications.profileReactivated",
|
||||
"profiles.page.feedback.notifications.profileReactivated",
|
||||
1000,
|
||||
);
|
||||
}
|
||||
@@ -715,7 +724,7 @@ const ProfilePage = () => {
|
||||
setSelectedProfiles(new Set());
|
||||
setBatchMode(false);
|
||||
|
||||
showNotice.success("profiles.page.notifications.batchDeleted");
|
||||
showNotice.success("profiles.page.feedback.notifications.batchDeleted");
|
||||
} catch (err: any) {
|
||||
showNotice.error(err);
|
||||
} finally {
|
||||
@@ -795,7 +804,7 @@ const ProfilePage = () => {
|
||||
return (
|
||||
<BasePage
|
||||
full
|
||||
title={t("profiles.page.title")}
|
||||
title={t("profiles.page.header.title")}
|
||||
contentStyle={{ height: "100%" }}
|
||||
header={
|
||||
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
|
||||
@@ -805,7 +814,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="inherit"
|
||||
title={t("profiles.page.batch.title")}
|
||||
title={t("profiles.page.batch.header.title")}
|
||||
onClick={toggleBatchMode}
|
||||
>
|
||||
<CheckBoxOutlineBlankRounded />
|
||||
@@ -866,8 +875,8 @@ const ProfilePage = () => {
|
||||
color="inherit"
|
||||
title={
|
||||
isAllSelected()
|
||||
? t("profiles.page.batch.deselectAll")
|
||||
: t("profiles.page.batch.selectAll")
|
||||
? t("profiles.page.batch.actions.deselectAll")
|
||||
: t("profiles.page.batch.actions.selectAll")
|
||||
}
|
||||
onClick={
|
||||
isAllSelected() ? clearAllSelections : selectAllProfiles
|
||||
@@ -884,20 +893,20 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
color="error"
|
||||
title={t("profiles.page.batch.delete")}
|
||||
title={t("profiles.page.batch.actions.delete")}
|
||||
onClick={deleteSelectedProfiles}
|
||||
disabled={selectedProfiles.size === 0}
|
||||
>
|
||||
<DeleteRounded />
|
||||
</IconButton>
|
||||
<Button size="small" variant="outlined" onClick={toggleBatchMode}>
|
||||
{t("profiles.page.batch.done")}
|
||||
{t("profiles.page.batch.actions.done")}
|
||||
</Button>
|
||||
<Box
|
||||
sx={{ flex: 1, textAlign: "right", color: "text.secondary" }}
|
||||
>
|
||||
{t("profiles.page.batch.selected")} {selectedProfiles.size}{" "}
|
||||
{t("profiles.page.batch.items")}
|
||||
{t("profiles.page.batch.summary.selected")}{" "}
|
||||
{selectedProfiles.size} {t("profiles.page.batch.summary.items")}
|
||||
</Box>
|
||||
</Box>
|
||||
)}
|
||||
@@ -930,7 +939,7 @@ const ProfilePage = () => {
|
||||
event.preventDefault();
|
||||
void onImport();
|
||||
}}
|
||||
placeholder={t("profiles.page.import.placeholder")}
|
||||
placeholder={t("profiles.page.importForm.placeholder")}
|
||||
slotProps={{
|
||||
input: {
|
||||
sx: { pr: 1 },
|
||||
@@ -938,7 +947,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
sx={{ p: 0.5 }}
|
||||
title={t("profiles.page.import.paste")}
|
||||
title={t("profiles.page.importForm.actions.paste")}
|
||||
onClick={onCopyLink}
|
||||
>
|
||||
<ContentPasteRounded fontSize="inherit" />
|
||||
@@ -947,7 +956,7 @@ const ProfilePage = () => {
|
||||
<IconButton
|
||||
size="small"
|
||||
sx={{ p: 0.5 }}
|
||||
title={t("profiles.page.import.clear")}
|
||||
title={t("profiles.page.importForm.actions.clear")}
|
||||
onClick={() => setUrl("")}
|
||||
>
|
||||
<ClearRounded fontSize="inherit" />
|
||||
|
||||
@@ -152,7 +152,7 @@ function isPlainRecord(value: unknown): value is Record<string, unknown> {
|
||||
|
||||
function createRawDescriptor(message: string): NoticeTranslationDescriptor {
|
||||
return {
|
||||
key: "shared.messages.notices.raw",
|
||||
key: "shared.feedback.notices.raw",
|
||||
params: { message },
|
||||
};
|
||||
}
|
||||
@@ -208,7 +208,7 @@ function normalizeNoticeMessage(
|
||||
if (rawText !== undefined) {
|
||||
return {
|
||||
i18n: {
|
||||
key: "shared.messages.notices.prefixedRaw",
|
||||
key: "shared.feedback.notices.prefixedRaw",
|
||||
params: {
|
||||
...mergedParams,
|
||||
prefixKey: message.key,
|
||||
@@ -232,7 +232,7 @@ function normalizeNoticeMessage(
|
||||
if (shouldUseTranslationKey(message, params)) {
|
||||
return {
|
||||
i18n: {
|
||||
key: "shared.messages.notices.prefixedRaw",
|
||||
key: "shared.feedback.notices.prefixedRaw",
|
||||
params: {
|
||||
...(params ?? {}),
|
||||
prefixKey: message,
|
||||
@@ -244,7 +244,7 @@ function normalizeNoticeMessage(
|
||||
// Prefer showing the original string while still surfacing the raw details below.
|
||||
return {
|
||||
i18n: {
|
||||
key: "shared.messages.notices.prefixedRaw",
|
||||
key: "shared.feedback.notices.prefixedRaw",
|
||||
params: {
|
||||
...(params ?? {}),
|
||||
prefix: message,
|
||||
|
||||
Reference in New Issue
Block a user