Files
HY2XS_flamy/apps/frontend/src/lang/package/en.ts
T

351 lines
14 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
// МаршрутЛокализация
route: {
dashboard: "Dashboard",
peer: "Peers",
peerList: "Peer Management",
hysteria: "Hysteria",
hysteriaList: "Hysteria Manage",
config: "System",
configList: "System Config",
monitor: "Monitor",
monitorSystem: "System Monitor",
log: "Log",
logSystem: "System Log",
logHysteria: "Hysteria Log",
},
// Локализация страницы входа
login: {
title: "HY2XS admin",
username: "Username",
password: "Password",
login: "Login",
capsLockOn: "Caps lock is On",
},
// Требования к учётным данным администратора: общие для формы входа и формы
// смены пароля. См. комментарий в ru.ts.
credentials: {
usernameFormat: "Username: {min} to {max} characters from {charset}",
passwordFormat:
"Password: {min} to {max} characters and at most {maxBytes} UTF-8 bytes, no control characters or U+FEFF",
},
dashboard: {
stale: "Dashboard data is stale. Retrying automatically...",
topPeers24h: "Top peers (24h)",
topPeersRange: "Top peers ({range})",
refreshFailed: "Failed to refresh dashboard data",
cpu: "CPU",
ram: "RAM",
disk: "Disk",
peers: "Peers",
onlinePeers: "Online peers",
onlineDevices: "Online devices",
todayDownload: "Today download",
todayUpload: "Today upload",
trafficChart: "Traffic & System Timeseries",
trafficSeriesChart: "Traffic: download/upload",
noTrafficData: "No traffic data for the selected period",
systemSeriesChart: "System: CPU/RAM",
download: "Download",
upload: "Upload",
total: "Total",
serviceStateLabel: "Hysteria service",
serviceState: {
active: "Running",
inactive: "Stopped",
unknown: "State unknown",
},
trafficApiLabel: "Traffic Stats API",
trafficApiReachable: "Reachable",
trafficApiUnreachable: "Unreachable",
security: {
hysteriaStopped: "Hysteria2 is stopped",
hysteriaStateUnknown: "Hysteria2 service state is unknown: systemd did not answer",
trafficApiUnavailable: "Traffic API is unavailable",
},
error: {
trafficApiUnavailable: "Traffic API is unavailable",
collectorStale: "Collector data is stale",
},
},
admin: {
changePasswordTitle: "Change password",
oldPassword: "Old password",
newPassword: "New password",
forcePasswordChangeNotice:
"You must change your password before continuing.",
changedSuccess: "Password updated",
},
// Локализация навигационной панели
navbar: {
logout: "Logout",
},
common: {
id: "ID",
createTime: "Create Time",
operate: "Operate",
edit: "Edit",
delete: "Delete",
deleted: "Status",
all: "All",
enable: "Enable",
disable: "Disable",
search: "Search",
reset: "Reset",
add: "Add",
confirm: "Confirm",
cancel: "Cancel",
close: "Close",
copySuccess: "Copy successful",
nodeUrl: "Node URL",
nodeQrCode: "Node QR Code",
resetTraffic: "Reset traffic",
import: "Import",
export: "Export",
save: "Save",
update: "Update",
downloadSuccess: "Download successful",
// `wait`, `enableSuccess` and `disableSuccess` are gone together with the
// operations the panel does not have: starting, stopping and changing the
// version of Hysteria. That lifecycle belongs to systemd and the orchestrator.
success: "Success",
refresh: "Refresh",
yes: "Yes",
no: "No",
securityRisk: "Security Risks",
required: "Required",
warning: "Warning",
fileFormatUnsupported: "File format not supported",
fileTooLarge: "The file is too big, less than 2 MB",
weekLater: "A week later",
monthLater: "A month later",
yearLater: "A year later",
hourLater: "A hour later",
dayLater: "A day later",
deleteConfirm: "Are you sure to delete peer \u300c{username}\u300d?",
resetTrafficConfirm: "Are you sure to reset peer traffic?",
invalid: "Invalid value",
switchLanguageSuccess: "Language switched successfully",
logoutConfirm: "Are you sure you want to log out?",
sessionExpired: "Your session has expired. Sign in again to continue.",
signInRequired: "Signing in is required.",
signIn: "Sign in",
systemError: "System error",
networkError: "The server is not responding. Check the connection.",
},
error: {
field: {
name: "Peer name",
secret: "Secret",
remark: "Remark",
quotaBytes: "Quota",
expiresAt: "Expiry",
maxDevices: "Max devices",
disabled: "State",
bannedUntil: "Banned until",
file: "File",
id: "Identifier",
username: "Username",
pass: "Password",
oldPassword: "Old password",
newPassword: "New password",
key: "Setting key",
value: "Setting value",
numLine: "Line count",
pageNum: "Page number",
pageSize: "Page size",
},
code: {
required: "“{field}”: required",
min: "“{field}”: must not be less than {min}",
max: "“{field}”: must not be greater than {max}",
min_length: "“{field}”: at least {min} characters",
max_length: "“{field}”: at most {max} characters",
len: "“{field}”: length must be exactly {len}",
oneof: "“{field}”: allowed values are {values}",
gt: "“{field}”: must be greater than {gt}",
peer_name:
"“{field}”: {min} to {max} characters from {charset}. Spaces, non-latin letters and / : ; . are not allowed",
credential_format: "“{field}”: {min} to {max} characters from {charset}",
admin_password_format:
"“{field}”: {min} to {max} characters and at most {maxBytes} UTF-8 bytes, no control characters or U+FEFF",
rule_violated: "“{field}”: value is not acceptable",
validation_failed: "Validation failed",
body_invalid:
"Request could not be parsed: check field formats and types",
peer_name_taken: "A peer with this name already exists",
peer_name_reserved: "This name is reserved for the installer peer",
peer_bootstrap_identity_locked:
"The installer peer's name and secret are mirrored in a file on the server and cannot be changed from the panel. Delete the bootstrap peer entirely if it is no longer needed.",
invalid_credentials: "Wrong username or password",
// The phrase must open with what has ALREADY been applied, otherwise it
// reads as "the operation failed" and the operator repeats an action
// that in fact went through.
//
// It also names no specific operation. This code is reported by
// disabling a peer, a temporary ban, secret rotation, quota and expiry
// reductions, a lower device limit, a batch import and peer deletion;
// the previous "new connections for this peer are now refused" held only
// for the first case and is meaningless for a deleted peer.
peer_disconnect_failed:
"The changes were saved, but the related active sessions could not be terminated: the Hysteria Traffic Stats API is unreachable. Established connections may keep working until the client reconnects. Check the hysteria-server service and retry.",
import_file_extension: "Import accepts .json files only",
unauthorized: "Signing in is required",
session_expired: "Session expired",
token_invalid: "Session is not valid",
account_disabled: "Account is disabled",
},
},
sidebar: {
developedBy: "Made at {brand}",
},
info: {
expireTime: "y-M-d H:m:s",
greeting1: "The cool and fresh air awakens your energy for the day🌅!",
greeting2: "Good morning",
greeting3: "Good afternoon",
greeting4: "Good evening",
greeting5:
"I want to be a shooting star, cutting through the darkness, just to illuminate your dreams, good night🌛!",
},
peer: {
name: "Peer",
remark: "Remark",
secret: "Secret",
form: {
namePlaceholder: "client-01",
// The character set is stated as service.IsValidPeerName accepts it. The
// previous wording described the rule that was in force before EX-03.
nameHint:
"Peer identifier: 6 to 32 characters — latin letters, digits and !@#$%^&*()_+-=. The name becomes part of the auto-generated secret and is shown to the client as the profile name.",
remarkPlaceholder: "laptop",
remarkHint: "Optional operator note. It is never shown to the client.",
secretPlaceholder: "leave empty to generate one",
secretHint:
"Client connection password. Leave empty to generate one automatically. If set manually: 6 to 128 characters.",
quotaHint: "Traffic limit in bytes. Use -1 for unlimited.",
},
maxDevices: "Max devices",
disabled: "Disabled",
status: "Status",
traffic: "Traffic",
devices: "Devices",
lastConnectionAt: "Last connection",
overview: "Overview",
authId: "Auth ID",
clientUri: "Client URI",
clientQr: "Client QR",
unlimited: "Unlimited",
secretRotateConfirm:
"Rotate peer secret? Existing client configurations will stop working until updated.",
exportSettings: "Export settings",
exportBackup: "Backup",
exportSettingsHint:
"Peer list without secrets. Safe to store and share, but after importing on another server the peers get new secrets, so existing client links stop working.",
exportBackupConfirm:
"A backup contains the LIVE connection secrets of every peer in plain text: anyone who gets this file gets VPN access. Treat it like a password and delete it once the migration is done. Only this kind of copy keeps existing client links working after moving to another server.",
exportBackupConfirmButton: "I understand, download with secrets",
quota: "Quota",
download: "Download",
upload: "Upload",
expireTime: "Expire Time",
kickUtilTimeLast: "Offline Remaining Time",
kickUtilTime: "Offline Time",
deviceNo: "Limit Devices",
onlineStatus: "Online Status",
online: "Online",
offline: "Offline",
onlineUnknown: "Online unknown",
onlineUnavailable: "Live connection state is currently unavailable",
onlineUnavailableHint:
"The Hysteria Traffic Stats API did not answer, so online status and device counts are unknown. Stored peer state in the table is accurate.",
device: "Online Devices",
loginAt: "Last login time",
conAt: "Last connection time",
createTime: "Create Time",
releaseSuccess: "Release successful",
kick: "Ban temporarily",
kickTip:
"Drop the session and refuse new connections until the ban expires",
kickConfirm:
"Ban peer “{name}” until {until}? The current session will be dropped and new connections refused until then.",
kickSuccess: "Peer banned temporarily",
releaseKick: "Lift ban",
releaseKickTip: "Lift the temporary ban early",
// Disabling and the temporary ban are separate mechanisms: the ban expires
// on its own, disabling is only undone by hand.
enablePeer: "Enable peer",
disablePeer: "Disable peer",
disableConfirm:
"Disable peer “{name}”? The current session will be dropped and new connections refused until the peer is enabled again.",
enableSuccess: "Peer enabled",
disableSuccess: "Peer disabled",
createdAt: "Created at",
bannedUntil: "Banned until",
totalTraffic: "Total traffic",
copyUri: "Copy URI",
more: "More",
},
config: {
orchestratorManaged: "Managed by hy2xs-orchestrator reconfigure",
resetTrafficCron: "Reset traffic schedule task",
resetTrafficCronTip:
"Scheduled task expression, reference: https://pkg.go.dev/github.com/robfig/cron/v3. An empty value disables the automatic reset",
resetTrafficMonth: "Run once a month, midnight, first of month",
resetTrafficWeek: "Run once a week, midnight between Sat/Sun",
},
// The `monitor` section is gone together with its only consumer — the
// "Hysteria2 Status" tag on the config page. The service state has three
// values, not two, and its phrases live in `dashboard.serviceState`.
log: {
numLine: "Number of lines",
level: "Level",
message: "Message",
time: "Time",
exportFailed: "Could not export the log",
},
errorPage: {
back: "Back",
oops: "Oops!",
forbiddenTitle: "You do not have permission to access this page",
forbiddenGo: "Or you can go:",
backHome: "Back to Home",
forbiddenImageAlt: "Girl has dropped her ice cream.",
notFoundHeadline: "The webmaster said that you can not enter this page...",
notFoundInfo:
"Please check that the URL you entered is correct, or click the button below to return to the homepage.",
notFoundBackHome: "Back to home",
},
hysteria: {
hysteria2Version: "Hysteria2 Version",
ownedByOrchestrator: "The Hysteria configuration is owned by the installer",
ownedByOrchestratorHint:
"The panel shows /etc/hysteria/config.yaml read-only. Changes are applied by `hy2xs-orchestrator reconfigure`.",
listen: "Listen address",
auth: "Peer authentication",
tls: "TLS",
obfs: "Obfuscation",
quic: "QUIC parameters",
bandwidth: "Bandwidth",
congestion: "Congestion control",
trafficStats: "Traffic Stats API",
notSet: "not set",
sectionMissing: "The section is absent from the configuration",
tlsMissing: "Neither tls nor acme is configured",
valuesHidden: "values are not shown",
secretSet: "set",
secretMissing: "not set",
obfsPasswordHint: "handed out in the peer share link",
driftTitle: "Configuration drift",
driftHint:
"The file contains sections outside the HY2XS production profile. The orchestrator neither creates nor supports them: the configuration was most likely edited by hand.",
trafficStatsMissing: "Traffic Stats API is not configured",
trafficStatsMissingHint:
"Without the trafficStats section the device limit, traffic accounting and forced disconnect do not work: the panel reaches Hysteria only through this API.",
trafficStatsUnreachable:
"the panel cannot reach this address: the Traffic Stats API is queried through 127.0.0.1 only. While the addresses differ, the device limit, traffic accounting and forced disconnect do not work",
trafficStatsWildcard:
"the API is reachable but listens on every interface. The HY2XS production profile uses 127.0.0.1: run hy2xs-orchestrator reconfigure",
},
};