refactor(i18n): reorganize locale keys for home, proxies, rules, connections, logs, unlock, and tests
This commit is contained in:
@@ -68,50 +68,50 @@ const InnerConnectionDetail = ({ data, onClose }: InnerProps) => {
|
||||
: metadata.remoteDestination;
|
||||
|
||||
const information = [
|
||||
{ label: t("connections.fields.host"), value: host },
|
||||
{ label: t("connections.components.fields.host"), value: host },
|
||||
{
|
||||
label: t("connections.fields.downloaded"),
|
||||
label: t("connections.components.fields.downloaded"),
|
||||
value: parseTraffic(data.download).join(" "),
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.uploaded"),
|
||||
label: t("connections.components.fields.uploaded"),
|
||||
value: parseTraffic(data.upload).join(" "),
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.dlSpeed"),
|
||||
label: t("connections.components.fields.dlSpeed"),
|
||||
value: parseTraffic(data.curDownload ?? -1).join(" ") + "/s",
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.ulSpeed"),
|
||||
label: t("connections.components.fields.ulSpeed"),
|
||||
value: parseTraffic(data.curUpload ?? -1).join(" ") + "/s",
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.chains"),
|
||||
label: t("connections.components.fields.chains"),
|
||||
value: chains,
|
||||
},
|
||||
{ label: t("connections.fields.rule"), value: rule },
|
||||
{ label: t("connections.components.fields.rule"), value: rule },
|
||||
{
|
||||
label: t("connections.fields.process"),
|
||||
label: t("connections.components.fields.process"),
|
||||
value: `${metadata.process}${metadata.processPath ? `(${metadata.processPath})` : ""}`,
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.time"),
|
||||
label: t("connections.components.fields.time"),
|
||||
value: dayjs(data.start).fromNow(),
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.source"),
|
||||
label: t("connections.components.fields.source"),
|
||||
value: `${metadata.sourceIP}:${metadata.sourcePort}`,
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.destination"),
|
||||
label: t("connections.components.fields.destination"),
|
||||
value: Destination,
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.destinationPort"),
|
||||
label: t("connections.components.fields.destinationPort"),
|
||||
value: `${metadata.destinationPort}`,
|
||||
},
|
||||
{
|
||||
label: t("connections.fields.type"),
|
||||
label: t("connections.components.fields.type"),
|
||||
value: `${metadata.type}(${metadata.network})`,
|
||||
},
|
||||
];
|
||||
@@ -137,13 +137,13 @@ const InnerConnectionDetail = ({ data, onClose }: InnerProps) => {
|
||||
<Box sx={{ textAlign: "right" }}>
|
||||
<Button
|
||||
variant="contained"
|
||||
title={t("connections.actions.closeConnection")}
|
||||
title={t("connections.components.actions.closeConnection")}
|
||||
onClick={() => {
|
||||
onDelete();
|
||||
onClose?.();
|
||||
}}
|
||||
>
|
||||
{t("connections.actions.closeConnection")}
|
||||
{t("connections.components.actions.closeConnection")}
|
||||
</Button>
|
||||
</Box>
|
||||
</Box>
|
||||
|
||||
@@ -48,8 +48,8 @@ export const ConnectionItem = (props: Props) => {
|
||||
edge="end"
|
||||
color="inherit"
|
||||
onClick={onDelete}
|
||||
title={t("connections.actions.closeConnection")}
|
||||
aria-label={t("connections.actions.closeConnection")}
|
||||
title={t("connections.components.actions.closeConnection")}
|
||||
aria-label={t("connections.components.actions.closeConnection")}
|
||||
>
|
||||
<CloseRounded />
|
||||
</IconButton>
|
||||
|
||||
@@ -162,13 +162,13 @@ export const ConnectionTable = (props: Props) => {
|
||||
return [
|
||||
{
|
||||
field: "host",
|
||||
headerName: t("connections.fields.host"),
|
||||
headerName: t("connections.components.fields.host"),
|
||||
width: columnWidths["host"] || 220,
|
||||
minWidth: 180,
|
||||
},
|
||||
{
|
||||
field: "download",
|
||||
headerName: t("connections.fields.downloaded"),
|
||||
headerName: t("connections.components.fields.downloaded"),
|
||||
width: columnWidths["download"] || 88,
|
||||
align: "right",
|
||||
headerAlign: "right",
|
||||
@@ -176,7 +176,7 @@ export const ConnectionTable = (props: Props) => {
|
||||
},
|
||||
{
|
||||
field: "upload",
|
||||
headerName: t("connections.fields.uploaded"),
|
||||
headerName: t("connections.components.fields.uploaded"),
|
||||
width: columnWidths["upload"] || 88,
|
||||
align: "right",
|
||||
headerAlign: "right",
|
||||
@@ -184,7 +184,7 @@ export const ConnectionTable = (props: Props) => {
|
||||
},
|
||||
{
|
||||
field: "dlSpeed",
|
||||
headerName: t("connections.fields.dlSpeed"),
|
||||
headerName: t("connections.components.fields.dlSpeed"),
|
||||
width: columnWidths["dlSpeed"] || 88,
|
||||
align: "right",
|
||||
headerAlign: "right",
|
||||
@@ -192,7 +192,7 @@ export const ConnectionTable = (props: Props) => {
|
||||
},
|
||||
{
|
||||
field: "ulSpeed",
|
||||
headerName: t("connections.fields.ulSpeed"),
|
||||
headerName: t("connections.components.fields.ulSpeed"),
|
||||
width: columnWidths["ulSpeed"] || 88,
|
||||
align: "right",
|
||||
headerAlign: "right",
|
||||
@@ -200,25 +200,25 @@ export const ConnectionTable = (props: Props) => {
|
||||
},
|
||||
{
|
||||
field: "chains",
|
||||
headerName: t("connections.fields.chains"),
|
||||
headerName: t("connections.components.fields.chains"),
|
||||
width: columnWidths["chains"] || 340,
|
||||
minWidth: 180,
|
||||
},
|
||||
{
|
||||
field: "rule",
|
||||
headerName: t("connections.fields.rule"),
|
||||
headerName: t("connections.components.fields.rule"),
|
||||
width: columnWidths["rule"] || 280,
|
||||
minWidth: 180,
|
||||
},
|
||||
{
|
||||
field: "process",
|
||||
headerName: t("connections.fields.process"),
|
||||
headerName: t("connections.components.fields.process"),
|
||||
width: columnWidths["process"] || 220,
|
||||
minWidth: 180,
|
||||
},
|
||||
{
|
||||
field: "time",
|
||||
headerName: t("connections.fields.time"),
|
||||
headerName: t("connections.components.fields.time"),
|
||||
width: columnWidths["time"] || 120,
|
||||
minWidth: 100,
|
||||
align: "right",
|
||||
@@ -229,19 +229,19 @@ export const ConnectionTable = (props: Props) => {
|
||||
},
|
||||
{
|
||||
field: "source",
|
||||
headerName: t("connections.fields.source"),
|
||||
headerName: t("connections.components.fields.source"),
|
||||
width: columnWidths["source"] || 200,
|
||||
minWidth: 130,
|
||||
},
|
||||
{
|
||||
field: "remoteDestination",
|
||||
headerName: t("connections.fields.destination"),
|
||||
headerName: t("connections.components.fields.destination"),
|
||||
width: columnWidths["remoteDestination"] || 200,
|
||||
minWidth: 130,
|
||||
},
|
||||
{
|
||||
field: "type",
|
||||
headerName: t("connections.fields.type"),
|
||||
headerName: t("connections.components.fields.type"),
|
||||
width: columnWidths["type"] || 160,
|
||||
minWidth: 100,
|
||||
},
|
||||
|
||||
@@ -32,7 +32,7 @@ export const ClashInfoCard = () => {
|
||||
<Stack spacing={1.5}>
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.clashInfo.fields.coreVersion")}
|
||||
{t("home.components.clashInfo.fields.coreVersion")}
|
||||
</Typography>
|
||||
<Typography variant="body2" fontWeight="medium">
|
||||
{clashVersion || "-"}
|
||||
@@ -41,7 +41,7 @@ export const ClashInfoCard = () => {
|
||||
<Divider />
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.clashInfo.fields.systemProxyAddress")}
|
||||
{t("home.components.clashInfo.fields.systemProxyAddress")}
|
||||
</Typography>
|
||||
<Typography variant="body2" fontWeight="medium">
|
||||
{systemProxyAddress}
|
||||
@@ -50,7 +50,7 @@ export const ClashInfoCard = () => {
|
||||
<Divider />
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.clashInfo.fields.mixedPort")}
|
||||
{t("home.components.clashInfo.fields.mixedPort")}
|
||||
</Typography>
|
||||
<Typography variant="body2" fontWeight="medium">
|
||||
{clashConfig.mixedPort || "-"}
|
||||
@@ -59,7 +59,7 @@ export const ClashInfoCard = () => {
|
||||
<Divider />
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.clashInfo.fields.uptime")}
|
||||
{t("home.components.clashInfo.fields.uptime")}
|
||||
</Typography>
|
||||
<Typography variant="body2" fontWeight="medium">
|
||||
{formattedUptime}
|
||||
@@ -68,7 +68,7 @@ export const ClashInfoCard = () => {
|
||||
<Divider />
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.clashInfo.fields.rulesCount")}
|
||||
{t("home.components.clashInfo.fields.rulesCount")}
|
||||
</Typography>
|
||||
<Typography variant="body2" fontWeight="medium">
|
||||
{rules.length}
|
||||
@@ -87,7 +87,7 @@ export const ClashInfoCard = () => {
|
||||
|
||||
return (
|
||||
<EnhancedCard
|
||||
title={t("home.cards.clashInfo.title")}
|
||||
title={t("home.components.clashInfo.title")}
|
||||
icon={<DeveloperBoardOutlined />}
|
||||
iconColor="warning"
|
||||
action={null}
|
||||
|
||||
@@ -21,16 +21,16 @@ const isClashMode = (mode: string): mode is ClashMode =>
|
||||
|
||||
const MODE_META: Record<ClashMode, { label: string; description: string }> = {
|
||||
rule: {
|
||||
label: "home.cards.clashMode.labels.rule",
|
||||
description: "home.cards.clashMode.descriptions.rule",
|
||||
label: "home.components.clashMode.labels.rule",
|
||||
description: "home.components.clashMode.descriptions.rule",
|
||||
},
|
||||
global: {
|
||||
label: "home.cards.clashMode.labels.global",
|
||||
description: "home.cards.clashMode.descriptions.global",
|
||||
label: "home.components.clashMode.labels.global",
|
||||
description: "home.components.clashMode.descriptions.global",
|
||||
},
|
||||
direct: {
|
||||
label: "home.cards.clashMode.labels.direct",
|
||||
description: "home.cards.clashMode.descriptions.direct",
|
||||
label: "home.components.clashMode.labels.direct",
|
||||
description: "home.components.clashMode.descriptions.direct",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -53,7 +53,7 @@ export const ClashModeCard = () => {
|
||||
if (currentModeKey) {
|
||||
return t(MODE_META[currentModeKey].description);
|
||||
}
|
||||
return t("home.cards.clashMode.errors.communication");
|
||||
return t("home.components.clashMode.errors.communication");
|
||||
}, [currentModeKey, t]);
|
||||
|
||||
// 模式图标映射
|
||||
|
||||
@@ -823,7 +823,7 @@ export const CurrentProxyCard = () => {
|
||||
|
||||
return (
|
||||
<EnhancedCard
|
||||
title={t("home.cards.currentProxy.title")}
|
||||
title={t("home.components.currentProxy.title")}
|
||||
icon={
|
||||
<Tooltip
|
||||
title={
|
||||
@@ -840,7 +840,9 @@ export const CurrentProxyCard = () => {
|
||||
iconColor={currentProxy ? "primary" : undefined}
|
||||
action={
|
||||
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
|
||||
<Tooltip title={t("home.cards.currentProxy.actions.refreshDelay")}>
|
||||
<Tooltip
|
||||
title={t("home.components.currentProxy.actions.refreshDelay")}
|
||||
>
|
||||
<span>
|
||||
<IconButton
|
||||
size="small"
|
||||
@@ -906,7 +908,7 @@ export const CurrentProxyCard = () => {
|
||||
{isGlobalMode && (
|
||||
<Chip
|
||||
size="small"
|
||||
label={t("home.cards.currentProxy.labels.globalMode")}
|
||||
label={t("home.components.currentProxy.labels.globalMode")}
|
||||
color="primary"
|
||||
sx={{ mr: 0.5 }}
|
||||
/>
|
||||
@@ -914,7 +916,7 @@ export const CurrentProxyCard = () => {
|
||||
{isDirectMode && (
|
||||
<Chip
|
||||
size="small"
|
||||
label={t("home.cards.currentProxy.labels.directMode")}
|
||||
label={t("home.components.currentProxy.labels.directMode")}
|
||||
color="success"
|
||||
sx={{ mr: 0.5 }}
|
||||
/>
|
||||
@@ -955,13 +957,13 @@ export const CurrentProxyCard = () => {
|
||||
sx={{ mb: 1.5 }}
|
||||
>
|
||||
<InputLabel id="proxy-group-select-label">
|
||||
{t("home.cards.currentProxy.labels.group")}
|
||||
{t("home.components.currentProxy.labels.group")}
|
||||
</InputLabel>
|
||||
<Select
|
||||
labelId="proxy-group-select-label"
|
||||
value={state.selection.group}
|
||||
onChange={handleGroupChange}
|
||||
label={t("home.cards.currentProxy.labels.group")}
|
||||
label={t("home.components.currentProxy.labels.group")}
|
||||
disabled={isGlobalMode || isDirectMode}
|
||||
>
|
||||
{state.proxyData.groups.map((group) => (
|
||||
@@ -975,13 +977,13 @@ export const CurrentProxyCard = () => {
|
||||
{/* 代理节点选择器 */}
|
||||
<FormControl fullWidth variant="outlined" size="small" sx={{ mb: 0 }}>
|
||||
<InputLabel id="proxy-select-label">
|
||||
{t("home.cards.currentProxy.labels.proxy")}
|
||||
{t("home.components.currentProxy.labels.proxy")}
|
||||
</InputLabel>
|
||||
<Select
|
||||
labelId="proxy-select-label"
|
||||
value={state.selection.proxy}
|
||||
onChange={handleProxyChange}
|
||||
label={t("home.cards.currentProxy.labels.proxy")}
|
||||
label={t("home.components.currentProxy.labels.proxy")}
|
||||
disabled={isDirectMode}
|
||||
renderValue={renderProxyValue}
|
||||
MenuProps={{
|
||||
@@ -1037,7 +1039,7 @@ export const CurrentProxyCard = () => {
|
||||
) : (
|
||||
<Box sx={{ textAlign: "center", py: 4 }}>
|
||||
<Typography variant="body1" color="text.secondary">
|
||||
{t("home.cards.currentProxy.labels.noActiveNode")}
|
||||
{t("home.components.currentProxy.labels.noActiveNode")}
|
||||
</Typography>
|
||||
</Box>
|
||||
)}
|
||||
|
||||
@@ -851,7 +851,7 @@ export const EnhancedCanvasTrafficGraph = memo(
|
||||
|
||||
// 获取时间范围文本
|
||||
const getTimeRangeText = useCallback(() => {
|
||||
return t("home.cards.traffic.patterns.minutes", {
|
||||
return t("home.components.traffic.patterns.minutes", {
|
||||
time: timeRange,
|
||||
});
|
||||
}, [timeRange, t]);
|
||||
@@ -936,7 +936,7 @@ export const EnhancedCanvasTrafficGraph = memo(
|
||||
textAlign: "right",
|
||||
}}
|
||||
>
|
||||
{t("home.cards.traffic.legends.upload")}
|
||||
{t("home.components.traffic.legends.upload")}
|
||||
</Box>
|
||||
<Box
|
||||
sx={{
|
||||
@@ -946,7 +946,7 @@ export const EnhancedCanvasTrafficGraph = memo(
|
||||
textAlign: "right",
|
||||
}}
|
||||
>
|
||||
{t("home.cards.traffic.legends.download")}
|
||||
{t("home.components.traffic.legends.download")}
|
||||
</Box>
|
||||
</Box>
|
||||
|
||||
|
||||
@@ -219,42 +219,42 @@ export const EnhancedTrafficStats = () => {
|
||||
() => [
|
||||
{
|
||||
icon: <ArrowUpwardRounded fontSize="small" />,
|
||||
title: t("home.cards.traffic.metrics.uploadSpeed"),
|
||||
title: t("home.components.traffic.metrics.uploadSpeed"),
|
||||
value: parsedData.up,
|
||||
unit: `${parsedData.upUnit}/s`,
|
||||
color: "secondary" as const,
|
||||
},
|
||||
{
|
||||
icon: <ArrowDownwardRounded fontSize="small" />,
|
||||
title: t("home.cards.traffic.metrics.downloadSpeed"),
|
||||
title: t("home.components.traffic.metrics.downloadSpeed"),
|
||||
value: parsedData.down,
|
||||
unit: `${parsedData.downUnit}/s`,
|
||||
color: "primary" as const,
|
||||
},
|
||||
{
|
||||
icon: <LinkRounded fontSize="small" />,
|
||||
title: t("home.cards.traffic.metrics.activeConnections"),
|
||||
title: t("home.components.traffic.metrics.activeConnections"),
|
||||
value: parsedData.connectionsCount,
|
||||
unit: "",
|
||||
color: "success" as const,
|
||||
},
|
||||
{
|
||||
icon: <CloudUploadRounded fontSize="small" />,
|
||||
title: t("home.cards.traffic.metrics.uploaded"),
|
||||
title: t("home.components.traffic.metrics.uploaded"),
|
||||
value: parsedData.uploadTotal,
|
||||
unit: parsedData.uploadTotalUnit,
|
||||
color: "secondary" as const,
|
||||
},
|
||||
{
|
||||
icon: <CloudDownloadRounded fontSize="small" />,
|
||||
title: t("home.cards.traffic.metrics.downloaded"),
|
||||
title: t("home.components.traffic.metrics.downloaded"),
|
||||
value: parsedData.downloadTotal,
|
||||
unit: parsedData.downloadTotalUnit,
|
||||
color: "primary" as const,
|
||||
},
|
||||
{
|
||||
icon: <MemoryRounded fontSize="small" />,
|
||||
title: t("home.cards.traffic.metrics.memoryUsage"),
|
||||
title: t("home.components.traffic.metrics.memoryUsage"),
|
||||
value: parsedData.inuse,
|
||||
unit: parsedData.inuseUnit,
|
||||
color: "error" as const,
|
||||
|
||||
@@ -70,7 +70,9 @@ export const IpInfoCard = () => {
|
||||
setCountdown(IP_REFRESH_SECONDS);
|
||||
} catch (err) {
|
||||
setError(
|
||||
err instanceof Error ? err.message : t("home.cards.ipInfo.errors.load"),
|
||||
err instanceof Error
|
||||
? err.message
|
||||
: t("home.components.ipInfo.errors.load"),
|
||||
);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
@@ -116,7 +118,7 @@ export const IpInfoCard = () => {
|
||||
if (loading) {
|
||||
return (
|
||||
<EnhancedCard
|
||||
title={t("home.cards.ipInfo.title")}
|
||||
title={t("home.components.ipInfo.title")}
|
||||
icon={<LocationOnOutlined />}
|
||||
iconColor="info"
|
||||
action={
|
||||
@@ -139,7 +141,7 @@ export const IpInfoCard = () => {
|
||||
if (error) {
|
||||
return (
|
||||
<EnhancedCard
|
||||
title={t("home.cards.ipInfo.title")}
|
||||
title={t("home.components.ipInfo.title")}
|
||||
icon={<LocationOnOutlined />}
|
||||
iconColor="info"
|
||||
action={
|
||||
@@ -172,7 +174,7 @@ export const IpInfoCard = () => {
|
||||
// 渲染正常数据
|
||||
return (
|
||||
<EnhancedCard
|
||||
title={t("home.cards.ipInfo.title")}
|
||||
title={t("home.components.ipInfo.title")}
|
||||
icon={<LocationOnOutlined />}
|
||||
iconColor="info"
|
||||
action={
|
||||
@@ -224,7 +226,7 @@ export const IpInfoCard = () => {
|
||||
maxWidth: "100%",
|
||||
}}
|
||||
>
|
||||
{ipInfo?.country || t("home.cards.ipInfo.labels.unknown")}
|
||||
{ipInfo?.country || t("home.components.ipInfo.labels.unknown")}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
@@ -234,7 +236,7 @@ export const IpInfoCard = () => {
|
||||
color="text.secondary"
|
||||
sx={{ flexShrink: 0 }}
|
||||
>
|
||||
{t("home.cards.ipInfo.labels.ip")}:
|
||||
{t("home.components.ipInfo.labels.ip")}:
|
||||
</Typography>
|
||||
<Box
|
||||
sx={{
|
||||
@@ -268,7 +270,7 @@ export const IpInfoCard = () => {
|
||||
</Box>
|
||||
|
||||
<InfoItem
|
||||
label={t("home.cards.ipInfo.labels.asn")}
|
||||
label={t("home.components.ipInfo.labels.asn")}
|
||||
value={ipInfo?.asn ? `AS${ipInfo.asn}` : "N/A"}
|
||||
/>
|
||||
</Box>
|
||||
@@ -276,19 +278,19 @@ export const IpInfoCard = () => {
|
||||
{/* 右侧:组织、ISP和位置信息 */}
|
||||
<Box sx={{ width: "60%", overflow: "auto" }}>
|
||||
<InfoItem
|
||||
label={t("home.cards.ipInfo.labels.isp")}
|
||||
label={t("home.components.ipInfo.labels.isp")}
|
||||
value={ipInfo?.isp}
|
||||
/>
|
||||
<InfoItem
|
||||
label={t("home.cards.ipInfo.labels.org")}
|
||||
label={t("home.components.ipInfo.labels.org")}
|
||||
value={ipInfo?.asn_organization}
|
||||
/>
|
||||
<InfoItem
|
||||
label={t("home.cards.ipInfo.labels.location")}
|
||||
label={t("home.components.ipInfo.labels.location")}
|
||||
value={[ipInfo?.city, ipInfo?.region].filter(Boolean).join(", ")}
|
||||
/>
|
||||
<InfoItem
|
||||
label={t("home.cards.ipInfo.labels.timezone")}
|
||||
label={t("home.components.ipInfo.labels.timezone")}
|
||||
value={ipInfo?.timezone}
|
||||
/>
|
||||
</Box>
|
||||
@@ -308,7 +310,7 @@ export const IpInfoCard = () => {
|
||||
}}
|
||||
>
|
||||
<Typography variant="caption">
|
||||
{t("home.cards.ipInfo.labels.autoRefresh")}: {countdown}s
|
||||
{t("home.components.ipInfo.labels.autoRefresh")}: {countdown}s
|
||||
</Typography>
|
||||
<Typography
|
||||
variant="caption"
|
||||
|
||||
@@ -160,18 +160,18 @@ export const ProxyTunCard: FC = () => {
|
||||
if (activeTab === "system") {
|
||||
return {
|
||||
text: systemProxyActualState
|
||||
? t("home.cards.proxyTun.status.systemProxyEnabled")
|
||||
: t("home.cards.proxyTun.status.systemProxyDisabled"),
|
||||
tooltip: t("home.cards.proxyTun.tooltips.systemProxy"),
|
||||
? t("home.components.proxyTun.status.systemProxyEnabled")
|
||||
: t("home.components.proxyTun.status.systemProxyDisabled"),
|
||||
tooltip: t("home.components.proxyTun.tooltips.systemProxy"),
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
text: !isTunModeAvailable
|
||||
? t("home.cards.proxyTun.status.tunModeServiceRequired")
|
||||
? t("home.components.proxyTun.status.tunModeServiceRequired")
|
||||
: enable_tun_mode
|
||||
? t("home.cards.proxyTun.status.tunModeEnabled")
|
||||
: t("home.cards.proxyTun.status.tunModeDisabled"),
|
||||
tooltip: t("home.cards.proxyTun.tooltips.tunMode"),
|
||||
? t("home.components.proxyTun.status.tunModeEnabled")
|
||||
: t("home.components.proxyTun.status.tunModeDisabled"),
|
||||
tooltip: t("home.components.proxyTun.tooltips.tunMode"),
|
||||
};
|
||||
}
|
||||
}, [
|
||||
|
||||
@@ -219,11 +219,11 @@ export const SystemInfoCard = () => {
|
||||
<>
|
||||
<AdminPanelSettingsOutlined
|
||||
sx={{ color: "primary.main", fontSize: 16 }}
|
||||
titleAccess={t("home.cards.systemInfo.badges.adminMode")}
|
||||
titleAccess={t("home.components.systemInfo.badges.adminMode")}
|
||||
/>
|
||||
<DnsOutlined
|
||||
sx={{ color: "success.main", fontSize: 16, ml: 0.5 }}
|
||||
titleAccess={t("home.cards.systemInfo.badges.serviceMode")}
|
||||
titleAccess={t("home.components.systemInfo.badges.serviceMode")}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
@@ -231,21 +231,21 @@ export const SystemInfoCard = () => {
|
||||
return (
|
||||
<AdminPanelSettingsOutlined
|
||||
sx={{ color: "primary.main", fontSize: 16 }}
|
||||
titleAccess={t("home.cards.systemInfo.badges.adminMode")}
|
||||
titleAccess={t("home.components.systemInfo.badges.adminMode")}
|
||||
/>
|
||||
);
|
||||
} else if (isSidecarMode) {
|
||||
return (
|
||||
<ExtensionOutlined
|
||||
sx={{ color: "info.main", fontSize: 16 }}
|
||||
titleAccess={t("home.cards.systemInfo.badges.sidecarMode")}
|
||||
titleAccess={t("home.components.systemInfo.badges.sidecarMode")}
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<DnsOutlined
|
||||
sx={{ color: "success.main", fontSize: 16 }}
|
||||
titleAccess={t("home.cards.systemInfo.badges.serviceMode")}
|
||||
titleAccess={t("home.components.systemInfo.badges.serviceMode")}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -256,13 +256,13 @@ export const SystemInfoCard = () => {
|
||||
if (isAdminMode) {
|
||||
// 判断是否同时处于服务模式
|
||||
if (!isSidecarMode) {
|
||||
return t("home.cards.systemInfo.badges.adminServiceMode");
|
||||
return t("home.components.systemInfo.badges.adminServiceMode");
|
||||
}
|
||||
return t("home.cards.systemInfo.badges.adminMode");
|
||||
return t("home.components.systemInfo.badges.adminMode");
|
||||
} else if (isSidecarMode) {
|
||||
return t("home.cards.systemInfo.badges.sidecarMode");
|
||||
return t("home.components.systemInfo.badges.sidecarMode");
|
||||
} else {
|
||||
return t("home.cards.systemInfo.badges.serviceMode");
|
||||
return t("home.components.systemInfo.badges.serviceMode");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -271,14 +271,14 @@ export const SystemInfoCard = () => {
|
||||
|
||||
return (
|
||||
<EnhancedCard
|
||||
title={t("home.cards.systemInfo.title")}
|
||||
title={t("home.components.systemInfo.title")}
|
||||
icon={<InfoOutlined />}
|
||||
iconColor="error"
|
||||
action={
|
||||
<IconButton
|
||||
size="small"
|
||||
onClick={goToSettings}
|
||||
title={t("home.cards.systemInfo.actions.settings")}
|
||||
title={t("home.components.systemInfo.actions.settings")}
|
||||
>
|
||||
<SettingsOutlined fontSize="small" />
|
||||
</IconButton>
|
||||
@@ -287,7 +287,7 @@ export const SystemInfoCard = () => {
|
||||
<Stack spacing={1.5}>
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.systemInfo.fields.osInfo")}
|
||||
{t("home.components.systemInfo.fields.osInfo")}
|
||||
</Typography>
|
||||
<Typography variant="body2" fontWeight="medium">
|
||||
{systemState.osInfo}
|
||||
@@ -300,12 +300,12 @@ export const SystemInfoCard = () => {
|
||||
alignItems="center"
|
||||
>
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.systemInfo.fields.autoLaunch")}
|
||||
{t("home.components.systemInfo.fields.autoLaunch")}
|
||||
</Typography>
|
||||
<Stack direction="row" spacing={1} alignItems="center">
|
||||
{isAdminMode && (
|
||||
<Tooltip
|
||||
title={t("home.cards.systemInfo.tooltips.autoLaunchAdmin")}
|
||||
title={t("home.components.systemInfo.tooltips.autoLaunchAdmin")}
|
||||
>
|
||||
<WarningOutlined sx={{ color: "warning.main", fontSize: 20 }} />
|
||||
</Tooltip>
|
||||
@@ -331,7 +331,7 @@ export const SystemInfoCard = () => {
|
||||
alignItems="center"
|
||||
>
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.systemInfo.fields.runningMode")}
|
||||
{t("home.components.systemInfo.fields.runningMode")}
|
||||
</Typography>
|
||||
<Typography
|
||||
variant="body2"
|
||||
@@ -346,7 +346,7 @@ export const SystemInfoCard = () => {
|
||||
<Divider />
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.systemInfo.fields.lastCheckUpdate")}
|
||||
{t("home.components.systemInfo.fields.lastCheckUpdate")}
|
||||
</Typography>
|
||||
<Typography
|
||||
variant="body2"
|
||||
@@ -364,7 +364,7 @@ export const SystemInfoCard = () => {
|
||||
<Divider />
|
||||
<Stack direction="row" justifyContent="space-between">
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{t("home.cards.systemInfo.fields.vergeVersion")}
|
||||
{t("home.components.systemInfo.fields.vergeVersion")}
|
||||
</Typography>
|
||||
<Typography variant="body2" fontWeight="medium">
|
||||
v{appVersion}
|
||||
|
||||
@@ -173,7 +173,7 @@ export const TestCard = () => {
|
||||
|
||||
return (
|
||||
<EnhancedCard
|
||||
title={t("home.cards.tests.title")}
|
||||
title={t("home.components.tests.title")}
|
||||
icon={<NetworkCheck />}
|
||||
action={
|
||||
<Box sx={{ display: "flex", gap: 1 }}>
|
||||
@@ -182,7 +182,7 @@ export const TestCard = () => {
|
||||
<NetworkCheck fontSize="small" />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
<Tooltip title={t("tests.viewer.title.create")} arrow>
|
||||
<Tooltip title={t("tests.modals.test.title.create")} arrow>
|
||||
<IconButton size="small" onClick={handleCreateTest}>
|
||||
<Add fontSize="small" />
|
||||
</IconButton>
|
||||
|
||||
@@ -87,7 +87,7 @@ export const LayoutTraffic = () => {
|
||||
|
||||
<Box display="flex" flexDirection="column" gap={0.75}>
|
||||
<Box
|
||||
title={`${t("home.cards.traffic.metrics.uploadSpeed")}`}
|
||||
title={`${t("home.components.traffic.metrics.uploadSpeed")}`}
|
||||
{...boxStyle}
|
||||
sx={{
|
||||
...boxStyle.sx,
|
||||
@@ -105,7 +105,7 @@ export const LayoutTraffic = () => {
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
title={`${t("home.cards.traffic.metrics.downloadSpeed")}`}
|
||||
title={`${t("home.components.traffic.metrics.downloadSpeed")}`}
|
||||
{...boxStyle}
|
||||
sx={{
|
||||
...boxStyle.sx,
|
||||
@@ -124,7 +124,7 @@ export const LayoutTraffic = () => {
|
||||
|
||||
{displayMemory && (
|
||||
<Box
|
||||
title={`${t("home.cards.traffic.metrics.memoryUsage")} `}
|
||||
title={`${t("home.components.traffic.metrics.memoryUsage")} `}
|
||||
{...boxStyle}
|
||||
sx={{
|
||||
cursor: "auto",
|
||||
|
||||
@@ -74,17 +74,17 @@ interface Props {
|
||||
const builtinProxyPolicies = ["DIRECT", "REJECT", "REJECT-DROP", "PASS"];
|
||||
|
||||
const PROXY_STRATEGY_LABEL_KEYS: Record<string, string> = {
|
||||
select: "proxies.enums.strategies.select",
|
||||
"url-test": "proxies.enums.strategies.url-test",
|
||||
fallback: "proxies.enums.strategies.fallback",
|
||||
"load-balance": "proxies.enums.strategies.load-balance",
|
||||
relay: "proxies.enums.strategies.relay",
|
||||
select: "proxies.components.enums.strategies.select",
|
||||
"url-test": "proxies.components.enums.strategies.url-test",
|
||||
fallback: "proxies.components.enums.strategies.fallback",
|
||||
"load-balance": "proxies.components.enums.strategies.load-balance",
|
||||
relay: "proxies.components.enums.strategies.relay",
|
||||
};
|
||||
|
||||
const PROXY_POLICY_LABEL_KEYS: Record<string, string> =
|
||||
builtinProxyPolicies.reduce(
|
||||
(acc, policy) => {
|
||||
acc[policy] = `proxies.enums.policies.${policy}`;
|
||||
acc[policy] = `proxies.components.enums.policies.${policy}`;
|
||||
return acc;
|
||||
},
|
||||
{} as Record<string, string>,
|
||||
|
||||
@@ -241,7 +241,10 @@ const rules: {
|
||||
];
|
||||
|
||||
const RULE_TYPE_LABEL_KEYS: Record<string, string> = Object.fromEntries(
|
||||
rules.map((rule) => [rule.name, `rules.editor.ruleTypes.${rule.name}`]),
|
||||
rules.map((rule) => [
|
||||
rule.name,
|
||||
`rules.modals.editor.ruleTypes.${rule.name}`,
|
||||
]),
|
||||
);
|
||||
|
||||
const builtinProxyPolicies = ["DIRECT", "REJECT", "REJECT-DROP", "PASS"];
|
||||
@@ -475,10 +478,12 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
|
||||
const validateRule = () => {
|
||||
if ((ruleType.required ?? true) && !ruleContent) {
|
||||
throw new Error(t("rules.editor.form.validation.conditionRequired"));
|
||||
throw new Error(
|
||||
t("rules.modals.editor.form.validation.conditionRequired"),
|
||||
);
|
||||
}
|
||||
if (ruleType.validator && !ruleType.validator(ruleContent)) {
|
||||
throw new Error(t("rules.editor.form.validation.invalidRule"));
|
||||
throw new Error(t("rules.modals.editor.form.validation.invalidRule"));
|
||||
}
|
||||
|
||||
const condition = (ruleType.required ?? true) ? ruleContent : "";
|
||||
@@ -503,7 +508,7 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
<DialogTitle>
|
||||
{
|
||||
<Box display="flex" justifyContent="space-between">
|
||||
{t("rules.editor.title")}
|
||||
{t("rules.modals.editor.header.title")}
|
||||
<Box>
|
||||
<Button
|
||||
variant="contained"
|
||||
@@ -533,7 +538,9 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
}}
|
||||
>
|
||||
<Item>
|
||||
<ListItemText primary={t("rules.editor.form.labels.type")} />
|
||||
<ListItemText
|
||||
primary={t("rules.modals.editor.form.labels.type")}
|
||||
/>
|
||||
<Autocomplete
|
||||
size="small"
|
||||
sx={{ minWidth: "240px" }}
|
||||
@@ -559,7 +566,9 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
<Item
|
||||
sx={{ display: !(ruleType.required ?? true) ? "none" : "" }}
|
||||
>
|
||||
<ListItemText primary={t("rules.editor.form.labels.content")} />
|
||||
<ListItemText
|
||||
primary={t("rules.modals.editor.form.labels.content")}
|
||||
/>
|
||||
|
||||
{ruleType.name === "RULE-SET" && (
|
||||
<Autocomplete
|
||||
@@ -597,7 +606,7 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
</Item>
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("rules.editor.form.labels.proxyPolicy")}
|
||||
primary={t("rules.modals.editor.form.labels.proxyPolicy")}
|
||||
/>
|
||||
<Autocomplete
|
||||
size="small"
|
||||
@@ -622,7 +631,7 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
{ruleType.noResolve && (
|
||||
<Item>
|
||||
<ListItemText
|
||||
primary={t("rules.editor.form.toggles.noResolve")}
|
||||
primary={t("rules.modals.editor.form.toggles.noResolve")}
|
||||
/>
|
||||
<Switch
|
||||
checked={noResolve}
|
||||
@@ -645,7 +654,7 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
}
|
||||
}}
|
||||
>
|
||||
{t("rules.editor.form.actions.prependRule")}
|
||||
{t("rules.modals.editor.form.actions.prependRule")}
|
||||
</Button>
|
||||
</Item>
|
||||
<Item>
|
||||
@@ -663,7 +672,7 @@ export const RulesEditorViewer = (props: Props) => {
|
||||
}
|
||||
}}
|
||||
>
|
||||
{t("rules.editor.form.actions.appendRule")}
|
||||
{t("rules.modals.editor.form.actions.appendRule")}
|
||||
</Button>
|
||||
</Item>
|
||||
</List>
|
||||
|
||||
@@ -66,11 +66,14 @@ export const ProviderButton = () => {
|
||||
await refreshProxy();
|
||||
await refreshProxyProviders();
|
||||
|
||||
showNotice.success("proxies.page.provider.notices.updateSuccess", {
|
||||
name,
|
||||
});
|
||||
showNotice.success(
|
||||
"proxies.feedback.notifications.provider.updateSuccess",
|
||||
{
|
||||
name,
|
||||
},
|
||||
);
|
||||
} catch (err) {
|
||||
showNotice.error("proxies.page.provider.notices.updateFailed", {
|
||||
showNotice.error("proxies.feedback.notifications.provider.updateFailed", {
|
||||
name,
|
||||
message: String(err),
|
||||
});
|
||||
@@ -86,7 +89,7 @@ export const ProviderButton = () => {
|
||||
// 获取所有provider的名称
|
||||
const allProviders = Object.keys(proxyProviders || {});
|
||||
if (allProviders.length === 0) {
|
||||
showNotice.info("proxies.page.provider.notices.none");
|
||||
showNotice.info("proxies.feedback.notifications.provider.none");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -116,9 +119,9 @@ export const ProviderButton = () => {
|
||||
await refreshProxy();
|
||||
await refreshProxyProviders();
|
||||
|
||||
showNotice.success("proxies.page.provider.notices.allUpdated");
|
||||
showNotice.success("proxies.feedback.notifications.provider.allUpdated");
|
||||
} catch (err) {
|
||||
showNotice.error("proxies.page.provider.notices.genericError", {
|
||||
showNotice.error("proxies.feedback.notifications.provider.genericError", {
|
||||
message: String(err),
|
||||
});
|
||||
} finally {
|
||||
|
||||
@@ -58,11 +58,14 @@ export const ProviderButton = () => {
|
||||
await refreshRules();
|
||||
await refreshRuleProviders();
|
||||
|
||||
showNotice.success("rules.page.provider.notices.updateSuccess", {
|
||||
name,
|
||||
});
|
||||
showNotice.success(
|
||||
"rules.feedback.notifications.provider.updateSuccess",
|
||||
{
|
||||
name,
|
||||
},
|
||||
);
|
||||
} catch (err) {
|
||||
showNotice.error("rules.page.provider.notices.updateFailed", {
|
||||
showNotice.error("rules.feedback.notifications.provider.updateFailed", {
|
||||
name,
|
||||
message: String(err),
|
||||
});
|
||||
@@ -78,7 +81,7 @@ export const ProviderButton = () => {
|
||||
// 获取所有provider的名称
|
||||
const allProviders = Object.keys(ruleProviders || {});
|
||||
if (allProviders.length === 0) {
|
||||
showNotice.info("rules.page.provider.notices.none");
|
||||
showNotice.info("rules.feedback.notifications.provider.none");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -108,9 +111,9 @@ export const ProviderButton = () => {
|
||||
await refreshRules();
|
||||
await refreshRuleProviders();
|
||||
|
||||
showNotice.success("rules.page.provider.notices.allUpdated");
|
||||
showNotice.success("rules.feedback.notifications.provider.allUpdated");
|
||||
} catch (err) {
|
||||
showNotice.error("rules.page.provider.notices.genericError", {
|
||||
showNotice.error("rules.feedback.notifications.provider.genericError", {
|
||||
message: String(err),
|
||||
});
|
||||
} finally {
|
||||
|
||||
@@ -192,7 +192,7 @@ export const TestItem = ({
|
||||
":hover": { bgcolor: alpha(palette.primary.main, 0.15) },
|
||||
})}
|
||||
>
|
||||
{t("tests.item.actions.test")}
|
||||
{t("tests.components.item.actions.test")}
|
||||
</Widget>
|
||||
)}
|
||||
|
||||
|
||||
@@ -126,8 +126,8 @@ export const TestViewer = forwardRef<TestViewerRef, Props>((props, ref) => {
|
||||
open={open}
|
||||
title={
|
||||
openType === "new"
|
||||
? t("tests.viewer.title.create")
|
||||
: t("tests.viewer.title.edit")
|
||||
? t("tests.modals.test.title.create")
|
||||
: t("tests.modals.test.title.edit")
|
||||
}
|
||||
contentSx={{ width: 375, pb: 0, maxHeight: "80%" }}
|
||||
okBtn={t("shared.actions.save")}
|
||||
@@ -166,7 +166,7 @@ export const TestViewer = forwardRef<TestViewerRef, Props>((props, ref) => {
|
||||
{...field}
|
||||
multiline
|
||||
maxRows={3}
|
||||
label={t("tests.viewer.fields.url")}
|
||||
label={t("tests.modals.test.fields.url")}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "مجموعات الوكلاء",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "تحديث الكل",
|
||||
"update": "تحديث"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "الوضع المباشر"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "مجموعات الوكلاء",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "اختيار الوكيل يدويًا",
|
||||
"url-test": "اختيار الوكيل بناءً على تأخير اختبار الرابط",
|
||||
"fallback": "التبديل إلى وكيل آخر عند حدوث خطأ",
|
||||
"load-balance": "توزيع التحميل بين الوكلاء",
|
||||
"relay": "التمرير عبر سلسلة الوكلاء المحددة"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "البيانات تخرج مباشرة",
|
||||
"REJECT": "رفض الطلبات",
|
||||
"REJECT-DROP": "تجاهل الطلبات",
|
||||
"PASS": "تخطي هذه القاعدة عند المطابقة"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "اختيار الوكيل يدويًا",
|
||||
"url-test": "اختيار الوكيل بناءً على تأخير اختبار الرابط",
|
||||
"fallback": "التبديل إلى وكيل آخر عند حدوث خطأ",
|
||||
"load-balance": "توزيع التحميل بين الوكلاء",
|
||||
"relay": "التمرير عبر سلسلة الوكلاء المحددة"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "البيانات تخرج مباشرة",
|
||||
"REJECT": "رفض الطلبات",
|
||||
"REJECT-DROP": "تجاهل الطلبات",
|
||||
"PASS": "تخطي هذه القاعدة عند المطابقة"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "الاتصالات",
|
||||
"summary": {
|
||||
"downloaded": "تم التنزيل",
|
||||
"uploaded": "تم الرفع"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "إيقاف مؤقت",
|
||||
"resume": "استأنف",
|
||||
"closeAll": "إغلاق الكل"
|
||||
},
|
||||
"header": {
|
||||
"title": "الاتصالات"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "المضيف",
|
||||
"downloaded": "تم التنزيل",
|
||||
"uploaded": "تم الرفع",
|
||||
"dlSpeed": "سرعة التنزيل",
|
||||
"ulSpeed": "سرعة الرفع",
|
||||
"chains": "السلاسل",
|
||||
"rule": "قاعدة",
|
||||
"process": "عملية",
|
||||
"time": "الوقت",
|
||||
"source": "المصدر",
|
||||
"destination": "عنوان IP الوجهة",
|
||||
"destinationPort": "ميناء الوجهة",
|
||||
"type": "النوع"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "سرعة الرفع",
|
||||
"downloadSpeed": "سرعة التنزيل"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "إغلاق الاتصال"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "المضيف",
|
||||
"downloaded": "تم التنزيل",
|
||||
"uploaded": "تم الرفع",
|
||||
"dlSpeed": "سرعة التنزيل",
|
||||
"ulSpeed": "سرعة الرفع",
|
||||
"chains": "السلاسل",
|
||||
"rule": "قاعدة",
|
||||
"process": "عملية",
|
||||
"time": "الوقت",
|
||||
"source": "المصدر",
|
||||
"destination": "عنوان IP الوجهة",
|
||||
"destinationPort": "ميناء الوجهة",
|
||||
"type": "النوع"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "سرعة الرفع",
|
||||
"downloadSpeed": "سرعة التنزيل"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "إغلاق الاتصال"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "اختبار"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "إنشاء اختبار",
|
||||
"edit": "تعديل الاختبار"
|
||||
},
|
||||
"fields": {
|
||||
"url": "رابط الاختبار"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "اختبار",
|
||||
"actions": {
|
||||
"testAll": "اختبار الكل"
|
||||
},
|
||||
"header": {
|
||||
"title": "اختبار"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "اختبار"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "إنشاء اختبار",
|
||||
"edit": "تعديل الاختبار"
|
||||
},
|
||||
"fields": {
|
||||
"url": "رابط الاختبار"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "السجلات",
|
||||
"actions": {
|
||||
"pause": "إيقاف مؤقت",
|
||||
"resume": "استأنف",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "السجلات"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "القواعد",
|
||||
"provider": {
|
||||
"trigger": "مزود القواعد",
|
||||
"dialogTitle": "مزود القواعد",
|
||||
"actions": {
|
||||
"updateAll": "تحديث الكل",
|
||||
"update": "تحديث"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "القواعد"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "تعديل القواعد",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "نوع القاعدة",
|
||||
"content": "محتوى القاعدة",
|
||||
"proxyPolicy": "سياسة الوكيل"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "نوع القاعدة",
|
||||
"content": "محتوى القاعدة",
|
||||
"proxyPolicy": "سياسة الوكيل"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "لا يوجد حل"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "إضافة قاعدة في البداية",
|
||||
"appendRule": "إضافة قاعدة في النهاية"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "شرط القاعدة مطلوب",
|
||||
"invalidRule": "قاعدة غير صالحة"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "لا يوجد حل"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "مطابقة اسم المجال الكامل",
|
||||
"DOMAIN-SUFFIX": "مطابقة لاحقة المجال",
|
||||
"DOMAIN-KEYWORD": "مطابقة كلمة مفتاحية في المجال",
|
||||
"DOMAIN-REGEX": "مطابقة المجال باستخدام التعبيرات العادية",
|
||||
"GEOSITE": "مطابقة المجالات ضمن Geosite",
|
||||
"GEOIP": "مطابقة رمز البلد لعنوان IP",
|
||||
"SRC-GEOIP": "مطابقة رمز البلد لعنوان IP المصدر",
|
||||
"IP-ASN": "مطابقة ASN لعنوان IP",
|
||||
"SRC-IP-ASN": "مطابقة ASN لعنوان IP المصدر",
|
||||
"IP-CIDR": "مطابقة نطاق عنوان IP",
|
||||
"IP-CIDR6": "مطابقة نطاق عناوين IPv6",
|
||||
"SRC-IP-CIDR": "مطابقة نطاق عنوان IP المصدر",
|
||||
"IP-SUFFIX": "مطابقة لاحقة عنوان IP",
|
||||
"SRC-IP-SUFFIX": "مطابقة لاحقة عنوان IP المصدر",
|
||||
"SRC-PORT": "مطابقة نطاق المنفذ المصدر",
|
||||
"DST-PORT": "مطابقة نطاق المنفذ الوجهة",
|
||||
"IN-PORT": "مطابقة المنفذ الوارد",
|
||||
"DSCP": "علامة DSCP (لـ tproxy على UDP فقط)",
|
||||
"PROCESS-NAME": "مطابقة اسم العملية (اسم حزمة Android)",
|
||||
"PROCESS-PATH": "مطابقة المسار الكامل للعملية",
|
||||
"PROCESS-NAME-REGEX": "مطابقة اسم العملية باستخدام التعبيرات العادية (اسم حزمة Android)",
|
||||
"PROCESS-PATH-REGEX": "مطابقة المسار الكامل للعملية باستخدام التعبيرات العادية",
|
||||
"NETWORK": "مطابقة بروتوكول النقل (TCP/UDP)",
|
||||
"UID": "مطابقة معرف المستخدم في Linux",
|
||||
"IN-TYPE": "مطابقة نوع الإدخال",
|
||||
"IN-USER": "مطابقة اسم المستخدم للإدخال",
|
||||
"IN-NAME": "مطابقة اسم الإدخال",
|
||||
"SUB-RULE": "قاعدة فرعية",
|
||||
"RULE-SET": "مطابقة مجموعة القواعد",
|
||||
"AND": "منطقي AND",
|
||||
"OR": "منطقي OR",
|
||||
"NOT": "منطقي NOT",
|
||||
"MATCH": "مطابقة جميع الطلبات"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "إضافة قاعدة في البداية",
|
||||
"appendRule": "إضافة قاعدة في النهاية"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "شرط القاعدة مطلوب",
|
||||
"invalidRule": "قاعدة غير صالحة"
|
||||
"header": {
|
||||
"title": "تعديل القواعد"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "مطابقة اسم المجال الكامل",
|
||||
"DOMAIN-SUFFIX": "مطابقة لاحقة المجال",
|
||||
"DOMAIN-KEYWORD": "مطابقة كلمة مفتاحية في المجال",
|
||||
"DOMAIN-REGEX": "مطابقة المجال باستخدام التعبيرات العادية",
|
||||
"GEOSITE": "مطابقة المجالات ضمن Geosite",
|
||||
"GEOIP": "مطابقة رمز البلد لعنوان IP",
|
||||
"SRC-GEOIP": "مطابقة رمز البلد لعنوان IP المصدر",
|
||||
"IP-ASN": "مطابقة ASN لعنوان IP",
|
||||
"SRC-IP-ASN": "مطابقة ASN لعنوان IP المصدر",
|
||||
"IP-CIDR": "مطابقة نطاق عنوان IP",
|
||||
"IP-CIDR6": "مطابقة نطاق عناوين IPv6",
|
||||
"SRC-IP-CIDR": "مطابقة نطاق عنوان IP المصدر",
|
||||
"IP-SUFFIX": "مطابقة لاحقة عنوان IP",
|
||||
"SRC-IP-SUFFIX": "مطابقة لاحقة عنوان IP المصدر",
|
||||
"SRC-PORT": "مطابقة نطاق المنفذ المصدر",
|
||||
"DST-PORT": "مطابقة نطاق المنفذ الوجهة",
|
||||
"IN-PORT": "مطابقة المنفذ الوارد",
|
||||
"DSCP": "علامة DSCP (لـ tproxy على UDP فقط)",
|
||||
"PROCESS-NAME": "مطابقة اسم العملية (اسم حزمة Android)",
|
||||
"PROCESS-PATH": "مطابقة المسار الكامل للعملية",
|
||||
"PROCESS-NAME-REGEX": "مطابقة اسم العملية باستخدام التعبيرات العادية (اسم حزمة Android)",
|
||||
"PROCESS-PATH-REGEX": "مطابقة المسار الكامل للعملية باستخدام التعبيرات العادية",
|
||||
"NETWORK": "مطابقة بروتوكول النقل (TCP/UDP)",
|
||||
"UID": "مطابقة معرف المستخدم في Linux",
|
||||
"IN-TYPE": "مطابقة نوع الإدخال",
|
||||
"IN-USER": "مطابقة اسم المستخدم للإدخال",
|
||||
"IN-NAME": "مطابقة اسم الإدخال",
|
||||
"SUB-RULE": "قاعدة فرعية",
|
||||
"RULE-SET": "مطابقة مجموعة القواعد",
|
||||
"AND": "منطقي AND",
|
||||
"OR": "منطقي OR",
|
||||
"NOT": "منطقي NOT",
|
||||
"MATCH": "مطابقة جميع الطلبات"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Home",
|
||||
"tooltips": {
|
||||
"lightweightMode": "وضع الأداء الخفيف",
|
||||
"manual": "دليل",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Proxy Mode"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Home Settings",
|
||||
"cards": {
|
||||
"profile": "Profile Card",
|
||||
"currentProxy": "Current Proxy Card",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP Information Card",
|
||||
"clashInfo": "Clash Info Cards",
|
||||
"systemInfo": "System Info Cards"
|
||||
},
|
||||
"header": {
|
||||
"title": "Home Settings"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Home"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Unlock Test",
|
||||
"actions": {
|
||||
"testing": "Testing..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Unlock Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "Proxy-Gruppen",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "Alle aktualisieren",
|
||||
"update": "Aktualisieren"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Direktverbindungs-Modus"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "Proxy-Gruppen",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Proxy manuell auswählen",
|
||||
"url-test": "Proxy basierend auf URL-Latenztest auswählen",
|
||||
"fallback": "Bei Nichtverfügbarkeit zu einem anderen Proxy wechseln",
|
||||
"load-balance": "Proxy basierend auf Lastverteilung zuweisen",
|
||||
"relay": "Basierend auf definiertem Proxy-Kette weiterleiten"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Direktverbindung",
|
||||
"REJECT": "Anfrage ablehnen",
|
||||
"REJECT-DROP": "Anfrage verwerfen",
|
||||
"PASS": "Diese Regel überspringen"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Proxy manuell auswählen",
|
||||
"url-test": "Proxy basierend auf URL-Latenztest auswählen",
|
||||
"fallback": "Bei Nichtverfügbarkeit zu einem anderen Proxy wechseln",
|
||||
"load-balance": "Proxy basierend auf Lastverteilung zuweisen",
|
||||
"relay": "Basierend auf definiertem Proxy-Kette weiterleiten"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Direktverbindung",
|
||||
"REJECT": "Anfrage ablehnen",
|
||||
"REJECT-DROP": "Anfrage verwerfen",
|
||||
"PASS": "Diese Regel überspringen"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "Verbindungen",
|
||||
"summary": {
|
||||
"downloaded": "Heruntergeladen",
|
||||
"uploaded": "Hochgeladen"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "Pausieren",
|
||||
"resume": "Fortsetzen",
|
||||
"closeAll": "Alle schließen"
|
||||
},
|
||||
"header": {
|
||||
"title": "Verbindungen"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Heruntergeladen",
|
||||
"uploaded": "Hochgeladen",
|
||||
"dlSpeed": "Download-Geschwindigkeit",
|
||||
"ulSpeed": "Upload-Geschwindigkeit",
|
||||
"chains": "Ketten",
|
||||
"rule": "Regel",
|
||||
"process": "Prozess",
|
||||
"time": "Verbindungszeit",
|
||||
"source": "Quelladresse",
|
||||
"destination": "Zieladresse",
|
||||
"destinationPort": "Zielport",
|
||||
"type": "Typ"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Upload-Geschwindigkeit",
|
||||
"downloadSpeed": "Download-Geschwindigkeit"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Verbindung schließen"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Heruntergeladen",
|
||||
"uploaded": "Hochgeladen",
|
||||
"dlSpeed": "Download-Geschwindigkeit",
|
||||
"ulSpeed": "Upload-Geschwindigkeit",
|
||||
"chains": "Ketten",
|
||||
"rule": "Regel",
|
||||
"process": "Prozess",
|
||||
"time": "Verbindungszeit",
|
||||
"source": "Quelladresse",
|
||||
"destination": "Zieladresse",
|
||||
"destinationPort": "Zielport",
|
||||
"type": "Typ"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Upload-Geschwindigkeit",
|
||||
"downloadSpeed": "Download-Geschwindigkeit"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Verbindung schließen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Testen"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Neuen Test erstellen",
|
||||
"edit": "Test bearbeiten"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Test-URL"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "Testen",
|
||||
"actions": {
|
||||
"testAll": "Alle testen"
|
||||
},
|
||||
"header": {
|
||||
"title": "Testen"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Wartend auf Prüfung",
|
||||
"yes": "Unterstützt",
|
||||
"no": "Nicht unterstützt",
|
||||
"failed": "Test fehlgeschlagen",
|
||||
"completed": "Prüfung abgeschlossen",
|
||||
"disallowedIsp": "Nicht zugelassener Internetdienstanbieter",
|
||||
"originalsOnly": "Nur Original",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Nicht unterstütztes Land/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Testen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "Neuen Test erstellen",
|
||||
"edit": "Test bearbeiten"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Test-URL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Wartend auf Prüfung",
|
||||
"yes": "Unterstützt",
|
||||
"no": "Nicht unterstützt",
|
||||
"failed": "Test fehlgeschlagen",
|
||||
"completed": "Prüfung abgeschlossen",
|
||||
"disallowedIsp": "Nicht zugelassener Internetdienstanbieter",
|
||||
"originalsOnly": "Nur Original",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Nicht unterstütztes Land/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "Protokolle",
|
||||
"actions": {
|
||||
"pause": "Pausieren",
|
||||
"resume": "Fortsetzen",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "Protokolle"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "Regeln",
|
||||
"provider": {
|
||||
"trigger": "Regelsammlung",
|
||||
"dialogTitle": "Regelsammlung",
|
||||
"actions": {
|
||||
"updateAll": "Alle aktualisieren",
|
||||
"update": "Aktualisieren"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Regeln"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "Regeln bearbeiten",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Regeltyp",
|
||||
"content": "Regelinhalt",
|
||||
"proxyPolicy": "Proxy-Strategie"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Regeltyp",
|
||||
"content": "Regelinhalt",
|
||||
"proxyPolicy": "Proxy-Strategie"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "DNS-Auflösung überspringen"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Vorherige Regel hinzufügen",
|
||||
"appendRule": "Nachfolgende Regel hinzufügen"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Regelbedingung fehlt",
|
||||
"invalidRule": "Ungültige Regel"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "DNS-Auflösung überspringen"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Vollständigen Domainnamen übereinstimmen",
|
||||
"DOMAIN-SUFFIX": "Domain-Suffix übereinstimmen",
|
||||
"DOMAIN-KEYWORD": "Domain-Schlüsselwort übereinstimmen",
|
||||
"DOMAIN-REGEX": "Domain-Regulärer Ausdruck übereinstimmen",
|
||||
"GEOSITE": "Domainnamen in Geosite übereinstimmen",
|
||||
"GEOIP": "IP-Ländercode übereinstimmen",
|
||||
"SRC-GEOIP": "Quell-IP-Ländercode übereinstimmen",
|
||||
"IP-ASN": "IP-ASN übereinstimmen",
|
||||
"SRC-IP-ASN": "Quell-IP-ASN übereinstimmen",
|
||||
"IP-CIDR": "IP-Adressbereich übereinstimmen",
|
||||
"IP-CIDR6": "IP-Adressbereich übereinstimmen",
|
||||
"SRC-IP-CIDR": "Quell-IP-Adressbereich übereinstimmen",
|
||||
"IP-SUFFIX": "IP-Suffix-Bereich übereinstimmen",
|
||||
"SRC-IP-SUFFIX": "Quell-IP-Suffix-Bereich übereinstimmen",
|
||||
"SRC-PORT": "Quellportbereich der Anfrage übereinstimmen",
|
||||
"DST-PORT": "Zielportbereich der Anfrage übereinstimmen",
|
||||
"IN-PORT": "Eingangsport übereinstimmen",
|
||||
"DSCP": "DSCP-Markierung (nur für TPROXY UDP-Eingang)",
|
||||
"PROCESS-NAME": "Prozessnamen übereinstimmen (Android-Paketname)",
|
||||
"PROCESS-PATH": "Vollständigen Prozesspfad übereinstimmen",
|
||||
"PROCESS-NAME-REGEX": "Regulärer Ausdruck für vollständigen Prozessnamen übereinstimmen (Android-Paketname)",
|
||||
"PROCESS-PATH-REGEX": "Regulärer Ausdruck für vollständigen Prozesspfad übereinstimmen",
|
||||
"NETWORK": "Übertragungsprotokoll übereinstimmen (TCP/UDP)",
|
||||
"UID": "Linux-USER-ID übereinstimmen",
|
||||
"IN-TYPE": "Eingangstyp übereinstimmen",
|
||||
"IN-USER": "Eingangsbenutzername übereinstimmen",
|
||||
"IN-NAME": "Eingangsname übereinstimmen",
|
||||
"SUB-RULE": "Unterregel",
|
||||
"RULE-SET": "Regelsatz übereinstimmen",
|
||||
"AND": "Logisches UND",
|
||||
"OR": "Logisches ODER",
|
||||
"NOT": "Logisches NICHT",
|
||||
"MATCH": "Alle Anfragen übereinstimmen"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Vorherige Regel hinzufügen",
|
||||
"appendRule": "Nachfolgende Regel hinzufügen"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Regelbedingung fehlt",
|
||||
"invalidRule": "Ungültige Regel"
|
||||
"header": {
|
||||
"title": "Regeln bearbeiten"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Vollständigen Domainnamen übereinstimmen",
|
||||
"DOMAIN-SUFFIX": "Domain-Suffix übereinstimmen",
|
||||
"DOMAIN-KEYWORD": "Domain-Schlüsselwort übereinstimmen",
|
||||
"DOMAIN-REGEX": "Domain-Regulärer Ausdruck übereinstimmen",
|
||||
"GEOSITE": "Domainnamen in Geosite übereinstimmen",
|
||||
"GEOIP": "IP-Ländercode übereinstimmen",
|
||||
"SRC-GEOIP": "Quell-IP-Ländercode übereinstimmen",
|
||||
"IP-ASN": "IP-ASN übereinstimmen",
|
||||
"SRC-IP-ASN": "Quell-IP-ASN übereinstimmen",
|
||||
"IP-CIDR": "IP-Adressbereich übereinstimmen",
|
||||
"IP-CIDR6": "IP-Adressbereich übereinstimmen",
|
||||
"SRC-IP-CIDR": "Quell-IP-Adressbereich übereinstimmen",
|
||||
"IP-SUFFIX": "IP-Suffix-Bereich übereinstimmen",
|
||||
"SRC-IP-SUFFIX": "Quell-IP-Suffix-Bereich übereinstimmen",
|
||||
"SRC-PORT": "Quellportbereich der Anfrage übereinstimmen",
|
||||
"DST-PORT": "Zielportbereich der Anfrage übereinstimmen",
|
||||
"IN-PORT": "Eingangsport übereinstimmen",
|
||||
"DSCP": "DSCP-Markierung (nur für TPROXY UDP-Eingang)",
|
||||
"PROCESS-NAME": "Prozessnamen übereinstimmen (Android-Paketname)",
|
||||
"PROCESS-PATH": "Vollständigen Prozesspfad übereinstimmen",
|
||||
"PROCESS-NAME-REGEX": "Regulärer Ausdruck für vollständigen Prozessnamen übereinstimmen (Android-Paketname)",
|
||||
"PROCESS-PATH-REGEX": "Regulärer Ausdruck für vollständigen Prozesspfad übereinstimmen",
|
||||
"NETWORK": "Übertragungsprotokoll übereinstimmen (TCP/UDP)",
|
||||
"UID": "Linux-USER-ID übereinstimmen",
|
||||
"IN-TYPE": "Eingangstyp übereinstimmen",
|
||||
"IN-USER": "Eingangsbenutzername übereinstimmen",
|
||||
"IN-NAME": "Eingangsname übereinstimmen",
|
||||
"SUB-RULE": "Unterregel",
|
||||
"RULE-SET": "Regelsatz übereinstimmen",
|
||||
"AND": "Logisches UND",
|
||||
"OR": "Logisches ODER",
|
||||
"NOT": "Logisches NICHT",
|
||||
"MATCH": "Alle Anfragen übereinstimmen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Startseite",
|
||||
"tooltips": {
|
||||
"lightweightMode": "Leichtgewichtiger Modus",
|
||||
"manual": "Bedienungsanleitung",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Proxy-Modus"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Startseite-Einstellungen",
|
||||
"cards": {
|
||||
"profile": "Abonnement-Karte",
|
||||
"currentProxy": "Aktueller Proxy-Karte",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP-Informationen-Karte",
|
||||
"clashInfo": "Clash-Informationen-Karten",
|
||||
"systemInfo": "Systeminformationen-Karten"
|
||||
},
|
||||
"header": {
|
||||
"title": "Startseite-Einstellungen"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Startseite"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "Der Systemproxy ist aktiviert. Ihre Anwendungen werden über den Proxy auf das Netzwerk zugreifen.",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Entsperrungstest",
|
||||
"actions": {
|
||||
"testing": "Wird getestet..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Entsperrungstest"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "Proxy Groups",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "Update All",
|
||||
"update": "Update"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Direct Mode"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "Proxy Groups",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Select proxy manually",
|
||||
"url-test": "Select proxy based on URL test delay",
|
||||
"fallback": "Switch to another proxy on error",
|
||||
"load-balance": "Distribute proxy based on load balancing",
|
||||
"relay": "Pass through the defined proxy chain"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Data goes directly outbound (DIRECT)",
|
||||
"REJECT": "Intercepts requests (REJECT)",
|
||||
"REJECT-DROP": "Discards requests (REJECT-DROP)",
|
||||
"PASS": "Skips this rule when matched (PASS)"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Select proxy manually",
|
||||
"url-test": "Select proxy based on URL test delay",
|
||||
"fallback": "Switch to another proxy on error",
|
||||
"load-balance": "Distribute proxy based on load balancing",
|
||||
"relay": "Pass through the defined proxy chain"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Data goes directly outbound (DIRECT)",
|
||||
"REJECT": "Intercepts requests (REJECT)",
|
||||
"REJECT-DROP": "Discards requests (REJECT-DROP)",
|
||||
"PASS": "Skips this rule when matched (PASS)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "Connections",
|
||||
"summary": {
|
||||
"downloaded": "Downloaded",
|
||||
"uploaded": "Uploaded"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "Pause",
|
||||
"resume": "Resume",
|
||||
"closeAll": "Close All"
|
||||
},
|
||||
"header": {
|
||||
"title": "Connections"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Downloaded",
|
||||
"uploaded": "Uploaded",
|
||||
"dlSpeed": "DL Speed",
|
||||
"ulSpeed": "UL Speed",
|
||||
"chains": "Chains",
|
||||
"rule": "Rule",
|
||||
"process": "Process",
|
||||
"time": "Time",
|
||||
"source": "Source",
|
||||
"destination": "Destination",
|
||||
"destinationPort": "Destination Port",
|
||||
"type": "Type"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Upload Speed",
|
||||
"downloadSpeed": "Download Speed"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Close Connection"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Downloaded",
|
||||
"uploaded": "Uploaded",
|
||||
"dlSpeed": "DL Speed",
|
||||
"ulSpeed": "UL Speed",
|
||||
"chains": "Chains",
|
||||
"rule": "Rule",
|
||||
"process": "Process",
|
||||
"time": "Time",
|
||||
"source": "Source",
|
||||
"destination": "Destination",
|
||||
"destinationPort": "Destination Port",
|
||||
"type": "Type"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Upload Speed",
|
||||
"downloadSpeed": "Download Speed"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Close Connection"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Test"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Create Test",
|
||||
"edit": "Edit Test"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Test URL"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "Test",
|
||||
"actions": {
|
||||
"testAll": "Test All"
|
||||
},
|
||||
"header": {
|
||||
"title": "Test"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "Create Test",
|
||||
"edit": "Edit Test"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Test URL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "Logs",
|
||||
"actions": {
|
||||
"pause": "Pause",
|
||||
"resume": "Resume",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "Logs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "Rules",
|
||||
"provider": {
|
||||
"trigger": "Rule Provider",
|
||||
"dialogTitle": "Rule Providers",
|
||||
"actions": {
|
||||
"updateAll": "Update All",
|
||||
"update": "Update"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Rules"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "Edit Rules",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Rule Type",
|
||||
"content": "Rule Content",
|
||||
"proxyPolicy": "Proxy Policy"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Rule Type",
|
||||
"content": "Rule Content",
|
||||
"proxyPolicy": "Proxy Policy"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "No Resolve"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Prepend Rule",
|
||||
"appendRule": "Append Rule"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Rule Condition Required",
|
||||
"invalidRule": "Invalid Rule"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "No Resolve"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Match full domain (DOMAIN)",
|
||||
"DOMAIN-SUFFIX": "Match domain suffix (DOMAIN-SUFFIX)",
|
||||
"DOMAIN-KEYWORD": "Match domain keyword (DOMAIN-KEYWORD)",
|
||||
"DOMAIN-REGEX": "Match domain using regex (DOMAIN-REGEX)",
|
||||
"GEOSITE": "Match domains in Geosite (GEOSITE)",
|
||||
"GEOIP": "Match IP country code (GEOIP)",
|
||||
"SRC-GEOIP": "Match source IP country code (SRC-GEOIP)",
|
||||
"IP-ASN": "Match IP ASN (IP-ASN)",
|
||||
"SRC-IP-ASN": "Match source IP ASN (SRC-IP-ASN)",
|
||||
"IP-CIDR": "Match IP address range (IP-CIDR)",
|
||||
"IP-CIDR6": "Match IPv6 address range (IP-CIDR6)",
|
||||
"SRC-IP-CIDR": "Match source IP address range (SRC-IP-CIDR)",
|
||||
"IP-SUFFIX": "Match IP suffix range (IP-SUFFIX)",
|
||||
"SRC-IP-SUFFIX": "Match source IP suffix range (SRC-IP-SUFFIX)",
|
||||
"SRC-PORT": "Match source port range (SRC-PORT)",
|
||||
"DST-PORT": "Match destination port range (DST-PORT)",
|
||||
"IN-PORT": "Match inbound port (IN-PORT)",
|
||||
"DSCP": "DSCP tag (TPROXY UDP inbound only) (DSCP)",
|
||||
"PROCESS-NAME": "Match process name (PROCESS-NAME)",
|
||||
"PROCESS-PATH": "Match full process path (PROCESS-PATH)",
|
||||
"PROCESS-NAME-REGEX": "Match process name using regex (PROCESS-NAME-REGEX)",
|
||||
"PROCESS-PATH-REGEX": "Match full process path using regex (PROCESS-PATH-REGEX)",
|
||||
"NETWORK": "Match network protocol (TCP/UDP) (NETWORK)",
|
||||
"UID": "Match Linux user ID (UID)",
|
||||
"IN-TYPE": "Match inbound type (IN-TYPE)",
|
||||
"IN-USER": "Match inbound username (IN-USER)",
|
||||
"IN-NAME": "Match inbound name (IN-NAME)",
|
||||
"SUB-RULE": "Sub-rule (SUB-RULE)",
|
||||
"RULE-SET": "Match rule set (RULE-SET)",
|
||||
"AND": "Logical AND (AND)",
|
||||
"OR": "Logical OR (OR)",
|
||||
"NOT": "Logical NOT (NOT)",
|
||||
"MATCH": "Match all requests (MATCH)"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Prepend Rule",
|
||||
"appendRule": "Append Rule"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Rule Condition Required",
|
||||
"invalidRule": "Invalid Rule"
|
||||
"header": {
|
||||
"title": "Edit Rules"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Match full domain (DOMAIN)",
|
||||
"DOMAIN-SUFFIX": "Match domain suffix (DOMAIN-SUFFIX)",
|
||||
"DOMAIN-KEYWORD": "Match domain keyword (DOMAIN-KEYWORD)",
|
||||
"DOMAIN-REGEX": "Match domain using regex (DOMAIN-REGEX)",
|
||||
"GEOSITE": "Match domains in Geosite (GEOSITE)",
|
||||
"GEOIP": "Match IP country code (GEOIP)",
|
||||
"SRC-GEOIP": "Match source IP country code (SRC-GEOIP)",
|
||||
"IP-ASN": "Match IP ASN (IP-ASN)",
|
||||
"SRC-IP-ASN": "Match source IP ASN (SRC-IP-ASN)",
|
||||
"IP-CIDR": "Match IP address range (IP-CIDR)",
|
||||
"IP-CIDR6": "Match IPv6 address range (IP-CIDR6)",
|
||||
"SRC-IP-CIDR": "Match source IP address range (SRC-IP-CIDR)",
|
||||
"IP-SUFFIX": "Match IP suffix range (IP-SUFFIX)",
|
||||
"SRC-IP-SUFFIX": "Match source IP suffix range (SRC-IP-SUFFIX)",
|
||||
"SRC-PORT": "Match source port range (SRC-PORT)",
|
||||
"DST-PORT": "Match destination port range (DST-PORT)",
|
||||
"IN-PORT": "Match inbound port (IN-PORT)",
|
||||
"DSCP": "DSCP tag (TPROXY UDP inbound only) (DSCP)",
|
||||
"PROCESS-NAME": "Match process name (PROCESS-NAME)",
|
||||
"PROCESS-PATH": "Match full process path (PROCESS-PATH)",
|
||||
"PROCESS-NAME-REGEX": "Match process name using regex (PROCESS-NAME-REGEX)",
|
||||
"PROCESS-PATH-REGEX": "Match full process path using regex (PROCESS-PATH-REGEX)",
|
||||
"NETWORK": "Match network protocol (TCP/UDP) (NETWORK)",
|
||||
"UID": "Match Linux user ID (UID)",
|
||||
"IN-TYPE": "Match inbound type (IN-TYPE)",
|
||||
"IN-USER": "Match inbound username (IN-USER)",
|
||||
"IN-NAME": "Match inbound name (IN-NAME)",
|
||||
"SUB-RULE": "Sub-rule (SUB-RULE)",
|
||||
"RULE-SET": "Match rule set (RULE-SET)",
|
||||
"AND": "Logical AND (AND)",
|
||||
"OR": "Logical OR (OR)",
|
||||
"NOT": "Logical NOT (NOT)",
|
||||
"MATCH": "Match all requests (MATCH)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Home",
|
||||
"tooltips": {
|
||||
"lightweightMode": "Lightweight Mode",
|
||||
"manual": "Manual",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Proxy Mode"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Home Settings",
|
||||
"cards": {
|
||||
"profile": "Profile Card",
|
||||
"currentProxy": "Current Proxy Card",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP Information Card",
|
||||
"clashInfo": "Clash Info Cards",
|
||||
"systemInfo": "System Info Cards"
|
||||
},
|
||||
"header": {
|
||||
"title": "Home Settings"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Home"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "System Proxy Enabled",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Unlock Test",
|
||||
"actions": {
|
||||
"testing": "Testing..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Unlock Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "Grupos de proxies",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "Actualizar todo",
|
||||
"update": "Actualizar"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Modo de conexión directa"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "Grupos de proxies",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Seleccionar proxy manualmente",
|
||||
"url-test": "Seleccionar proxy según la prueba de latencia de la URL",
|
||||
"fallback": "Cambiar a otro proxy cuando no esté disponible",
|
||||
"load-balance": "Asignar proxy según el equilibrio de carga",
|
||||
"relay": "Transferir según la cadena de proxy definida"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Conexión directa",
|
||||
"REJECT": "Rechazar solicitud",
|
||||
"REJECT-DROP": "Descartar solicitud",
|
||||
"PASS": "Saltar esta regla"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Seleccionar proxy manualmente",
|
||||
"url-test": "Seleccionar proxy según la prueba de latencia de la URL",
|
||||
"fallback": "Cambiar a otro proxy cuando no esté disponible",
|
||||
"load-balance": "Asignar proxy según el equilibrio de carga",
|
||||
"relay": "Transferir según la cadena de proxy definida"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Conexión directa",
|
||||
"REJECT": "Rechazar solicitud",
|
||||
"REJECT-DROP": "Descartar solicitud",
|
||||
"PASS": "Saltar esta regla"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "Conexiones",
|
||||
"summary": {
|
||||
"downloaded": "Descargado",
|
||||
"uploaded": "Subido"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "Pausar",
|
||||
"resume": "Reanudar",
|
||||
"closeAll": "Cerrar todas"
|
||||
},
|
||||
"header": {
|
||||
"title": "Conexiones"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Descargado",
|
||||
"uploaded": "Subido",
|
||||
"dlSpeed": "Velocidad de descarga",
|
||||
"ulSpeed": "Velocidad de subida",
|
||||
"chains": "Cadenas",
|
||||
"rule": "Regla",
|
||||
"process": "Proceso",
|
||||
"time": "Tiempo de conexión",
|
||||
"source": "Dirección de origen",
|
||||
"destination": "Dirección de destino",
|
||||
"destinationPort": "Puerto de destino",
|
||||
"type": "Tipo"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Velocidad de subida",
|
||||
"downloadSpeed": "Velocidad de descarga"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Cerrar conexión"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Descargado",
|
||||
"uploaded": "Subido",
|
||||
"dlSpeed": "Velocidad de descarga",
|
||||
"ulSpeed": "Velocidad de subida",
|
||||
"chains": "Cadenas",
|
||||
"rule": "Regla",
|
||||
"process": "Proceso",
|
||||
"time": "Tiempo de conexión",
|
||||
"source": "Dirección de origen",
|
||||
"destination": "Dirección de destino",
|
||||
"destinationPort": "Puerto de destino",
|
||||
"type": "Tipo"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Velocidad de subida",
|
||||
"downloadSpeed": "Velocidad de descarga"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Cerrar conexión"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Prueba"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Crear prueba",
|
||||
"edit": "Editar prueba"
|
||||
},
|
||||
"fields": {
|
||||
"url": "URL de prueba"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "Prueba",
|
||||
"actions": {
|
||||
"testAll": "Probar todo"
|
||||
},
|
||||
"header": {
|
||||
"title": "Prueba"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Pendiente de detección",
|
||||
"yes": "Soportado",
|
||||
"no": "No soportado",
|
||||
"failed": "Prueba fallida",
|
||||
"completed": "Detección completada",
|
||||
"disallowedIsp": "Proveedor de servicios de Internet no permitido",
|
||||
"originalsOnly": "Solo originales",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "País/región no soportado",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Prueba"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "Crear prueba",
|
||||
"edit": "Editar prueba"
|
||||
},
|
||||
"fields": {
|
||||
"url": "URL de prueba"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Pendiente de detección",
|
||||
"yes": "Soportado",
|
||||
"no": "No soportado",
|
||||
"failed": "Prueba fallida",
|
||||
"completed": "Detección completada",
|
||||
"disallowedIsp": "Proveedor de servicios de Internet no permitido",
|
||||
"originalsOnly": "Solo originales",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "País/región no soportado",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "Registros",
|
||||
"actions": {
|
||||
"pause": "Pausar",
|
||||
"resume": "Reanudar",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "Registros"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "Reglas",
|
||||
"provider": {
|
||||
"trigger": "Proveedor de reglas",
|
||||
"dialogTitle": "Proveedor de reglas",
|
||||
"actions": {
|
||||
"updateAll": "Actualizar todo",
|
||||
"update": "Actualizar"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Reglas"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "Editar reglas",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Tipo de regla",
|
||||
"content": "Contenido de la regla",
|
||||
"proxyPolicy": "Política de proxy"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Tipo de regla",
|
||||
"content": "Contenido de la regla",
|
||||
"proxyPolicy": "Política de proxy"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Omitir resolución DNS"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Agregar regla previa",
|
||||
"appendRule": "Agregar regla posterior"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Falta la condición de la regla",
|
||||
"invalidRule": "Regla no válida"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Omitir resolución DNS"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Coincidir con el nombre de dominio completo",
|
||||
"DOMAIN-SUFFIX": "Coincidir con el sufijo del nombre de dominio",
|
||||
"DOMAIN-KEYWORD": "Coincidir con la palabra clave del nombre de dominio",
|
||||
"DOMAIN-REGEX": "Coincidir con la expresión regular del nombre de dominio",
|
||||
"GEOSITE": "Coincidir con los nombres de dominio en Geosite",
|
||||
"GEOIP": "Coincidir con el código de país del IP",
|
||||
"SRC-GEOIP": "Coincidir con el código de país del IP de origen",
|
||||
"IP-ASN": "Coincidir con el ASN del IP",
|
||||
"SRC-IP-ASN": "Coincidir con el ASN del IP de origen",
|
||||
"IP-CIDR": "Coincidir con el rango de direcciones IP",
|
||||
"IP-CIDR6": "Coincidir con el rango de direcciones IP",
|
||||
"SRC-IP-CIDR": "Coincidir con el rango de direcciones IP de origen",
|
||||
"IP-SUFFIX": "Coincidir con el rango de sufijos de IP",
|
||||
"SRC-IP-SUFFIX": "Coincidir con el rango de sufijos de IP de origen",
|
||||
"SRC-PORT": "Coincidir con el rango de puertos de origen de la solicitud",
|
||||
"DST-PORT": "Coincidir con el rango de puertos de destino de la solicitud",
|
||||
"IN-PORT": "Coincidir con el puerto de entrada",
|
||||
"DSCP": "Etiqueta DSCP (solo para entradas UDP TPROXY)",
|
||||
"PROCESS-NAME": "Coincidir con el nombre del proceso (nombre del paquete de Android)",
|
||||
"PROCESS-PATH": "Coincidir con la ruta completa del proceso",
|
||||
"PROCESS-NAME-REGEX": "Coincidir con el nombre completo del proceso mediante expresiones regulares (nombre del paquete de Android)",
|
||||
"PROCESS-PATH-REGEX": "Coincidir con la ruta completa del proceso mediante expresiones regulares",
|
||||
"NETWORK": "Coincidir con el protocolo de transporte (TCP/UDP)",
|
||||
"UID": "Coincidir con el ID de usuario de Linux",
|
||||
"IN-TYPE": "Coincidir con el tipo de entrada",
|
||||
"IN-USER": "Coincidir con el nombre de usuario de entrada",
|
||||
"IN-NAME": "Coincidir con el nombre de entrada",
|
||||
"SUB-RULE": "Subregla",
|
||||
"RULE-SET": "Coincidir con el conjunto de reglas",
|
||||
"AND": "Y lógico",
|
||||
"OR": "O lógico",
|
||||
"NOT": "No lógico",
|
||||
"MATCH": "Coincidir con todas las solicitudes"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Agregar regla previa",
|
||||
"appendRule": "Agregar regla posterior"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Falta la condición de la regla",
|
||||
"invalidRule": "Regla no válida"
|
||||
"header": {
|
||||
"title": "Editar reglas"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Coincidir con el nombre de dominio completo",
|
||||
"DOMAIN-SUFFIX": "Coincidir con el sufijo del nombre de dominio",
|
||||
"DOMAIN-KEYWORD": "Coincidir con la palabra clave del nombre de dominio",
|
||||
"DOMAIN-REGEX": "Coincidir con la expresión regular del nombre de dominio",
|
||||
"GEOSITE": "Coincidir con los nombres de dominio en Geosite",
|
||||
"GEOIP": "Coincidir con el código de país del IP",
|
||||
"SRC-GEOIP": "Coincidir con el código de país del IP de origen",
|
||||
"IP-ASN": "Coincidir con el ASN del IP",
|
||||
"SRC-IP-ASN": "Coincidir con el ASN del IP de origen",
|
||||
"IP-CIDR": "Coincidir con el rango de direcciones IP",
|
||||
"IP-CIDR6": "Coincidir con el rango de direcciones IP",
|
||||
"SRC-IP-CIDR": "Coincidir con el rango de direcciones IP de origen",
|
||||
"IP-SUFFIX": "Coincidir con el rango de sufijos de IP",
|
||||
"SRC-IP-SUFFIX": "Coincidir con el rango de sufijos de IP de origen",
|
||||
"SRC-PORT": "Coincidir con el rango de puertos de origen de la solicitud",
|
||||
"DST-PORT": "Coincidir con el rango de puertos de destino de la solicitud",
|
||||
"IN-PORT": "Coincidir con el puerto de entrada",
|
||||
"DSCP": "Etiqueta DSCP (solo para entradas UDP TPROXY)",
|
||||
"PROCESS-NAME": "Coincidir con el nombre del proceso (nombre del paquete de Android)",
|
||||
"PROCESS-PATH": "Coincidir con la ruta completa del proceso",
|
||||
"PROCESS-NAME-REGEX": "Coincidir con el nombre completo del proceso mediante expresiones regulares (nombre del paquete de Android)",
|
||||
"PROCESS-PATH-REGEX": "Coincidir con la ruta completa del proceso mediante expresiones regulares",
|
||||
"NETWORK": "Coincidir con el protocolo de transporte (TCP/UDP)",
|
||||
"UID": "Coincidir con el ID de usuario de Linux",
|
||||
"IN-TYPE": "Coincidir con el tipo de entrada",
|
||||
"IN-USER": "Coincidir con el nombre de usuario de entrada",
|
||||
"IN-NAME": "Coincidir con el nombre de entrada",
|
||||
"SUB-RULE": "Subregla",
|
||||
"RULE-SET": "Coincidir con el conjunto de reglas",
|
||||
"AND": "Y lógico",
|
||||
"OR": "O lógico",
|
||||
"NOT": "No lógico",
|
||||
"MATCH": "Coincidir con todas las solicitudes"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Hogar",
|
||||
"tooltips": {
|
||||
"lightweightMode": "Modo ligero",
|
||||
"manual": "Manual de uso",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Modo de proxy"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Configuración de la página de inicio",
|
||||
"cards": {
|
||||
"profile": "Tarjeta de suscripción",
|
||||
"currentProxy": "Tarjeta de proxy actual",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "Tarjeta de información de IP",
|
||||
"clashInfo": "Tarjetas de información de Clash",
|
||||
"systemInfo": "Tarjetas de información del sistema"
|
||||
},
|
||||
"header": {
|
||||
"title": "Configuración de la página de inicio"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Hogar"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "El proxy del sistema está habilitado. Sus aplicaciones accederán a Internet a través del proxy.",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Prueba de desbloqueo",
|
||||
"actions": {
|
||||
"testing": "Probando..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Prueba de desbloqueo"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "گروههای پراکسی",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "بهروزرسانی همه",
|
||||
"update": "بهروزرسانی"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "حالت مستقیم"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "گروههای پراکسی",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "انتخاب پروکسی به صورت دستی",
|
||||
"url-test": "انتخاب پروکسی بر اساس تأخیر آزمایش URL",
|
||||
"fallback": "تعویض به پروکسی دیگر در صورت بروز خطا",
|
||||
"load-balance": "توزیع پراکسی بر اساس توازن بار",
|
||||
"relay": "عبور از زنجیره پروکسی تعریف شده"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "دادهها به صورت مستقیم خروجی میشوند",
|
||||
"REJECT": "درخواستها را متوقف میکند",
|
||||
"REJECT-DROP": "درخواستها را نادیده میگیرد",
|
||||
"PASS": "این قانون را در صورت تطابق نادیده میگیرد"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "انتخاب پروکسی به صورت دستی",
|
||||
"url-test": "انتخاب پروکسی بر اساس تأخیر آزمایش URL",
|
||||
"fallback": "تعویض به پروکسی دیگر در صورت بروز خطا",
|
||||
"load-balance": "توزیع پراکسی بر اساس توازن بار",
|
||||
"relay": "عبور از زنجیره پروکسی تعریف شده"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "دادهها به صورت مستقیم خروجی میشوند",
|
||||
"REJECT": "درخواستها را متوقف میکند",
|
||||
"REJECT-DROP": "درخواستها را نادیده میگیرد",
|
||||
"PASS": "این قانون را در صورت تطابق نادیده میگیرد"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "اتصالات",
|
||||
"summary": {
|
||||
"downloaded": "دانلود شده",
|
||||
"uploaded": "بارگذاری شده"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "توقف",
|
||||
"resume": "از سرگیری",
|
||||
"closeAll": "بستن همه"
|
||||
},
|
||||
"header": {
|
||||
"title": "اتصالات"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "میزبان",
|
||||
"downloaded": "دانلود شده",
|
||||
"uploaded": "بارگذاری شده",
|
||||
"dlSpeed": "سرعت دانلود",
|
||||
"ulSpeed": "سرعت بارگذاری",
|
||||
"chains": "زنجیرهها",
|
||||
"rule": "قانون",
|
||||
"process": "فرآیند",
|
||||
"time": "زمان",
|
||||
"source": "منبع",
|
||||
"destination": "آدرس IP مقصد",
|
||||
"destinationPort": "بندر هدف",
|
||||
"type": "نوع"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "سرعت بارگذاری",
|
||||
"downloadSpeed": "سرعت دانلود"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "بستن اتصال"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "میزبان",
|
||||
"downloaded": "دانلود شده",
|
||||
"uploaded": "بارگذاری شده",
|
||||
"dlSpeed": "سرعت دانلود",
|
||||
"ulSpeed": "سرعت بارگذاری",
|
||||
"chains": "زنجیرهها",
|
||||
"rule": "قانون",
|
||||
"process": "فرآیند",
|
||||
"time": "زمان",
|
||||
"source": "منبع",
|
||||
"destination": "آدرس IP مقصد",
|
||||
"destinationPort": "بندر هدف",
|
||||
"type": "نوع"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "سرعت بارگذاری",
|
||||
"downloadSpeed": "سرعت دانلود"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "بستن اتصال"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "آزمون"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "ایجاد آزمون",
|
||||
"edit": "ویرایش آزمون"
|
||||
},
|
||||
"fields": {
|
||||
"url": "آدرس آزمون"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "آزمون",
|
||||
"actions": {
|
||||
"testAll": "آزمون همه"
|
||||
},
|
||||
"header": {
|
||||
"title": "آزمون"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "آزمون"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "ایجاد آزمون",
|
||||
"edit": "ویرایش آزمون"
|
||||
},
|
||||
"fields": {
|
||||
"url": "آدرس آزمون"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "لاگها",
|
||||
"actions": {
|
||||
"pause": "توقف",
|
||||
"resume": "از سرگیری",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "لاگها"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "قوانین",
|
||||
"provider": {
|
||||
"trigger": "تأمینکننده قانون",
|
||||
"dialogTitle": "تأمینکننده قانون",
|
||||
"actions": {
|
||||
"updateAll": "بهروزرسانی همه",
|
||||
"update": "بهروزرسانی"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "قوانین"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "ویرایش قوانین",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "نوع قانون",
|
||||
"content": "محتوای قانون",
|
||||
"proxyPolicy": "سیاست پروکسی"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "نوع قانون",
|
||||
"content": "محتوای قانون",
|
||||
"proxyPolicy": "سیاست پروکسی"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "بدون حل"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "اضافه کردن قانون به ابتدا",
|
||||
"appendRule": "اضافه کردن قانون به انتها"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "شرط قانون الزامی است",
|
||||
"invalidRule": "قانون نامعتبر"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "بدون حل"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "مطابقت با نام کامل دامنه",
|
||||
"DOMAIN-SUFFIX": "مطابقت با پسوند دامنه",
|
||||
"DOMAIN-KEYWORD": "مطابقت با کلمه کلیدی دامنه",
|
||||
"DOMAIN-REGEX": "مطابقت با دامنه با استفاده از عبارات منظم",
|
||||
"GEOSITE": "مطابقت با دامنههای درون Geosite",
|
||||
"GEOIP": "مطابقت با کد کشور IP",
|
||||
"SRC-GEOIP": "مطابقت با کد کشور IP مبدا",
|
||||
"IP-ASN": "مطابقت با ASN آدرس IP",
|
||||
"SRC-IP-ASN": "مطابقت با ASN آدرس IP مبدا",
|
||||
"IP-CIDR": "مطابقت با محدوده آدرس IP",
|
||||
"IP-CIDR6": "مطابقت با محدوده آدرس IPv6",
|
||||
"SRC-IP-CIDR": "مطابقت با محدوده آدرس IP مبدا",
|
||||
"IP-SUFFIX": "مطابقت با محدوده پسوند آدرس IP",
|
||||
"SRC-IP-SUFFIX": "مطابقت با محدوده پسوند آدرس IP مبدا",
|
||||
"SRC-PORT": "مطابقت با محدوده پورت مبدا",
|
||||
"DST-PORT": "مطابقت با محدوده پورت مقصد",
|
||||
"IN-PORT": "مطابقت با پورت ورودی",
|
||||
"DSCP": "علامتگذاری DSCP (فقط برای tproxy UDP ورودی)",
|
||||
"PROCESS-NAME": "مطابقت با نام فرآیند (نام بسته Android)",
|
||||
"PROCESS-PATH": "مطابقت با مسیر کامل فرآیند",
|
||||
"PROCESS-NAME-REGEX": "مطابقت با نام فرآیند با استفاده از عبارات منظم (نام بسته Android)",
|
||||
"PROCESS-PATH-REGEX": "مطابقت با مسیر کامل فرآیند با استفاده از عبارات منظم",
|
||||
"NETWORK": "مطابقت با پروتکل انتقال (tcp/udp)",
|
||||
"UID": "مطابقت با شناسه کاربری Linux",
|
||||
"IN-TYPE": "مطابقت با نوع ورودی",
|
||||
"IN-USER": "مطابقت با نام کاربری ورودی",
|
||||
"IN-NAME": "مطابقت با نام ورودی",
|
||||
"SUB-RULE": "قانون فرعی",
|
||||
"RULE-SET": "مطابقت با مجموعه قوانین",
|
||||
"AND": "منطق AND",
|
||||
"OR": "منطق OR",
|
||||
"NOT": "منطق NOT",
|
||||
"MATCH": "مطابقت با تمام درخواستها"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "اضافه کردن قانون به ابتدا",
|
||||
"appendRule": "اضافه کردن قانون به انتها"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "شرط قانون الزامی است",
|
||||
"invalidRule": "قانون نامعتبر"
|
||||
"header": {
|
||||
"title": "ویرایش قوانین"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "مطابقت با نام کامل دامنه",
|
||||
"DOMAIN-SUFFIX": "مطابقت با پسوند دامنه",
|
||||
"DOMAIN-KEYWORD": "مطابقت با کلمه کلیدی دامنه",
|
||||
"DOMAIN-REGEX": "مطابقت با دامنه با استفاده از عبارات منظم",
|
||||
"GEOSITE": "مطابقت با دامنههای درون Geosite",
|
||||
"GEOIP": "مطابقت با کد کشور IP",
|
||||
"SRC-GEOIP": "مطابقت با کد کشور IP مبدا",
|
||||
"IP-ASN": "مطابقت با ASN آدرس IP",
|
||||
"SRC-IP-ASN": "مطابقت با ASN آدرس IP مبدا",
|
||||
"IP-CIDR": "مطابقت با محدوده آدرس IP",
|
||||
"IP-CIDR6": "مطابقت با محدوده آدرس IPv6",
|
||||
"SRC-IP-CIDR": "مطابقت با محدوده آدرس IP مبدا",
|
||||
"IP-SUFFIX": "مطابقت با محدوده پسوند آدرس IP",
|
||||
"SRC-IP-SUFFIX": "مطابقت با محدوده پسوند آدرس IP مبدا",
|
||||
"SRC-PORT": "مطابقت با محدوده پورت مبدا",
|
||||
"DST-PORT": "مطابقت با محدوده پورت مقصد",
|
||||
"IN-PORT": "مطابقت با پورت ورودی",
|
||||
"DSCP": "علامتگذاری DSCP (فقط برای tproxy UDP ورودی)",
|
||||
"PROCESS-NAME": "مطابقت با نام فرآیند (نام بسته Android)",
|
||||
"PROCESS-PATH": "مطابقت با مسیر کامل فرآیند",
|
||||
"PROCESS-NAME-REGEX": "مطابقت با نام فرآیند با استفاده از عبارات منظم (نام بسته Android)",
|
||||
"PROCESS-PATH-REGEX": "مطابقت با مسیر کامل فرآیند با استفاده از عبارات منظم",
|
||||
"NETWORK": "مطابقت با پروتکل انتقال (tcp/udp)",
|
||||
"UID": "مطابقت با شناسه کاربری Linux",
|
||||
"IN-TYPE": "مطابقت با نوع ورودی",
|
||||
"IN-USER": "مطابقت با نام کاربری ورودی",
|
||||
"IN-NAME": "مطابقت با نام ورودی",
|
||||
"SUB-RULE": "قانون فرعی",
|
||||
"RULE-SET": "مطابقت با مجموعه قوانین",
|
||||
"AND": "منطق AND",
|
||||
"OR": "منطق OR",
|
||||
"NOT": "منطق NOT",
|
||||
"MATCH": "مطابقت با تمام درخواستها"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Home",
|
||||
"tooltips": {
|
||||
"lightweightMode": "در فارسی",
|
||||
"manual": "راهنما",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Proxy Mode"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Home Settings",
|
||||
"cards": {
|
||||
"profile": "Profile Card",
|
||||
"currentProxy": "Current Proxy Card",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP Information Card",
|
||||
"clashInfo": "Clash Info Cards",
|
||||
"systemInfo": "System Info Cards"
|
||||
},
|
||||
"header": {
|
||||
"title": "Home Settings"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Home"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Unlock Test",
|
||||
"actions": {
|
||||
"testing": "Testing..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Unlock Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "Grup Proksi",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "Perbarui Semua",
|
||||
"update": "Perbarui"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Mode Langsung"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "Grup Proksi",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Pilih proksi secara manual",
|
||||
"url-test": "Pilih proksi berdasarkan keterlambatan tes URL",
|
||||
"fallback": "Beralih ke proksi lain saat terjadi kesalahan",
|
||||
"load-balance": "Distribusikan proksi berdasarkan penyeimbangan beban",
|
||||
"relay": "Lewatkan melalui rantai proksi yang ditentukan"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Data langsung keluar",
|
||||
"REJECT": "Mencegat permintaan",
|
||||
"REJECT-DROP": "Membuang permintaan",
|
||||
"PASS": "Lewati aturan ini saat cocok"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Pilih proksi secara manual",
|
||||
"url-test": "Pilih proksi berdasarkan keterlambatan tes URL",
|
||||
"fallback": "Beralih ke proksi lain saat terjadi kesalahan",
|
||||
"load-balance": "Distribusikan proksi berdasarkan penyeimbangan beban",
|
||||
"relay": "Lewatkan melalui rantai proksi yang ditentukan"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Data langsung keluar",
|
||||
"REJECT": "Mencegat permintaan",
|
||||
"REJECT-DROP": "Membuang permintaan",
|
||||
"PASS": "Lewati aturan ini saat cocok"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "Koneksi",
|
||||
"summary": {
|
||||
"downloaded": "Diunduh",
|
||||
"uploaded": "Diunggah"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "Jeda",
|
||||
"resume": "Lanjut",
|
||||
"closeAll": "Tutup Semua"
|
||||
},
|
||||
"header": {
|
||||
"title": "Koneksi"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Diunduh",
|
||||
"uploaded": "Diunggah",
|
||||
"dlSpeed": "Kecepatan Unduh",
|
||||
"ulSpeed": "Kecepatan Unggah",
|
||||
"chains": "Rantai",
|
||||
"rule": "Aturan",
|
||||
"process": "Proses",
|
||||
"time": "Waktu",
|
||||
"source": "Sumber",
|
||||
"destination": "IP Tujuan",
|
||||
"destinationPort": "Port Tujuan",
|
||||
"type": "Jenis"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Kecepatan Unggah",
|
||||
"downloadSpeed": "Kecepatan Unduh"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Tutup Koneksi"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "Host",
|
||||
"downloaded": "Diunduh",
|
||||
"uploaded": "Diunggah",
|
||||
"dlSpeed": "Kecepatan Unduh",
|
||||
"ulSpeed": "Kecepatan Unggah",
|
||||
"chains": "Rantai",
|
||||
"rule": "Aturan",
|
||||
"process": "Proses",
|
||||
"time": "Waktu",
|
||||
"source": "Sumber",
|
||||
"destination": "IP Tujuan",
|
||||
"destinationPort": "Port Tujuan",
|
||||
"type": "Jenis"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Kecepatan Unggah",
|
||||
"downloadSpeed": "Kecepatan Unduh"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Tutup Koneksi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Tes"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Buat Tes",
|
||||
"edit": "Ubah Tes"
|
||||
},
|
||||
"fields": {
|
||||
"url": "URL Tes"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "Tes",
|
||||
"actions": {
|
||||
"testAll": "Tes Semua"
|
||||
},
|
||||
"header": {
|
||||
"title": "Tes"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Tes"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "Buat Tes",
|
||||
"edit": "Ubah Tes"
|
||||
},
|
||||
"fields": {
|
||||
"url": "URL Tes"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "Log",
|
||||
"actions": {
|
||||
"pause": "Jeda",
|
||||
"resume": "Lanjut",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "Log"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "Aturan",
|
||||
"provider": {
|
||||
"trigger": "Penyedia Aturan",
|
||||
"dialogTitle": "Penyedia Aturan",
|
||||
"actions": {
|
||||
"updateAll": "Perbarui Semua",
|
||||
"update": "Perbarui"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Aturan"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "Ubah Aturan",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Jenis Aturan",
|
||||
"content": "Konten Aturan",
|
||||
"proxyPolicy": "Kebijakan Proksi"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Jenis Aturan",
|
||||
"content": "Konten Aturan",
|
||||
"proxyPolicy": "Kebijakan Proksi"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Tidak Menyelesaikan"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Tambahkan Aturan di Awal",
|
||||
"appendRule": "Tambahkan Aturan di Akhir"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Kondisi Aturan Diperlukan",
|
||||
"invalidRule": "Aturan Tidak Valid"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Tidak Menyelesaikan"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Cocok dengan nama domain lengkap",
|
||||
"DOMAIN-SUFFIX": "Cocok dengan sufiks domain",
|
||||
"DOMAIN-KEYWORD": "Cocok dengan kata kunci domain",
|
||||
"DOMAIN-REGEX": "Cocok dengan domain menggunakan ekspresi reguler",
|
||||
"GEOSITE": "Cocok dengan domain dalam Geosite",
|
||||
"GEOIP": "Cocok dengan kode negara alamat IP",
|
||||
"SRC-GEOIP": "Cocok dengan kode negara alamat IP sumber",
|
||||
"IP-ASN": "Cocok dengan ASN alamat IP",
|
||||
"SRC-IP-ASN": "Cocok dengan ASN alamat IP sumber",
|
||||
"IP-CIDR": "Cocok dengan rentang alamat IP",
|
||||
"IP-CIDR6": "Cocok dengan rentang alamat IPv6",
|
||||
"SRC-IP-CIDR": "Cocok dengan rentang alamat IP sumber",
|
||||
"IP-SUFFIX": "Cocok dengan rentang sufiks alamat IP",
|
||||
"SRC-IP-SUFFIX": "Cocok dengan rentang sufiks alamat IP sumber",
|
||||
"SRC-PORT": "Cocok dengan rentang port sumber",
|
||||
"DST-PORT": "Cocok dengan rentang port tujuan",
|
||||
"IN-PORT": "Cocok dengan port masuk",
|
||||
"DSCP": "Penandaan DSCP (hanya untuk tproxy UDP masuk)",
|
||||
"PROCESS-NAME": "Cocok dengan nama proses (nama paket Android)",
|
||||
"PROCESS-PATH": "Cocok dengan jalur proses lengkap",
|
||||
"PROCESS-NAME-REGEX": "Cocok dengan nama proses lengkap menggunakan ekspresi reguler (nama paket Android)",
|
||||
"PROCESS-PATH-REGEX": "Cocok dengan jalur proses lengkap menggunakan ekspresi reguler",
|
||||
"NETWORK": "Cocok dengan protokol transportasi (tcp/udp)",
|
||||
"UID": "Cocok dengan ID PENGGUNA Linux",
|
||||
"IN-TYPE": "Cocok dengan jenis masuk",
|
||||
"IN-USER": "Cocok dengan nama pengguna masuk",
|
||||
"IN-NAME": "Cocok dengan nama masuk",
|
||||
"SUB-RULE": "Sub-aturan",
|
||||
"RULE-SET": "Cocok dengan set aturan",
|
||||
"AND": "Logika DAN",
|
||||
"OR": "Logika ATAU",
|
||||
"NOT": "Logika TIDAK",
|
||||
"MATCH": "Cocok dengan semua permintaan"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Tambahkan Aturan di Awal",
|
||||
"appendRule": "Tambahkan Aturan di Akhir"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Kondisi Aturan Diperlukan",
|
||||
"invalidRule": "Aturan Tidak Valid"
|
||||
"header": {
|
||||
"title": "Ubah Aturan"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Cocok dengan nama domain lengkap",
|
||||
"DOMAIN-SUFFIX": "Cocok dengan sufiks domain",
|
||||
"DOMAIN-KEYWORD": "Cocok dengan kata kunci domain",
|
||||
"DOMAIN-REGEX": "Cocok dengan domain menggunakan ekspresi reguler",
|
||||
"GEOSITE": "Cocok dengan domain dalam Geosite",
|
||||
"GEOIP": "Cocok dengan kode negara alamat IP",
|
||||
"SRC-GEOIP": "Cocok dengan kode negara alamat IP sumber",
|
||||
"IP-ASN": "Cocok dengan ASN alamat IP",
|
||||
"SRC-IP-ASN": "Cocok dengan ASN alamat IP sumber",
|
||||
"IP-CIDR": "Cocok dengan rentang alamat IP",
|
||||
"IP-CIDR6": "Cocok dengan rentang alamat IPv6",
|
||||
"SRC-IP-CIDR": "Cocok dengan rentang alamat IP sumber",
|
||||
"IP-SUFFIX": "Cocok dengan rentang sufiks alamat IP",
|
||||
"SRC-IP-SUFFIX": "Cocok dengan rentang sufiks alamat IP sumber",
|
||||
"SRC-PORT": "Cocok dengan rentang port sumber",
|
||||
"DST-PORT": "Cocok dengan rentang port tujuan",
|
||||
"IN-PORT": "Cocok dengan port masuk",
|
||||
"DSCP": "Penandaan DSCP (hanya untuk tproxy UDP masuk)",
|
||||
"PROCESS-NAME": "Cocok dengan nama proses (nama paket Android)",
|
||||
"PROCESS-PATH": "Cocok dengan jalur proses lengkap",
|
||||
"PROCESS-NAME-REGEX": "Cocok dengan nama proses lengkap menggunakan ekspresi reguler (nama paket Android)",
|
||||
"PROCESS-PATH-REGEX": "Cocok dengan jalur proses lengkap menggunakan ekspresi reguler",
|
||||
"NETWORK": "Cocok dengan protokol transportasi (tcp/udp)",
|
||||
"UID": "Cocok dengan ID PENGGUNA Linux",
|
||||
"IN-TYPE": "Cocok dengan jenis masuk",
|
||||
"IN-USER": "Cocok dengan nama pengguna masuk",
|
||||
"IN-NAME": "Cocok dengan nama masuk",
|
||||
"SUB-RULE": "Sub-aturan",
|
||||
"RULE-SET": "Cocok dengan set aturan",
|
||||
"AND": "Logika DAN",
|
||||
"OR": "Logika ATAU",
|
||||
"NOT": "Logika TIDAK",
|
||||
"MATCH": "Cocok dengan semua permintaan"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Home",
|
||||
"tooltips": {
|
||||
"lightweightMode": "Mode Ringan",
|
||||
"manual": "Manual",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Proxy Mode"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Home Settings",
|
||||
"cards": {
|
||||
"profile": "Profile Card",
|
||||
"currentProxy": "Current Proxy Card",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP Information Card",
|
||||
"clashInfo": "Clash Info Cards",
|
||||
"systemInfo": "System Info Cards"
|
||||
},
|
||||
"header": {
|
||||
"title": "Home Settings"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Home"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Unlock Test",
|
||||
"actions": {
|
||||
"testing": "Testing..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Unlock Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "プロキシグループ",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "すべて更新",
|
||||
"update": "更新"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "直接接続モード"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "プロキシグループ",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "手動でプロキシを選択",
|
||||
"url-test": "URLテストによる遅延でプロキシを選択",
|
||||
"fallback": "利用不可の場合は別のプロキシに切り替える",
|
||||
"load-balance": "負荷分散によりプロキシを割り当てる",
|
||||
"relay": "定義されたプロキシチェーンに沿って転送する"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "直接接続",
|
||||
"REJECT": "リクエストを拒否",
|
||||
"REJECT-DROP": "リクエストを破棄",
|
||||
"PASS": "このルールをスキップ"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "手動でプロキシを選択",
|
||||
"url-test": "URLテストによる遅延でプロキシを選択",
|
||||
"fallback": "利用不可の場合は別のプロキシに切り替える",
|
||||
"load-balance": "負荷分散によりプロキシを割り当てる",
|
||||
"relay": "定義されたプロキシチェーンに沿って転送する"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "直接接続",
|
||||
"REJECT": "リクエストを拒否",
|
||||
"REJECT-DROP": "リクエストを破棄",
|
||||
"PASS": "このルールをスキップ"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "接続",
|
||||
"summary": {
|
||||
"downloaded": "ダウンロード量",
|
||||
"uploaded": "アップロード量"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "一時停止",
|
||||
"resume": "再開",
|
||||
"closeAll": "すべて閉じる"
|
||||
},
|
||||
"header": {
|
||||
"title": "接続"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "ホスト",
|
||||
"downloaded": "ダウンロード量",
|
||||
"uploaded": "アップロード量",
|
||||
"dlSpeed": "ダウンロード速度",
|
||||
"ulSpeed": "アップロード速度",
|
||||
"chains": "チェーン",
|
||||
"rule": "ルール",
|
||||
"process": "プロセス",
|
||||
"time": "接続時間",
|
||||
"source": "送信元アドレス",
|
||||
"destination": "宛先アドレス",
|
||||
"destinationPort": "宛先ポート",
|
||||
"type": "タイプ"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "アップロード速度",
|
||||
"downloadSpeed": "ダウンロード速度"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "接続を閉じる"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "ホスト",
|
||||
"downloaded": "ダウンロード量",
|
||||
"uploaded": "アップロード量",
|
||||
"dlSpeed": "ダウンロード速度",
|
||||
"ulSpeed": "アップロード速度",
|
||||
"chains": "チェーン",
|
||||
"rule": "ルール",
|
||||
"process": "プロセス",
|
||||
"time": "接続時間",
|
||||
"source": "送信元アドレス",
|
||||
"destination": "宛先アドレス",
|
||||
"destinationPort": "宛先ポート",
|
||||
"type": "タイプ"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "アップロード速度",
|
||||
"downloadSpeed": "ダウンロード速度"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "接続を閉じる"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "テスト"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新規テストを作成",
|
||||
"edit": "テストを編集"
|
||||
},
|
||||
"fields": {
|
||||
"url": "テストURL"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "テスト",
|
||||
"actions": {
|
||||
"testAll": "すべてテスト"
|
||||
},
|
||||
"header": {
|
||||
"title": "テスト"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "検査待ち",
|
||||
"yes": "サポートする",
|
||||
"no": "サポートしない",
|
||||
"failed": "テストに失敗しました。",
|
||||
"completed": "検査完了",
|
||||
"disallowedIsp": "許可されていないインターネットサービスプロバイダー",
|
||||
"originalsOnly": "オリジナルのみ",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "サポートされていない国/地域",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "テスト"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "新規テストを作成",
|
||||
"edit": "テストを編集"
|
||||
},
|
||||
"fields": {
|
||||
"url": "テストURL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "検査待ち",
|
||||
"yes": "サポートする",
|
||||
"no": "サポートしない",
|
||||
"failed": "テストに失敗しました。",
|
||||
"completed": "検査完了",
|
||||
"disallowedIsp": "許可されていないインターネットサービスプロバイダー",
|
||||
"originalsOnly": "オリジナルのみ",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "サポートされていない国/地域",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "ログ",
|
||||
"actions": {
|
||||
"pause": "一時停止",
|
||||
"resume": "再開",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "ログ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "ルール",
|
||||
"provider": {
|
||||
"trigger": "ルールプロバイダー",
|
||||
"dialogTitle": "ルールプロバイダー",
|
||||
"actions": {
|
||||
"updateAll": "すべて更新",
|
||||
"update": "更新"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "ルール"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "ルールを編集",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "ルールタイプ",
|
||||
"content": "ルール内容",
|
||||
"proxyPolicy": "プロキシポリシー"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "ルールタイプ",
|
||||
"content": "ルール内容",
|
||||
"proxyPolicy": "プロキシポリシー"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "DNS解決をスキップ"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "前置ルールを追加",
|
||||
"appendRule": "後置ルールを追加"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "ルール条件が必要です",
|
||||
"invalidRule": "無効なルール"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "DNS解決をスキップ"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "完全なドメイン名を一致させる",
|
||||
"DOMAIN-SUFFIX": "ドメインサフィックスを一致させる",
|
||||
"DOMAIN-KEYWORD": "ドメインキーワードを一致させる",
|
||||
"DOMAIN-REGEX": "ドメイン正規表現を一致させる",
|
||||
"GEOSITE": "Geosite内のドメインを一致させる",
|
||||
"GEOIP": "IPの所属国コードを一致させる",
|
||||
"SRC-GEOIP": "送信元IPの所属国コードを一致させる",
|
||||
"IP-ASN": "IPの所属ASNを一致させる",
|
||||
"SRC-IP-ASN": "送信元IPの所属ASNを一致させる",
|
||||
"IP-CIDR": "IPアドレス範囲を一致させる",
|
||||
"IP-CIDR6": "IPアドレス範囲を一致させる",
|
||||
"SRC-IP-CIDR": "送信元IPアドレス範囲を一致させる",
|
||||
"IP-SUFFIX": "IPサフィックス範囲を一致させる",
|
||||
"SRC-IP-SUFFIX": "送信元IPサフィックス範囲を一致させる",
|
||||
"SRC-PORT": "送信元ポート範囲を一致させる",
|
||||
"DST-PORT": "宛先ポート範囲を一致させる",
|
||||
"IN-PORT": "入力ポートを一致させる",
|
||||
"DSCP": "DSCPマーク(TPROXY UDP入力のみ)",
|
||||
"PROCESS-NAME": "プロセス名を一致させる(Androidパッケージ名)",
|
||||
"PROCESS-PATH": "完全なプロセスパスを一致させる",
|
||||
"PROCESS-NAME-REGEX": "完全なプロセス名を正規表現で一致させる(Androidパッケージ名)",
|
||||
"PROCESS-PATH-REGEX": "完全なプロセスパスを正規表現で一致させる",
|
||||
"NETWORK": "トランスポートプロトコルを一致させる (TCP/UDP)",
|
||||
"UID": "LinuxユーザーIDを一致させる",
|
||||
"IN-TYPE": "入力タイプを一致させる",
|
||||
"IN-USER": "入力ユーザー名を一致させる",
|
||||
"IN-NAME": "入力名を一致させる",
|
||||
"SUB-RULE": "サブルール",
|
||||
"RULE-SET": "ルールセットを一致させる",
|
||||
"AND": "論理積",
|
||||
"OR": "論理和",
|
||||
"NOT": "論理否定",
|
||||
"MATCH": "すべてのリクエストを一致させる"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "前置ルールを追加",
|
||||
"appendRule": "後置ルールを追加"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "ルール条件が必要です",
|
||||
"invalidRule": "無効なルール"
|
||||
"header": {
|
||||
"title": "ルールを編集"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "完全なドメイン名を一致させる",
|
||||
"DOMAIN-SUFFIX": "ドメインサフィックスを一致させる",
|
||||
"DOMAIN-KEYWORD": "ドメインキーワードを一致させる",
|
||||
"DOMAIN-REGEX": "ドメイン正規表現を一致させる",
|
||||
"GEOSITE": "Geosite内のドメインを一致させる",
|
||||
"GEOIP": "IPの所属国コードを一致させる",
|
||||
"SRC-GEOIP": "送信元IPの所属国コードを一致させる",
|
||||
"IP-ASN": "IPの所属ASNを一致させる",
|
||||
"SRC-IP-ASN": "送信元IPの所属ASNを一致させる",
|
||||
"IP-CIDR": "IPアドレス範囲を一致させる",
|
||||
"IP-CIDR6": "IPアドレス範囲を一致させる",
|
||||
"SRC-IP-CIDR": "送信元IPアドレス範囲を一致させる",
|
||||
"IP-SUFFIX": "IPサフィックス範囲を一致させる",
|
||||
"SRC-IP-SUFFIX": "送信元IPサフィックス範囲を一致させる",
|
||||
"SRC-PORT": "送信元ポート範囲を一致させる",
|
||||
"DST-PORT": "宛先ポート範囲を一致させる",
|
||||
"IN-PORT": "入力ポートを一致させる",
|
||||
"DSCP": "DSCPマーク(TPROXY UDP入力のみ)",
|
||||
"PROCESS-NAME": "プロセス名を一致させる(Androidパッケージ名)",
|
||||
"PROCESS-PATH": "完全なプロセスパスを一致させる",
|
||||
"PROCESS-NAME-REGEX": "完全なプロセス名を正規表現で一致させる(Androidパッケージ名)",
|
||||
"PROCESS-PATH-REGEX": "完全なプロセスパスを正規表現で一致させる",
|
||||
"NETWORK": "トランスポートプロトコルを一致させる (TCP/UDP)",
|
||||
"UID": "LinuxユーザーIDを一致させる",
|
||||
"IN-TYPE": "入力タイプを一致させる",
|
||||
"IN-USER": "入力ユーザー名を一致させる",
|
||||
"IN-NAME": "入力名を一致させる",
|
||||
"SUB-RULE": "サブルール",
|
||||
"RULE-SET": "ルールセットを一致させる",
|
||||
"AND": "論理積",
|
||||
"OR": "論理和",
|
||||
"NOT": "論理否定",
|
||||
"MATCH": "すべてのリクエストを一致させる"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "ホーム",
|
||||
"tooltips": {
|
||||
"lightweightMode": "軽量モード",
|
||||
"manual": "マニュアル",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "プロキシモード"
|
||||
},
|
||||
"settings": {
|
||||
"title": "ホーム設定",
|
||||
"cards": {
|
||||
"profile": "プロファイルカード",
|
||||
"currentProxy": "現在のプロキシカード",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP情報カード",
|
||||
"clashInfo": "Clash情報カード",
|
||||
"systemInfo": "システム情報カード"
|
||||
},
|
||||
"header": {
|
||||
"title": "ホーム設定"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "ホーム"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "システムプロキシが有効になっています。アプリケーションはプロキシを通じてネットワークにアクセスします。",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "ロック解除テスト",
|
||||
"actions": {
|
||||
"testing": "テスト中..."
|
||||
},
|
||||
"empty": "アンロックテスト項目はありません",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "ロック解除テスト"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "프록시 그룹",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "모두 업데이트",
|
||||
"update": "업데이트"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Direct Mode"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "프록시 그룹",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "수동으로 프록시 선택",
|
||||
"url-test": "URL 테스트 지연을 기준으로 프록시 선택",
|
||||
"fallback": "오류 발생 시 다른 프록시로 전환",
|
||||
"load-balance": "부하 분산에 따라 프록시 분배",
|
||||
"relay": "정의된 프록시 체인을 통과"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "데이터가 직접 아웃바운드로 이동",
|
||||
"REJECT": "요청 차단",
|
||||
"REJECT-DROP": "요청 폐기",
|
||||
"PASS": "일치할 경우 이 규칙 건너뛰기"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "수동으로 프록시 선택",
|
||||
"url-test": "URL 테스트 지연을 기준으로 프록시 선택",
|
||||
"fallback": "오류 발생 시 다른 프록시로 전환",
|
||||
"load-balance": "부하 분산에 따라 프록시 분배",
|
||||
"relay": "정의된 프록시 체인을 통과"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "데이터가 직접 아웃바운드로 이동",
|
||||
"REJECT": "요청 차단",
|
||||
"REJECT-DROP": "요청 폐기",
|
||||
"PASS": "일치할 경우 이 규칙 건너뛰기"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "연결",
|
||||
"summary": {
|
||||
"downloaded": "다운로드됨",
|
||||
"uploaded": "업로드됨"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "일시 정지",
|
||||
"resume": "재개",
|
||||
"closeAll": "모두 닫기"
|
||||
},
|
||||
"header": {
|
||||
"title": "연결"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "호스트",
|
||||
"downloaded": "다운로드됨",
|
||||
"uploaded": "업로드됨",
|
||||
"dlSpeed": "다운로드 속도",
|
||||
"ulSpeed": "업로드 속도",
|
||||
"chains": "체인",
|
||||
"rule": "규칙",
|
||||
"process": "프로세스",
|
||||
"time": "시간",
|
||||
"source": "소스",
|
||||
"destination": "목적지",
|
||||
"destinationPort": "목적지 포트",
|
||||
"type": "유형"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "업로드 속도",
|
||||
"downloadSpeed": "다운로드 속도"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "연결 닫기"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "호스트",
|
||||
"downloaded": "다운로드됨",
|
||||
"uploaded": "업로드됨",
|
||||
"dlSpeed": "다운로드 속도",
|
||||
"ulSpeed": "업로드 속도",
|
||||
"chains": "체인",
|
||||
"rule": "규칙",
|
||||
"process": "프로세스",
|
||||
"time": "시간",
|
||||
"source": "소스",
|
||||
"destination": "목적지",
|
||||
"destinationPort": "목적지 포트",
|
||||
"type": "유형"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "업로드 속도",
|
||||
"downloadSpeed": "다운로드 속도"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "연결 닫기"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "테스트"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "테스트 생성",
|
||||
"edit": "테스트 편집"
|
||||
},
|
||||
"fields": {
|
||||
"url": "테스트 URL"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "테스트",
|
||||
"actions": {
|
||||
"testAll": "모두 테스트"
|
||||
},
|
||||
"header": {
|
||||
"title": "테스트"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "실패",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "테스트"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "테스트 생성",
|
||||
"edit": "테스트 편집"
|
||||
},
|
||||
"fields": {
|
||||
"url": "테스트 URL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "실패",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "로그",
|
||||
"actions": {
|
||||
"pause": "일시 정지",
|
||||
"resume": "재개",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "로그"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "규칙",
|
||||
"provider": {
|
||||
"trigger": "규칙 제공자",
|
||||
"dialogTitle": "규칙 제공자",
|
||||
"actions": {
|
||||
"updateAll": "모두 업데이트",
|
||||
"update": "업데이트"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "규칙"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "규칙 편집",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "규칙 유형",
|
||||
"content": "규칙 내용",
|
||||
"proxyPolicy": "프록시 정책"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "규칙 유형",
|
||||
"content": "규칙 내용",
|
||||
"proxyPolicy": "프록시 정책"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "해석 안함"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "규칙 앞에 추가",
|
||||
"appendRule": "규칙 뒤에 추가"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "규칙 조건 필요",
|
||||
"invalidRule": "잘못된 규칙"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "해석 안함"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "전체 도메인 이름과 일치",
|
||||
"DOMAIN-SUFFIX": "도메인 접미사와 일치",
|
||||
"DOMAIN-KEYWORD": "도메인 키워드와 일치",
|
||||
"DOMAIN-REGEX": "정규 표현식을 사용한 도메인 일치",
|
||||
"GEOSITE": "Geosite 내의 도메인과 일치",
|
||||
"GEOIP": "IP 주소의 국가 코드와 일치",
|
||||
"SRC-GEOIP": "소스 IP 주소의 국가 코드와 일치",
|
||||
"IP-ASN": "IP 주소의 ASN과 일치",
|
||||
"SRC-IP-ASN": "소스 IP 주소의 ASN과 일치",
|
||||
"IP-CIDR": "IP 주소 범위와 일치",
|
||||
"IP-CIDR6": "IPv6 주소 범위와 일치",
|
||||
"SRC-IP-CIDR": "소스 IP 주소 범위와 일치",
|
||||
"IP-SUFFIX": "IP 주소 접미사 범위와 일치",
|
||||
"SRC-IP-SUFFIX": "소스 IP 주소 접미사 범위와 일치",
|
||||
"SRC-PORT": "소스 포트 범위와 일치",
|
||||
"DST-PORT": "대상 포트 범위와 일치",
|
||||
"IN-PORT": "인바운드 포트와 일치",
|
||||
"DSCP": "DSCP 마킹(tproxy UDP 인바운드만 해당)",
|
||||
"PROCESS-NAME": "프로세스 이름과 일치(안드로이드 패키지 이름)",
|
||||
"PROCESS-PATH": "전체 프로세스 경로와 일치",
|
||||
"PROCESS-NAME-REGEX": "정규 표현식을 사용한 전체 프로세스 이름 일치(안드로이드 패키지 이름)",
|
||||
"PROCESS-PATH-REGEX": "정규 표현식을 사용한 전체 프로세스 경로 일치",
|
||||
"NETWORK": "전송 프로토콜과 일치(tcp/udp)",
|
||||
"UID": "Linux 사용자 ID와 일치",
|
||||
"IN-TYPE": "인바운드 유형과 일치",
|
||||
"IN-USER": "인바운드 사용자 이름과 일치",
|
||||
"IN-NAME": "인바운드 이름과 일치",
|
||||
"SUB-RULE": "하위 규칙",
|
||||
"RULE-SET": "규칙 세트와 일치",
|
||||
"AND": "논리 AND",
|
||||
"OR": "논리 OR",
|
||||
"NOT": "논리 NOT",
|
||||
"MATCH": "모든 요청과 일치"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "규칙 앞에 추가",
|
||||
"appendRule": "규칙 뒤에 추가"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "규칙 조건 필요",
|
||||
"invalidRule": "잘못된 규칙"
|
||||
"header": {
|
||||
"title": "규칙 편집"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "전체 도메인 이름과 일치",
|
||||
"DOMAIN-SUFFIX": "도메인 접미사와 일치",
|
||||
"DOMAIN-KEYWORD": "도메인 키워드와 일치",
|
||||
"DOMAIN-REGEX": "정규 표현식을 사용한 도메인 일치",
|
||||
"GEOSITE": "Geosite 내의 도메인과 일치",
|
||||
"GEOIP": "IP 주소의 국가 코드와 일치",
|
||||
"SRC-GEOIP": "소스 IP 주소의 국가 코드와 일치",
|
||||
"IP-ASN": "IP 주소의 ASN과 일치",
|
||||
"SRC-IP-ASN": "소스 IP 주소의 ASN과 일치",
|
||||
"IP-CIDR": "IP 주소 범위와 일치",
|
||||
"IP-CIDR6": "IPv6 주소 범위와 일치",
|
||||
"SRC-IP-CIDR": "소스 IP 주소 범위와 일치",
|
||||
"IP-SUFFIX": "IP 주소 접미사 범위와 일치",
|
||||
"SRC-IP-SUFFIX": "소스 IP 주소 접미사 범위와 일치",
|
||||
"SRC-PORT": "소스 포트 범위와 일치",
|
||||
"DST-PORT": "대상 포트 범위와 일치",
|
||||
"IN-PORT": "인바운드 포트와 일치",
|
||||
"DSCP": "DSCP 마킹(tproxy UDP 인바운드만 해당)",
|
||||
"PROCESS-NAME": "프로세스 이름과 일치(안드로이드 패키지 이름)",
|
||||
"PROCESS-PATH": "전체 프로세스 경로와 일치",
|
||||
"PROCESS-NAME-REGEX": "정규 표현식을 사용한 전체 프로세스 이름 일치(안드로이드 패키지 이름)",
|
||||
"PROCESS-PATH-REGEX": "정규 표현식을 사용한 전체 프로세스 경로 일치",
|
||||
"NETWORK": "전송 프로토콜과 일치(tcp/udp)",
|
||||
"UID": "Linux 사용자 ID와 일치",
|
||||
"IN-TYPE": "인바운드 유형과 일치",
|
||||
"IN-USER": "인바운드 사용자 이름과 일치",
|
||||
"IN-NAME": "인바운드 이름과 일치",
|
||||
"SUB-RULE": "하위 규칙",
|
||||
"RULE-SET": "규칙 세트와 일치",
|
||||
"AND": "논리 AND",
|
||||
"OR": "논리 OR",
|
||||
"NOT": "논리 NOT",
|
||||
"MATCH": "모든 요청과 일치"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "홈",
|
||||
"tooltips": {
|
||||
"lightweightMode": "Lightweight Mode",
|
||||
"manual": "Manual",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Proxy Mode"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Home Settings",
|
||||
"cards": {
|
||||
"profile": "Profile Card",
|
||||
"currentProxy": "Current Proxy Card",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP Information Card",
|
||||
"clashInfo": "Clash Info Cards",
|
||||
"systemInfo": "System Info Cards"
|
||||
},
|
||||
"header": {
|
||||
"title": "Home Settings"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "홈"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Unlock Test",
|
||||
"actions": {
|
||||
"testing": "테스트 중..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Unlock Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "Группы прокси",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "Обновить все",
|
||||
"update": "Обновить"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Прямой режим"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "Группы прокси",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Выбор прокси вручную",
|
||||
"url-test": "Выбор прокси на основе задержки теста URL",
|
||||
"fallback": "Переключение на другой прокси при ошибке",
|
||||
"load-balance": "Распределение прокси на основе балансировки нагрузки",
|
||||
"relay": "Передача через определенную цепочку прокси"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Данные направляются напрямую наружу",
|
||||
"REJECT": "Перехватывает запросы",
|
||||
"REJECT-DROP": "Отклоняет запросы",
|
||||
"PASS": "Пропускает это правило при совпадении"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Выбор прокси вручную",
|
||||
"url-test": "Выбор прокси на основе задержки теста URL",
|
||||
"fallback": "Переключение на другой прокси при ошибке",
|
||||
"load-balance": "Распределение прокси на основе балансировки нагрузки",
|
||||
"relay": "Передача через определенную цепочку прокси"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Данные направляются напрямую наружу",
|
||||
"REJECT": "Перехватывает запросы",
|
||||
"REJECT-DROP": "Отклоняет запросы",
|
||||
"PASS": "Пропускает это правило при совпадении"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "Соединения",
|
||||
"summary": {
|
||||
"downloaded": "Скачано",
|
||||
"uploaded": "Загружено"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "Пауза",
|
||||
"resume": "Возобновить",
|
||||
"closeAll": "Закрыть всё"
|
||||
},
|
||||
"header": {
|
||||
"title": "Соединения"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "Хост",
|
||||
"downloaded": "Скачано",
|
||||
"uploaded": "Загружено",
|
||||
"dlSpeed": "Скорость скачивания",
|
||||
"ulSpeed": "Скорость загрузки",
|
||||
"chains": "Цепочки",
|
||||
"rule": "Правило",
|
||||
"process": "Процесс",
|
||||
"time": "Время подключения",
|
||||
"source": "Исходный адрес",
|
||||
"destination": "IP-адрес назначения",
|
||||
"destinationPort": "Целевой порт",
|
||||
"type": "Тип"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Скорость загрузки",
|
||||
"downloadSpeed": "Скорость скачивания"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Закрыть соединение"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "Хост",
|
||||
"downloaded": "Скачано",
|
||||
"uploaded": "Загружено",
|
||||
"dlSpeed": "Скорость скачивания",
|
||||
"ulSpeed": "Скорость загрузки",
|
||||
"chains": "Цепочки",
|
||||
"rule": "Правило",
|
||||
"process": "Процесс",
|
||||
"time": "Время подключения",
|
||||
"source": "Исходный адрес",
|
||||
"destination": "IP-адрес назначения",
|
||||
"destinationPort": "Целевой порт",
|
||||
"type": "Тип"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Скорость загрузки",
|
||||
"downloadSpeed": "Скорость скачивания"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Закрыть соединение"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Тест"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Создать тест",
|
||||
"edit": "Редактировать тест"
|
||||
},
|
||||
"fields": {
|
||||
"url": "URL проверка"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "Тест",
|
||||
"actions": {
|
||||
"testAll": "Тестировать все"
|
||||
},
|
||||
"header": {
|
||||
"title": "Тест"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "В ожидании",
|
||||
"yes": "Да",
|
||||
"no": "Нет",
|
||||
"failed": "Ошибка",
|
||||
"completed": "Завершено",
|
||||
"disallowedIsp": "ISP заблокирован",
|
||||
"originalsOnly": "Только Originals",
|
||||
"noDisney": "Нет (IP забанен Disney+)",
|
||||
"unsupportedRegion": "Страна/регион не поддерживается",
|
||||
"failedNetwork": "Ошибка подключения"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Тест"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "Создать тест",
|
||||
"edit": "Редактировать тест"
|
||||
},
|
||||
"fields": {
|
||||
"url": "URL проверка"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "В ожидании",
|
||||
"yes": "Да",
|
||||
"no": "Нет",
|
||||
"failed": "Ошибка",
|
||||
"completed": "Завершено",
|
||||
"disallowedIsp": "ISP заблокирован",
|
||||
"originalsOnly": "Только Originals",
|
||||
"noDisney": "Нет (IP забанен Disney+)",
|
||||
"unsupportedRegion": "Страна/регион не поддерживается",
|
||||
"failedNetwork": "Ошибка подключения"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "Логи",
|
||||
"actions": {
|
||||
"pause": "Пауза",
|
||||
"resume": "Возобновить",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "Логи"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "Правила",
|
||||
"provider": {
|
||||
"trigger": "Провайдеры правил",
|
||||
"dialogTitle": "Провайдеры правил",
|
||||
"actions": {
|
||||
"updateAll": "Обновить все",
|
||||
"update": "Обновить"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Правила"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "Редактировать правила",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Тип правила",
|
||||
"content": "Содержимое правила",
|
||||
"proxyPolicy": "Политика прокси"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Тип правила",
|
||||
"content": "Содержимое правила",
|
||||
"proxyPolicy": "Политика прокси"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Без разрешения"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Добавить правило в начало",
|
||||
"appendRule": "Добавить правило в конец"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Требуется условие правила",
|
||||
"invalidRule": "Недействительное правило"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Без разрешения"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Соответствует полному доменному имени",
|
||||
"DOMAIN-SUFFIX": "Соответствует суффиксу домена",
|
||||
"DOMAIN-KEYWORD": "Соответствует ключевому слову домена",
|
||||
"DOMAIN-REGEX": "Соответствует домену с использованием регулярных выражений",
|
||||
"GEOSITE": "Соответствует доменам в Geosite",
|
||||
"GEOIP": "Соответствует коду страны IP-адреса",
|
||||
"SRC-GEOIP": "Соответствует коду страны исходного IP-адреса",
|
||||
"IP-ASN": "Соответствует ASN IP-адреса",
|
||||
"SRC-IP-ASN": "Соответствует ASN исходного IP-адреса",
|
||||
"IP-CIDR": "Соответствует диапазону IP-адресов",
|
||||
"IP-CIDR6": "Соответствует диапазону IPv6-адресов",
|
||||
"SRC-IP-CIDR": "Соответствует диапазону исходных IP-адресов",
|
||||
"IP-SUFFIX": "Соответствует диапазону суффиксов IP-адресов",
|
||||
"SRC-IP-SUFFIX": "Соответствует диапазону суффиксов исходных IP-адресов",
|
||||
"SRC-PORT": "Соответствует диапазону исходных портов",
|
||||
"DST-PORT": "Соответствует диапазону целевых портов",
|
||||
"IN-PORT": "Соответствует входящему порту",
|
||||
"DSCP": "Маркировка DSCP (только для tproxy UDP входящего)",
|
||||
"PROCESS-NAME": "Соответствует имени процесса (имя пакета Android)",
|
||||
"PROCESS-PATH": "Соответствует полному пути процесса",
|
||||
"PROCESS-NAME-REGEX": "Соответствует имени процесса с использованием регулярных выражений (имя пакета Android)",
|
||||
"PROCESS-PATH-REGEX": "Соответствует полному пути процесса с использованием регулярных выражений",
|
||||
"NETWORK": "Соответствует транспортному протоколу (tcp/udp)",
|
||||
"UID": "Соответствует USER ID в Linux",
|
||||
"IN-TYPE": "Соответствует типу входящего соединения",
|
||||
"IN-USER": "Соответствует имени пользователя входящего соединения",
|
||||
"IN-NAME": "Соответствует имени входящего соединения",
|
||||
"SUB-RULE": "Подправило",
|
||||
"RULE-SET": "Соответствует набору правил",
|
||||
"AND": "Логическое И",
|
||||
"OR": "Логическое ИЛИ",
|
||||
"NOT": "Логическое НЕ",
|
||||
"MATCH": "Соответствует всем запросам"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Добавить правило в начало",
|
||||
"appendRule": "Добавить правило в конец"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Требуется условие правила",
|
||||
"invalidRule": "Недействительное правило"
|
||||
"header": {
|
||||
"title": "Редактировать правила"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Соответствует полному доменному имени",
|
||||
"DOMAIN-SUFFIX": "Соответствует суффиксу домена",
|
||||
"DOMAIN-KEYWORD": "Соответствует ключевому слову домена",
|
||||
"DOMAIN-REGEX": "Соответствует домену с использованием регулярных выражений",
|
||||
"GEOSITE": "Соответствует доменам в Geosite",
|
||||
"GEOIP": "Соответствует коду страны IP-адреса",
|
||||
"SRC-GEOIP": "Соответствует коду страны исходного IP-адреса",
|
||||
"IP-ASN": "Соответствует ASN IP-адреса",
|
||||
"SRC-IP-ASN": "Соответствует ASN исходного IP-адреса",
|
||||
"IP-CIDR": "Соответствует диапазону IP-адресов",
|
||||
"IP-CIDR6": "Соответствует диапазону IPv6-адресов",
|
||||
"SRC-IP-CIDR": "Соответствует диапазону исходных IP-адресов",
|
||||
"IP-SUFFIX": "Соответствует диапазону суффиксов IP-адресов",
|
||||
"SRC-IP-SUFFIX": "Соответствует диапазону суффиксов исходных IP-адресов",
|
||||
"SRC-PORT": "Соответствует диапазону исходных портов",
|
||||
"DST-PORT": "Соответствует диапазону целевых портов",
|
||||
"IN-PORT": "Соответствует входящему порту",
|
||||
"DSCP": "Маркировка DSCP (только для tproxy UDP входящего)",
|
||||
"PROCESS-NAME": "Соответствует имени процесса (имя пакета Android)",
|
||||
"PROCESS-PATH": "Соответствует полному пути процесса",
|
||||
"PROCESS-NAME-REGEX": "Соответствует имени процесса с использованием регулярных выражений (имя пакета Android)",
|
||||
"PROCESS-PATH-REGEX": "Соответствует полному пути процесса с использованием регулярных выражений",
|
||||
"NETWORK": "Соответствует транспортному протоколу (tcp/udp)",
|
||||
"UID": "Соответствует USER ID в Linux",
|
||||
"IN-TYPE": "Соответствует типу входящего соединения",
|
||||
"IN-USER": "Соответствует имени пользователя входящего соединения",
|
||||
"IN-NAME": "Соответствует имени входящего соединения",
|
||||
"SUB-RULE": "Подправило",
|
||||
"RULE-SET": "Соответствует набору правил",
|
||||
"AND": "Логическое И",
|
||||
"OR": "Логическое ИЛИ",
|
||||
"NOT": "Логическое НЕ",
|
||||
"MATCH": "Соответствует всем запросам"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Главная",
|
||||
"tooltips": {
|
||||
"lightweightMode": "LightWeight Mode",
|
||||
"manual": "Документация",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Режим работы"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Настройки главной страницы",
|
||||
"cards": {
|
||||
"profile": "Карточка профиля",
|
||||
"currentProxy": "Карточка текущего прокси",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "Информация об IP",
|
||||
"clashInfo": "Информация о Clash",
|
||||
"systemInfo": "Информация о системе"
|
||||
},
|
||||
"header": {
|
||||
"title": "Настройки главной страницы"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Главная"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "Системный прокси включен, ваши приложения будут получать доступ к сети через него",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Тест доступности веб-сайтов",
|
||||
"actions": {
|
||||
"testing": "Тестирование ..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Тест доступности веб-сайтов"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "Vekil Grupları",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "Tümünü Güncelle",
|
||||
"update": "Güncelle"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Doğrudan Mod"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "Vekil Grupları",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Vekil'i manuel olarak seçin",
|
||||
"url-test": "URL testi gecikmesine göre vekil seçin",
|
||||
"fallback": "Hata durumunda başka bir vekil'e geçin",
|
||||
"load-balance": "Yük dengelemeye göre vekil dağıtın",
|
||||
"relay": "Tanımlanan vekil zincirinden geçirin"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Veri doğrudan dışarı gider",
|
||||
"REJECT": "İstekleri engeller",
|
||||
"REJECT-DROP": "İstekleri atar",
|
||||
"PASS": "Eşleştiğinde bu kuralı atlar"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Vekil'i manuel olarak seçin",
|
||||
"url-test": "URL testi gecikmesine göre vekil seçin",
|
||||
"fallback": "Hata durumunda başka bir vekil'e geçin",
|
||||
"load-balance": "Yük dengelemeye göre vekil dağıtın",
|
||||
"relay": "Tanımlanan vekil zincirinden geçirin"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Veri doğrudan dışarı gider",
|
||||
"REJECT": "İstekleri engeller",
|
||||
"REJECT-DROP": "İstekleri atar",
|
||||
"PASS": "Eşleştiğinde bu kuralı atlar"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "Bağlantılar",
|
||||
"summary": {
|
||||
"downloaded": "İndirilen",
|
||||
"uploaded": "Yüklenen"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "Duraklat",
|
||||
"resume": "Sürdür",
|
||||
"closeAll": "Tümünü Kapat"
|
||||
},
|
||||
"header": {
|
||||
"title": "Bağlantılar"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "Ana Bilgisayar",
|
||||
"downloaded": "İndirilen",
|
||||
"uploaded": "Yüklenen",
|
||||
"dlSpeed": "İndirme Hızı",
|
||||
"ulSpeed": "Yükleme Hızı",
|
||||
"chains": "Zincirler",
|
||||
"rule": "Kural",
|
||||
"process": "İşlem",
|
||||
"time": "Zaman",
|
||||
"source": "Kaynak",
|
||||
"destination": "Hedef",
|
||||
"destinationPort": "Hedef Port",
|
||||
"type": "Tip"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Yükleme Hızı",
|
||||
"downloadSpeed": "İndirme Hızı"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Bağlantıyı Kapat"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "Ana Bilgisayar",
|
||||
"downloaded": "İndirilen",
|
||||
"uploaded": "Yüklenen",
|
||||
"dlSpeed": "İndirme Hızı",
|
||||
"ulSpeed": "Yükleme Hızı",
|
||||
"chains": "Zincirler",
|
||||
"rule": "Kural",
|
||||
"process": "İşlem",
|
||||
"time": "Zaman",
|
||||
"source": "Kaynak",
|
||||
"destination": "Hedef",
|
||||
"destinationPort": "Hedef Port",
|
||||
"type": "Tip"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Yükleme Hızı",
|
||||
"downloadSpeed": "İndirme Hızı"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Bağlantıyı Kapat"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Test"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Test Oluştur",
|
||||
"edit": "Testi Düzenle"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Test URL'si"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "Test",
|
||||
"actions": {
|
||||
"testAll": "Tümünü Test Et"
|
||||
},
|
||||
"header": {
|
||||
"title": "Test"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Beklemede",
|
||||
"yes": "Evet",
|
||||
"no": "Hayır",
|
||||
"failed": "Başarısız",
|
||||
"completed": "Tamamlandı",
|
||||
"disallowedIsp": "İzin Verilmeyen ISP",
|
||||
"originalsOnly": "Yalnızca Orijinaller",
|
||||
"noDisney": "Hayır (IP Disney+ Tarafından Yasaklandı)",
|
||||
"unsupportedRegion": "Desteklenmeyen Ülke/Bölge",
|
||||
"failedNetwork": "Başarısız (Ağ Bağlantısı)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "Test Oluştur",
|
||||
"edit": "Testi Düzenle"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Test URL'si"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Beklemede",
|
||||
"yes": "Evet",
|
||||
"no": "Hayır",
|
||||
"failed": "Başarısız",
|
||||
"completed": "Tamamlandı",
|
||||
"disallowedIsp": "İzin Verilmeyen ISP",
|
||||
"originalsOnly": "Yalnızca Orijinaller",
|
||||
"noDisney": "Hayır (IP Disney+ Tarafından Yasaklandı)",
|
||||
"unsupportedRegion": "Desteklenmeyen Ülke/Bölge",
|
||||
"failedNetwork": "Başarısız (Ağ Bağlantısı)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "Günlükler",
|
||||
"actions": {
|
||||
"pause": "Duraklat",
|
||||
"resume": "Sürdür",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "Günlükler"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "Kurallar",
|
||||
"provider": {
|
||||
"trigger": "Kural Sağlayıcısı",
|
||||
"dialogTitle": "Kural Sağlayıcısı",
|
||||
"actions": {
|
||||
"updateAll": "Tümünü Güncelle",
|
||||
"update": "Güncelle"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Kurallar"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "Kuralları Düzenle",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Kural Tipi",
|
||||
"content": "Kural İçeriği",
|
||||
"proxyPolicy": "Vekil Politikası"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Kural Tipi",
|
||||
"content": "Kural İçeriği",
|
||||
"proxyPolicy": "Vekil Politikası"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Çözümleme Yok"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Kuralın Başına Ekle",
|
||||
"appendRule": "Kuralın Sonuna Ekle"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Kural Koşulu Gerekli",
|
||||
"invalidRule": "Geçersiz Kural"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Çözümleme Yok"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Tam alan adıyla eşleşir",
|
||||
"DOMAIN-SUFFIX": "Alan adı sonekiyle eşleşir",
|
||||
"DOMAIN-KEYWORD": "Alan adı anahtar kelimesiyle eşleşir",
|
||||
"DOMAIN-REGEX": "Alan adını düzenli ifadeler kullanarak eşleştirir",
|
||||
"GEOSITE": "Geosite içindeki alan adlarıyla eşleşir",
|
||||
"GEOIP": "IP adresinin ülke koduyla eşleşir",
|
||||
"SRC-GEOIP": "Kaynak IP adresinin ülke koduyla eşleşir",
|
||||
"IP-ASN": "IP adresinin ASN'siyle eşleşir",
|
||||
"SRC-IP-ASN": "Kaynak IP adresinin ASN'siyle eşleşir",
|
||||
"IP-CIDR": "IP adresi aralığıyla eşleşir",
|
||||
"IP-CIDR6": "IPv6 adresi aralığıyla eşleşir",
|
||||
"SRC-IP-CIDR": "Kaynak IP adresi aralığıyla eşleşir",
|
||||
"IP-SUFFIX": "IP adresi sonek aralığıyla eşleşir",
|
||||
"SRC-IP-SUFFIX": "Kaynak IP adresi sonek aralığıyla eşleşir",
|
||||
"SRC-PORT": "Kaynak port aralığıyla eşleşir",
|
||||
"DST-PORT": "Hedef port aralığıyla eşleşir",
|
||||
"IN-PORT": "Gelen port ile eşleşir",
|
||||
"DSCP": "DSCP işaretlemesi (sadece tvekil UDP girişi için)",
|
||||
"PROCESS-NAME": "İşlem adıyla eşleşir (Android paket adı)",
|
||||
"PROCESS-PATH": "Tam işlem yoluyla eşleşir",
|
||||
"PROCESS-NAME-REGEX": "Tam işlem adını düzenli ifadeler kullanarak eşleştirir (Android paket adı)",
|
||||
"PROCESS-PATH-REGEX": "Tam işlem yolunu düzenli ifadeler kullanarak eşleştirir",
|
||||
"NETWORK": "Taşıma protokolüyle eşleşir (tcp/udp)",
|
||||
"UID": "Linux KULLANICI ID'siyle eşleşir",
|
||||
"IN-TYPE": "Gelen bağlantı tipiyle eşleşir",
|
||||
"IN-USER": "Gelen bağlantı kullanıcı adıyla eşleşir",
|
||||
"IN-NAME": "Gelen bağlantı adıyla eşleşir",
|
||||
"SUB-RULE": "Alt kural",
|
||||
"RULE-SET": "Kural setiyle eşleşir",
|
||||
"AND": "Mantıksal VE",
|
||||
"OR": "Mantıksal VEYA",
|
||||
"NOT": "Mantıksal DEĞİL",
|
||||
"MATCH": "Tüm isteklerle eşleşir"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Kuralın Başına Ekle",
|
||||
"appendRule": "Kuralın Sonuna Ekle"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Kural Koşulu Gerekli",
|
||||
"invalidRule": "Geçersiz Kural"
|
||||
"header": {
|
||||
"title": "Kuralları Düzenle"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Tam alan adıyla eşleşir",
|
||||
"DOMAIN-SUFFIX": "Alan adı sonekiyle eşleşir",
|
||||
"DOMAIN-KEYWORD": "Alan adı anahtar kelimesiyle eşleşir",
|
||||
"DOMAIN-REGEX": "Alan adını düzenli ifadeler kullanarak eşleştirir",
|
||||
"GEOSITE": "Geosite içindeki alan adlarıyla eşleşir",
|
||||
"GEOIP": "IP adresinin ülke koduyla eşleşir",
|
||||
"SRC-GEOIP": "Kaynak IP adresinin ülke koduyla eşleşir",
|
||||
"IP-ASN": "IP adresinin ASN'siyle eşleşir",
|
||||
"SRC-IP-ASN": "Kaynak IP adresinin ASN'siyle eşleşir",
|
||||
"IP-CIDR": "IP adresi aralığıyla eşleşir",
|
||||
"IP-CIDR6": "IPv6 adresi aralığıyla eşleşir",
|
||||
"SRC-IP-CIDR": "Kaynak IP adresi aralığıyla eşleşir",
|
||||
"IP-SUFFIX": "IP adresi sonek aralığıyla eşleşir",
|
||||
"SRC-IP-SUFFIX": "Kaynak IP adresi sonek aralığıyla eşleşir",
|
||||
"SRC-PORT": "Kaynak port aralığıyla eşleşir",
|
||||
"DST-PORT": "Hedef port aralığıyla eşleşir",
|
||||
"IN-PORT": "Gelen port ile eşleşir",
|
||||
"DSCP": "DSCP işaretlemesi (sadece tvekil UDP girişi için)",
|
||||
"PROCESS-NAME": "İşlem adıyla eşleşir (Android paket adı)",
|
||||
"PROCESS-PATH": "Tam işlem yoluyla eşleşir",
|
||||
"PROCESS-NAME-REGEX": "Tam işlem adını düzenli ifadeler kullanarak eşleştirir (Android paket adı)",
|
||||
"PROCESS-PATH-REGEX": "Tam işlem yolunu düzenli ifadeler kullanarak eşleştirir",
|
||||
"NETWORK": "Taşıma protokolüyle eşleşir (tcp/udp)",
|
||||
"UID": "Linux KULLANICI ID'siyle eşleşir",
|
||||
"IN-TYPE": "Gelen bağlantı tipiyle eşleşir",
|
||||
"IN-USER": "Gelen bağlantı kullanıcı adıyla eşleşir",
|
||||
"IN-NAME": "Gelen bağlantı adıyla eşleşir",
|
||||
"SUB-RULE": "Alt kural",
|
||||
"RULE-SET": "Kural setiyle eşleşir",
|
||||
"AND": "Mantıksal VE",
|
||||
"OR": "Mantıksal VEYA",
|
||||
"NOT": "Mantıksal DEĞİL",
|
||||
"MATCH": "Tüm isteklerle eşleşir"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Ana Sayfa",
|
||||
"tooltips": {
|
||||
"lightweightMode": "Hafif Mod",
|
||||
"manual": "Kılavuz",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Vekil Modu"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ana Sayfa Ayarları",
|
||||
"cards": {
|
||||
"profile": "Profil Kartı",
|
||||
"currentProxy": "Geçerli Vekil Kartı",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP Bilgi Kartı",
|
||||
"clashInfo": "Clash Bilgi Kartları",
|
||||
"systemInfo": "Sistem Bilgi Kartları"
|
||||
},
|
||||
"header": {
|
||||
"title": "Ana Sayfa Ayarları"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Ana Sayfa"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "Sistem vekil'i etkinleştirildi, uygulamalarınız vekil üzerinden ağa erişecek",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Kilit Açma Testi",
|
||||
"actions": {
|
||||
"testing": "Test Ediliyor..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Kilit Açma Testi"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "Прокси төркемнәре",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "Rule",
|
||||
"global": "Global",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "Барысын да яңарту",
|
||||
"update": "Яңарту"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "Туры режим"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "Прокси төркемнәре",
|
||||
"chainMode": "Proxy Chain Mode"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Проксины кулдан сайлау",
|
||||
"url-test": "URL-тест задержкасына карап прокси сайлау",
|
||||
"fallback": "Хата булган очракта башка проксига күчү",
|
||||
"load-balance": "Трафикны баланслау нигезендә прокси тарату",
|
||||
"relay": "Билгеле прокси чылбыры аша тапшыру"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Туры чыгу",
|
||||
"REJECT": "Сорауларны тоткарлау",
|
||||
"REJECT-DROP": "Сорауларны кире кагу",
|
||||
"PASS": "Туры килсә дә, бу кагыйдәне урап узу"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "Проксины кулдан сайлау",
|
||||
"url-test": "URL-тест задержкасына карап прокси сайлау",
|
||||
"fallback": "Хата булган очракта башка проксига күчү",
|
||||
"load-balance": "Трафикны баланслау нигезендә прокси тарату",
|
||||
"relay": "Билгеле прокси чылбыры аша тапшыру"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "Туры чыгу",
|
||||
"REJECT": "Сорауларны тоткарлау",
|
||||
"REJECT-DROP": "Сорауларны кире кагу",
|
||||
"PASS": "Туры килсә дә, бу кагыйдәне урап узу"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "Тоташулар",
|
||||
"summary": {
|
||||
"downloaded": "Йөкләнгән",
|
||||
"uploaded": "Чыгарылган"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "Туктау",
|
||||
"resume": "Дәвам",
|
||||
"closeAll": "Барысын да ябу"
|
||||
},
|
||||
"header": {
|
||||
"title": "Тоташулар"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "Хост",
|
||||
"downloaded": "Йөкләнгән",
|
||||
"uploaded": "Чыгарылган",
|
||||
"dlSpeed": "Йөкләү тизл.",
|
||||
"ulSpeed": "Чыгару тизл.",
|
||||
"chains": "Чылбырлар",
|
||||
"rule": "Кагыйдә",
|
||||
"process": "Процесс",
|
||||
"time": "Тоташу вакыты",
|
||||
"source": "Чыганак адресы",
|
||||
"destination": "Максат IP-адресы",
|
||||
"destinationPort": "Барасы порты",
|
||||
"type": "Төр"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Йөкләү (чыгару) тизлеге",
|
||||
"downloadSpeed": "Йөкләү тизлеге"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Тоташуны ябу"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "Хост",
|
||||
"downloaded": "Йөкләнгән",
|
||||
"uploaded": "Чыгарылган",
|
||||
"dlSpeed": "Йөкләү тизл.",
|
||||
"ulSpeed": "Чыгару тизл.",
|
||||
"chains": "Чылбырлар",
|
||||
"rule": "Кагыйдә",
|
||||
"process": "Процесс",
|
||||
"time": "Тоташу вакыты",
|
||||
"source": "Чыганак адресы",
|
||||
"destination": "Максат IP-адресы",
|
||||
"destinationPort": "Барасы порты",
|
||||
"type": "Төр"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "Йөкләү (чыгару) тизлеге",
|
||||
"downloadSpeed": "Йөкләү тизлеге"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "Тоташуны ябу"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Тест"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "Тест булдыру",
|
||||
"edit": "Тестны үзгәртү"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Тест URL-ы"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "Тест",
|
||||
"actions": {
|
||||
"testAll": "Барчасын тестлау"
|
||||
},
|
||||
"header": {
|
||||
"title": "Тест"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "Тест"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "Тест булдыру",
|
||||
"edit": "Тестны үзгәртү"
|
||||
},
|
||||
"fields": {
|
||||
"url": "Тест URL-ы"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "Pending",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"failed": "Failed",
|
||||
"completed": "Completed",
|
||||
"disallowedIsp": "Disallowed ISP",
|
||||
"originalsOnly": "Originals Only",
|
||||
"noDisney": "No (IP Banned By Disney+)",
|
||||
"unsupportedRegion": "Unsupported Country/Region",
|
||||
"failedNetwork": "Failed (Network Connection)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "Логлар",
|
||||
"actions": {
|
||||
"pause": "Туктау",
|
||||
"resume": "Дәвам",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "Логлар"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "Кагыйдәләр",
|
||||
"provider": {
|
||||
"trigger": "Кагыйдә провайдеры",
|
||||
"dialogTitle": "Кагыйдә провайдеры",
|
||||
"actions": {
|
||||
"updateAll": "Барысын да яңарту",
|
||||
"update": "Яңарту"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Кагыйдәләр"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "Кагыйдәләрне үзгәртү",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Кагыйдә төре",
|
||||
"content": "Кагыйдә эчтәлеге",
|
||||
"proxyPolicy": "Прокси сәясәте"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "Кагыйдә төре",
|
||||
"content": "Кагыйдә эчтәлеге",
|
||||
"proxyPolicy": "Прокси сәясәте"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Резолвсыз"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Кагыйдәне өскә өстәү",
|
||||
"appendRule": "Кагыйдәне аска өстәү"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Кагыйдә шарты кирәк",
|
||||
"invalidRule": "Яраксыз кагыйдә"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "Резолвсыз"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Домен исеменең тулы туры килүе",
|
||||
"DOMAIN-SUFFIX": "Домен суффиксына туры килү",
|
||||
"DOMAIN-KEYWORD": "Доменда төп сүзгә туры килү",
|
||||
"DOMAIN-REGEX": "Доменны регекс аша туры китерү",
|
||||
"GEOSITE": "Geosite исемлегендәге доменга туры килү",
|
||||
"GEOIP": "IP-адресның ил коды буенча туры килү",
|
||||
"SRC-GEOIP": "Чыганак IP-адресның ил коды буенча туры килү",
|
||||
"IP-ASN": "IP-адрес ASN'ы буенча туры килү",
|
||||
"SRC-IP-ASN": "Чыганак IP-адрес ASN'ы буенча туры килү",
|
||||
"IP-CIDR": "IP-адреслар диапазонына туры килү",
|
||||
"IP-CIDR6": "IPv6 адреслар диапазонына туры килү",
|
||||
"SRC-IP-CIDR": "Чыганак IP-адреслар диапазонына туры килү",
|
||||
"IP-SUFFIX": "IP-адрес суффиксына туры килү",
|
||||
"SRC-IP-SUFFIX": "Чыганак IP-адрес суффиксына туры килү",
|
||||
"SRC-PORT": "Чыганак портлар диапазонына туры килү",
|
||||
"DST-PORT": "Максат портлар диапазонына туры килү",
|
||||
"IN-PORT": "Керүче портка туры килү",
|
||||
"DSCP": "DSCP тамгалавы (tproxy UDP өчен)",
|
||||
"PROCESS-NAME": "Процесс исеменә туры килү (Android пакет исеме)",
|
||||
"PROCESS-PATH": "Процесс юлына туры килү",
|
||||
"PROCESS-NAME-REGEX": "Процесс исемен регекс белән туры китерү (Android пакет исеме)",
|
||||
"PROCESS-PATH-REGEX": "Процесс юлын регекс белән туры китерү",
|
||||
"NETWORK": "Транспорт протоколына (tcp/udp) туры килү",
|
||||
"UID": "Linux USER ID'га туры килү",
|
||||
"IN-TYPE": "Керүче тоташу төренә туры килү",
|
||||
"IN-USER": "Керүче тоташу кулланучысына туры килү",
|
||||
"IN-NAME": "Керүче тоташу исеменә туры килү",
|
||||
"SUB-RULE": "Кушымча кагыйдә",
|
||||
"RULE-SET": "Кагыйдәләр тупланмасына туры килү",
|
||||
"AND": "Логик ҺӘМ",
|
||||
"OR": "Логик ЯКИ",
|
||||
"NOT": "Логик ТҮГЕЛ",
|
||||
"MATCH": "Барлык сорауларга туры килә"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "Кагыйдәне өскә өстәү",
|
||||
"appendRule": "Кагыйдәне аска өстәү"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "Кагыйдә шарты кирәк",
|
||||
"invalidRule": "Яраксыз кагыйдә"
|
||||
"header": {
|
||||
"title": "Кагыйдәләрне үзгәртү"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "Домен исеменең тулы туры килүе",
|
||||
"DOMAIN-SUFFIX": "Домен суффиксына туры килү",
|
||||
"DOMAIN-KEYWORD": "Доменда төп сүзгә туры килү",
|
||||
"DOMAIN-REGEX": "Доменны регекс аша туры китерү",
|
||||
"GEOSITE": "Geosite исемлегендәге доменга туры килү",
|
||||
"GEOIP": "IP-адресның ил коды буенча туры килү",
|
||||
"SRC-GEOIP": "Чыганак IP-адресның ил коды буенча туры килү",
|
||||
"IP-ASN": "IP-адрес ASN'ы буенча туры килү",
|
||||
"SRC-IP-ASN": "Чыганак IP-адрес ASN'ы буенча туры килү",
|
||||
"IP-CIDR": "IP-адреслар диапазонына туры килү",
|
||||
"IP-CIDR6": "IPv6 адреслар диапазонына туры килү",
|
||||
"SRC-IP-CIDR": "Чыганак IP-адреслар диапазонына туры килү",
|
||||
"IP-SUFFIX": "IP-адрес суффиксына туры килү",
|
||||
"SRC-IP-SUFFIX": "Чыганак IP-адрес суффиксына туры килү",
|
||||
"SRC-PORT": "Чыганак портлар диапазонына туры килү",
|
||||
"DST-PORT": "Максат портлар диапазонына туры килү",
|
||||
"IN-PORT": "Керүче портка туры килү",
|
||||
"DSCP": "DSCP тамгалавы (tproxy UDP өчен)",
|
||||
"PROCESS-NAME": "Процесс исеменә туры килү (Android пакет исеме)",
|
||||
"PROCESS-PATH": "Процесс юлына туры килү",
|
||||
"PROCESS-NAME-REGEX": "Процесс исемен регекс белән туры китерү (Android пакет исеме)",
|
||||
"PROCESS-PATH-REGEX": "Процесс юлын регекс белән туры китерү",
|
||||
"NETWORK": "Транспорт протоколына (tcp/udp) туры килү",
|
||||
"UID": "Linux USER ID'га туры килү",
|
||||
"IN-TYPE": "Керүче тоташу төренә туры килү",
|
||||
"IN-USER": "Керүче тоташу кулланучысына туры килү",
|
||||
"IN-NAME": "Керүче тоташу исеменә туры килү",
|
||||
"SUB-RULE": "Кушымча кагыйдә",
|
||||
"RULE-SET": "Кагыйдәләр тупланмасына туры килү",
|
||||
"AND": "Логик ҺӘМ",
|
||||
"OR": "Логик ЯКИ",
|
||||
"NOT": "Логик ТҮГЕЛ",
|
||||
"MATCH": "Барлык сорауларга туры килә"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "Home",
|
||||
"tooltips": {
|
||||
"lightweightMode": "Җиңел Режим",
|
||||
"manual": "Документация",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "Proxy Mode"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Home Settings",
|
||||
"cards": {
|
||||
"profile": "Profile Card",
|
||||
"currentProxy": "Current Proxy Card",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP Information Card",
|
||||
"clashInfo": "Clash Info Cards",
|
||||
"systemInfo": "System Info Cards"
|
||||
},
|
||||
"header": {
|
||||
"title": "Home Settings"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "Home"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "System proxy is enabled, your applications will access the network through the proxy",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "Unlock Test",
|
||||
"actions": {
|
||||
"testing": "Testing..."
|
||||
},
|
||||
"empty": "No unlock test items",
|
||||
"messages": {
|
||||
"detectionTimeout": "Detection timeout or failed"
|
||||
},
|
||||
"header": {
|
||||
"title": "Unlock Test"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "代理组",
|
||||
"chainMode": "链式代理模式"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "规则",
|
||||
"global": "全局",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "更新全部",
|
||||
"update": "更新"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} 更新成功",
|
||||
"updateFailed": "{{name}} 更新失败: {{message}}",
|
||||
"genericError": "更新失败: {{message}}",
|
||||
"none": "没有可更新的 provider",
|
||||
"allUpdated": "所有 provider 均已更新"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "直连模式"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "代理组",
|
||||
"chainMode": "链式代理模式"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "手动选择代理",
|
||||
"url-test": "根据 URL 测试延迟选择代理",
|
||||
"fallback": "不可用时切换到另一个代理",
|
||||
"load-balance": "根据负载均衡分配代理",
|
||||
"relay": "根据定义的代理链传递"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "直连 (DIRECT)",
|
||||
"REJECT": "拦截请求 (REJECT)",
|
||||
"REJECT-DROP": "抛弃请求 (REJECT-DROP)",
|
||||
"PASS": "跳过此规则 (PASS)"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} 更新成功",
|
||||
"updateFailed": "{{name}} 更新失败: {{message}}",
|
||||
"genericError": "更新失败: {{message}}",
|
||||
"none": "没有可更新的 provider",
|
||||
"allUpdated": "所有 provider 均已更新"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "手动选择代理",
|
||||
"url-test": "根据 URL 测试延迟选择代理",
|
||||
"fallback": "不可用时切换到另一个代理",
|
||||
"load-balance": "根据负载均衡分配代理",
|
||||
"relay": "根据定义的代理链传递"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "直连 (DIRECT)",
|
||||
"REJECT": "拦截请求 (REJECT)",
|
||||
"REJECT-DROP": "抛弃请求 (REJECT-DROP)",
|
||||
"PASS": "跳过此规则 (PASS)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "连接",
|
||||
"summary": {
|
||||
"downloaded": "下载量",
|
||||
"uploaded": "上传量"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "暂停",
|
||||
"resume": "继续",
|
||||
"closeAll": "关闭全部"
|
||||
},
|
||||
"header": {
|
||||
"title": "连接"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "主机",
|
||||
"downloaded": "下载量",
|
||||
"uploaded": "上传量",
|
||||
"dlSpeed": "下载速度",
|
||||
"ulSpeed": "上传速度",
|
||||
"chains": "链路",
|
||||
"rule": "规则",
|
||||
"process": "进程",
|
||||
"time": "连接时间",
|
||||
"source": "源地址",
|
||||
"destination": "目标地址",
|
||||
"destinationPort": "目标端口",
|
||||
"type": "类型"
|
||||
},
|
||||
"order": {
|
||||
"default": "默认",
|
||||
"uploadSpeed": "上传速度",
|
||||
"downloadSpeed": "下载速度"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "关闭连接"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "主机",
|
||||
"downloaded": "下载量",
|
||||
"uploaded": "上传量",
|
||||
"dlSpeed": "下载速度",
|
||||
"ulSpeed": "上传速度",
|
||||
"chains": "链路",
|
||||
"rule": "规则",
|
||||
"process": "进程",
|
||||
"time": "连接时间",
|
||||
"source": "源地址",
|
||||
"destination": "目标地址",
|
||||
"destinationPort": "目标端口",
|
||||
"type": "类型"
|
||||
},
|
||||
"order": {
|
||||
"default": "默认",
|
||||
"uploadSpeed": "上传速度",
|
||||
"downloadSpeed": "下载速度"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "关闭连接"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "测试"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新建测试",
|
||||
"edit": "编辑测试"
|
||||
},
|
||||
"fields": {
|
||||
"url": "测试地址"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "测试",
|
||||
"actions": {
|
||||
"testAll": "测试全部"
|
||||
},
|
||||
"header": {
|
||||
"title": "测试"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "待检测",
|
||||
"yes": "支持",
|
||||
"no": "不支持",
|
||||
"failed": "测试失败",
|
||||
"completed": "检测完成",
|
||||
"disallowedIsp": "不允许的 ISP",
|
||||
"originalsOnly": "仅限原创",
|
||||
"noDisney": "不支持(IP被Disney+禁止)",
|
||||
"unsupportedRegion": "不支持的国家/地区",
|
||||
"failedNetwork": "测试失败(网络连接问题)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "测试"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "新建测试",
|
||||
"edit": "编辑测试"
|
||||
},
|
||||
"fields": {
|
||||
"url": "测试地址"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "待检测",
|
||||
"yes": "支持",
|
||||
"no": "不支持",
|
||||
"failed": "测试失败",
|
||||
"completed": "检测完成",
|
||||
"disallowedIsp": "不允许的 ISP",
|
||||
"originalsOnly": "仅限原创",
|
||||
"noDisney": "不支持(IP被Disney+禁止)",
|
||||
"unsupportedRegion": "不支持的国家/地区",
|
||||
"failedNetwork": "测试失败(网络连接问题)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "日志",
|
||||
"actions": {
|
||||
"pause": "暂停",
|
||||
"resume": "继续",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "日志"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "规则",
|
||||
"provider": {
|
||||
"trigger": "规则集合",
|
||||
"dialogTitle": "规则集合",
|
||||
"actions": {
|
||||
"updateAll": "更新全部",
|
||||
"update": "更新"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "规则"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} 更新成功",
|
||||
"updateFailed": "{{name}} 更新失败: {{message}}",
|
||||
"genericError": "更新失败: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "编辑规则",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "规则类型",
|
||||
"content": "规则内容",
|
||||
"proxyPolicy": "代理策略"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "规则类型",
|
||||
"content": "规则内容",
|
||||
"proxyPolicy": "代理策略"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "跳过 DNS 解析"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "添加前置规则",
|
||||
"appendRule": "添加后置规则"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "规则条件缺失",
|
||||
"invalidRule": "无效规则"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "跳过 DNS 解析"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "匹配完整域名 (DOMAIN)",
|
||||
"DOMAIN-SUFFIX": "匹配域名后缀 (DOMAIN-SUFFIX)",
|
||||
"DOMAIN-KEYWORD": "匹配域名关键字 (DOMAIN-KEYWORD)",
|
||||
"DOMAIN-REGEX": "匹配域名正则表达式 (DOMAIN-REGEX)",
|
||||
"GEOSITE": "匹配 Geosite 内的域名 (GEOSITE)",
|
||||
"GEOIP": "匹配 IP 所属国家代码 (GEOIP)",
|
||||
"SRC-GEOIP": "匹配来源 IP 所属国家代码 (SRC-GEOIP)",
|
||||
"IP-ASN": "匹配 IP 所属 ASN (IP-ASN)",
|
||||
"SRC-IP-ASN": "匹配来源 IP 所属 ASN (SRC-IP-ASN)",
|
||||
"IP-CIDR": "匹配 IP 地址范围 (IP-CIDR)",
|
||||
"IP-CIDR6": "匹配 IP 地址范围 (IP-CIDR6)",
|
||||
"SRC-IP-CIDR": "匹配来源 IP 地址范围 (SRC-IP-CIDR)",
|
||||
"IP-SUFFIX": "匹配 IP 后缀范围 (IP-SUFFIX)",
|
||||
"SRC-IP-SUFFIX": "匹配来源 IP 后缀范围 (SRC-IP-SUFFIX)",
|
||||
"SRC-PORT": "匹配请求来源端口范围 (SRC-PORT)",
|
||||
"DST-PORT": "匹配请求目标端口范围 (DST-PORT)",
|
||||
"IN-PORT": "匹配入站端口 (IN-PORT)",
|
||||
"DSCP": "DSCP 标记(仅限 TPROXY UDP 入站)(DSCP)",
|
||||
"PROCESS-NAME": "匹配进程名称 (PROCESS-NAME)",
|
||||
"PROCESS-PATH": "匹配完整进程路径 (PROCESS-PATH)",
|
||||
"PROCESS-NAME-REGEX": "正则匹配完整进程名称 (PROCESS-NAME-REGEX)",
|
||||
"PROCESS-PATH-REGEX": "正则匹配完整进程路径 (PROCESS-PATH-REGEX)",
|
||||
"NETWORK": "匹配传输协议 (TCP/UDP) (NETWORK)",
|
||||
"UID": "匹配 Linux USER ID (UID)",
|
||||
"IN-TYPE": "匹配入站类型 (IN-TYPE)",
|
||||
"IN-USER": "匹配入站用户名 (IN-USER)",
|
||||
"IN-NAME": "匹配入站名称 (IN-NAME)",
|
||||
"SUB-RULE": "子规则 (SUB-RULE)",
|
||||
"RULE-SET": "匹配规则集 (RULE-SET)",
|
||||
"AND": "逻辑与 (AND)",
|
||||
"OR": "逻辑或 (OR)",
|
||||
"NOT": "逻辑非 (NOT)",
|
||||
"MATCH": "匹配所有请求 (MATCH)"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "添加前置规则",
|
||||
"appendRule": "添加后置规则"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "规则条件缺失",
|
||||
"invalidRule": "无效规则"
|
||||
"header": {
|
||||
"title": "编辑规则"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "匹配完整域名 (DOMAIN)",
|
||||
"DOMAIN-SUFFIX": "匹配域名后缀 (DOMAIN-SUFFIX)",
|
||||
"DOMAIN-KEYWORD": "匹配域名关键字 (DOMAIN-KEYWORD)",
|
||||
"DOMAIN-REGEX": "匹配域名正则表达式 (DOMAIN-REGEX)",
|
||||
"GEOSITE": "匹配 Geosite 内的域名 (GEOSITE)",
|
||||
"GEOIP": "匹配 IP 所属国家代码 (GEOIP)",
|
||||
"SRC-GEOIP": "匹配来源 IP 所属国家代码 (SRC-GEOIP)",
|
||||
"IP-ASN": "匹配 IP 所属 ASN (IP-ASN)",
|
||||
"SRC-IP-ASN": "匹配来源 IP 所属 ASN (SRC-IP-ASN)",
|
||||
"IP-CIDR": "匹配 IP 地址范围 (IP-CIDR)",
|
||||
"IP-CIDR6": "匹配 IP 地址范围 (IP-CIDR6)",
|
||||
"SRC-IP-CIDR": "匹配来源 IP 地址范围 (SRC-IP-CIDR)",
|
||||
"IP-SUFFIX": "匹配 IP 后缀范围 (IP-SUFFIX)",
|
||||
"SRC-IP-SUFFIX": "匹配来源 IP 后缀范围 (SRC-IP-SUFFIX)",
|
||||
"SRC-PORT": "匹配请求来源端口范围 (SRC-PORT)",
|
||||
"DST-PORT": "匹配请求目标端口范围 (DST-PORT)",
|
||||
"IN-PORT": "匹配入站端口 (IN-PORT)",
|
||||
"DSCP": "DSCP 标记(仅限 TPROXY UDP 入站)(DSCP)",
|
||||
"PROCESS-NAME": "匹配进程名称 (PROCESS-NAME)",
|
||||
"PROCESS-PATH": "匹配完整进程路径 (PROCESS-PATH)",
|
||||
"PROCESS-NAME-REGEX": "正则匹配完整进程名称 (PROCESS-NAME-REGEX)",
|
||||
"PROCESS-PATH-REGEX": "正则匹配完整进程路径 (PROCESS-PATH-REGEX)",
|
||||
"NETWORK": "匹配传输协议 (TCP/UDP) (NETWORK)",
|
||||
"UID": "匹配 Linux USER ID (UID)",
|
||||
"IN-TYPE": "匹配入站类型 (IN-TYPE)",
|
||||
"IN-USER": "匹配入站用户名 (IN-USER)",
|
||||
"IN-NAME": "匹配入站名称 (IN-NAME)",
|
||||
"SUB-RULE": "子规则 (SUB-RULE)",
|
||||
"RULE-SET": "匹配规则集 (RULE-SET)",
|
||||
"AND": "逻辑与 (AND)",
|
||||
"OR": "逻辑或 (OR)",
|
||||
"NOT": "逻辑非 (NOT)",
|
||||
"MATCH": "匹配所有请求 (MATCH)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "首页",
|
||||
"tooltips": {
|
||||
"lightweightMode": "轻量模式",
|
||||
"manual": "使用手册",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "代理模式"
|
||||
},
|
||||
"settings": {
|
||||
"title": "首页设置",
|
||||
"cards": {
|
||||
"profile": "订阅卡",
|
||||
"currentProxy": "当前代理卡",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP 信息卡",
|
||||
"clashInfo": "Clash 信息卡",
|
||||
"systemInfo": "系统信息卡"
|
||||
},
|
||||
"header": {
|
||||
"title": "首页设置"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "首页"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "系统代理已启用,您的应用将通过代理访问网络",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "解锁测试",
|
||||
"actions": {
|
||||
"testing": "测试中..."
|
||||
},
|
||||
"empty": "暂无解锁测试项目",
|
||||
"messages": {
|
||||
"detectionTimeout": "检测超时或失败"
|
||||
},
|
||||
"header": {
|
||||
"title": "解锁测试"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -300,10 +300,6 @@
|
||||
},
|
||||
"proxies": {
|
||||
"page": {
|
||||
"title": {
|
||||
"default": "代理組",
|
||||
"chainMode": "鏈式代理模式"
|
||||
},
|
||||
"modes": {
|
||||
"rule": "規則",
|
||||
"global": "全局",
|
||||
@@ -321,13 +317,6 @@
|
||||
"actions": {
|
||||
"updateAll": "全部更新",
|
||||
"update": "更新"
|
||||
},
|
||||
"notices": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
@@ -365,27 +354,45 @@
|
||||
},
|
||||
"messages": {
|
||||
"directMode": "直連模式"
|
||||
},
|
||||
"header": {
|
||||
"title": {
|
||||
"default": "代理組",
|
||||
"chainMode": "鏈式代理模式"
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "手動選擇代理",
|
||||
"url-test": "根據網址測試延遲選擇代理",
|
||||
"fallback": "切換至另一個備用代理",
|
||||
"load-balance": "根據負載平衡分配代理",
|
||||
"relay": "根據定義的代理鏈傳送"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "直連 (DIRECT)",
|
||||
"REJECT": "拒絕請求 (REJECT)",
|
||||
"REJECT-DROP": "丟棄請求 (REJECT-DROP)",
|
||||
"PASS": "跳過此規則 (PASS)"
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
"none": "No providers available to update",
|
||||
"allUpdated": "All providers updated successfully"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"enums": {
|
||||
"strategies": {
|
||||
"select": "手動選擇代理",
|
||||
"url-test": "根據網址測試延遲選擇代理",
|
||||
"fallback": "切換至另一個備用代理",
|
||||
"load-balance": "根據負載平衡分配代理",
|
||||
"relay": "根據定義的代理鏈傳送"
|
||||
},
|
||||
"policies": {
|
||||
"DIRECT": "直連 (DIRECT)",
|
||||
"REJECT": "拒絕請求 (REJECT)",
|
||||
"REJECT-DROP": "丟棄請求 (REJECT-DROP)",
|
||||
"PASS": "跳過此規則 (PASS)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"page": {
|
||||
"title": "連線",
|
||||
"summary": {
|
||||
"downloaded": "下載量",
|
||||
"uploaded": "上傳量"
|
||||
@@ -396,69 +403,83 @@
|
||||
"pause": "暫停",
|
||||
"resume": "繼續",
|
||||
"closeAll": "關閉全部"
|
||||
},
|
||||
"header": {
|
||||
"title": "連線"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"host": "主機",
|
||||
"downloaded": "下載量",
|
||||
"uploaded": "上傳量",
|
||||
"dlSpeed": "下載速度",
|
||||
"ulSpeed": "上傳速度",
|
||||
"chains": "鏈路",
|
||||
"rule": "規則",
|
||||
"process": "處理程序",
|
||||
"time": "連線時間",
|
||||
"source": "來源位址",
|
||||
"destination": "目標位址",
|
||||
"destinationPort": "目標連接埠",
|
||||
"type": "類型"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "上傳速度",
|
||||
"downloadSpeed": "下載速度"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "關閉連線"
|
||||
"components": {
|
||||
"fields": {
|
||||
"host": "主機",
|
||||
"downloaded": "下載量",
|
||||
"uploaded": "上傳量",
|
||||
"dlSpeed": "下載速度",
|
||||
"ulSpeed": "上傳速度",
|
||||
"chains": "鏈路",
|
||||
"rule": "規則",
|
||||
"process": "處理程序",
|
||||
"time": "連線時間",
|
||||
"source": "來源位址",
|
||||
"destination": "目標位址",
|
||||
"destinationPort": "目標連接埠",
|
||||
"type": "類型"
|
||||
},
|
||||
"order": {
|
||||
"default": "Default",
|
||||
"uploadSpeed": "上傳速度",
|
||||
"downloadSpeed": "下載速度"
|
||||
},
|
||||
"actions": {
|
||||
"closeConnection": "關閉連線"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "測試"
|
||||
}
|
||||
},
|
||||
"viewer": {
|
||||
"title": {
|
||||
"create": "新增測試",
|
||||
"edit": "編輯測試"
|
||||
},
|
||||
"fields": {
|
||||
"url": "測試網址"
|
||||
}
|
||||
},
|
||||
"page": {
|
||||
"title": "測試",
|
||||
"actions": {
|
||||
"testAll": "測試全部"
|
||||
},
|
||||
"header": {
|
||||
"title": "測試"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"pending": "待檢測",
|
||||
"yes": "支援",
|
||||
"no": "不支援",
|
||||
"failed": "測試失敗",
|
||||
"completed": "檢測完成",
|
||||
"disallowedIsp": "不允許的網際網路服務供應商",
|
||||
"originalsOnly": "僅限原創",
|
||||
"noDisney": "不支援(IP被Disney+禁止)",
|
||||
"unsupportedRegion": "不支援的國家/地區",
|
||||
"failedNetwork": "測試失敗(網路連線問題)"
|
||||
"components": {
|
||||
"item": {
|
||||
"actions": {
|
||||
"test": "測試"
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"test": {
|
||||
"title": {
|
||||
"create": "新增測試",
|
||||
"edit": "編輯測試"
|
||||
},
|
||||
"fields": {
|
||||
"url": "測試網址"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"statuses": {
|
||||
"test": {
|
||||
"pending": "待檢測",
|
||||
"yes": "支援",
|
||||
"no": "不支援",
|
||||
"failed": "測試失敗",
|
||||
"completed": "檢測完成",
|
||||
"disallowedIsp": "不允許的網際網路服務供應商",
|
||||
"originalsOnly": "僅限原創",
|
||||
"noDisney": "不支援(IP被Disney+禁止)",
|
||||
"unsupportedRegion": "不支援的國家/地區",
|
||||
"failedNetwork": "測試失敗(網路連線問題)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"page": {
|
||||
"title": "日誌",
|
||||
"actions": {
|
||||
"pause": "暫停",
|
||||
"resume": "繼續",
|
||||
@@ -470,20 +491,29 @@
|
||||
"info": "INFO",
|
||||
"warn": "WARN",
|
||||
"error": "ERROR"
|
||||
},
|
||||
"header": {
|
||||
"title": "日誌"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"page": {
|
||||
"title": "規則",
|
||||
"provider": {
|
||||
"trigger": "規則集合",
|
||||
"dialogTitle": "規則集合",
|
||||
"actions": {
|
||||
"updateAll": "全部更新",
|
||||
"update": "更新"
|
||||
},
|
||||
"notices": {
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "規則"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"notifications": {
|
||||
"provider": {
|
||||
"updateSuccess": "{{name}} updated successfully",
|
||||
"updateFailed": "Failed to update {{name}}: {{message}}",
|
||||
"genericError": "Update failed: {{message}}",
|
||||
@@ -492,66 +522,69 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"title": "編輯規則",
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "規則類型",
|
||||
"content": "規則內容",
|
||||
"proxyPolicy": "代理策略"
|
||||
"modals": {
|
||||
"editor": {
|
||||
"form": {
|
||||
"labels": {
|
||||
"type": "規則類型",
|
||||
"content": "規則內容",
|
||||
"proxyPolicy": "代理策略"
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "跳過 DNS 解析"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "新增前置規則",
|
||||
"appendRule": "新增後置規則"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "規則條件為必填",
|
||||
"invalidRule": "無效規則"
|
||||
}
|
||||
},
|
||||
"toggles": {
|
||||
"noResolve": "跳過 DNS 解析"
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "配對完整網域 (DOMAIN)",
|
||||
"DOMAIN-SUFFIX": "配對網域後綴 (DOMAIN-SUFFIX)",
|
||||
"DOMAIN-KEYWORD": "配對網域關鍵字 (DOMAIN-KEYWORD)",
|
||||
"DOMAIN-REGEX": "配對網域正規表示式 (DOMAIN-REGEX)",
|
||||
"GEOSITE": "配對 Geosite 內的網域 (GEOSITE)",
|
||||
"GEOIP": "配對 IP 所屬國家代碼 (GEOIP)",
|
||||
"SRC-GEOIP": "配對來源 IP 所屬國家代碼 (SRC-GEOIP)",
|
||||
"IP-ASN": "配對 IP 所屬 ASN (IP-ASN)",
|
||||
"SRC-IP-ASN": "配對來源 IP 所屬 ASN (SRC-IP-ASN)",
|
||||
"IP-CIDR": "配對 IP 位址範圍 (IP-CIDR)",
|
||||
"IP-CIDR6": "配對 IP 位址範圍 (IP-CIDR6)",
|
||||
"SRC-IP-CIDR": "配對來源 IP 位址範圍 (SRC-IP-CIDR)",
|
||||
"IP-SUFFIX": "配對 IP 後綴範圍 (IP-SUFFIX)",
|
||||
"SRC-IP-SUFFIX": "配對來源 IP 後綴範圍 (SRC-IP-SUFFIX)",
|
||||
"SRC-PORT": "配對請求來源連接埠範圍 (SRC-PORT)",
|
||||
"DST-PORT": "配對請求目標連接埠範圍 (DST-PORT)",
|
||||
"IN-PORT": "配對傳入連接埠 (IN-PORT)",
|
||||
"DSCP": "DSCP標記(僅限 TPROXY UDP 傳入)(DSCP)",
|
||||
"PROCESS-NAME": "配對程序名稱 (PROCESS-NAME)",
|
||||
"PROCESS-PATH": "配對完整程序路徑 (PROCESS-PATH)",
|
||||
"PROCESS-NAME-REGEX": "正規表示式配對完整程序名稱 (PROCESS-NAME-REGEX)",
|
||||
"PROCESS-PATH-REGEX": "正規表示式配對完整程序路徑 (PROCESS-PATH-REGEX)",
|
||||
"NETWORK": "配對傳輸協定 (TCP/UDP) (NETWORK)",
|
||||
"UID": "配對 Linux 使用者 ID (UID)",
|
||||
"IN-TYPE": "配對傳入類型 (IN-TYPE)",
|
||||
"IN-USER": "配對傳入使用者名稱 (IN-USER)",
|
||||
"IN-NAME": "配對傳入名稱 (IN-NAME)",
|
||||
"SUB-RULE": "子規則 (SUB-RULE)",
|
||||
"RULE-SET": "配對規則集 (RULE-SET)",
|
||||
"AND": "邏輯與 (AND)",
|
||||
"OR": "邏輯或 (OR)",
|
||||
"NOT": "邏輯非 (NOT)",
|
||||
"MATCH": "配對所有請求 (MATCH)"
|
||||
},
|
||||
"actions": {
|
||||
"prependRule": "新增前置規則",
|
||||
"appendRule": "新增後置規則"
|
||||
},
|
||||
"validation": {
|
||||
"conditionRequired": "規則條件為必填",
|
||||
"invalidRule": "無效規則"
|
||||
"header": {
|
||||
"title": "編輯規則"
|
||||
}
|
||||
},
|
||||
"ruleTypes": {
|
||||
"DOMAIN": "配對完整網域 (DOMAIN)",
|
||||
"DOMAIN-SUFFIX": "配對網域後綴 (DOMAIN-SUFFIX)",
|
||||
"DOMAIN-KEYWORD": "配對網域關鍵字 (DOMAIN-KEYWORD)",
|
||||
"DOMAIN-REGEX": "配對網域正規表示式 (DOMAIN-REGEX)",
|
||||
"GEOSITE": "配對 Geosite 內的網域 (GEOSITE)",
|
||||
"GEOIP": "配對 IP 所屬國家代碼 (GEOIP)",
|
||||
"SRC-GEOIP": "配對來源 IP 所屬國家代碼 (SRC-GEOIP)",
|
||||
"IP-ASN": "配對 IP 所屬 ASN (IP-ASN)",
|
||||
"SRC-IP-ASN": "配對來源 IP 所屬 ASN (SRC-IP-ASN)",
|
||||
"IP-CIDR": "配對 IP 位址範圍 (IP-CIDR)",
|
||||
"IP-CIDR6": "配對 IP 位址範圍 (IP-CIDR6)",
|
||||
"SRC-IP-CIDR": "配對來源 IP 位址範圍 (SRC-IP-CIDR)",
|
||||
"IP-SUFFIX": "配對 IP 後綴範圍 (IP-SUFFIX)",
|
||||
"SRC-IP-SUFFIX": "配對來源 IP 後綴範圍 (SRC-IP-SUFFIX)",
|
||||
"SRC-PORT": "配對請求來源連接埠範圍 (SRC-PORT)",
|
||||
"DST-PORT": "配對請求目標連接埠範圍 (DST-PORT)",
|
||||
"IN-PORT": "配對傳入連接埠 (IN-PORT)",
|
||||
"DSCP": "DSCP標記(僅限 TPROXY UDP 傳入)(DSCP)",
|
||||
"PROCESS-NAME": "配對程序名稱 (PROCESS-NAME)",
|
||||
"PROCESS-PATH": "配對完整程序路徑 (PROCESS-PATH)",
|
||||
"PROCESS-NAME-REGEX": "正規表示式配對完整程序名稱 (PROCESS-NAME-REGEX)",
|
||||
"PROCESS-PATH-REGEX": "正規表示式配對完整程序路徑 (PROCESS-PATH-REGEX)",
|
||||
"NETWORK": "配對傳輸協定 (TCP/UDP) (NETWORK)",
|
||||
"UID": "配對 Linux 使用者 ID (UID)",
|
||||
"IN-TYPE": "配對傳入類型 (IN-TYPE)",
|
||||
"IN-USER": "配對傳入使用者名稱 (IN-USER)",
|
||||
"IN-NAME": "配對傳入名稱 (IN-NAME)",
|
||||
"SUB-RULE": "子規則 (SUB-RULE)",
|
||||
"RULE-SET": "配對規則集 (RULE-SET)",
|
||||
"AND": "邏輯與 (AND)",
|
||||
"OR": "邏輯或 (OR)",
|
||||
"NOT": "邏輯非 (NOT)",
|
||||
"MATCH": "配對所有請求 (MATCH)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"page": {
|
||||
"title": "首頁",
|
||||
"tooltips": {
|
||||
"lightweightMode": "輕量模式",
|
||||
"manual": "使用手冊",
|
||||
@@ -563,7 +596,6 @@
|
||||
"proxyMode": "代理模式"
|
||||
},
|
||||
"settings": {
|
||||
"title": "首頁設定",
|
||||
"cards": {
|
||||
"profile": "訂閱卡",
|
||||
"currentProxy": "目前代理卡",
|
||||
@@ -574,10 +606,16 @@
|
||||
"ip": "IP資訊卡",
|
||||
"clashInfo": "Clash 資訊卡",
|
||||
"systemInfo": "系統資訊卡"
|
||||
},
|
||||
"header": {
|
||||
"title": "首頁設定"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"title": "首頁"
|
||||
}
|
||||
},
|
||||
"cards": {
|
||||
"components": {
|
||||
"proxyTun": {
|
||||
"status": {
|
||||
"systemProxyEnabled": "系統代理已啟用,您的應用程式將透過代理存取網路",
|
||||
@@ -691,13 +729,15 @@
|
||||
},
|
||||
"unlock": {
|
||||
"page": {
|
||||
"title": "解鎖測試",
|
||||
"actions": {
|
||||
"testing": "測試中..."
|
||||
},
|
||||
"empty": "目前沒有解鎖測試項目",
|
||||
"messages": {
|
||||
"detectionTimeout": "檢測逾時或失敗"
|
||||
},
|
||||
"header": {
|
||||
"title": "解鎖測試"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -36,7 +36,7 @@ type OrderFunc = (list: IConnectionsItem[]) => IConnectionsItem[];
|
||||
const ORDER_OPTIONS = [
|
||||
{
|
||||
id: "default",
|
||||
labelKey: "connections.order.default",
|
||||
labelKey: "connections.components.order.default",
|
||||
fn: (list: IConnectionsItem[]) =>
|
||||
list.sort(
|
||||
(a, b) =>
|
||||
@@ -46,13 +46,13 @@ const ORDER_OPTIONS = [
|
||||
},
|
||||
{
|
||||
id: "uploadSpeed",
|
||||
labelKey: "connections.order.uploadSpeed",
|
||||
labelKey: "connections.components.order.uploadSpeed",
|
||||
fn: (list: IConnectionsItem[]) =>
|
||||
list.sort((a, b) => b.curUpload! - a.curUpload!),
|
||||
},
|
||||
{
|
||||
id: "downloadSpeed",
|
||||
labelKey: "connections.order.downloadSpeed",
|
||||
labelKey: "connections.components.order.downloadSpeed",
|
||||
fn: (list: IConnectionsItem[]) =>
|
||||
list.sort((a, b) => b.curDownload! - a.curDownload!),
|
||||
},
|
||||
@@ -150,7 +150,7 @@ const ConnectionsPage = () => {
|
||||
full
|
||||
title={
|
||||
<span style={{ whiteSpace: "nowrap" }}>
|
||||
{t("connections.page.title")}
|
||||
{t("connections.page.header.title")}
|
||||
</span>
|
||||
}
|
||||
contentStyle={{
|
||||
|
||||
@@ -112,7 +112,7 @@ const HomeSettingsDialog = ({
|
||||
|
||||
return (
|
||||
<Dialog open={open} onClose={onClose} maxWidth="xs" fullWidth>
|
||||
<DialogTitle>{t("home.page.settings.title")}</DialogTitle>
|
||||
<DialogTitle>{t("home.page.settings.header.title")}</DialogTitle>
|
||||
<DialogContent>
|
||||
<FormGroup>
|
||||
<FormControlLabel
|
||||
@@ -364,7 +364,7 @@ const HomePage = () => {
|
||||
);
|
||||
return (
|
||||
<BasePage
|
||||
title={t("home.page.title")}
|
||||
title={t("home.page.header.title")}
|
||||
contentStyle={{ padding: 2 }}
|
||||
header={
|
||||
<Box sx={{ display: "flex", alignItems: "center" }}>
|
||||
|
||||
@@ -60,7 +60,7 @@ const LogPage = () => {
|
||||
return (
|
||||
<BasePage
|
||||
full
|
||||
title={t("logs.page.title")}
|
||||
title={t("logs.page.header.title")}
|
||||
contentStyle={{
|
||||
height: "100%",
|
||||
display: "flex",
|
||||
|
||||
@@ -142,8 +142,8 @@ const ProxyPage = () => {
|
||||
contentStyle={{ height: "101.5%" }}
|
||||
title={
|
||||
isChainMode
|
||||
? t("proxies.page.title.chainMode")
|
||||
: t("proxies.page.title.default")
|
||||
? t("proxies.page.header.title.chainMode")
|
||||
: t("proxies.page.header.title.default")
|
||||
}
|
||||
header={
|
||||
<Box display="flex" alignItems="center" gap={1}>
|
||||
|
||||
@@ -48,7 +48,7 @@ const RulesPage = () => {
|
||||
return (
|
||||
<BasePage
|
||||
full
|
||||
title={t("rules.page.title")}
|
||||
title={t("rules.page.header.title")}
|
||||
contentStyle={{
|
||||
height: "100%",
|
||||
display: "flex",
|
||||
|
||||
@@ -141,7 +141,7 @@ const TestPage = () => {
|
||||
return (
|
||||
<BasePage
|
||||
full
|
||||
title={t("tests.page.title")}
|
||||
title={t("tests.page.header.title")}
|
||||
header={
|
||||
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
|
||||
<Button
|
||||
|
||||
@@ -38,16 +38,17 @@ const UNLOCK_RESULTS_STORAGE_KEY = "clash_verge_unlock_results";
|
||||
const UNLOCK_RESULTS_TIME_KEY = "clash_verge_unlock_time";
|
||||
|
||||
const STATUS_LABEL_KEYS: Record<string, string> = {
|
||||
Pending: "tests.statuses.pending",
|
||||
Yes: "tests.statuses.yes",
|
||||
No: "tests.statuses.no",
|
||||
Failed: "tests.statuses.failed",
|
||||
Completed: "tests.statuses.completed",
|
||||
"Disallowed ISP": "tests.statuses.disallowedIsp",
|
||||
"Originals Only": "tests.statuses.originalsOnly",
|
||||
"No (IP Banned By Disney+)": "tests.statuses.noDisney",
|
||||
"Unsupported Country/Region": "tests.statuses.unsupportedRegion",
|
||||
"Failed (Network Connection)": "tests.statuses.failedNetwork",
|
||||
Pending: "tests.feedback.statuses.test.pending",
|
||||
Yes: "tests.feedback.statuses.test.yes",
|
||||
No: "tests.feedback.statuses.test.no",
|
||||
Failed: "tests.feedback.statuses.test.failed",
|
||||
Completed: "tests.feedback.statuses.test.completed",
|
||||
"Disallowed ISP": "tests.feedback.statuses.test.disallowedIsp",
|
||||
"Originals Only": "tests.feedback.statuses.test.originalsOnly",
|
||||
"No (IP Banned By Disney+)": "tests.feedback.statuses.test.noDisney",
|
||||
"Unsupported Country/Region":
|
||||
"tests.feedback.statuses.test.unsupportedRegion",
|
||||
"Failed (Network Connection)": "tests.feedback.statuses.test.failedNetwork",
|
||||
};
|
||||
|
||||
const UnlockPage = () => {
|
||||
@@ -263,7 +264,7 @@ const UnlockPage = () => {
|
||||
|
||||
return (
|
||||
<BasePage
|
||||
title={t("unlock.page.title")}
|
||||
title={t("unlock.page.header.title")}
|
||||
header={
|
||||
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
|
||||
<Button
|
||||
@@ -337,7 +338,7 @@ const UnlockPage = () => {
|
||||
>
|
||||
{item.name}
|
||||
</Typography>
|
||||
<Tooltip title={t("tests.item.actions.test")}>
|
||||
<Tooltip title={t("tests.components.item.actions.test")}>
|
||||
<span>
|
||||
<Button
|
||||
size="small"
|
||||
|
||||
Reference in New Issue
Block a user