mirror of
https://github.com/WGDashboard/WGDashboard.git
synced 2026-08-03 22:42:59 +00:00
Compare commits
82 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b26ae90807 | |||
| 66d171c432 | |||
| 1a878599b1 | |||
| c612022717 | |||
| 75747a2979 | |||
| a85a8668a7 | |||
| 2ed49abb1b | |||
| 409e6d49b2 | |||
| 85be6d53d0 | |||
| bf6f58eb5e | |||
| e0bc6a10d0 | |||
| 715a266ca4 | |||
| fa4b3ece56 | |||
| aac2a002bb | |||
| 8574acaf6e | |||
| ddf4639354 | |||
| 9bd394f351 | |||
| e58b1d670b | |||
| af5e7974c3 | |||
| 4524a55b23 | |||
| f942eaf1b6 | |||
| 9287e81ef1 | |||
| 5462326f79 | |||
| fa04ad1395 | |||
| abdd85bdd5 | |||
| dba55d57e8 | |||
| 9819c96717 | |||
| 1b0885bffe | |||
| c0a8540ab8 | |||
| f3b95f03a1 | |||
| 5f06f3da52 | |||
| 10a7fb809b | |||
| d3ea1f3da2 | |||
| 74d0471a6f | |||
| a1c1805409 | |||
| b843145bed | |||
| 119920b665 | |||
| 6190e2d290 | |||
| 79de99d146 | |||
| 56a9b3df0a | |||
| 4df6413dba | |||
| fcd0ada639 | |||
| 6b6bd155aa | |||
| 9c91b1bca5 | |||
| 1a5c0e5b24 | |||
| 981b30e4af | |||
| 30c84d8cbf | |||
| 4c538c54a8 | |||
| ad7a8f1d08 | |||
| f02a07dab4 | |||
| c61b0fc1e1 | |||
| fed7dfcb73 | |||
| 0d69c811ab | |||
| 83274add22 | |||
| 7497d1b6d4 | |||
| 239bc144e3 | |||
| 1ece64abe1 | |||
| 915783699b | |||
| 43f6bd41c9 | |||
| 98c017dd56 | |||
| 811ed3251b | |||
| 665b0f1484 | |||
| 9e26d845da | |||
| 6ddf20f5ce | |||
| 27ed0710cc | |||
| cb87c9f345 | |||
| 21730102ae | |||
| b1ae05152e | |||
| cc87f01e2f | |||
| 85dfa1b078 | |||
| fdff54e11e | |||
| 0894f38660 | |||
| f643d8ef25 | |||
| e437284980 | |||
| f6e0d330ac | |||
| 890cbf0f36 | |||
| 36cf2ea2e8 | |||
| a8f7bd0280 | |||
| aa6517046d | |||
| 42e4d8c7ba | |||
| 3d1da38cbc | |||
| 5ae8490999 |
@@ -21,6 +21,11 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7
|
||||
|
||||
- name: Log in to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
@@ -30,9 +35,10 @@ jobs:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build and export
|
||||
- name: Build and export (multi-arch)
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ env.DOCKER_IMAGE }}:latest
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7
|
||||
|
||||
@@ -8,9 +8,6 @@ ARG wg_port="51820"
|
||||
# Following ENV variables are changable on container runtime because /entrypoint.sh handles that. See compose.yaml for more info.
|
||||
ENV TZ="Europe/Amsterdam"
|
||||
ENV global_dns="1.1.1.1"
|
||||
|
||||
ENV enable="none"
|
||||
|
||||
ENV isolate="none"
|
||||
ENV public_ip="0.0.0.0"
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<a href="https://github.com/donaldzou/wireguard-dashboard/releases/latest"><img src="https://img.shields.io/github/v/release/donaldzou/wireguard-dashboard"></a>
|
||||
<a href="https://wakatime.com/badge/github/donaldzou/WGDashboard"><img src="https://wakatime.com/badge/github/donaldzou/WGDashboard.svg" alt="wakatime"></a>
|
||||
<a href="https://hits.seeyoufarm.com"><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fdonaldzou%2FWGDashboard&count_bg=%2379C83D&title_bg=%23555555&icon=github.svg&icon_color=%23E7E7E7&title=Visitor&edge_flat=false"/></a>
|
||||
<img src="https://img.shields.io/docker/pulls/donaldzou/wgdashboard?logo=docker&label=Docker%20Image%20Pulls&labelColor=ffffff">
|
||||
</p>
|
||||
<p align="center">Monitoring WireGuard is not convenient, in most case, you'll need to login to your server and type <code>wg show</code>. That's why this project is being created, to view and manage all WireGuard configurations in a easy way.</p>
|
||||
<p align="center">With all these awesome features, while keeping it <b>easy to install and use</b></p>
|
||||
@@ -29,7 +30,13 @@
|
||||
Join our Discord Server for quick help, or you wanna chat about this project!
|
||||
</p>
|
||||
<p align="center">
|
||||
<a align="center" href="https://discord.gg/MXDBpuRB"><img src="https://img.shields.io/discord/1276818723637956628?labelColor=ffffff&style=for-the-badge&logo=discord&label=Discord"></a>
|
||||
<a align="center" href="https://discord.gg/72TwzjeuWm"><img src="https://img.shields.io/discord/1276818723637956628?labelColor=ffffff&style=for-the-badge&logo=discord&label=Discord"></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
Alternatively, you can also reach out at our Matrix.org Chatroom :)
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://app.element.io/#/room/#wgd:matrix.org">Matrix.org Chatroom</a>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
+1
-6
@@ -3,14 +3,9 @@ services:
|
||||
image: donaldzou/wgdashboard:latest
|
||||
restart: unless-stopped
|
||||
container_name: wgdashboard
|
||||
environment:
|
||||
- tz=Europe/Amsterdam # <--- Set container timezone, default: Europe/Amsterdam.
|
||||
- global_dns=9.9.9.9 # <--- Set global DNS address, default: 1.1.1.1.
|
||||
|
||||
#environment:
|
||||
#- tz= # <--- Set container timezone, default: Europe/Amsterdam.
|
||||
#- global_dns= # <--- Set global DNS address, default: 1.1.1.1.
|
||||
|
||||
#- enable= # <--- Set the interfaces that will be enabled on startup, default: 'none'.
|
||||
#- isolate= # <--- Set the interfaces that will disallow peer communication, default: 'none'.
|
||||
#- public_ip= # <--- Set public IP to ensure the correct one is chosen, defaulting to the IP give by ifconfig.me.
|
||||
ports:
|
||||
|
||||
+54
-41
@@ -1,5 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Path to the configuration file (exists because of previous function).
|
||||
config_file="/data/wg-dashboard.ini"
|
||||
|
||||
echo "------------------------- START ----------------------------"
|
||||
echo "Starting the WireGuard Dashboard Docker container."
|
||||
|
||||
@@ -7,26 +10,39 @@ ensure_installation() {
|
||||
# When using a custom directory to store the files, this part moves over and makes sure the installation continues.
|
||||
echo "Quick-installing..."
|
||||
|
||||
[ ! -d "/data/db" ] && echo "Creating database dir" && mkdir /data/db
|
||||
ln -s /data/db "${WGDASH}/src/db"
|
||||
if [ ! -d "/data/db" ]; then
|
||||
echo "Creating database dir"
|
||||
mkdir /data/db
|
||||
fi
|
||||
|
||||
[ ! -f "/data/wg-dashboard.ini" ] && echo "Creating wg-dashboard.ini file" && touch /data/wg-dashboard.ini
|
||||
ln -s /data/wg-dashboard.ini "${WGDASH}/src/wg-dashboard.ini"
|
||||
if [ ! -d "${WGDASH}/src/db" ]; then
|
||||
ln -s /data/db "${WGDASH}/src/db"
|
||||
fi
|
||||
|
||||
if [ ! -f "${config_file}" ]; then
|
||||
echo "Creating wg-dashboard.ini file"
|
||||
touch "${config_file}"
|
||||
fi
|
||||
|
||||
if [ ! -f "${WGDASH}/src/wg-dashboard.ini" ]; then
|
||||
ln -s "${config_file}" "${WGDASH}/src/wg-dashboard.ini"
|
||||
fi
|
||||
|
||||
python3 -m venv "${WGDASH}"/src/venv
|
||||
. "${WGDASH}/src/venv/bin/activate"
|
||||
|
||||
echo "Moving PIP dependency from ephemerality to runtime environment: psutil"
|
||||
mv /usr/lib/python3.12/site-packages/psutil* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
||||
|
||||
|
||||
[ ! -d "${WGDASH}/src/venv/lib/python3.12/site-packages/psutil" ] && echo "Moving PIP dependency: psutil" && mv /usr/lib/python3.12/site-packages/psutil* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
||||
[ ! -d "${WGDASH}/src/venv/lib/python3.12/site-packages/bcrypt" ] && echo "Moving PIP dependency: bcrypt" && mv /usr/lib/python3.12/site-packages/bcrypt* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
||||
echo "Moving PIP dependency from ephemerality to runtime environment: bcrypt"
|
||||
mv /usr/lib/python3.12/site-packages/bcrypt* "${WGDASH}"/src/venv/lib/python3.12/site-packages
|
||||
|
||||
|
||||
chmod +x "${WGDASH}"/src/wgd.sh
|
||||
cd "${WGDASH}"/src || exit
|
||||
./wgd.sh install
|
||||
|
||||
echo "Looks like the installation succeeded."
|
||||
echo "Looks like the installation succeeded. Moving on."
|
||||
|
||||
# This first step is to ensure the wg0.conf file exists, and if not, then its copied over from the ephemeral container storage.
|
||||
# This is done so WGDashboard it works out of the box
|
||||
@@ -50,52 +66,45 @@ ensure_installation() {
|
||||
set_envvars() {
|
||||
printf "\n------------- SETTING ENVIRONMENT VARIABLES ----------------\n"
|
||||
|
||||
# Path to the configuration file (exists because of previous function).
|
||||
local config_file="/opt/wireguarddashboard/src/wg-dashboard.ini"
|
||||
|
||||
# Check if the file is empty
|
||||
if [ ! -s "$config_file" ]; then
|
||||
if [ ! -s "${config_file}" ]; then
|
||||
echo "Config file is empty. Creating [Peers] section."
|
||||
|
||||
# Create [Peers] section with initial values
|
||||
{
|
||||
echo "[Peers]"
|
||||
echo "remote_endpoint = ${public_ip}"
|
||||
echo "peer_global_dns = ${global_dns}"
|
||||
} > "$config_file"
|
||||
echo "remote_endpoint = ${public_ip}"
|
||||
#echo -e "\n[Server]"
|
||||
} > "${config_file}"
|
||||
|
||||
else
|
||||
echo "Config file is not empty, enforcing environment variables."
|
||||
|
||||
# Check and update the DNS if it has changed
|
||||
current_dns=$(grep "peer_global_dns = " "$config_file" | awk '{print $NF}')
|
||||
if [ "${global_dns}" != "$current_dns" ]; then
|
||||
echo "Changing default DNS."
|
||||
sed -i "s/^peer_global_dns = .*/peer_global_dns = ${global_dns}/" "$config_file"
|
||||
else
|
||||
echo "DNS is set correctly."
|
||||
echo "Config file is not empty, using pre-existing."
|
||||
fi
|
||||
|
||||
# Determine the public IP and update if necessary
|
||||
echo "{$public_ip}"
|
||||
echo "Verifying current variables..."
|
||||
|
||||
# Check and update the DNS if it has changed
|
||||
current_dns=$(grep "peer_global_dns = " "${config_file}" | awk '{print $NF}')
|
||||
if [ "${global_dns}" == "$current_dns" ]; then
|
||||
echo "DNS is correct, moving on."
|
||||
|
||||
else
|
||||
echo "Changing default DNS..."
|
||||
sed -i "s/^peer_global_dns = .*/peer_global_dns = ${global_dns}/" "${config_file}"
|
||||
fi
|
||||
|
||||
if [ "${public_ip}" == "0.0.0.0" ]; then
|
||||
|
||||
if [ "${public_ip}" = "0.0.0.0" ]; then
|
||||
default_ip=$(curl -s ifconfig.me)
|
||||
|
||||
echo "Trying to fetch the Public-IP using ifconfig.me: ${default_ip}"
|
||||
sed -i "s/^remote_endpoint = .*/remote_endpoint = ${default_ip}/" "$config_file"
|
||||
sed -i "s/^remote_endpoint = .*/remote_endpoint = ${default_ip}/" "${config_file}"
|
||||
|
||||
else
|
||||
current_ip=$(grep "remote_endpoint = " "$config_file" | awk '{print $NF}')
|
||||
|
||||
if [ "${public_ip}" != "$current_ip" ]; then
|
||||
echo "Setting the Public-IP using given variable: ${public_ip}"
|
||||
|
||||
sed -i "s/^remote_endpoint = .*/remote_endpoint = ${public_ip}/" "$config_file"
|
||||
echo "Public-IP is correct, moving on."
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
# === CORE SERVICES ===
|
||||
@@ -140,13 +149,16 @@ start_core() {
|
||||
done
|
||||
|
||||
# Isolating the matches.
|
||||
noneFound=0
|
||||
|
||||
for interface in "${do_isolate[@]}"; do
|
||||
|
||||
if [ "$interface" = "none" ] || [ "$interface" = "" ]; then
|
||||
echo "Found: $interface, stopping isolation checking."
|
||||
echo "Found none, stopping isolation checking."
|
||||
noneFound=1
|
||||
break
|
||||
else
|
||||
|
||||
else
|
||||
|
||||
if [ ! -f "/etc/wireguard/${interface}.conf" ]; then
|
||||
echo "Ignoring ${interface}"
|
||||
@@ -176,12 +188,13 @@ start_core() {
|
||||
|
||||
|
||||
for interface in "${non_isolate[@]}"; do
|
||||
if [ ! -f "/etc/wireguard/${interface}.conf" ]; then
|
||||
if [ $noneFound -eq 1 ]; then
|
||||
break
|
||||
|
||||
elif [ ! -f "/etc/wireguard/${interface}.conf" ]; then
|
||||
echo "Ignoring ${interface}"
|
||||
|
||||
elif [ -f "/etc/wireguard/${interface}.conf" ]; then
|
||||
|
||||
|
||||
echo "Removing isolation, if isolation is present for:" "$interface"
|
||||
|
||||
sed -i "/PostUp = iptables -I FORWARD -i ${interface} -o ${interface} -j DROP/d" /etc/wireguard/"${interface}".conf
|
||||
|
||||
+70
-43
@@ -27,7 +27,7 @@ import threading
|
||||
|
||||
from flask.json.provider import DefaultJSONProvider
|
||||
|
||||
DASHBOARD_VERSION = 'v4.1.0'
|
||||
DASHBOARD_VERSION = 'v4.1.3'
|
||||
CONFIGURATION_PATH = os.getenv('CONFIGURATION_PATH', '.')
|
||||
DB_PATH = os.path.join(CONFIGURATION_PATH, 'db')
|
||||
if not os.path.isdir(DB_PATH):
|
||||
@@ -116,7 +116,6 @@ class DashboardLogger:
|
||||
self.loggerdb.commit()
|
||||
|
||||
def log(self, URL: str = "", IP: str = "", Status: str = "true", Message: str = "") -> bool:
|
||||
pass
|
||||
try:
|
||||
with self.loggerdb:
|
||||
loggerdbCursor = self.loggerdb.cursor()
|
||||
@@ -289,7 +288,7 @@ class PeerJobs:
|
||||
except Exception as e:
|
||||
return False, str(e)
|
||||
|
||||
def deleteJob(self, Job: PeerJob) -> tuple[bool, list] | tuple[bool, str]:
|
||||
def deleteJob(self, Job: PeerJob, deletedFrom = 'Job Runner') -> tuple[bool, list] | tuple[bool, str]:
|
||||
try:
|
||||
if (len(str(Job.CreationDate))) == 0:
|
||||
return False, "Job does not exist"
|
||||
@@ -299,7 +298,7 @@ class PeerJobs:
|
||||
UPDATE PeerJobs SET ExpireDate = strftime('%Y-%m-%d %H:%M:%S','now') WHERE JobID = ?
|
||||
''', (Job.JobID,))
|
||||
self.jobdb.commit()
|
||||
JobLogger.log(Job.JobID, Message=f"Job is removed due to being deleted or finshed.")
|
||||
JobLogger.log(Job.JobID, Message=f"Job is removed by {deletedFrom} due to being deleted or finshed.")
|
||||
self.__getJobs()
|
||||
return True, list(
|
||||
filter(lambda x: x.Configuration == Job.Configuration and x.Peer == Job.Peer and x.JobID == Job.JobID,
|
||||
@@ -352,9 +351,15 @@ class PeerJobs:
|
||||
f"Peer {fp.id} from {c.Name} failed {job.Action}ed."
|
||||
)
|
||||
else:
|
||||
needToDelete.append(job)
|
||||
JobLogger.log(job.JobID, s["status"],
|
||||
f"Somehow can't find this peer {job.Peer} from {c.Name} failed {job.Action}ed."
|
||||
)
|
||||
# needToDelete.append(job)
|
||||
else:
|
||||
needToDelete.append(job)
|
||||
JobLogger.log(job.JobID, s["status"],
|
||||
f"Somehow can't find this peer {job.Peer} from {job.Configuration} failed {job.Action}ed."
|
||||
)
|
||||
# needToDelete.append(job)
|
||||
for j in needToDelete:
|
||||
self.deleteJob(j)
|
||||
|
||||
@@ -462,6 +467,11 @@ class WireguardConfiguration:
|
||||
self.Name = name
|
||||
self.__configPath = os.path.join(DashboardConfig.GetConfig("Server", "wg_conf_path")[1], f'{self.Name}.conf')
|
||||
|
||||
|
||||
backupPath = os.path.join(DashboardConfig.GetConfig("Server", "wg_conf_path")[1], 'WGDashboard_Backup')
|
||||
if not os.path.exists(backupPath):
|
||||
os.mkdir(backupPath)
|
||||
|
||||
if name is not None:
|
||||
if data is not None and "Backup" in data.keys():
|
||||
db = self.__importDatabase(
|
||||
@@ -475,6 +485,7 @@ class WireguardConfiguration:
|
||||
self.__parseConfigurationFile()
|
||||
self.__initPeersList()
|
||||
|
||||
|
||||
else:
|
||||
self.Name = data["ConfigurationName"]
|
||||
self.__configPath = os.path.join(DashboardConfig.GetConfig("Server", "wg_conf_path")[1], f'{self.Name}.conf')
|
||||
@@ -753,8 +764,17 @@ class WireguardConfiguration:
|
||||
""" % self.Name
|
||||
, newPeer)
|
||||
for p in peers:
|
||||
subprocess.check_output(f"wg set {self.Name} peer {p['id']} allowed-ips {p['allowed_ip']}",
|
||||
presharedKeyExist = len(p['preshared_key']) > 0
|
||||
rd = random.Random()
|
||||
uid = str(uuid.UUID(int=rd.getrandbits(128), version=4))
|
||||
if presharedKeyExist:
|
||||
with open(uid, "w+") as f:
|
||||
f.write(p['preshared_key'])
|
||||
|
||||
subprocess.check_output(f"wg set {self.Name} peer {p['id']} allowed-ips {p['allowed_ip'].replace(' ', '')}{f' preshared-key {uid}' if presharedKeyExist else ''}",
|
||||
shell=True, stderr=subprocess.STDOUT)
|
||||
if presharedKeyExist:
|
||||
os.remove(uid)
|
||||
subprocess.check_output(
|
||||
f"wg-quick save {self.Name}", shell=True, stderr=subprocess.STDOUT)
|
||||
self.getPeersList()
|
||||
@@ -783,14 +803,14 @@ class WireguardConfiguration:
|
||||
|
||||
presharedKeyExist = len(p['preshared_key']) > 0
|
||||
rd = random.Random()
|
||||
uid = uuid.UUID(int=rd.getrandbits(128), version=4)
|
||||
uid = str(uuid.UUID(int=rd.getrandbits(128), version=4))
|
||||
if presharedKeyExist:
|
||||
with open(f"{uid}", "w+") as f:
|
||||
with open(uid, "w+") as f:
|
||||
f.write(p['preshared_key'])
|
||||
|
||||
subprocess.check_output(f"wg set {self.Name} peer {p['id']} allowed-ips {p['allowed_ip'].replace(' ', '')}{f' preshared-key {uid}' if presharedKeyExist else ''}",
|
||||
shell=True, stderr=subprocess.STDOUT)
|
||||
if presharedKeyExist: os.remove(str(uid))
|
||||
if presharedKeyExist: os.remove(uid)
|
||||
else:
|
||||
return ResponseObject(False, "Failed to allow access of peer " + i)
|
||||
if not self.__wgSave():
|
||||
@@ -1084,35 +1104,42 @@ class WireguardConfiguration:
|
||||
original = []
|
||||
dataChanged = False
|
||||
with open(os.path.join(DashboardConfig.GetConfig("Server", "wg_conf_path")[1], f'{self.Name}.conf'), 'r') as f:
|
||||
original = f.readlines()
|
||||
original = [l.rstrip("\n") for l in original]
|
||||
allowEdit = ["Address", "PreUp", "PostUp", "PreDown", "PostDown", "ListenPost"]
|
||||
original = [l.rstrip("\n") for l in f.readlines()]
|
||||
allowEdit = ["Address", "PreUp", "PostUp", "PreDown", "PostDown", "ListenPort"]
|
||||
start = original.index("[Interface]")
|
||||
for line in range(start+1, len(original)):
|
||||
if original[line] == "[Peer]":
|
||||
break
|
||||
try:
|
||||
end = original.index("[Peer]")
|
||||
except ValueError as e:
|
||||
end = len(original)
|
||||
|
||||
new = ["[Interface]"]
|
||||
peerFound = False
|
||||
for line in range(start, end):
|
||||
split = re.split(r'\s*=\s*', original[line], 1)
|
||||
if len(split) == 2:
|
||||
key = split[0]
|
||||
value = split[1]
|
||||
if key in allowEdit and key in newData.keys() and value != newData[key]:
|
||||
split[1] = newData[key]
|
||||
original[line] = " = ".join(split)
|
||||
if isinstance(getattr(self, key), bool):
|
||||
setattr(self, key, _strToBool(newData[key]))
|
||||
else:
|
||||
setattr(self, key, str(newData[key]))
|
||||
dataChanged = True
|
||||
print(original[line])
|
||||
if dataChanged:
|
||||
with open(os.path.join(DashboardConfig.GetConfig("Server", "wg_conf_path")[1], f'{self.Name}.conf'), 'w') as f:
|
||||
f.write("\n".join(original))
|
||||
if split[0] not in allowEdit:
|
||||
new.append(original[line])
|
||||
for key in allowEdit:
|
||||
new.insert(1, f"{key} = {str(newData[key]).strip()}")
|
||||
new.append("")
|
||||
for line in range(end, len(original)):
|
||||
new.append(original[line])
|
||||
self.backupConfigurationFile()
|
||||
|
||||
print(f"[WGDashboard] Edited Configuration -- {self.Name}.conf")
|
||||
print("\n".join(new))
|
||||
with open(os.path.join(DashboardConfig.GetConfig("Server", "wg_conf_path")[1], f'{self.Name}.conf'), 'w') as f:
|
||||
f.write("\n".join(new))
|
||||
|
||||
status, msg = self.toggleConfiguration()
|
||||
if not status:
|
||||
return False, msg
|
||||
|
||||
for i in allowEdit:
|
||||
if isinstance(getattr(self, i), bool):
|
||||
setattr(self, i, _strToBool(newData[i]))
|
||||
else:
|
||||
setattr(self, i, str(newData[i]))
|
||||
|
||||
return True, ""
|
||||
|
||||
def deleteConfiguration(self):
|
||||
@@ -1206,18 +1233,18 @@ class Peer:
|
||||
return ResponseObject(False, "Private key does not match with the public key")
|
||||
try:
|
||||
rd = random.Random()
|
||||
uid = uuid.UUID(int=rd.getrandbits(128), version=4)
|
||||
uid = str(uuid.UUID(int=rd.getrandbits(128), version=4))
|
||||
pskExist = len(preshared_key) > 0
|
||||
|
||||
if pskExist:
|
||||
with open(f"{uid}", "w+") as f:
|
||||
with open(uid, "w+") as f:
|
||||
f.write(preshared_key)
|
||||
newAllowedIPs = allowed_ip.replace(" ", "")
|
||||
updateAllowedIp = subprocess.check_output(
|
||||
f"wg set {self.configuration.Name} peer {self.id} allowed-ips {newAllowedIPs}{f' preshared-key {uid}' if pskExist else ''}",
|
||||
shell=True, stderr=subprocess.STDOUT)
|
||||
|
||||
if pskExist: os.remove(str(uid))
|
||||
if pskExist: os.remove(uid)
|
||||
|
||||
if len(updateAllowedIp.decode().strip("\n")) != 0:
|
||||
return ResponseObject(False,
|
||||
@@ -1613,19 +1640,19 @@ def _getWireguardConfigurationAvailableIP(configName: str, all: bool = False) ->
|
||||
|
||||
sqldb = sqlite3.connect(os.path.join(CONFIGURATION_PATH, 'db', 'wgdashboard.db'), check_same_thread=False)
|
||||
sqldb.row_factory = sqlite3.Row
|
||||
sqldb.isolation_level = None
|
||||
cursor = sqldb.cursor()
|
||||
|
||||
def sqlSelect(statement: str, paramters: tuple = ()) -> sqlite3.Cursor:
|
||||
with sqldb:
|
||||
try:
|
||||
cursor = sqldb.cursor()
|
||||
return cursor.execute(statement, paramters)
|
||||
|
||||
except sqlite3.OperationalError as error:
|
||||
except Exception as e:
|
||||
print("[WGDashboard] SQLite Error:" + str(error) + " | Statement: " + statement)
|
||||
return []
|
||||
|
||||
|
||||
|
||||
def sqlUpdate(statement: str, paramters: tuple = ()) -> sqlite3.Cursor:
|
||||
with sqldb:
|
||||
cursor = sqldb.cursor()
|
||||
@@ -1634,8 +1661,9 @@ def sqlUpdate(statement: str, paramters: tuple = ()) -> sqlite3.Cursor:
|
||||
s = f'BEGIN TRANSACTION;{statement};END TRANSACTION;'
|
||||
cursor.execute(statement, paramters)
|
||||
sqldb.commit()
|
||||
except sqlite3.OperationalError as error:
|
||||
except Exception as e:
|
||||
print("[WGDashboard] SQLite Error:" + str(error) + " | Statement: " + statement)
|
||||
return []
|
||||
|
||||
DashboardConfig = DashboardConfig()
|
||||
_, APP_PREFIX = DashboardConfig.GetConfig("Server", "app_prefix")
|
||||
@@ -1717,7 +1745,6 @@ def API_ValidateAuthentication():
|
||||
def API_AuthenticateLogin():
|
||||
data = request.get_json()
|
||||
if DashboardConfig.APIAccessed:
|
||||
|
||||
authToken = hashlib.sha256(f"{request.headers.get('wg-dashboard-apikey')}{datetime.now()}".encode()).hexdigest()
|
||||
session['username'] = authToken
|
||||
resp = ResponseObject(True, DashboardConfig.GetConfig("Other", "welcome_session")[1])
|
||||
@@ -1752,6 +1779,7 @@ def API_AuthenticateLogin():
|
||||
def API_SignOut():
|
||||
resp = ResponseObject(True, "")
|
||||
resp.delete_cookie("authToken")
|
||||
session.clear()
|
||||
return resp
|
||||
|
||||
@app.route(f'{APP_PREFIX}/api/getWireguardConfigurations', methods=["GET"])
|
||||
@@ -1881,8 +1909,8 @@ def API_getAllWireguardConfigurationBackup():
|
||||
files.sort(key=lambda x: x[1], reverse=True)
|
||||
|
||||
for f, ct in files:
|
||||
if _regexMatch(f"^(.*)_(.*)\.(conf)$", f):
|
||||
s = re.search(f"^(.*)_(.*)\.(conf)$", f)
|
||||
if _regexMatch(r"^(.*)_(.*)\.(conf)$", f):
|
||||
s = re.search(r"^(.*)_(.*)\.(conf)$", f)
|
||||
name = s.group(1)
|
||||
if name not in existingConfiguration:
|
||||
if name not in data['NonExistingConfigurations'].keys():
|
||||
@@ -2290,7 +2318,7 @@ def API_deletePeerScheduleJob():
|
||||
|
||||
s, p = AllPeerJobs.deleteJob(PeerJob(
|
||||
job['JobID'], job['Configuration'], job['Peer'], job['Field'], job['Operator'], job['Value'],
|
||||
job['CreationDate'], job['ExpireDate'], job['Action']))
|
||||
job['CreationDate'], job['ExpireDate'], job['Action']), 'API Call')
|
||||
if s:
|
||||
return ResponseObject(s, data=p)
|
||||
return ResponseObject(s, message=p)
|
||||
@@ -2410,7 +2438,6 @@ def API_traceroute_execute():
|
||||
d = r.json()
|
||||
for i in range(len(result)):
|
||||
result[i]['geo'] = d[i]
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return ResponseObject(data=result)
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as r,c as i,d as o,w as e,j as l,a as t,T as _,i as a,l as d,S as u}from"./index-BPNEscAR.js";const m={name:"configuration"},p={class:"mt-md-5 mt-3 text-body"};function f(x,h,k,w,$,v){const n=l("RouterView");return t(),i("div",p,[o(n,null,{default:e(({Component:s,route:c})=>[o(_,{name:"fade2",mode:"out-in"},{default:e(()=>[(t(),a(u,null,{default:e(()=>[(t(),a(d(s),{key:c.path}))]),_:2},1024))]),_:2},1024)]),_:1})])}const B=r(m,[["render",f]]);export{B as default};
|
||||
import{_ as r,c as i,d as o,w as e,j as l,a as t,T as _,i as a,l as d,S as u}from"./index-BQ9jnFZu.js";const m={name:"configuration"},p={class:"mt-md-5 mt-3 text-body"};function f(x,h,k,w,$,v){const n=l("RouterView");return t(),i("div",p,[o(n,null,{default:e(({Component:s,route:c})=>[o(_,{name:"fade2",mode:"out-in"},{default:e(()=>[(t(),a(u,null,{default:e(()=>[(t(),a(d(s),{key:c.path}))]),_:2},1024))]),_:2},1024)]),_:1})])}const B=r(m,[["render",f]]);export{B as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{$ as w,r as c,H as x,D as B,o as _,a as l,c as b,b as t,d as o,n as D,m as $,s as N,B as m,i as v,q as M,g as T}from"./index-BPNEscAR.js";import{L as s}from"./localeText-DX813vQA.js";const I={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},R={class:"container d-flex h-100 w-100"},S={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"700px"}},V={class:"card rounded-3 shadow flex-grow-1 bg-danger-subtle border-danger-subtle",id:"deleteConfigurationContainer"},A={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},L={class:"mb-0"},P={class:"card-body px-4 text-muted"},W={class:"mb-0"},q={key:0},z={key:1},E={key:2,class:"d-flex align-items-center gap-2"},G=["placeholder"],H=["disabled"],J={__name:"deleteConfiguration",emits:["backup"],setup(O,{emit:k}){const i=w().params.id,g=c(""),h=x(),p=B(),r=c(!1),y=()=>{clearInterval(p.Peers.RefreshInterval),r.value=!0,M("/api/deleteWireguardConfiguration",{Name:i},n=>{n.status?(h.push("/"),p.newMessage("Server","Configuration deleted","success")):r.value=!1})},u=c(!0),d=c([]),f=()=>{u.value=!0,T("/api/getWireguardConfigurationBackup",{configurationName:i},n=>{d.value=n.data,u.value=!1})};_(()=>{f()});const C=k;return(n,e)=>(l(),b("div",I,[t("div",R,[t("div",S,[t("div",V,[t("div",A,[t("h5",L,[o(s,{t:"Are you sure to delete this configuration?"})]),t("button",{type:"button",class:"btn-close ms-auto",onClick:e[0]||(e[0]=a=>n.$emit("close"))})]),t("div",P,[t("p",W,[o(s,{t:"Once you deleted this configuration:"})]),t("ul",null,[t("li",null,[o(s,{t:"All connected peers will get disconnected"})]),t("li",null,[o(s,{t:"Both configuration file (.conf) and database table related to this configuration will get deleted"})])]),t("div",{class:D(["alert",[u.value?"alert-secondary":d.value.length>0?"alert-success":"alert-danger"]])},[u.value?(l(),b("div",q,[e[5]||(e[5]=t("i",{class:"bi bi-search me-2"},null,-1)),o(s,{t:"Checking backups..."})])):d.value.length>0?(l(),b("div",z,[e[6]||(e[6]=t("i",{class:"bi bi-check-circle-fill me-2"},null,-1)),o(s,{t:"This configuration have "+d.value.length+" backups"},null,8,["t"])])):(l(),b("div",E,[e[9]||(e[9]=t("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),o(s,{t:"This configuration have no backup"}),t("a",{role:"button",onClick:e[1]||(e[1]=a=>C("backup")),class:"ms-auto btn btn-sm btn-primary rounded-3"},[e[7]||(e[7]=t("i",{class:"bi bi-clock-history me-2"},null,-1)),o(s,{t:"Backup"})]),t("a",{role:"button",onClick:e[2]||(e[2]=a=>f()),class:"btn btn-sm btn-primary rounded-3"},e[8]||(e[8]=[t("i",{class:"bi bi-arrow-clockwise"},null,-1)]))]))],2),e[11]||(e[11]=t("hr",null,null,-1)),t("p",null,[o(s,{t:"If you're sure, please type in the configuration name below and click Delete"})]),$(t("input",{class:"form-control rounded-3 mb-3",placeholder:m(i),"onUpdate:modelValue":e[3]||(e[3]=a=>g.value=a),type:"text"},null,8,G),[[N,g.value]]),t("button",{class:"btn btn-danger w-100",onClick:e[4]||(e[4]=a=>y()),disabled:g.value!==m(i)||r.value},[e[10]||(e[10]=t("i",{class:"bi bi-trash-fill me-2 rounded-3"},null,-1)),r.value?(l(),v(s,{key:1,t:"Deleting..."})):(l(),v(s,{key:0,t:"Delete"}))],8,H)])])])])]))}};export{J as default};
|
||||
import{$ as w,r as c,H as x,D as B,o as _,a as l,c as b,b as t,d as o,n as D,m as $,s as N,B as m,i as v,q as M,g as T}from"./index-BQ9jnFZu.js";import{L as s}from"./localeText-BzleuEA0.js";const I={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},R={class:"container d-flex h-100 w-100"},S={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"700px"}},V={class:"card rounded-3 shadow flex-grow-1 bg-danger-subtle border-danger-subtle",id:"deleteConfigurationContainer"},A={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},L={class:"mb-0"},P={class:"card-body px-4 text-muted"},W={class:"mb-0"},q={key:0},z={key:1},E={key:2,class:"d-flex align-items-center gap-2"},G=["placeholder"],H=["disabled"],J={__name:"deleteConfiguration",emits:["backup"],setup(O,{emit:k}){const i=w().params.id,g=c(""),h=x(),p=B(),r=c(!1),y=()=>{clearInterval(p.Peers.RefreshInterval),r.value=!0,M("/api/deleteWireguardConfiguration",{Name:i},n=>{n.status?(h.push("/"),p.newMessage("Server","Configuration deleted","success")):r.value=!1})},u=c(!0),d=c([]),f=()=>{u.value=!0,T("/api/getWireguardConfigurationBackup",{configurationName:i},n=>{d.value=n.data,u.value=!1})};_(()=>{f()});const C=k;return(n,e)=>(l(),b("div",I,[t("div",R,[t("div",S,[t("div",V,[t("div",A,[t("h5",L,[o(s,{t:"Are you sure to delete this configuration?"})]),t("button",{type:"button",class:"btn-close ms-auto",onClick:e[0]||(e[0]=a=>n.$emit("close"))})]),t("div",P,[t("p",W,[o(s,{t:"Once you deleted this configuration:"})]),t("ul",null,[t("li",null,[o(s,{t:"All connected peers will get disconnected"})]),t("li",null,[o(s,{t:"Both configuration file (.conf) and database table related to this configuration will get deleted"})])]),t("div",{class:D(["alert",[u.value?"alert-secondary":d.value.length>0?"alert-success":"alert-danger"]])},[u.value?(l(),b("div",q,[e[5]||(e[5]=t("i",{class:"bi bi-search me-2"},null,-1)),o(s,{t:"Checking backups..."})])):d.value.length>0?(l(),b("div",z,[e[6]||(e[6]=t("i",{class:"bi bi-check-circle-fill me-2"},null,-1)),o(s,{t:"This configuration have "+d.value.length+" backups"},null,8,["t"])])):(l(),b("div",E,[e[9]||(e[9]=t("i",{class:"bi bi-x-circle-fill me-2"},null,-1)),o(s,{t:"This configuration have no backup"}),t("a",{role:"button",onClick:e[1]||(e[1]=a=>C("backup")),class:"ms-auto btn btn-sm btn-primary rounded-3"},[e[7]||(e[7]=t("i",{class:"bi bi-clock-history me-2"},null,-1)),o(s,{t:"Backup"})]),t("a",{role:"button",onClick:e[2]||(e[2]=a=>f()),class:"btn btn-sm btn-primary rounded-3"},e[8]||(e[8]=[t("i",{class:"bi bi-arrow-clockwise"},null,-1)]))]))],2),e[11]||(e[11]=t("hr",null,null,-1)),t("p",null,[o(s,{t:"If you're sure, please type in the configuration name below and click Delete"})]),$(t("input",{class:"form-control rounded-3 mb-3",placeholder:m(i),"onUpdate:modelValue":e[3]||(e[3]=a=>g.value=a),type:"text"},null,8,G),[[N,g.value]]),t("button",{class:"btn btn-danger w-100",onClick:e[4]||(e[4]=a=>y()),disabled:g.value!==m(i)||r.value},[e[10]||(e[10]=t("i",{class:"bi bi-trash-fill me-2 rounded-3"},null,-1)),r.value?(l(),v(s,{key:1,t:"Deleting..."})):(l(),v(s,{key:0,t:"Delete"}))],8,H)])])])])]))}};export{J as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Vendored
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{_ as t,G as e,t as o}from"./index-BPNEscAR.js";const s={name:"localeText",props:{t:""},computed:{getLocaleText(){return e(this.t)}}};function a(c,r,n,p,_,i){return o(this.getLocaleText)}const x=t(s,[["render",a]]);export{x as L};
|
||||
import{_ as t,G as e,t as o}from"./index-BQ9jnFZu.js";const s={name:"localeText",props:{t:""},computed:{getLocaleText(){return e(this.t)}}};function a(c,r,n,p,_,i){return o(this.getLocaleText)}const x=t(s,[["render",a]]);export{x as L};
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
import{L as c}from"./localeText-DX813vQA.js";import{d as n}from"./dayjs.min-Lw24H7b2.js";import{_ as d,a as r,c as m,b as s,d as i,f as t,t as e,n as l,j as _}from"./index-BPNEscAR.js";const p={name:"message",methods:{dayjs:n},components:{LocaleText:c},props:{message:Object},mounted(){setTimeout(()=>{this.message.show=!1},5e3)}},g=["id"],h={class:"card-body"},f={class:"d-flex"},x={class:"fw-bold d-block",style:{"text-transform":"uppercase"}},u={class:"ms-auto"};function b(y,v,w,T,j,a){const o=_("LocaleText");return r(),m("div",{class:l(["card shadow rounded-3 position-relative message ms-auto",{"text-bg-danger":this.message.type==="danger","text-bg-success":this.message.type==="success","text-bg-warning":this.message.type==="warning"}]),id:this.message.id},[s("div",h,[s("div",f,[s("small",x,[i(o,{t:"FROM "}),t(" "+e(this.message.from),1)]),s("small",u,e(a.dayjs().format("hh:mm A")),1)]),t(" "+e(this.message.content),1)])],10,g)}const M=d(p,[["render",b],["__scopeId","data-v-f50b8f0c"]]);export{M};
|
||||
import{L as c}from"./localeText-BzleuEA0.js";import{d as n}from"./dayjs.min-BjPotxO2.js";import{_ as d,a as r,c as m,b as s,d as i,f as t,t as e,n as l,j as _}from"./index-BQ9jnFZu.js";const p={name:"message",methods:{dayjs:n},components:{LocaleText:c},props:{message:Object},mounted(){setTimeout(()=>{this.message.show=!1},5e3)}},g=["id"],h={class:"card-body"},f={class:"d-flex"},x={class:"fw-bold d-block",style:{"text-transform":"uppercase"}},u={class:"ms-auto"};function b(y,v,w,T,j,a){const o=_("LocaleText");return r(),m("div",{class:l(["card shadow rounded-3 position-relative message ms-auto",{"text-bg-danger":this.message.type==="danger","text-bg-success":this.message.type==="success","text-bg-warning":this.message.type==="warning"}]),id:this.message.id},[s("div",h,[s("div",f,[s("small",x,[i(o,{t:"FROM "}),t(" "+e(this.message.from),1)]),s("small",u,e(a.dayjs().format("hh:mm A")),1)]),t(" "+e(this.message.content),1)])],10,g)}const M=d(p,[["render",b],["__scopeId","data-v-f50b8f0c"]]);export{M};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
.slide-up-enter-active[data-v-fcd3ae95],.slide-up-leave-active[data-v-fcd3ae95]{transition:all .2s cubic-bezier(.42,0,.22,1)}.slide-up-enter-from[data-v-fcd3ae95],.slide-up-leave-to[data-v-fcd3ae95]{opacity:0;transform:scale(.9)}@keyframes spin-fcd3ae95{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#check[data-v-fcd3ae95]{animation:cubic-bezier(.42,0,.22,1.3) .7s spin-fcd3ae95}
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as f,D as m,r as _,a as o,c as a,b as e,d as l,w as g,T as h}from"./index-BPNEscAR.js";import{L as v}from"./localeText-DX813vQA.js";const y={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},x={class:"container d-flex h-100 w-100"},w={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},C={class:"card rounded-3 shadow w-100"},k={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},F={class:"mb-0"},T={class:"card-body p-4"},D={class:"d-flex"},S=["disabled"],B={key:0,class:"d-block"},M={key:1,class:"d-block",id:"check"},G=["value"],L={__name:"peerConfigurationFile",props:{configurationFile:String},emits:["close"],setup(i,{emit:r}){const c=r,d=i,n=m(),s=_(!1),u=async()=>{navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(d.configurationFile).then(()=>{s.value=!0,setTimeout(()=>{s.value=!1},3e3)}).catch(()=>{n.newMessage("WGDashboard","Failed to copy","danger")}):(document.querySelector("#peerConfigurationFile").select(),document.execCommand("copy")?(s.value=!0,setTimeout(()=>{s.value=!1},3e3)):n.newMessage("WGDashboard","Failed to copy","danger"))};return(p,t)=>(o(),a("div",y,[e("div",x,[e("div",w,[e("div",C,[e("div",k,[e("h4",F,[l(v,{t:"Peer Configuration File"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=b=>c("close"))})]),e("div",T,[e("div",D,[e("button",{onClick:t[1]||(t[1]=b=>u()),disabled:s.value,class:"ms-auto btn bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 position-relative"},[l(h,{name:"slide-up",mode:"out-in"},{default:g(()=>[s.value?(o(),a("span",M,t[3]||(t[3]=[e("i",{class:"bi bi-check-circle-fill"},null,-1)]))):(o(),a("span",B,t[2]||(t[2]=[e("i",{class:"bi bi-clipboard-fill"},null,-1)])))]),_:1})],8,S)]),e("textarea",{style:{height:"300px"},class:"form-control w-100 rounded-3 mt-2",disabled:"",id:"peerConfigurationFile",value:i.configurationFile},null,8,G)])])])])]))}},W=f(L,[["__scopeId","data-v-e8a2c914"]]);export{W as default};
|
||||
import{_ as f,D as m,r as _,a as s,c as a,b as e,d as l,w as g,T as h}from"./index-BQ9jnFZu.js";import{L as v}from"./localeText-BzleuEA0.js";const y={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},x={class:"container d-flex h-100 w-100"},w={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},C={class:"card rounded-3 shadow w-100"},k={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},F={class:"mb-0"},T={class:"card-body p-4"},D={class:"d-flex"},S=["disabled"],B={key:0,class:"d-block"},M={key:1,class:"d-block",id:"check"},G=["value"],L={__name:"peerConfigurationFile",props:{configurationFile:String},emits:["close"],setup(i,{emit:r}){const c=r,d=i,n=m(),o=_(!1),u=async()=>{navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(d.configurationFile).then(()=>{o.value=!0,setTimeout(()=>{o.value=!1},3e3)}).catch(()=>{n.newMessage("WGDashboard","Failed to copy","danger")}):(document.querySelector("#peerConfigurationFile").select(),document.execCommand("copy")?(o.value=!0,setTimeout(()=>{o.value=!1},3e3)):n.newMessage("WGDashboard","Failed to copy","danger"))};return(p,t)=>(s(),a("div",y,[e("div",x,[e("div",w,[e("div",C,[e("div",k,[e("h4",F,[l(v,{t:"Peer Configuration File"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=b=>c("close"))})]),e("div",T,[e("div",D,[e("button",{onClick:t[1]||(t[1]=b=>u()),disabled:o.value,class:"ms-auto btn bg-primary-subtle border-primary-subtle text-primary-emphasis rounded-3 position-relative"},[l(h,{name:"slide-up",mode:"out-in"},{default:g(()=>[o.value?(s(),a("span",M,t[3]||(t[3]=[e("i",{class:"bi bi-check-circle-fill"},null,-1)]))):(s(),a("span",B,t[2]||(t[2]=[e("i",{class:"bi bi-clipboard-fill"},null,-1)])))]),_:1})],8,S)]),e("textarea",{style:{height:"300px"},class:"form-control w-100 rounded-3 mt-2",id:"peerConfigurationFile",value:i.configurationFile},null,8,G)])])])])]))}},W=f(L,[["__scopeId","data-v-fcd3ae95"]]);export{W as default};
|
||||
@@ -1 +0,0 @@
|
||||
.slide-up-enter-active[data-v-e8a2c914],.slide-up-leave-active[data-v-e8a2c914]{transition:all .2s cubic-bezier(.42,0,.22,1)}.slide-up-enter-from[data-v-e8a2c914],.slide-up-leave-to[data-v-e8a2c914]{opacity:0;transform:scale(.9)}@keyframes spin-e8a2c914{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#check[data-v-e8a2c914]{animation:cubic-bezier(.42,0,.22,1.3) .7s spin-e8a2c914}
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
.list-move[data-v-6d5fc831],.list-enter-active[data-v-6d5fc831],.list-leave-active[data-v-6d5fc831]{transition:all .3s ease}.list-enter-from[data-v-6d5fc831],.list-leave-to[data-v-6d5fc831]{opacity:0;transform:translateY(10px)}.list-leave-active[data-v-6d5fc831]{position:absolute}.peerSettingContainer[data-v-17eb547c]{background-color:#00000060;z-index:9998}div[data-v-17eb547c]{transition:.2s ease-in-out}.inactiveField[data-v-17eb547c]{opacity:.4}.card[data-v-17eb547c]{max-height:100%}
|
||||
.list-move[data-v-6d5fc831],.list-enter-active[data-v-6d5fc831],.list-leave-active[data-v-6d5fc831]{transition:all .3s ease}.list-enter-from[data-v-6d5fc831],.list-leave-to[data-v-6d5fc831]{opacity:0;transform:translateY(10px)}.list-leave-active[data-v-6d5fc831]{position:absolute}.peerSettingContainer[data-v-ddffd6ec]{background-color:#00000060;z-index:9998}div[data-v-ddffd6ec]{transition:.2s ease-in-out}.inactiveField[data-v-ddffd6ec]{opacity:.4}.card[data-v-ddffd6ec]{max-height:100%}
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
import{S as p,a as b}from"./schedulePeerJob-UvgbczqH.js";import{_ as h,W as u,p as m,j as i,a as o,c as a,b as e,d as r,w as _,F as v,h as f,i as J,e as x,k as g}from"./index-BPNEscAR.js";import{L as w}from"./localeText-DX813vQA.js";import"./vue-datepicker-D9reu0Fg.js";import"./dayjs.min-Lw24H7b2.js";const P={name:"peerJobs",setup(){return{store:u()}},props:{selectedPeer:Object},components:{LocaleText:w,SchedulePeerJob:p,ScheduleDropdown:b},data(){return{}},methods:{deleteJob(d){this.selectedPeer.jobs=this.selectedPeer.jobs.filter(t=>t.JobID!==d.JobID)},addJob(){this.selectedPeer.jobs.unshift(JSON.parse(JSON.stringify({JobID:m().toString(),Configuration:this.selectedPeer.configuration.Name,Peer:this.selectedPeer.id,Field:this.store.PeerScheduleJobs.dropdowns.Field[0].value,Operator:this.store.PeerScheduleJobs.dropdowns.Operator[0].value,Value:"",CreationDate:"",ExpireDate:"",Action:this.store.PeerScheduleJobs.dropdowns.Action[0].value})))}}},S={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},y={class:"container d-flex h-100 w-100"},$={class:"m-auto modal-dialog-centered dashboardModal"},C={class:"card rounded-3 shadow",style:{width:"700px"}},D={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},j={class:"mb-0 fw-normal"},k={class:"card-body px-4 pb-4 pt-2 position-relative"},N={class:"d-flex align-items-center mb-3"},T={class:"card shadow-sm",key:"none",style:{height:"153px"}},I={class:"card-body text-muted text-center d-flex"},L={class:"m-auto"};function O(d,t,B,F,V,A){const n=i("LocaleText"),l=i("SchedulePeerJob");return o(),a("div",S,[e("div",y,[e("div",$,[e("div",C,[e("div",D,[e("h4",j,[r(n,{t:"Schedule Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=s=>this.$emit("close"))})]),e("div",k,[e("div",N,[e("button",{class:"btn bg-primary-subtle border-1 border-primary-subtle text-primary-emphasis rounded-3 shadow",onClick:t[1]||(t[1]=s=>this.addJob())},[t[3]||(t[3]=e("i",{class:"bi bi-plus-lg me-2"},null,-1)),r(n,{t:"Job"})])]),r(g,{name:"schedulePeerJobTransition",tag:"div",class:"position-relative"},{default:_(()=>[(o(!0),a(v,null,f(this.selectedPeer.jobs,(s,E)=>(o(),J(l,{onRefresh:t[2]||(t[2]=c=>this.$emit("refresh")),onDelete:c=>this.deleteJob(s),dropdowns:this.store.PeerScheduleJobs.dropdowns,key:s.JobID,pjob:s},null,8,["onDelete","dropdowns","pjob"]))),128)),this.selectedPeer.jobs.length===0?(o(),a("div",T,[e("div",I,[e("h6",L,[r(n,{t:"This peer does not have any job yet."})])])])):x("",!0)]),_:1})])])])])])}const z=h(P,[["render",O],["__scopeId","data-v-5bbdd42b"]]);export{z as default};
|
||||
import{S as p,a as b}from"./schedulePeerJob-C54E7DJS.js";import{_ as h,W as u,p as m,j as i,a as o,c as a,b as e,d as r,w as _,F as v,h as f,i as J,e as x,k as g}from"./index-BQ9jnFZu.js";import{L as w}from"./localeText-BzleuEA0.js";import"./vue-datepicker-BkkJgrai.js";import"./dayjs.min-BjPotxO2.js";const P={name:"peerJobs",setup(){return{store:u()}},props:{selectedPeer:Object},components:{LocaleText:w,SchedulePeerJob:p,ScheduleDropdown:b},data(){return{}},methods:{deleteJob(d){this.selectedPeer.jobs=this.selectedPeer.jobs.filter(t=>t.JobID!==d.JobID)},addJob(){this.selectedPeer.jobs.unshift(JSON.parse(JSON.stringify({JobID:m().toString(),Configuration:this.selectedPeer.configuration.Name,Peer:this.selectedPeer.id,Field:this.store.PeerScheduleJobs.dropdowns.Field[0].value,Operator:this.store.PeerScheduleJobs.dropdowns.Operator[0].value,Value:"",CreationDate:"",ExpireDate:"",Action:this.store.PeerScheduleJobs.dropdowns.Action[0].value})))}}},S={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},y={class:"container d-flex h-100 w-100"},$={class:"m-auto modal-dialog-centered dashboardModal"},C={class:"card rounded-3 shadow",style:{width:"700px"}},D={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},j={class:"mb-0 fw-normal"},k={class:"card-body px-4 pb-4 pt-2 position-relative"},N={class:"d-flex align-items-center mb-3"},T={class:"card shadow-sm",key:"none",style:{height:"153px"}},I={class:"card-body text-muted text-center d-flex"},L={class:"m-auto"};function O(d,t,B,F,V,A){const n=i("LocaleText"),l=i("SchedulePeerJob");return o(),a("div",S,[e("div",y,[e("div",$,[e("div",C,[e("div",D,[e("h4",j,[r(n,{t:"Schedule Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=s=>this.$emit("close"))})]),e("div",k,[e("div",N,[e("button",{class:"btn bg-primary-subtle border-1 border-primary-subtle text-primary-emphasis rounded-3 shadow",onClick:t[1]||(t[1]=s=>this.addJob())},[t[3]||(t[3]=e("i",{class:"bi bi-plus-lg me-2"},null,-1)),r(n,{t:"Job"})])]),r(g,{name:"schedulePeerJobTransition",tag:"div",class:"position-relative"},{default:_(()=>[(o(!0),a(v,null,f(this.selectedPeer.jobs,(s,E)=>(o(),J(l,{onRefresh:t[2]||(t[2]=c=>this.$emit("refresh")),onDelete:c=>this.deleteJob(s),dropdowns:this.store.PeerScheduleJobs.dropdowns,key:s.JobID,pjob:s},null,8,["onDelete","dropdowns","pjob"]))),128)),this.selectedPeer.jobs.length===0?(o(),a("div",T,[e("div",I,[e("h6",L,[r(n,{t:"This peer does not have any job yet."})])])])):x("",!0)]),_:1})])])])])])}const z=h(P,[["render",O],["__scopeId","data-v-5bbdd42b"]]);export{z as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{S as b}from"./schedulePeerJob-UvgbczqH.js";import{_ as g,W as v,p as f,j as l,a as o,c as t,b as e,d as i,F as p,h,t as _,e as y,i as x}from"./index-BPNEscAR.js";import{L as J}from"./localeText-DX813vQA.js";import"./vue-datepicker-D9reu0Fg.js";import"./dayjs.min-Lw24H7b2.js";const w={name:"peerJobsAllModal",setup(){return{store:v()}},components:{LocaleText:J,SchedulePeerJob:b},props:{configurationPeers:Array[Object]},methods:{getuuid(){return f()}},computed:{getAllJobs(){return this.configurationPeers.filter(r=>r.jobs.length>0)}}},A={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},$={class:"container d-flex h-100 w-100"},k={class:"m-auto modal-dialog-centered dashboardModal"},S={class:"card rounded-3 shadow",style:{width:"700px"}},L={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},j={class:"mb-0 fw-normal"},P={class:"card-body px-4 pb-4 pt-2"},C={key:0,class:"accordion",id:"peerJobsLogsModalAccordion"},M={class:"accordion-header"},B=["data-bs-target"],N={key:0},D={class:"text-muted"},T=["id"],V={class:"accordion-body"},F={key:1,class:"card shadow-sm",style:{height:"153px"}},O={class:"card-body text-muted text-center d-flex"},W={class:"m-auto"};function E(r,s,I,R,q,z){const n=l("LocaleText"),u=l("SchedulePeerJob");return o(),t("div",A,[e("div",$,[e("div",k,[e("div",S,[e("div",L,[e("h4",j,[i(n,{t:"All Active Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:s[0]||(s[0]=a=>this.$emit("close"))})]),e("div",P,[this.getAllJobs.length>0?(o(),t("div",C,[(o(!0),t(p,null,h(this.getAllJobs,(a,d)=>(o(),t("div",{class:"accordion-item",key:a.id},[e("h2",M,[e("button",{class:"accordion-button collapsed",type:"button","data-bs-toggle":"collapse","data-bs-target":"#collapse_"+d},[e("small",null,[e("strong",null,[a.name?(o(),t("span",N,_(a.name)+" • ",1)):y("",!0),e("samp",D,_(a.id),1)])])],8,B)]),e("div",{id:"collapse_"+d,class:"accordion-collapse collapse","data-bs-parent":"#peerJobsLogsModalAccordion"},[e("div",V,[(o(!0),t(p,null,h(a.jobs,c=>(o(),x(u,{onDelete:s[1]||(s[1]=m=>this.$emit("refresh")),onRefresh:s[2]||(s[2]=m=>this.$emit("refresh")),dropdowns:this.store.PeerScheduleJobs.dropdowns,viewOnly:!0,key:c.JobID,pjob:c},null,8,["dropdowns","pjob"]))),128))])],8,T)]))),128))])):(o(),t("div",F,[e("div",O,[e("span",W,[i(n,{t:"No active job at the moment."})])])]))])])])])])}const X=g(w,[["render",E]]);export{X as default};
|
||||
import{S as b}from"./schedulePeerJob-C54E7DJS.js";import{_ as g,W as v,p as f,j as l,a as o,c as t,b as e,d as i,F as p,h,t as _,e as y,i as x}from"./index-BQ9jnFZu.js";import{L as J}from"./localeText-BzleuEA0.js";import"./vue-datepicker-BkkJgrai.js";import"./dayjs.min-BjPotxO2.js";const w={name:"peerJobsAllModal",setup(){return{store:v()}},components:{LocaleText:J,SchedulePeerJob:b},props:{configurationPeers:Array[Object]},methods:{getuuid(){return f()}},computed:{getAllJobs(){return this.configurationPeers.filter(r=>r.jobs.length>0)}}},A={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},$={class:"container d-flex h-100 w-100"},k={class:"m-auto modal-dialog-centered dashboardModal"},S={class:"card rounded-3 shadow",style:{width:"700px"}},L={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-2"},j={class:"mb-0 fw-normal"},P={class:"card-body px-4 pb-4 pt-2"},C={key:0,class:"accordion",id:"peerJobsLogsModalAccordion"},M={class:"accordion-header"},B=["data-bs-target"],N={key:0},D={class:"text-muted"},T=["id"],V={class:"accordion-body"},F={key:1,class:"card shadow-sm",style:{height:"153px"}},O={class:"card-body text-muted text-center d-flex"},W={class:"m-auto"};function E(r,s,I,R,q,z){const n=l("LocaleText"),u=l("SchedulePeerJob");return o(),t("div",A,[e("div",$,[e("div",k,[e("div",S,[e("div",L,[e("h4",j,[i(n,{t:"All Active Jobs"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:s[0]||(s[0]=a=>this.$emit("close"))})]),e("div",P,[this.getAllJobs.length>0?(o(),t("div",C,[(o(!0),t(p,null,h(this.getAllJobs,(a,d)=>(o(),t("div",{class:"accordion-item",key:a.id},[e("h2",M,[e("button",{class:"accordion-button collapsed",type:"button","data-bs-toggle":"collapse","data-bs-target":"#collapse_"+d},[e("small",null,[e("strong",null,[a.name?(o(),t("span",N,_(a.name)+" • ",1)):y("",!0),e("samp",D,_(a.id),1)])])],8,B)]),e("div",{id:"collapse_"+d,class:"accordion-collapse collapse","data-bs-parent":"#peerJobsLogsModalAccordion"},[e("div",V,[(o(!0),t(p,null,h(a.jobs,c=>(o(),x(u,{onDelete:s[1]||(s[1]=m=>this.$emit("refresh")),onRefresh:s[2]||(s[2]=m=>this.$emit("refresh")),dropdowns:this.store.PeerScheduleJobs.dropdowns,viewOnly:!0,key:c.JobID,pjob:c},null,8,["dropdowns","pjob"]))),128))])],8,T)]))),128))])):(o(),t("div",F,[e("div",O,[e("span",W,[i(n,{t:"No active job at the moment."})])])]))])])])])])}const X=g(w,[["render",E]]);export{X as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+3
-3
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{b as a}from"./browser-CjSdxGTc.js";import{L as n}from"./localeText-DX813vQA.js";import{_ as c,j as r,a as d,c as i,b as e,d as l}from"./index-BPNEscAR.js";const p={name:"peerQRCode",components:{LocaleText:n},props:{peerConfigData:String},mounted(){a.toCanvas(document.querySelector("#qrcode"),this.peerConfigData,o=>{o&&console.error(o)})}},_={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},m={class:"container d-flex h-100 w-100"},h={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},u={class:"card rounded-3 shadow"},f={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},b={class:"mb-0"},v={class:"card-body"},C={id:"qrcode",class:"rounded-3 shadow",ref:"qrcode"};function g(o,t,x,$,w,q){const s=r("LocaleText");return d(),i("div",_,[e("div",m,[e("div",h,[e("div",u,[e("div",f,[e("h4",b,[l(s,{t:"QR Code"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=y=>this.$emit("close"))})]),e("div",v,[e("canvas",C,null,512)])])])])])}const Q=c(p,[["render",g]]);export{Q as default};
|
||||
import{b as a}from"./browser-CjSdxGTc.js";import{L as n}from"./localeText-BzleuEA0.js";import{_ as c,j as r,a as d,c as i,b as e,d as l}from"./index-BQ9jnFZu.js";const p={name:"peerQRCode",components:{LocaleText:n},props:{peerConfigData:String},mounted(){a.toCanvas(document.querySelector("#qrcode"),this.peerConfigData,o=>{o&&console.error(o)})}},_={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0"},m={class:"container d-flex h-100 w-100"},h={class:"m-auto modal-dialog-centered dashboardModal justify-content-center"},u={class:"card rounded-3 shadow"},f={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4 pb-0"},b={class:"mb-0"},v={class:"card-body"},C={id:"qrcode",class:"rounded-3 shadow",ref:"qrcode"};function g(o,t,x,$,w,q){const s=r("LocaleText");return d(),i("div",_,[e("div",m,[e("div",h,[e("div",u,[e("div",f,[e("h4",b,[l(s,{t:"QR Code"})]),e("button",{type:"button",class:"btn-close ms-auto",onClick:t[0]||(t[0]=y=>this.$emit("close"))})]),e("div",v,[e("canvas",C,null,512)])])])])])}const Q=c(p,[["render",g]]);export{Q as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{_ as g,D as f,q as h,j as p,a as s,c as r,b as t,d as o,n as m,i as n,t as _,e as b}from"./index-BPNEscAR.js";import{d}from"./dayjs.min-Lw24H7b2.js";import{V as y}from"./vue-datepicker-D9reu0Fg.js";import{L as S}from"./localeText-DX813vQA.js";const k={name:"peerShareLinkModal",props:{peer:Object},components:{LocaleText:S,VueDatePicker:y},data(){return{dataCopy:void 0,loading:!1}},setup(){return{store:f()}},mounted(){this.dataCopy=JSON.parse(JSON.stringify(this.peer.ShareLink)).at(0)},watch:{"peer.ShareLink":{deep:!0,handler(e,a){a.length!==e.length&&(this.dataCopy=JSON.parse(JSON.stringify(this.peer.ShareLink)).at(0))}}},methods:{startSharing(){this.loading=!0,h("/api/sharePeer/create",{Configuration:this.peer.configuration.Name,Peer:this.peer.id,ExpireDate:d().add(7,"d").format("YYYY-MM-DD HH:mm:ss")},e=>{e.status?(this.peer.ShareLink=e.data,this.dataCopy=e.data.at(0)):this.store.newMessage("Server","Share link failed to create. Reason: "+e.message,"danger"),this.loading=!1})},updateLinkExpireDate(){h("/api/sharePeer/update",this.dataCopy,e=>{e.status?(this.dataCopy=e.data.at(0),this.peer.ShareLink=e.data,this.store.newMessage("Server","Link expire date updated","success")):this.store.newMessage("Server","Link expire date failed to update. Reason: "+e.message,"danger"),this.loading=!1})},stopSharing(){this.loading=!0,this.dataCopy.ExpireDate=d().format("YYYY-MM-DD HH:mm:ss"),this.updateLinkExpireDate()},parseTime(e){e?this.dataCopy.ExpireDate=d(e).format("YYYY-MM-DD HH:mm:ss"):this.dataCopy.ExpireDate=void 0,this.updateLinkExpireDate()}},computed:{getUrl(){const e=this.store.getActiveCrossServer();return e?`${e.host}/${this.$router.resolve({path:"/share",query:{ShareID:this.dataCopy.ShareID}}).href}`:window.location.origin+window.location.pathname+this.$router.resolve({path:"/share",query:{ShareID:this.dataCopy.ShareID}}).href}}},x={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},v={class:"container d-flex h-100 w-100"},C={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"500px"}},D={class:"card rounded-3 shadow flex-grow-1"},w={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4"},L={class:"mb-0"},M={key:0,class:"card-body px-4 pb-4"},Y={key:0},$={class:"mb-3 text-muted"},E=["disabled"],H={key:1},V={class:"d-flex gap-2 mb-4"},N=["href"],P={class:"d-flex flex-column gap-2 mb-3"},O=["disabled"];function T(e,a,U,B,I,c){const i=p("LocaleText"),u=p("VueDatePicker");return s(),r("div",x,[t("div",v,[t("div",C,[t("div",D,[t("div",w,[t("h4",L,[o(i,{t:"Share Peer"})]),t("button",{type:"button",class:"btn-close ms-auto",onClick:a[0]||(a[0]=l=>this.$emit("close"))})]),this.peer.ShareLink?(s(),r("div",M,[this.dataCopy?(s(),r("div",H,[t("div",V,[a[4]||(a[4]=t("i",{class:"bi bi-link-45deg"},null,-1)),t("a",{href:this.getUrl,class:"text-decoration-none",target:"_blank"},_(c.getUrl),9,N)]),t("div",P,[t("small",null,[a[5]||(a[5]=t("i",{class:"bi bi-calendar me-2"},null,-1)),o(i,{t:"Expire At"})]),o(u,{is24:!0,"min-date":new Date,"model-value":this.dataCopy.ExpireDate,"onUpdate:modelValue":this.parseTime,"time-picker-inline":"",format:"yyyy-MM-dd HH:mm:ss","preview-format":"yyyy-MM-dd HH:mm:ss",dark:this.store.Configuration.Server.dashboard_theme==="dark"},null,8,["min-date","model-value","onUpdate:modelValue","dark"])]),t("button",{onClick:a[2]||(a[2]=l=>this.stopSharing()),disabled:this.loading,class:"w-100 btn bg-danger-subtle text-danger-emphasis border-1 border-danger-subtle rounded-3 shadow-sm"},[t("span",{class:m({"animate__animated animate__flash animate__infinite animate__slower":this.loading})},a[6]||(a[6]=[t("i",{class:"bi bi-send-slash-fill me-2"},null,-1)]),2),this.loading?(s(),n(i,{key:0,t:"Stop Sharing..."})):(s(),n(i,{key:1,t:"Stop Sharing"}))],8,O)])):(s(),r("div",Y,[t("h6",$,[o(i,{t:"Currently the peer is not sharing"})]),t("button",{onClick:a[1]||(a[1]=l=>this.startSharing()),disabled:this.loading,class:"w-100 btn bg-success-subtle text-success-emphasis border-1 border-success-subtle rounded-3 shadow-sm"},[t("span",{class:m({"animate__animated animate__flash animate__infinite animate__slower":this.loading})},a[3]||(a[3]=[t("i",{class:"bi bi-send-fill me-2"},null,-1)]),2),this.loading?(s(),n(i,{key:0,t:"Sharing..."})):(s(),n(i,{key:1,t:"Start Sharing"}))],8,E)]))])):b("",!0)])])])])}const R=g(k,[["render",T]]);export{R as default};
|
||||
import{_ as g,D as f,q as h,j as p,a as s,c as r,b as t,d as o,n as m,i as n,t as _,e as b}from"./index-BQ9jnFZu.js";import{d}from"./dayjs.min-BjPotxO2.js";import{V as y}from"./vue-datepicker-BkkJgrai.js";import{L as S}from"./localeText-BzleuEA0.js";const k={name:"peerShareLinkModal",props:{peer:Object},components:{LocaleText:S,VueDatePicker:y},data(){return{dataCopy:void 0,loading:!1}},setup(){return{store:f()}},mounted(){this.dataCopy=JSON.parse(JSON.stringify(this.peer.ShareLink)).at(0)},watch:{"peer.ShareLink":{deep:!0,handler(e,a){a.length!==e.length&&(this.dataCopy=JSON.parse(JSON.stringify(this.peer.ShareLink)).at(0))}}},methods:{startSharing(){this.loading=!0,h("/api/sharePeer/create",{Configuration:this.peer.configuration.Name,Peer:this.peer.id,ExpireDate:d().add(7,"d").format("YYYY-MM-DD HH:mm:ss")},e=>{e.status?(this.peer.ShareLink=e.data,this.dataCopy=e.data.at(0)):this.store.newMessage("Server","Share link failed to create. Reason: "+e.message,"danger"),this.loading=!1})},updateLinkExpireDate(){h("/api/sharePeer/update",this.dataCopy,e=>{e.status?(this.dataCopy=e.data.at(0),this.peer.ShareLink=e.data,this.store.newMessage("Server","Link expire date updated","success")):this.store.newMessage("Server","Link expire date failed to update. Reason: "+e.message,"danger"),this.loading=!1})},stopSharing(){this.loading=!0,this.dataCopy.ExpireDate=d().format("YYYY-MM-DD HH:mm:ss"),this.updateLinkExpireDate()},parseTime(e){e?this.dataCopy.ExpireDate=d(e).format("YYYY-MM-DD HH:mm:ss"):this.dataCopy.ExpireDate=void 0,this.updateLinkExpireDate()}},computed:{getUrl(){const e=this.store.getActiveCrossServer();return e?`${e.host}/${this.$router.resolve({path:"/share",query:{ShareID:this.dataCopy.ShareID}}).href}`:window.location.origin+window.location.pathname+this.$router.resolve({path:"/share",query:{ShareID:this.dataCopy.ShareID}}).href}}},x={class:"peerSettingContainer w-100 h-100 position-absolute top-0 start-0 overflow-y-scroll"},v={class:"container d-flex h-100 w-100"},C={class:"m-auto modal-dialog-centered dashboardModal",style:{width:"500px"}},D={class:"card rounded-3 shadow flex-grow-1"},w={class:"card-header bg-transparent d-flex align-items-center gap-2 border-0 p-4"},L={class:"mb-0"},M={key:0,class:"card-body px-4 pb-4"},Y={key:0},$={class:"mb-3 text-muted"},E=["disabled"],H={key:1},V={class:"d-flex gap-2 mb-4"},N=["href"],P={class:"d-flex flex-column gap-2 mb-3"},O=["disabled"];function T(e,a,U,B,I,c){const i=p("LocaleText"),u=p("VueDatePicker");return s(),r("div",x,[t("div",v,[t("div",C,[t("div",D,[t("div",w,[t("h4",L,[o(i,{t:"Share Peer"})]),t("button",{type:"button",class:"btn-close ms-auto",onClick:a[0]||(a[0]=l=>this.$emit("close"))})]),this.peer.ShareLink?(s(),r("div",M,[this.dataCopy?(s(),r("div",H,[t("div",V,[a[4]||(a[4]=t("i",{class:"bi bi-link-45deg"},null,-1)),t("a",{href:this.getUrl,class:"text-decoration-none",target:"_blank"},_(c.getUrl),9,N)]),t("div",P,[t("small",null,[a[5]||(a[5]=t("i",{class:"bi bi-calendar me-2"},null,-1)),o(i,{t:"Expire At"})]),o(u,{is24:!0,"min-date":new Date,"model-value":this.dataCopy.ExpireDate,"onUpdate:modelValue":this.parseTime,"time-picker-inline":"",format:"yyyy-MM-dd HH:mm:ss","preview-format":"yyyy-MM-dd HH:mm:ss",dark:this.store.Configuration.Server.dashboard_theme==="dark"},null,8,["min-date","model-value","onUpdate:modelValue","dark"])]),t("button",{onClick:a[2]||(a[2]=l=>this.stopSharing()),disabled:this.loading,class:"w-100 btn bg-danger-subtle text-danger-emphasis border-1 border-danger-subtle rounded-3 shadow-sm"},[t("span",{class:m({"animate__animated animate__flash animate__infinite animate__slower":this.loading})},a[6]||(a[6]=[t("i",{class:"bi bi-send-slash-fill me-2"},null,-1)]),2),this.loading?(s(),n(i,{key:0,t:"Stop Sharing..."})):(s(),n(i,{key:1,t:"Stop Sharing"}))],8,O)])):(s(),r("div",Y,[t("h6",$,[o(i,{t:"Currently the peer is not sharing"})]),t("button",{onClick:a[1]||(a[1]=l=>this.startSharing()),disabled:this.loading,class:"w-100 btn bg-success-subtle text-success-emphasis border-1 border-success-subtle rounded-3 shadow-sm"},[t("span",{class:m({"animate__animated animate__flash animate__infinite animate__slower":this.loading})},a[3]||(a[3]=[t("i",{class:"bi bi-send-fill me-2"},null,-1)]),2),this.loading?(s(),n(i,{key:0,t:"Sharing..."})):(s(),n(i,{key:1,t:"Start Sharing"}))],8,E)]))])):b("",!0)])])])])}const R=g(k,[["render",T]]);export{R as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -1 +1 @@
|
||||
import{_ as u,D as m,q as p,c as r,b as e,d as o,f as c,t as h,e as f,m as l,s as d,a as i,j as w}from"./index-BPNEscAR.js";import{L as g}from"./localeText-DX813vQA.js";const b={name:"setup",components:{LocaleText:g},setup(){return{store:m()}},data(){return{setup:{username:"",newPassword:"",repeatNewPassword:"",enable_totp:!0},loading:!1,errorMessage:"",done:!1}},computed:{goodToSubmit(){return this.setup.username&&this.setup.newPassword.length>=8&&this.setup.repeatNewPassword.length>=8&&this.setup.newPassword===this.setup.repeatNewPassword}},methods:{submit(){this.loading=!0,p("/api/Welcome_Finish",this.setup,n=>{n.status?(this.done=!0,this.$router.push("/2FASetup")):(document.querySelectorAll("#createAccount input").forEach(s=>s.classList.add("is-invalid")),this.errorMessage=n.message,document.querySelector(".login-container-fluid").scrollTo({top:0,left:0,behavior:"smooth"})),this.loading=!1})}}},_=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},v={class:"dashboardLogo display-4"},y={class:"mb-5"},P={key:0,class:"alert alert-danger"},N={class:"d-flex flex-column gap-3"},k={id:"createAccount",class:"d-flex flex-column gap-2"},S={class:"form-group text-body"},T={for:"username",class:"mb-1 text-muted"},C={class:"form-group text-body"},L={for:"password",class:"mb-1 text-muted"},V={class:"form-group text-body"},q={for:"confirmPassword",class:"mb-1 text-muted"},$=["disabled"],A={key:0,class:"d-flex align-items-center w-100"},M={key:1,class:"d-flex align-items-center w-100"};function B(n,s,D,E,U,F){const t=w("LocaleText");return i(),r("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[e("div",x,[e("span",v,[o(t,{t:"Nice to meet you!"})]),e("p",y,[o(t,{t:"Please fill in the following fields to finish setup"}),s[4]||(s[4]=c(" 😊"))]),e("div",null,[e("h3",null,[o(t,{t:"Create an account"})]),this.errorMessage?(i(),r("div",P,h(this.errorMessage),1)):f("",!0),e("div",N,[e("form",k,[e("div",S,[e("label",T,[e("small",null,[o(t,{t:"Enter an username you like"})])]),l(e("input",{type:"text",autocomplete:"username","onUpdate:modelValue":s[0]||(s[0]=a=>this.setup.username=a),class:"form-control",id:"username",name:"username",required:""},null,512),[[d,this.setup.username]])]),e("div",C,[e("label",L,[e("small",null,[o(t,{t:"Enter a password"}),e("code",null,[o(t,{t:"(At least 8 characters and make sure is strong enough!)"})])])]),l(e("input",{type:"password",autocomplete:"new-password","onUpdate:modelValue":s[1]||(s[1]=a=>this.setup.newPassword=a),class:"form-control",id:"password",name:"password",required:""},null,512),[[d,this.setup.newPassword]])]),e("div",V,[e("label",q,[e("small",null,[o(t,{t:"Confirm password"})])]),l(e("input",{type:"password",autocomplete:"confirm-new-password","onUpdate:modelValue":s[2]||(s[2]=a=>this.setup.repeatNewPassword=a),class:"form-control",id:"confirmPassword",name:"confirmPassword",required:""},null,512),[[d,this.setup.repeatNewPassword]])])]),e("button",{class:"btn btn-dark btn-lg mb-5 d-flex btn-brand shadow align-items-center",ref:"signInBtn",disabled:!this.goodToSubmit||this.loading||this.done,onClick:s[3]||(s[3]=a=>this.submit())},[!this.loading&&!this.done?(i(),r("span",A,[o(t,{t:"Next"}),s[5]||(s[5]=e("i",{class:"bi bi-chevron-right ms-auto"},null,-1))])):(i(),r("span",M,[o(t,{t:"Saving..."}),s[6]||(s[6]=e("span",{class:"spinner-border ms-auto spinner-border-sm",role:"status"},[e("span",{class:"visually-hidden"},"Loading...")],-1))]))],8,$)])])])],8,_)}const W=u(b,[["render",B]]);export{W as default};
|
||||
import{_ as u,D as m,q as p,c as r,b as e,d as o,f as c,t as h,e as f,m as l,s as d,a as i,j as w}from"./index-BQ9jnFZu.js";import{L as g}from"./localeText-BzleuEA0.js";const b={name:"setup",components:{LocaleText:g},setup(){return{store:m()}},data(){return{setup:{username:"",newPassword:"",repeatNewPassword:"",enable_totp:!0},loading:!1,errorMessage:"",done:!1}},computed:{goodToSubmit(){return this.setup.username&&this.setup.newPassword.length>=8&&this.setup.repeatNewPassword.length>=8&&this.setup.newPassword===this.setup.repeatNewPassword}},methods:{submit(){this.loading=!0,p("/api/Welcome_Finish",this.setup,n=>{n.status?(this.done=!0,this.$router.push("/2FASetup")):(document.querySelectorAll("#createAccount input").forEach(s=>s.classList.add("is-invalid")),this.errorMessage=n.message,document.querySelector(".login-container-fluid").scrollTo({top:0,left:0,behavior:"smooth"})),this.loading=!1})}}},_=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},v={class:"dashboardLogo display-4"},y={class:"mb-5"},P={key:0,class:"alert alert-danger"},N={class:"d-flex flex-column gap-3"},k={id:"createAccount",class:"d-flex flex-column gap-2"},S={class:"form-group text-body"},T={for:"username",class:"mb-1 text-muted"},C={class:"form-group text-body"},L={for:"password",class:"mb-1 text-muted"},V={class:"form-group text-body"},q={for:"confirmPassword",class:"mb-1 text-muted"},$=["disabled"],A={key:0,class:"d-flex align-items-center w-100"},M={key:1,class:"d-flex align-items-center w-100"};function B(n,s,D,E,U,F){const t=w("LocaleText");return i(),r("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[e("div",x,[e("span",v,[o(t,{t:"Nice to meet you!"})]),e("p",y,[o(t,{t:"Please fill in the following fields to finish setup"}),s[4]||(s[4]=c(" 😊"))]),e("div",null,[e("h3",null,[o(t,{t:"Create an account"})]),this.errorMessage?(i(),r("div",P,h(this.errorMessage),1)):f("",!0),e("div",N,[e("form",k,[e("div",S,[e("label",T,[e("small",null,[o(t,{t:"Enter an username you like"})])]),l(e("input",{type:"text",autocomplete:"username","onUpdate:modelValue":s[0]||(s[0]=a=>this.setup.username=a),class:"form-control",id:"username",name:"username",required:""},null,512),[[d,this.setup.username]])]),e("div",C,[e("label",L,[e("small",null,[o(t,{t:"Enter a password"}),e("code",null,[o(t,{t:"(At least 8 characters and make sure is strong enough!)"})])])]),l(e("input",{type:"password",autocomplete:"new-password","onUpdate:modelValue":s[1]||(s[1]=a=>this.setup.newPassword=a),class:"form-control",id:"password",name:"password",required:""},null,512),[[d,this.setup.newPassword]])]),e("div",V,[e("label",q,[e("small",null,[o(t,{t:"Confirm password"})])]),l(e("input",{type:"password",autocomplete:"confirm-new-password","onUpdate:modelValue":s[2]||(s[2]=a=>this.setup.repeatNewPassword=a),class:"form-control",id:"confirmPassword",name:"confirmPassword",required:""},null,512),[[d,this.setup.repeatNewPassword]])])]),e("button",{class:"btn btn-dark btn-lg mb-5 d-flex btn-brand shadow align-items-center",ref:"signInBtn",disabled:!this.goodToSubmit||this.loading||this.done,onClick:s[3]||(s[3]=a=>this.submit())},[!this.loading&&!this.done?(i(),r("span",A,[o(t,{t:"Next"}),s[5]||(s[5]=e("i",{class:"bi bi-chevron-right ms-auto"},null,-1))])):(i(),r("span",M,[o(t,{t:"Saving..."}),s[6]||(s[6]=e("span",{class:"spinner-border ms-auto spinner-border-sm",role:"status"},[e("span",{class:"visually-hidden"},"Loading...")],-1))]))],8,$)])])])],8,_)}const W=u(b,[["render",B]]);export{W as default};
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
import{_,r,D as p,g as u,c as m,b as t,d as c,$ as h,a as f,j as b}from"./index-BPNEscAR.js";import{b as v}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-DX813vQA.js";const g={name:"share",components:{LocaleText:y},async setup(){const o=h(),e=r(!1),i=p(),n=r(""),s=r(void 0),l=r(new Blob);await u("/api/getDashboardTheme",{},d=>{n.value=d.data});const a=o.query.ShareID;return a===void 0||a.length===0?(s.value=void 0,e.value=!0):await u("/api/sharePeer/get",{ShareID:a},d=>{d.status?(s.value=d.data,l.value=new Blob([s.value.file],{type:"text/plain"})):s.value=void 0,e.value=!0}),{store:i,theme:n,peerConfiguration:s,blob:l}},mounted(){this.peerConfiguration&&v.toCanvas(document.querySelector("#qrcode"),this.peerConfiguration.file,o=>{o&&console.error(o)})},methods:{download(){const o=new Blob([this.peerConfiguration.file],{type:"text/plain"}),e=URL.createObjectURL(o),i=`${this.peerConfiguration.fileName}.conf`,n=document.createElement("a");n.href=e,n.download=i,n.click()}},computed:{getBlob(){return URL.createObjectURL(this.blob)}}},w=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},C={key:0,class:"text-center position-relative",style:{}},U={class:"position-absolute w-100 h-100 top-0 start-0 d-flex animate__animated animate__fadeInUp",style:{"animation-delay":"0.1s"}},I={class:"m-auto"},L={key:1,class:"d-flex align-items-center flex-column gap-3"},B={class:"h1 dashboardLogo text-center animate__animated animate__fadeInUp"},k={id:"qrcode",class:"rounded-3 shadow animate__animated animate__fadeInUp mb-3",ref:"qrcode"},D={class:"text-muted animate__animated animate__fadeInUp mb-1",style:{"animation-delay":"0.2s"}},R=["download","href"];function j(o,e,i,n,s,l){const a=b("LocaleText");return f(),m("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.theme},[t("div",x,[this.peerConfiguration?(f(),m("div",L,[t("div",B,[e[1]||(e[1]=t("h6",null,"WGDashboard",-1)),c(a,{t:"Scan QR Code with the WireGuard App to add peer"})]),t("canvas",k,null,512),t("p",D,[c(a,{t:"or click the button below to download the "}),e[2]||(e[2]=t("samp",null,".conf",-1)),c(a,{t:" file"})]),t("a",{download:this.peerConfiguration.fileName+".conf",href:l.getBlob,class:"btn btn-lg bg-primary-subtle text-primary-emphasis border-1 border-primary-subtle animate__animated animate__fadeInUp shadow-sm",style:{"animation-delay":"0.25s"}},e[3]||(e[3]=[t("i",{class:"bi bi-download"},null,-1)]),8,R)])):(f(),m("div",C,[e[0]||(e[0]=t("div",{class:"animate__animated animate__fadeInUp"},[t("h1",{style:{"font-size":"20rem",filter:"blur(1rem)","animation-duration":"7s"},class:"animate__animated animate__flash animate__infinite"},[t("i",{class:"bi bi-file-binary"})])],-1)),t("div",U,[t("h3",I,[c(a,{t:"Oh no... This link is either expired or invalid."})])])]))])],8,w)}const $=_(g,[["render",j],["__scopeId","data-v-1b44aacd"]]);export{$ as default};
|
||||
import{_,r,D as p,g as u,c as m,b as t,d as c,$ as h,a as f,j as b}from"./index-BQ9jnFZu.js";import{b as v}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-BzleuEA0.js";const g={name:"share",components:{LocaleText:y},async setup(){const o=h(),e=r(!1),i=p(),n=r(""),s=r(void 0),l=r(new Blob);await u("/api/getDashboardTheme",{},d=>{n.value=d.data});const a=o.query.ShareID;return a===void 0||a.length===0?(s.value=void 0,e.value=!0):await u("/api/sharePeer/get",{ShareID:a},d=>{d.status?(s.value=d.data,l.value=new Blob([s.value.file],{type:"text/plain"})):s.value=void 0,e.value=!0}),{store:i,theme:n,peerConfiguration:s,blob:l}},mounted(){this.peerConfiguration&&v.toCanvas(document.querySelector("#qrcode"),this.peerConfiguration.file,o=>{o&&console.error(o)})},methods:{download(){const o=new Blob([this.peerConfiguration.file],{type:"text/plain"}),e=URL.createObjectURL(o),i=`${this.peerConfiguration.fileName}.conf`,n=document.createElement("a");n.href=e,n.download=i,n.click()}},computed:{getBlob(){return URL.createObjectURL(this.blob)}}},w=["data-bs-theme"],x={class:"m-auto text-body",style:{width:"500px"}},C={key:0,class:"text-center position-relative",style:{}},U={class:"position-absolute w-100 h-100 top-0 start-0 d-flex animate__animated animate__fadeInUp",style:{"animation-delay":"0.1s"}},I={class:"m-auto"},L={key:1,class:"d-flex align-items-center flex-column gap-3"},B={class:"h1 dashboardLogo text-center animate__animated animate__fadeInUp"},k={id:"qrcode",class:"rounded-3 shadow animate__animated animate__fadeInUp mb-3",ref:"qrcode"},D={class:"text-muted animate__animated animate__fadeInUp mb-1",style:{"animation-delay":"0.2s"}},R=["download","href"];function j(o,e,i,n,s,l){const a=b("LocaleText");return f(),m("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.theme},[t("div",x,[this.peerConfiguration?(f(),m("div",L,[t("div",B,[e[1]||(e[1]=t("h6",null,"WGDashboard",-1)),c(a,{t:"Scan QR Code with the WireGuard App to add peer"})]),t("canvas",k,null,512),t("p",D,[c(a,{t:"or click the button below to download the "}),e[2]||(e[2]=t("samp",null,".conf",-1)),c(a,{t:" file"})]),t("a",{download:this.peerConfiguration.fileName+".conf",href:l.getBlob,class:"btn btn-lg bg-primary-subtle text-primary-emphasis border-1 border-primary-subtle animate__animated animate__fadeInUp shadow-sm",style:{"animation-delay":"0.25s"}},e[3]||(e[3]=[t("i",{class:"bi bi-download"},null,-1)]),8,R)])):(f(),m("div",C,[e[0]||(e[0]=t("div",{class:"animate__animated animate__fadeInUp"},[t("h1",{style:{"font-size":"20rem",filter:"blur(1rem)","animation-duration":"7s"},class:"animate__animated animate__flash animate__infinite"},[t("i",{class:"bi bi-file-binary"})])],-1)),t("div",U,[t("h3",I,[c(a,{t:"Oh no... This link is either expired or invalid."})])])]))])],8,w)}const $=_(g,[["render",j],["__scopeId","data-v-1b44aacd"]]);export{$ as default};
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{_ as h,D as m,g as p,q as f,c as b,b as t,d as i,t as _,m as v,s as g,i as d,w as r,j as c,a as n}from"./index-BPNEscAR.js";import{b as x}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-DX813vQA.js";const T={name:"totp",components:{LocaleText:y},async setup(){const s=m();let e="";return await p("/api/Welcome_GetTotpLink",{},a=>{a.status&&(e=a.data)}),{l:e,store:s}},mounted(){this.l&&x.toCanvas(document.getElementById("qrcode"),this.l,function(s){})},data(){return{totp:"",totpInvalidMessage:"",verified:!1}},methods:{validateTotp(){}},watch:{totp(s){const e=document.querySelector("#totp");e.classList.remove("is-invalid","is-valid"),s.length===6&&(console.log(s),/[0-9]{6}/.test(s)?f("/api/Welcome_VerifyTotpLink",{totp:s},a=>{a.status?(this.verified=!0,e.classList.add("is-valid"),this.$emit("verified")):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP does not match.")}):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP can only contain numbers"))}}},k=["data-bs-theme"],w={class:"m-auto text-body",style:{width:"500px"}},L={class:"d-flex flex-column"},M={class:"dashboardLogo display-4"},C={class:"mb-2"},P={class:"text-muted"},I={class:"p-3 bg-body-secondary rounded-3 border mb-3"},O={class:"text-muted mb-0"},B=["href"],$={style:{"line-break":"anywhere"}},q={for:"totp",class:"mb-2"},D={class:"text-muted"},S={class:"form-group mb-2"},A=["disabled"],E={class:"invalid-feedback"},F={class:"valid-feedback"},R={class:"d-flex gap-3 mt-5 flex-column"};function G(s,e,a,N,W,j){const o=c("LocaleText"),l=c("RouterLink");return n(),b("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[t("div",w,[t("div",L,[t("div",null,[t("h1",M,[i(o,{t:"Multi-Factor Authentication (MFA)"})]),t("p",C,[t("small",P,[i(o,{t:"1. Please scan the following QR Code to generate TOTP with your choice of authenticator"})])]),e[1]||(e[1]=t("canvas",{id:"qrcode",class:"rounded-3 mb-2"},null,-1)),t("div",I,[t("p",O,[t("small",null,[i(o,{t:"Or you can click the link below:"})])]),t("a",{href:this.l},[t("code",$,_(this.l),1)],8,B)]),t("label",q,[t("small",D,[i(o,{t:"2. Enter the TOTP generated by your authenticator to verify"})])]),t("div",S,[v(t("input",{class:"form-control text-center totp",id:"totp",maxlength:"6",type:"text",inputmode:"numeric",autocomplete:"one-time-code","onUpdate:modelValue":e[0]||(e[0]=u=>this.totp=u),disabled:this.verified},null,8,A),[[g,this.totp]]),t("div",E,[i(o,{t:this.totpInvalidMessage},null,8,["t"])]),t("div",F,[i(o,{t:"TOTP verified!"})])])]),e[4]||(e[4]=t("hr",null,null,-1)),t("div",R,[this.verified?(n(),d(l,{key:1,to:"/",class:"btn btn-dark btn-lg d-flex btn-brand shadow align-items-center flex-grow-1 rounded-3"},{default:r(()=>[i(o,{t:"Complete"}),e[3]||(e[3]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1})):(n(),d(l,{key:0,to:"/",class:"btn bg-secondary-subtle text-secondary-emphasis rounded-3 flex-grow-1 btn-lg border-1 border-secondary-subtle shadow d-flex"},{default:r(()=>[i(o,{t:"I don't need MFA"}),e[2]||(e[2]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1}))])])])],8,k)}const z=h(T,[["render",G]]);export{z as default};
|
||||
import{_ as h,D as m,g as p,q as f,c as b,b as t,d as i,t as _,m as v,s as g,i as d,w as r,j as c,a as n}from"./index-BQ9jnFZu.js";import{b as x}from"./browser-CjSdxGTc.js";import{L as y}from"./localeText-BzleuEA0.js";const T={name:"totp",components:{LocaleText:y},async setup(){const s=m();let e="";return await p("/api/Welcome_GetTotpLink",{},a=>{a.status&&(e=a.data)}),{l:e,store:s}},mounted(){this.l&&x.toCanvas(document.getElementById("qrcode"),this.l,function(s){})},data(){return{totp:"",totpInvalidMessage:"",verified:!1}},methods:{validateTotp(){}},watch:{totp(s){const e=document.querySelector("#totp");e.classList.remove("is-invalid","is-valid"),s.length===6&&(console.log(s),/[0-9]{6}/.test(s)?f("/api/Welcome_VerifyTotpLink",{totp:s},a=>{a.status?(this.verified=!0,e.classList.add("is-valid"),this.$emit("verified")):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP does not match.")}):(e.classList.add("is-invalid"),this.totpInvalidMessage="TOTP can only contain numbers"))}}},k=["data-bs-theme"],w={class:"m-auto text-body",style:{width:"500px"}},L={class:"d-flex flex-column"},M={class:"dashboardLogo display-4"},C={class:"mb-2"},P={class:"text-muted"},I={class:"p-3 bg-body-secondary rounded-3 border mb-3"},O={class:"text-muted mb-0"},B=["href"],$={style:{"line-break":"anywhere"}},q={for:"totp",class:"mb-2"},D={class:"text-muted"},S={class:"form-group mb-2"},A=["disabled"],E={class:"invalid-feedback"},F={class:"valid-feedback"},R={class:"d-flex gap-3 mt-5 flex-column"};function G(s,e,a,N,W,j){const o=c("LocaleText"),l=c("RouterLink");return n(),b("div",{class:"container-fluid login-container-fluid d-flex main pt-5 overflow-scroll","data-bs-theme":this.store.Configuration.Server.dashboard_theme},[t("div",w,[t("div",L,[t("div",null,[t("h1",M,[i(o,{t:"Multi-Factor Authentication (MFA)"})]),t("p",C,[t("small",P,[i(o,{t:"1. Please scan the following QR Code to generate TOTP with your choice of authenticator"})])]),e[1]||(e[1]=t("canvas",{id:"qrcode",class:"rounded-3 mb-2"},null,-1)),t("div",I,[t("p",O,[t("small",null,[i(o,{t:"Or you can click the link below:"})])]),t("a",{href:this.l},[t("code",$,_(this.l),1)],8,B)]),t("label",q,[t("small",D,[i(o,{t:"2. Enter the TOTP generated by your authenticator to verify"})])]),t("div",S,[v(t("input",{class:"form-control text-center totp",id:"totp",maxlength:"6",type:"text",inputmode:"numeric",autocomplete:"one-time-code","onUpdate:modelValue":e[0]||(e[0]=u=>this.totp=u),disabled:this.verified},null,8,A),[[g,this.totp]]),t("div",E,[i(o,{t:this.totpInvalidMessage},null,8,["t"])]),t("div",F,[i(o,{t:"TOTP verified!"})])])]),e[4]||(e[4]=t("hr",null,null,-1)),t("div",R,[this.verified?(n(),d(l,{key:1,to:"/",class:"btn btn-dark btn-lg d-flex btn-brand shadow align-items-center flex-grow-1 rounded-3"},{default:r(()=>[i(o,{t:"Complete"}),e[3]||(e[3]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1})):(n(),d(l,{key:0,to:"/",class:"btn bg-secondary-subtle text-secondary-emphasis rounded-3 flex-grow-1 btn-lg border-1 border-secondary-subtle shadow d-flex"},{default:r(()=>[i(o,{t:"I don't need MFA"}),e[2]||(e[2]=t("i",{class:"bi bi-chevron-right ms-auto"},null,-1))]),_:1}))])])])],8,k)}const z=h(T,[["render",G]]);export{z as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as h,W as b,g,c as o,b as t,d as n,m as y,s as f,A as v,w as r,T as c,a,f as x,F as u,h as m,n as T,z as k,t as i,e as A,j as _}from"./index-BPNEscAR.js";import{O as w}from"./osmap-DFqkfaU2.js";import{L as R}from"./localeText-DX813vQA.js";const M={name:"traceroute",components:{LocaleText:R,OSMap:w},data(){return{tracing:!1,ipAddress:void 0,tracerouteResult:void 0}},setup(){return{store:b()}},methods:{execute(){this.ipAddress&&(this.tracing=!0,this.tracerouteResult=void 0,g("/api/traceroute/execute",{ipAddress:this.ipAddress},d=>{d.status?this.tracerouteResult=d.data:this.store.newMessage("Server",d.message,"danger"),this.tracing=!1}))}}},S={class:"mt-md-5 mt-3 text-body"},$={class:"container-md"},C={class:"mb-3 text-body"},L={class:"d-flex gap-2 flex-column mb-5"},P={class:"mb-1 text-muted",for:"ipAddress"},V=["disabled"],N=["disabled"],O={key:0,class:"d-block"},z={key:1,class:"d-block"},B={class:"position-relative"},I={key:"pingPlaceholder"},D={key:1},E={key:"table",class:"w-100 mt-2"},F={class:"table table-sm rounded-3 w-100"},G={scope:"col"},H={scope:"col"},K={scope:"col"},W={scope:"col"},j={scope:"col"},U={scope:"col"},q={key:0};function J(d,s,Q,X,Y,Z){const l=_("LocaleText"),p=_("OSMap");return a(),o("div",S,[t("div",$,[t("h3",C,[n(l,{t:"Traceroute"})]),t("div",L,[t("div",null,[t("label",P,[t("small",null,[n(l,{t:"Enter IP Address / Hostname"})])]),y(t("input",{disabled:this.tracing,id:"ipAddress",class:"form-control","onUpdate:modelValue":s[0]||(s[0]=e=>this.ipAddress=e),onKeyup:s[1]||(s[1]=v(e=>this.execute(),["enter"])),type:"text"},null,40,V),[[f,this.ipAddress]])]),t("button",{class:"btn btn-primary rounded-3 mt-3 position-relative",disabled:this.tracing||!this.ipAddress,onClick:s[2]||(s[2]=e=>this.execute())},[n(c,{name:"slide"},{default:r(()=>[this.tracing?(a(),o("span",z,s[4]||(s[4]=[t("span",{class:"spinner-border spinner-border-sm","aria-hidden":"true"},null,-1),t("span",{class:"visually-hidden",role:"status"},"Loading...",-1)]))):(a(),o("span",O,s[3]||(s[3]=[t("i",{class:"bi bi-person-walking me-2"},null,-1),x("Trace! ")])))]),_:1})],8,N)]),t("div",B,[n(c,{name:"ping"},{default:r(()=>[this.tracerouteResult?(a(),o("div",D,[n(p,{d:this.tracerouteResult,type:"traceroute"},null,8,["d"]),t("div",E,[t("table",F,[t("thead",null,[t("tr",null,[t("th",G,[n(l,{t:"Hop"})]),t("th",H,[n(l,{t:"IP Address"})]),t("th",K,[n(l,{t:"Average RTT (ms)"})]),t("th",W,[n(l,{t:"Min RTT (ms)"})]),t("th",j,[n(l,{t:"Max RTT (ms)"})]),t("th",U,[n(l,{t:"Geolocation"})])])]),t("tbody",null,[(a(!0),o(u,null,m(this.tracerouteResult,(e,tt)=>(a(),o("tr",null,[t("td",null,[t("small",null,i(e.hop),1)]),t("td",null,[t("small",null,i(e.ip),1)]),t("td",null,[t("small",null,i(e.avg_rtt),1)]),t("td",null,[t("small",null,i(e.min_rtt),1)]),t("td",null,[t("small",null,i(e.max_rtt),1)]),t("td",null,[e.geo.city&&e.geo.country?(a(),o("span",q,[t("small",null,i(e.geo.city)+", "+i(e.geo.country),1)])):A("",!0)])]))),256))])])])])):(a(),o("div",I,[s[5]||(s[5]=t("div",{class:"pingPlaceholder bg-body-secondary rounded-3 mb-3",style:{height:"300px !important"}},null,-1)),(a(),o(u,null,m(5,e=>t("div",{class:T(["pingPlaceholder bg-body-secondary rounded-3 mb-3",{"animate__animated animate__flash animate__slower animate__infinite":this.tracing}]),style:k({"animation-delay":`${e*.05}s`})},null,6)),64))]))]),_:1})])])])}const ot=h(M,[["render",J],["__scopeId","data-v-549eb223"]]);export{ot as default};
|
||||
import{_ as h,W as b,g,c as o,b as t,d as n,m as y,s as f,A as v,w as r,T as c,a,f as x,F as u,h as m,n as T,z as k,t as i,e as A,j as _}from"./index-BQ9jnFZu.js";import{O as w}from"./osmap-DVGZjOTw.js";import{L as R}from"./localeText-BzleuEA0.js";const M={name:"traceroute",components:{LocaleText:R,OSMap:w},data(){return{tracing:!1,ipAddress:void 0,tracerouteResult:void 0}},setup(){return{store:b()}},methods:{execute(){this.ipAddress&&(this.tracing=!0,this.tracerouteResult=void 0,g("/api/traceroute/execute",{ipAddress:this.ipAddress},d=>{d.status?this.tracerouteResult=d.data:this.store.newMessage("Server",d.message,"danger"),this.tracing=!1}))}}},S={class:"mt-md-5 mt-3 text-body"},$={class:"container-md"},C={class:"mb-3 text-body"},L={class:"d-flex gap-2 flex-column mb-5"},P={class:"mb-1 text-muted",for:"ipAddress"},V=["disabled"],N=["disabled"],O={key:0,class:"d-block"},z={key:1,class:"d-block"},B={class:"position-relative"},I={key:"pingPlaceholder"},D={key:1},E={key:"table",class:"w-100 mt-2"},F={class:"table table-sm rounded-3 w-100"},G={scope:"col"},H={scope:"col"},K={scope:"col"},W={scope:"col"},j={scope:"col"},U={scope:"col"},q={key:0};function J(d,s,Q,X,Y,Z){const l=_("LocaleText"),p=_("OSMap");return a(),o("div",S,[t("div",$,[t("h3",C,[n(l,{t:"Traceroute"})]),t("div",L,[t("div",null,[t("label",P,[t("small",null,[n(l,{t:"Enter IP Address / Hostname"})])]),y(t("input",{disabled:this.tracing,id:"ipAddress",class:"form-control","onUpdate:modelValue":s[0]||(s[0]=e=>this.ipAddress=e),onKeyup:s[1]||(s[1]=v(e=>this.execute(),["enter"])),type:"text"},null,40,V),[[f,this.ipAddress]])]),t("button",{class:"btn btn-primary rounded-3 mt-3 position-relative",disabled:this.tracing||!this.ipAddress,onClick:s[2]||(s[2]=e=>this.execute())},[n(c,{name:"slide"},{default:r(()=>[this.tracing?(a(),o("span",z,s[4]||(s[4]=[t("span",{class:"spinner-border spinner-border-sm","aria-hidden":"true"},null,-1),t("span",{class:"visually-hidden",role:"status"},"Loading...",-1)]))):(a(),o("span",O,s[3]||(s[3]=[t("i",{class:"bi bi-person-walking me-2"},null,-1),x("Trace! ")])))]),_:1})],8,N)]),t("div",B,[n(c,{name:"ping"},{default:r(()=>[this.tracerouteResult?(a(),o("div",D,[n(p,{d:this.tracerouteResult,type:"traceroute"},null,8,["d"]),t("div",E,[t("table",F,[t("thead",null,[t("tr",null,[t("th",G,[n(l,{t:"Hop"})]),t("th",H,[n(l,{t:"IP Address"})]),t("th",K,[n(l,{t:"Average RTT (ms)"})]),t("th",W,[n(l,{t:"Min RTT (ms)"})]),t("th",j,[n(l,{t:"Max RTT (ms)"})]),t("th",U,[n(l,{t:"Geolocation"})])])]),t("tbody",null,[(a(!0),o(u,null,m(this.tracerouteResult,(e,tt)=>(a(),o("tr",null,[t("td",null,[t("small",null,i(e.hop),1)]),t("td",null,[t("small",null,i(e.ip),1)]),t("td",null,[t("small",null,i(e.avg_rtt),1)]),t("td",null,[t("small",null,i(e.min_rtt),1)]),t("td",null,[t("small",null,i(e.max_rtt),1)]),t("td",null,[e.geo.city&&e.geo.country?(a(),o("span",q,[t("small",null,i(e.geo.city)+", "+i(e.geo.country),1)])):A("",!0)])]))),256))])])])])):(a(),o("div",I,[s[5]||(s[5]=t("div",{class:"pingPlaceholder bg-body-secondary rounded-3 mb-3",style:{height:"300px !important"}},null,-1)),(a(),o(u,null,m(5,e=>t("div",{class:T(["pingPlaceholder bg-body-secondary rounded-3 mb-3",{"animate__animated animate__flash animate__slower animate__infinite":this.tracing}]),style:k({"animation-delay":`${e*.05}s`})},null,6)),64))]))]),_:1})])])])}const ot=h(M,[["render",J],["__scopeId","data-v-549eb223"]]);export{ot as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -10,7 +10,7 @@
|
||||
<link rel="icon" href="/static/app/dist/favicon.png">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>WGDashboard</title>
|
||||
<script type="module" crossorigin src="/static/app/dist/assets/index-BPNEscAR.js"></script>
|
||||
<script type="module" crossorigin src="/static/app/dist/assets/index-BQ9jnFZu.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/static/app/dist/assets/index-D2eeEsuX.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "app",
|
||||
"version": "4.1.0",
|
||||
"version": "4.1.3",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -82,7 +82,6 @@ export default {
|
||||
</small>
|
||||
</div>
|
||||
<div class="d-flex align-items-end">
|
||||
|
||||
<div class="ms-auto px-2 rounded-3 subMenuBtn"
|
||||
:class="{active: this.subMenuOpened}"
|
||||
>
|
||||
|
||||
@@ -66,7 +66,6 @@ const copy = async () => {
|
||||
<textarea
|
||||
style="height: 300px"
|
||||
class="form-control w-100 rounded-3 mt-2"
|
||||
disabled
|
||||
id="peerConfigurationFile"
|
||||
:value="configurationFile"></textarea>
|
||||
</div>
|
||||
|
||||
@@ -146,9 +146,7 @@ export default {
|
||||
id="bullAdd_PresharedKey_Switch" checked>
|
||||
<label class="form-check-label" for="bullAdd_PresharedKey_Switch">
|
||||
<small class="fw-bold">
|
||||
<LocaleText t="Pre-Shared Key"></LocaleText>
|
||||
<LocaleText t="Enabled" v-if="this.data.preshared_key_bulkAdd"></LocaleText>
|
||||
<LocaleText t="Disabled" v-else></LocaleText>
|
||||
<LocaleText t="Pre-Shared Key"></LocaleText> <LocaleText t="Enabled" v-if="this.data.preshared_key_bulkAdd"></LocaleText><LocaleText t="Disabled" v-else></LocaleText>
|
||||
</small>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@@ -29,7 +29,7 @@ onMounted(() => {
|
||||
<button type="button" class="btn-close ms-auto" @click="$emit('close')"></button>
|
||||
</div>
|
||||
<div class="card-body px-4 pb-4 d-flex flex-column gap-2">
|
||||
<a class="card text-decoration-none" target="_blank" role="button" href="https://discord.com/invite/ZkJSPAaQ">
|
||||
<a class="card text-decoration-none" target="_blank" role="button" href="https://discord.gg/72TwzjeuWm">
|
||||
<div class="card-body d-flex gap-4 align-items-center">
|
||||
<h1 class="mb-0">
|
||||
<i class="bi bi-discord"></i>
|
||||
|
||||
@@ -63,8 +63,9 @@ export const DashboardConfigurationStore = defineStore('DashboardConfigurationSt
|
||||
});
|
||||
},
|
||||
async signOut(){
|
||||
await fetchGet("/api/signout", {}, (res) => {
|
||||
await fetchGet("/api/signout", {}, () => {
|
||||
this.removeActiveCrossServer();
|
||||
document.cookie = '';
|
||||
this.$router.go('/signin')
|
||||
});
|
||||
},
|
||||
|
||||
@@ -14,6 +14,16 @@
|
||||
"lang_name": "English",
|
||||
"lang_name_localized": "English"
|
||||
},
|
||||
{
|
||||
"lang_id": "es-es",
|
||||
"lang_name": "Spanish",
|
||||
"lang_name_localized": "Español"
|
||||
},
|
||||
{
|
||||
"lang_id": "fr-ca",
|
||||
"lang_name": "French (Quebec)",
|
||||
"lang_name_localized": "Français (Québec)"
|
||||
},
|
||||
{
|
||||
"lang_id": "it-it",
|
||||
"lang_name": "Italian",
|
||||
@@ -29,6 +39,11 @@
|
||||
"lang_name": "Russian",
|
||||
"lang_name_localized": "Русский"
|
||||
},
|
||||
{
|
||||
"lang_id": "tr-tr",
|
||||
"lang_name": "Turkish",
|
||||
"lang_name_localized": "Türkçe"
|
||||
},
|
||||
{
|
||||
"lang_id": "uk",
|
||||
"lang_name": "Ukrainian",
|
||||
@@ -43,5 +58,15 @@
|
||||
"lang_id": "zh-hk",
|
||||
"lang_name": "Chinese (Traditional)",
|
||||
"lang_name_localized": "中文(繁體)"
|
||||
},
|
||||
{
|
||||
"lang_id": "sv-se",
|
||||
"lang_name": "Swedish",
|
||||
"lang_name_localized": "Svenska"
|
||||
},
|
||||
{
|
||||
"lang_id": "pl",
|
||||
"lang_name": "Polish",
|
||||
"lang_name_localized": "Polski"
|
||||
}
|
||||
]
|
||||
|
||||
+22
-21
@@ -4,7 +4,6 @@
|
||||
"Password": "Heslo",
|
||||
"OTP from your authenticator": "Jednorázové heslo (OTP) z vašeho autentizátoru",
|
||||
"Sign In": "Přihlásit",
|
||||
"Signing In...": "Přihlašování...",
|
||||
"Access Remote Server": "Připojit k vzdálenému serveru",
|
||||
"Server": "Server",
|
||||
"Click": "Klikněte",
|
||||
@@ -35,7 +34,6 @@
|
||||
"New Password": "Nové heslo",
|
||||
"Repeat New Password": "Zopakujte nové heslo",
|
||||
"Update Password": "Aktualizace hesla",
|
||||
"Multi-Factor Authentication (MFA)": "Vícefaktorové ověření (MFA)",
|
||||
"Reset": "Resetovat",
|
||||
"Setup": "Nastavení",
|
||||
"API Keys": "API klíče",
|
||||
@@ -45,18 +43,13 @@
|
||||
"Disabled": "Zakázáno",
|
||||
"No WGDashboard API Key": "Žádný WGDashboard API klíč",
|
||||
"Expire At": "Vyprší",
|
||||
"Are you sure to delete this API key?": "Určitě chcete smazat tento API klíč?",
|
||||
"Create API Key": "Vytvořit API klíč",
|
||||
"When should this API Key expire?": "Kdy má tento API klíč vypršet?",
|
||||
"Never Expire": "Bez expirace",
|
||||
"Don't think that's a good idea": "To není dobrý nápad",
|
||||
"Creating...": "Tvořím...",
|
||||
"Create": "Vytvořit",
|
||||
"Status": "Stav",
|
||||
"On": "Zapnuto",
|
||||
"Off": "Vypnuto",
|
||||
"Turning On...": "Zapínám...",
|
||||
"Turning Off...": "Vypínám...",
|
||||
"Address": "Adresa",
|
||||
"Listen Port": "Otevřený port",
|
||||
"Public Key": "Veřejný klíč",
|
||||
@@ -71,7 +64,6 @@
|
||||
"Peers": "Peers",
|
||||
"Peer Settings": "Nastavení peers",
|
||||
"Download All": "Stáhnout vše",
|
||||
"Search Peers...": "Hledat peers...",
|
||||
"Display": "Zobrazit",
|
||||
"Sort By": "Seřadit dle",
|
||||
"Refresh Interval": "Aktualizační interval",
|
||||
@@ -86,8 +78,6 @@
|
||||
"All Active Jobs": "Všechny aktivní úkoly",
|
||||
"Logs": "Logy",
|
||||
"Private Key": "Soukromý klíč",
|
||||
"(Required for QR Code and Download)": "(Nutné pro QR kód a stažení)",
|
||||
"(Required)": "(Povinné)",
|
||||
"Endpoint Allowed IPs": "Povolené IP adresy koncového bodu",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "Volitelná nastavení",
|
||||
@@ -105,7 +95,6 @@
|
||||
"Job": "Úkol",
|
||||
"Job ID": "ID úkolu",
|
||||
"Unsaved Job": "Neuložený úkol",
|
||||
"This peer does not have any job yet.": "Tento peer ještě nemá žádný úkol.",
|
||||
"if": "pokud",
|
||||
"is": "je",
|
||||
"then": "pak",
|
||||
@@ -118,7 +107,6 @@
|
||||
"Deleting...": "Mažu...",
|
||||
"Cancel": "Zrušit",
|
||||
"Save": "Uložit",
|
||||
"No active job at the moment.": "Žádný úkol v současnosti neprobíhá.",
|
||||
"Jobs Logs": "Logy úkolů",
|
||||
"Updated at": "Aktualizováno",
|
||||
"Refresh": "Aktualizovat",
|
||||
@@ -129,20 +117,13 @@
|
||||
"Message": "Zpráva",
|
||||
"Share Peer": "Sdílet peera",
|
||||
"Currently the peer is not sharing": "Peer momentálně nesdílí",
|
||||
"Sharing...": "Sdílím...",
|
||||
"Start Sharing": "Zahájit sdílení",
|
||||
"Stop Sharing...": "Ukončit sdílení...",
|
||||
"Stop Sharing": "Ukončit sdílení",
|
||||
"Access Restricted": "Přístup omezen",
|
||||
"Restrict Access": "Omezit přístup",
|
||||
"Restricting...": "Omezuji...",
|
||||
"Allow Access": "Povolit přístup",
|
||||
"Allowing Access...": "Povoluji přístup...",
|
||||
"Download & QR Code is not available due to no private key set for this peer": "Stažení a QR kód nejsou k dispozici, peer nemá nastavený soukromý klíč.",
|
||||
"Add Peers": "Přidat peery",
|
||||
"Bulk Add": "Hromadný import",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP.": "Při hromadném importu bude jméno každého peera vygenerované automaticky, a povolená IP adresa bude nastavena na další v pořadí",
|
||||
"How many peers you want to add?": "Kolik peerů chcete přidat?",
|
||||
"You can add up to (.*) peers": "Můžete přidat nanejvýš $1 peerů",
|
||||
"Use your own Private and Public Key": "Použít vlastní soukromý a veřejný klíč",
|
||||
"Enter IP Address/CIDR": "Zadejte IP adresu/CIDR",
|
||||
@@ -151,7 +132,6 @@
|
||||
"Pick Available IP": "Vyberte dostupnou IP",
|
||||
"No available IP containing": "Žádná dostupná IP obsahující",
|
||||
"Add": "Přidat",
|
||||
"Adding...": "Přidávám...",
|
||||
"Failed to check available update": "Nepodařilo se zkontrolovat dostupnost aktualizací",
|
||||
"Nice to meet you!": "Rádi vás poznáváme!",
|
||||
"Please fill in the following fields to finish setup": "Prosím, vyplňte následující pole pro dokončení nastavení",
|
||||
@@ -307,5 +287,26 @@
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Smazáno $1 peer/-ů",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Smazáno $1 peer/-ů. Nezdařilo se smazat $2 peer/-ů",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Omezeno $1 peer/-ů",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Omezeno $1 peer/-ů. Nezdařilo se omezit $2 peer/-ů"
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Omezeno $1 peer/-ů. Nezdařilo se omezit $2 peer/-ů",
|
||||
"Signing In\\.\\.\\.": "Přihlašování...",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Vícefaktorové ověření (MFA)",
|
||||
"Are you sure to delete this API key\\?": "Určitě chcete smazat tento API klíč?",
|
||||
"When should this API Key expire\\?": "Kdy má tento API klíč vypršet?",
|
||||
"Creating\\.\\.\\.": "Tvořím...",
|
||||
"Turning On\\.\\.\\.": "Zapínám...",
|
||||
"Turning Off\\.\\.\\.": "Vypínám...",
|
||||
"Search Peers\\.\\.\\.": "Hledat peers...",
|
||||
"\\(Required for QR Code and Download\\)": "(Nutné pro QR kód a stažení)",
|
||||
"\\(Required\\)": "(Povinné)",
|
||||
"This peer does not have any job yet\\.": "Tento peer ještě nemá žádný úkol.",
|
||||
"No active job at the moment\\.": "Žádný úkol v současnosti neprobíhá.",
|
||||
"Sharing\\.\\.\\.": "Sdílím...",
|
||||
"Stop Sharing\\.\\.\\.": "Ukončit sdílení...",
|
||||
"Restricting\\.\\.\\.": "Omezuji...",
|
||||
"Allowing Access\\.\\.\\.": "Povoluji přístup...",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "Stažení a QR kód nejsou k dispozici, peer nemá nastavený soukromý klíč.",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Při hromadném importu bude jméno každého peera vygenerované automaticky, a povolená IP adresa bude nastavena na další v pořadí",
|
||||
"How many peers you want to add\\?": "Kolik peerů chcete přidat?",
|
||||
"Adding\\.\\.\\.": "Přidávám...",
|
||||
"Dashboard IP Address \\& Listen Port": ""
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
"Password": "Passwort",
|
||||
"OTP from your authenticator": "OTP von deinem Authentifikator",
|
||||
"Sign In": "Anmelden",
|
||||
"Signing In...": "Anmeldung...",
|
||||
"Access Remote Server": "Zugriff auf Remote-Server",
|
||||
"Server": "Server",
|
||||
"Click": "Klicken",
|
||||
@@ -35,7 +34,6 @@
|
||||
"New Password": "Neues Passwort",
|
||||
"Repeat New Password": "Neues Passwort wiederholen",
|
||||
"Update Password": "Passwort aktualisieren",
|
||||
"Multi-Factor Authentication (MFA)": "Multi-Faktor-Authentifizierung (MFA)",
|
||||
"Reset": "Zurücksetzen",
|
||||
"Setup": "Einrichten",
|
||||
"API Keys": "API-Schlüssel",
|
||||
@@ -45,18 +43,13 @@
|
||||
"Disabled": "Deaktiviert",
|
||||
"No WGDashboard API Key": "Kein WGDashboard API-Schlüssel",
|
||||
"Expire At": "Ablaufdatum",
|
||||
"Are you sure to delete this API key?": "Bist du sicher, dass du diesen API-Schlüssel löschen möchtest?",
|
||||
"Create API Key": "API-Schlüssel erstellen",
|
||||
"When should this API Key expire?": "Wann soll dieser API-Schlüssel ablaufen?",
|
||||
"Never Expire": "Kein Ablaufdatum",
|
||||
"Don't think that's a good idea": "Das ist wohl keine gute Idee",
|
||||
"Creating...": "Erstelle...",
|
||||
"Create": "Erstellen",
|
||||
"Status": "Status",
|
||||
"On": "An",
|
||||
"Off": "Aus",
|
||||
"Turning On...": "Schalte ein...",
|
||||
"Turning Off...": "Schalte aus...",
|
||||
"Address": "Adresse",
|
||||
"Listen Port": "Empfangsport",
|
||||
"Public Key": "Öffentlicher Schlüssel",
|
||||
@@ -71,7 +64,6 @@
|
||||
"Peers": "Peers",
|
||||
"Peer Settings": "Peers Einstellungen",
|
||||
"Download All": "Alle herunterladen",
|
||||
"Search Peers...": "Suche Peers...",
|
||||
"Display": "Anzeigen",
|
||||
"Sort By": "Sortieren nach",
|
||||
"Refresh Interval": "Aktualisierungsintervall",
|
||||
@@ -86,8 +78,6 @@
|
||||
"All Active Jobs": "Alle aktiven Aufgaben",
|
||||
"Logs": "Protokolle",
|
||||
"Private Key": "Privater Schlüssel",
|
||||
"(Required for QR Code and Download)": "(Erforderlich für QR-Code und Download)",
|
||||
"(Required)": "(Erforderlich)",
|
||||
"Endpoint Allowed IPs": "Erlaubte IPs für Endpunkt",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "Optionale Einstellungen",
|
||||
@@ -105,7 +95,6 @@
|
||||
"Job": "Aufgabe",
|
||||
"Job ID": "Aufgaben-ID",
|
||||
"Unsaved Job": "Nicht gespeicherte Aufgabe",
|
||||
"This peer does not have any job yet.": "Dieser Peer hat noch keine Aufgabe.",
|
||||
"if": "wenn",
|
||||
"is": "ist",
|
||||
"then": "dann",
|
||||
@@ -118,7 +107,6 @@
|
||||
"Deleting...": "Lösche...",
|
||||
"Cancel": "Abbrechen",
|
||||
"Save": "Speichern",
|
||||
"No active job at the moment.": "Zurzeit keine aktive Aufgabe.",
|
||||
"Jobs Logs": "Aufgabenprotokolle",
|
||||
"Updated at": "Aktualisiert am",
|
||||
"Refresh": "Aktualisieren",
|
||||
@@ -129,20 +117,13 @@
|
||||
"Message": "Nachricht",
|
||||
"Share Peer": "Peer teilen",
|
||||
"Currently the peer is not sharing": "Der Peer wird derzeit nicht freigegeben",
|
||||
"Sharing...": "Teile...",
|
||||
"Start Sharing": "Teilen starten",
|
||||
"Stop Sharing...": "Teilen beenden...",
|
||||
"Stop Sharing": "Teilen beenden",
|
||||
"Access Restricted": "Zugriff eingeschränkt",
|
||||
"Restrict Access": "Zugriff einschränken",
|
||||
"Restricting...": "Einschränken...",
|
||||
"Allow Access": "Zugriff erlauben",
|
||||
"Allowing Access...": "Erlaube Zugriff...",
|
||||
"Download & QR Code is not available due to no private key set for this peer": "Download & QR-Code sind nicht verfügbar, da kein privater Schlüssel für diesen Peer festgelegt wurde",
|
||||
"Add Peers": "Peers hinzufügen",
|
||||
"Bulk Add": "Massenerstellung",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP.": "Bei der Massenerstellung wird der Name jedes Peers automatisch generiert, und die erlaubte IP wird der nächsten verfügbaren IP zugewiesen.",
|
||||
"How many peers you want to add?": "Wie viele Peers möchtest du hinzufügen?",
|
||||
"You can add up to (.*) peers": "Du kannst bis zu $1 Peers hinzufügen",
|
||||
"Use your own Private and Public Key": "Verwende deinen eigenen privaten und öffentlichen Schlüssel",
|
||||
"Enter IP Address/CIDR": "Gib IP-Adresse/CIDR ein",
|
||||
@@ -151,7 +132,6 @@
|
||||
"Pick Available IP": "Verfügbare IP auswählen",
|
||||
"No available IP containing": "Keine verfügbare IP enthält",
|
||||
"Add": "Hinzufügen",
|
||||
"Adding...": "Füge hinzu...",
|
||||
"Failed to check available update": "Überprüfung auf verfügbares Update fehlgeschlagen",
|
||||
"Nice to meet you!": "Schön, dich kennenzulernen!",
|
||||
"Please fill in the following fields to finish setup": "Bitte fülle die folgenden Felder aus, um die Einrichtung abzuschließen",
|
||||
@@ -237,75 +217,96 @@
|
||||
"Enter IP Address / Hostname": "IP-Adresse/Hostnamen eingeben",
|
||||
"IP Address / Hostname": "IP-Adresse/Hostnamen",
|
||||
"Count": "Zählen",
|
||||
"Geolocation": "",
|
||||
"Is Alive": "",
|
||||
"Average / Min / Max Round Trip Time": "",
|
||||
"Sent / Received / Lost Package": "",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "",
|
||||
"Restore Configuration": "",
|
||||
"Step (.*)": "",
|
||||
"Select a backup you want to restore": "",
|
||||
"Click to change a backup": "",
|
||||
"Selected Backup": "",
|
||||
"You don't have any configuration to restore": "",
|
||||
"Help": "",
|
||||
"Backup": "",
|
||||
"([0-9].*) Backups?": "",
|
||||
"Yes": "",
|
||||
"No": "",
|
||||
"Backup not selected": "",
|
||||
"Confirm \\& edit restore information": "",
|
||||
"(.*) Available IP Address": "",
|
||||
"Database File": "",
|
||||
"Contain": "",
|
||||
"Restricted Peers?": "",
|
||||
"Restore": "",
|
||||
"Restoring": "",
|
||||
"WGDashboard Settings": "",
|
||||
"Peers Settings": "",
|
||||
"WireGuard Configuration Settings": "",
|
||||
"Appearance": "",
|
||||
"Theme": "",
|
||||
"Language": "",
|
||||
"Account Settings": "",
|
||||
"Peer Default Settings": "",
|
||||
"Toggle When Start Up": "",
|
||||
"Other Settings": "",
|
||||
"Select Peers": "",
|
||||
"Backup & Restore": "",
|
||||
"Delete Configuration": "",
|
||||
"Create Backup": "",
|
||||
"No backup yet, click the button above to create backup\\.": "",
|
||||
"Are you sure to delete this backup\\?": "",
|
||||
"Are you sure to restore this backup?\\": "",
|
||||
"Backup Date": "",
|
||||
"File": "",
|
||||
"Are you sure to delete this configuration\\?": "",
|
||||
"Once you deleted this configuration\\:": "",
|
||||
"All connected peers will get disconnected": "",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "",
|
||||
"Checking backups...": "",
|
||||
"This configuration have ([0-9].*) backups": "",
|
||||
"This configuration have no backup": "",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "",
|
||||
"Select All": "",
|
||||
"Clear Selection": "",
|
||||
"([0-9].*) Peers?": "",
|
||||
"Downloading": "",
|
||||
"Download Finished": "",
|
||||
"Done": "",
|
||||
"Are you sure to delete": "",
|
||||
"Are you sure to delete this peer\\?": "",
|
||||
"Configuration deleted": "",
|
||||
"Configuration saved": "",
|
||||
"WGDashboard language update failed": "",
|
||||
"Configuration restored": "",
|
||||
"Allowed IP already taken by another peer": "",
|
||||
"Failed to allow access of peer (.*)": "",
|
||||
"Failed to save configuration through WireGuard": "",
|
||||
"Allow access successfully": "",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": ""
|
||||
"Geolocation": "Geostandort",
|
||||
"Is Alive": "Ist erreichbar",
|
||||
"Average / Min / Max Round Trip Time": "Durchschnittliche / Minimale / Maximale Antwortzeit",
|
||||
"Sent / Received / Lost Package": "Gesendete / Empfangene / Verlorene Pakete",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Manueller Neustart des WGDashboards erforderlich, um Änderungen an der IP-Adresse und dem Listen-Port anzuwenden",
|
||||
"Restore Configuration": "Konfiguration wiederherstellen",
|
||||
"Step (.*)": "Schritt $1",
|
||||
"Select a backup you want to restore": "Wählen Sie ein Backup aus, das Sie wiederherstellen möchten",
|
||||
"Click to change a backup": "Klicken, um ein Backup zu ändern",
|
||||
"Selected Backup": "Ausgewähltes Backup",
|
||||
"You don't have any configuration to restore": "Es gibt keine Konfiguration, die wiederhergestellt werden kann",
|
||||
"Help": "Hilfe",
|
||||
"Backup": "Backup",
|
||||
"([0-9].*) Backups?": "$1 Backups",
|
||||
"Yes": "Ja",
|
||||
"No": "Nein",
|
||||
"Backup not selected": "Kein Backup ausgewählt",
|
||||
"Confirm \\& edit restore information": "Wiederherstellungsinformationen bestätigen & bearbeiten",
|
||||
"(.*) Available IP Address": "$1 verfügbare IP-Adresse",
|
||||
"Database File": "Datenbankdatei",
|
||||
"Contain": "Enthält",
|
||||
"Restricted Peers?": "Eingeschränkte Peers?",
|
||||
"Restore": "Wiederherstellen",
|
||||
"Restoring": "Wiederherstellung läuft",
|
||||
"WGDashboard Settings": "WGDashboard-Einstellungen",
|
||||
"Peers Settings": "Peer-Einstellungen",
|
||||
"WireGuard Configuration Settings": "WireGuard-Konfigurationseinstellungen",
|
||||
"Appearance": "Aussehen",
|
||||
"Theme": "Design",
|
||||
"Language": "Sprache",
|
||||
"Account Settings": "Kontoeinstellungen",
|
||||
"Peer Default Settings": "Standard-Peer-Einstellungen",
|
||||
"Toggle When Start Up": "Beim Start umschalten",
|
||||
"Other Settings": "Weitere Einstellungen",
|
||||
"Select Peers": "Peers auswählen",
|
||||
"Backup & Restore": "Backup & Wiederherstellung",
|
||||
"Delete Configuration": "Konfiguration löschen",
|
||||
"Create Backup": "Backup erstellen",
|
||||
"No backup yet, click the button above to create backup\\.": "Noch kein Backup vorhanden. Klicken Sie oben auf die Schaltfläche, um ein Backup zu erstellen.",
|
||||
"Are you sure to delete this backup\\?": "Sind Sie sicher, dass Sie dieses Backup löschen möchten?",
|
||||
"Backup Date": "Backup-Datum",
|
||||
"File": "Datei",
|
||||
"Are you sure to delete this configuration\\?": "Sind Sie sicher, dass Sie diese Konfiguration löschen möchten?",
|
||||
"Once you deleted this configuration\\:": "Wenn Sie diese Konfiguration löschen:",
|
||||
"All connected peers will get disconnected": "Alle verbundenen Peers werden getrennt",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Sowohl die Konfigurationsdatei (.conf) als auch die zugehörige Datenbanktabelle werden gelöscht",
|
||||
"Checking backups...": "Backups werden überprüft...",
|
||||
"This configuration have ([0-9].*) backups": "Diese Konfiguration hat $1 Backups",
|
||||
"This configuration have no backup": "Diese Konfiguration hat kein Backup",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "Wenn Sie sicher sind, geben Sie unten den Namen der Konfiguration ein und klicken Sie auf Löschen",
|
||||
"Select All": "Alle auswählen",
|
||||
"Clear Selection": "Auswahl löschen",
|
||||
"([0-9].*) Peers?": "$1 Peers?",
|
||||
"Downloading": "Herunterladen",
|
||||
"Download Finished": "Download abgeschlossen",
|
||||
"Done": "Fertig",
|
||||
"Are you sure to delete": "Sind Sie sicher, dass Sie löschen möchten",
|
||||
"Are you sure to delete this peer\\?": "Sind Sie sicher, dass Sie diesen Peer löschen möchten?",
|
||||
"Configuration deleted": "Konfiguration gelöscht",
|
||||
"Configuration saved": "Konfiguration gespeichert",
|
||||
"WGDashboard language update failed": "WGDashboard-Sprachaktualisierung fehlgeschlagen",
|
||||
"Configuration restored": "Konfiguration wiederhergestellt",
|
||||
"Allowed IP already taken by another peer": "Zugelassene IP bereits von einem anderen Peer belegt",
|
||||
"Failed to allow access of peer (.*)": "Fehler beim Zulassen des Zugriffs für Peer $1",
|
||||
"Failed to save configuration through WireGuard": "Fehler beim Speichern der Konfiguration über WireGuard",
|
||||
"Allow access successfully": "Zugriff erfolgreich erlaubt",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) gelöscht",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) erfolgreich gelöscht. Fehler beim Löschen von $2 Peer(s)",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) eingeschränkt",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 Peer(s) erfolgreich eingeschränkt. Fehler beim Einschränken von $2 Peer(s)",
|
||||
"Signing In\\.\\.\\.": "Anmeldung...",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Multi-Faktor-Authentifizierung (MFA)",
|
||||
"Are you sure to delete this API key\\?": "Bist du sicher, dass du diesen API-Schlüssel löschen möchtest?",
|
||||
"When should this API Key expire\\?": "Wann soll dieser API-Schlüssel ablaufen?",
|
||||
"Creating\\.\\.\\.": "Erstelle...",
|
||||
"Turning On\\.\\.\\.": "Schalte ein...",
|
||||
"Turning Off\\.\\.\\.": "Schalte aus...",
|
||||
"Search Peers\\.\\.\\.": "Suche Peers...",
|
||||
"\\(Required for QR Code and Download\\)": "(Erforderlich für QR-Code und Download)",
|
||||
"\\(Required\\)": "(Erforderlich)",
|
||||
"This peer does not have any job yet\\.": "Dieser Peer hat noch keine Aufgabe.",
|
||||
"No active job at the moment\\.": "Zurzeit keine aktive Aufgabe.",
|
||||
"Sharing\\.\\.\\.": "Teile...",
|
||||
"Stop Sharing\\.\\.\\.": "Teilen beenden...",
|
||||
"Restricting\\.\\.\\.": "Einschränken...",
|
||||
"Allowing Access\\.\\.\\.": "Erlaube Zugriff...",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": " \"Download & QR Code is not available due to no private key set for this peer\": \"Download & QR-Code sind nicht verfügbar, da kein privater Schlüssel für diesen Peer festgelegt wurde",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Bei der Massenerstellung wird der Name jedes Peers automatisch generiert, und die erlaubte IP wird der nächsten verfügbaren IP zugewiesen.",
|
||||
"How many peers you want to add\\?": "Wie viele Peers möchtest du hinzufügen?",
|
||||
"Adding\\.\\.\\.": "Füge hinzu...",
|
||||
"Dashboard IP Address \\& Listen Port": "",
|
||||
"Are you sure to restore this backup?\\": "Sind Sie sicher, dass Sie dieses Backup wiederherstellen möchten?"
|
||||
}
|
||||
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"Welcome to": "Bienvenido",
|
||||
"Username": "Usuario",
|
||||
"Password": "Contraseña",
|
||||
"OTP from your authenticator": "OTP de tu autentificador",
|
||||
"Sign In": "Iniciar sesión",
|
||||
"Signing In\\.\\.\\.": "Iniciando sesión...",
|
||||
"Access Remote Server": "Acceder a servidor remoto",
|
||||
"Server": "Servidor",
|
||||
"Click": "Click",
|
||||
"Pinging...": "Ping...",
|
||||
"to add your server": "para agregar tu servidor",
|
||||
"Server List": "Lista de Servidores",
|
||||
"Sorry, your username or password is incorrect.": "Lo siento, tu usuario o contraseña no son correctos.",
|
||||
"Home": "Home",
|
||||
"Settings": "Ajustes",
|
||||
"Tools": "Herramientas",
|
||||
"Sign Out": "Salir",
|
||||
"Checking for update...": "Buscando actualizaciones...",
|
||||
"You're on the latest version": "Estás utilizando la última versión",
|
||||
"WireGuard Configurations": "Configuraciones de Wireguard",
|
||||
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Todavía no tienes configuraciones de WireGuard. Por favor, comprueba la carpeta de configuraciones o cámbiala en Ajustes. Por defecto, la carpeta es /etc/wireguard.",
|
||||
"Configuration": "Configuración",
|
||||
"Configurations": "Configuraciones",
|
||||
"Peers Default Settings": "Ajustes por defecto de Peers",
|
||||
"Dashboard Theme": "Tema del dashboard",
|
||||
"Light": "Claro",
|
||||
"Dark": "Oscuro",
|
||||
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Esto se va a cambiar de forma global, y se aplicará a todos los QRs y archivos de configuración de todos los Peers.",
|
||||
"WireGuard Configurations Settings": "Ajustes de Configuración de Wireguard",
|
||||
"Configurations Directory": "Carpeta de configuraciones",
|
||||
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Recuerda eliminar '/' al final de tu directorio. Por ejemplo, '/etc/wireguard'",
|
||||
"WGDashboard Account Settings": "Ajustes de la cuenta de WGDashboard",
|
||||
"Current Password": "Contraseña actual",
|
||||
"New Password": "Nueva contraseña",
|
||||
"Repeat New Password": "Repite la nueva contraseña",
|
||||
"Update Password": "Actualizar contraseña",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Autentificación de doble factor (MFA)",
|
||||
"Reset": "Reset",
|
||||
"Setup": "Setup",
|
||||
"API Keys": "Clave API",
|
||||
"API Key": "Clave API",
|
||||
"Key": "Clave",
|
||||
"Enabled": "Habilitado",
|
||||
"Disabled": "Deshabilitado",
|
||||
"No WGDashboard API Key": "Ninguna clave API WGDashboard",
|
||||
"Expire At": "Expira en",
|
||||
"Are you sure to delete this API key\\?": "¿Estás seguro de eliminar esta clave API?",
|
||||
"Create API Key": "Crear una nueva clave API",
|
||||
"When should this API Key expire\\?": "¿Cuándo debería expirar esta clave API?",
|
||||
"Never Expire": "Nunca expira",
|
||||
"Don't think that's a good idea": "No creo que esta sea una buena idea",
|
||||
"Creating\\.\\.\\.": "Creando...",
|
||||
"Create": "Crear",
|
||||
"Status": "Estado",
|
||||
"On": "Activo",
|
||||
"Off": "Inactivo",
|
||||
"Turning On\\.\\.\\.": "Activando...",
|
||||
"Turning Off\\.\\.\\.": "Desactivando...",
|
||||
"Address": "Dirección",
|
||||
"Listen Port": "Puerto de escucha",
|
||||
"Public Key": "Clave pública",
|
||||
"Connected Peers": "Peer conectado",
|
||||
"Total Usage": "Uso Total",
|
||||
"Total Received": "Total Recibido",
|
||||
"Total Sent": "Total Enviado",
|
||||
"Peers Data Usage": "Uso de datos de Peers",
|
||||
"Real Time Received Data Usage": "Datos recibidos en tiempo real",
|
||||
"Real Time Sent Data Usage": "Datos enviados en tiempo real",
|
||||
"Peer": "Peer",
|
||||
"Peers": "Peers",
|
||||
"Peer Settings": "Ajustes de Peers",
|
||||
"Download All": "Descargar todo",
|
||||
"Search Peers\\.\\.\\.": "Buscar Peers...",
|
||||
"Display": "Mostrar",
|
||||
"Sort By": "Ordenar por",
|
||||
"Refresh Interval": "Intervalo de refresco",
|
||||
"Name": "Nombre",
|
||||
"Allowed IPs": "IPs permitidas",
|
||||
"Restricted": "Restringido",
|
||||
"(.*) Seconds": "$1 Segundos/i",
|
||||
"(.*) Minutes": "$1 Minutos/i",
|
||||
"Configuration Settings": "Configuración",
|
||||
"Peer Jobs": "Jobs del Peer",
|
||||
"Active Jobs": "Jobs Activos",
|
||||
"All Active Jobs": "Todos los Jobs Activos",
|
||||
"Logs": "Logs",
|
||||
"Private Key": "Clave privada",
|
||||
"\\(Required for QR Code and Download\\)": "(Requerido para el código QR y Descarga)",
|
||||
"\\(Required\\)": "(Requerido)",
|
||||
"Endpoint Allowed IPs": "Direcciones IP del endpoint permitidas",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "Ajustes opcionales",
|
||||
"Pre-Shared Key": "Clave pre-compartida",
|
||||
"MTU": "MTU",
|
||||
"Persistent Keepalive": "Keepalive persistente",
|
||||
"Reset Data Usage": "Resetear los datos de uso",
|
||||
"Total": "Total",
|
||||
"Sent": "Enviado",
|
||||
"Received": "Recibido",
|
||||
"Revert": "Revertir",
|
||||
"Save Peer": "Guardar el Peer",
|
||||
"QR Code": "Código QR",
|
||||
"Schedule Jobs": "Planificar Job",
|
||||
"Job": "Job",
|
||||
"Job ID": "ID del Job",
|
||||
"Unsaved Job": "Job sin guardar",
|
||||
"This peer does not have any job yet\\.": "Este Peer no tiene jobs todavía.",
|
||||
"if": "si",
|
||||
"is": "es",
|
||||
"then": "entonces",
|
||||
"larger than": "mayor que",
|
||||
"Date": "Fecha",
|
||||
"Restrict Peer": "Limitar el Peer",
|
||||
"Delete Peer": "Eliminar el Peer",
|
||||
"Edit": "Modificar",
|
||||
"Delete": "Eliminar",
|
||||
"Deleting...": "Eliminando...",
|
||||
"Cancel": "Cancelar",
|
||||
"Save": "Guardar",
|
||||
"No active job at the moment\\.": "No hay jobs activos en este momento.",
|
||||
"Jobs Logs": "Logs del Job",
|
||||
"Updated at": "Actualizado el",
|
||||
"Refresh": "Refrescar",
|
||||
"Filter": "Filtrar",
|
||||
"Success": "Éxito",
|
||||
"Failed": "Fallido",
|
||||
"Log ID": "ID del log",
|
||||
"Message": "Mensaje",
|
||||
"Share Peer": "Compartir Peer",
|
||||
"Currently the peer is not sharing": "Actualmente el Peer no está compartiendo",
|
||||
"Sharing\\.\\.\\.": "Compartiendo...",
|
||||
"Start Sharing": "Empezar intercambio",
|
||||
"Stop Sharing\\.\\.\\.": "Interrumpir intercambio...",
|
||||
"Stop Sharing": "Interrumpir intercambio",
|
||||
"Access Restricted": "Accesso Restringido",
|
||||
"Restrict Access": "Restringir Acceso",
|
||||
"Restricting\\.\\.\\.": "Restringiendo...",
|
||||
"Allow Access": "Habilitar Acceso",
|
||||
"Allowing Access\\.\\.\\.": "Habilitando el acceso...",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "La descarga y el código QR no están disponibles porque no se ha configurado una clave privada para este peer",
|
||||
"Add Peers": "Agregar un Peer",
|
||||
"Bulk Add": "Agregar múltiple",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Agregando Peers de forma múltiple, los nombres de los peers se generarán de forma automática, y la IP permitida se asignará en función de la siguiente IP disponible.",
|
||||
"How many peers you want to add\\?": "¿Cuántos peers quieres añadir?",
|
||||
"You can add up to (.*) peers": "Puedes añadir hasta $1 peers",
|
||||
"Use your own Private and Public Key": "Usa tu propia clave pública y privada",
|
||||
"Enter IP Address/CIDR": "ntroduce la dirección IP/CIDR",
|
||||
"IP Address/CIDR": "Dirección IP/CIDR",
|
||||
"or": "o",
|
||||
"Pick Available IP": "Selecciona una IP disponible",
|
||||
"No available IP containing": "Ninguna IP disponible que contenga",
|
||||
"Add": "añadir",
|
||||
"Adding\\.\\.\\.": "Añadiendo...",
|
||||
"Failed to check available update": "Error al buscar actualizaciones disponibles",
|
||||
"Nice to meet you!": "Encantado de conocerte",
|
||||
"Please fill in the following fields to finish setup": "Por favor rellena los siguientes campos para finalizar el setup",
|
||||
"Create an account": "Crea una cuenta",
|
||||
"Enter an username you like": "Introduce un nombre de usuario",
|
||||
"Enter a password": "Introduce una contraseña",
|
||||
"\\(At least 8 characters and make sure is strong enough!\\)": "(Al menos 8 caracteres y asegúrate de que sea suficientemente fuerte)",
|
||||
"Confirm password": "Confirma la contraseña",
|
||||
"Next": "Siguiente",
|
||||
"Saving\\.\\.\\.": "Guardando...",
|
||||
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Por favor escanea el siguiente código QR para generar un código TOTP con el autentificador que prefieras",
|
||||
"Or you can click the link below:": "O puedes hacer click en el siguiente enlace:",
|
||||
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Inserta el código TOTP generado por tu autentificador para verificar",
|
||||
"TOTP verified!": "¡TOTP Verificado!",
|
||||
"I don't need MFA": "No necesito MFA",
|
||||
"Complete": "Completado",
|
||||
"(v[0-9.]{1,}) is now available for update!": "$1 está disponible para actualizar!",
|
||||
"Current Version:": "Versión actual:",
|
||||
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh no... Este link ha expirado o es inválido.",
|
||||
"Scan QR Code with the WireGuard App to add peer": "Escanea el código QR con la App Wireguard para añadir el peer",
|
||||
"or click the button below to download the ": "o haz click en el botón de abajo para descargar el ",
|
||||
" file": " archivo",
|
||||
"FROM ": "DE ",
|
||||
"(.*) is on": "$1 está activo",
|
||||
"(.*) is off": "$1 está desactivado",
|
||||
"Allowed IPs is invalid": "Las IPs Permitidas son inválidas",
|
||||
"Peer created successfully": "Peer creado con éxito",
|
||||
"Please fill in all required box": "Por favor, rellena las casillas requeridas",
|
||||
"Please specify amount of peers you want to add": "Por favor, especifica la cantidad de peers que quieres añadir",
|
||||
"No more available IP can assign": "No hay más IPs disponibles que asignar",
|
||||
"The maximum number of peers can add is (.*)": "El número máximo de peers que se pueden añadir es $1",
|
||||
"Generating key pairs by bulk failed": "Generación de key pairs por Añadir Múltiples falló",
|
||||
"Failed to add peers in bulk": "Error al añadir múltiples peers",
|
||||
"This peer already exist": "Este peer ya existe",
|
||||
"This IP is not available: (.*)": "Esta IP no está disponible: $1",
|
||||
"Configuration does not exist": "La configuración no existe",
|
||||
"Peer does not exist": "El peer no existe",
|
||||
"Please provide a valid configuration name": "Por favor, introduce un nombre de configuración válido",
|
||||
"Peer saved": "Peer guardado",
|
||||
"Allowed IPs already taken by another peer": "IPs disponibles ya han sido seleccionadas por otro peer",
|
||||
"Endpoint Allowed IPs format is incorrect": "El formato de las IPs disponibles no es correcto",
|
||||
"DNS format is incorrect": "El formato del DNS no es correcto",
|
||||
"MTU format is not correct": "El formato del MTU no es correcto",
|
||||
"Persistent Keepalive format is not correct": "El formato de Keepalive persistente no es correcto",
|
||||
"Private key does not match with the public key": "La clave privada no corresponde con la clave pública",
|
||||
"Update peer failed when updating Pre-Shared Key": "Actualización del peer falló cuando se actualizó la clave pre-compartida",
|
||||
"Update peer failed when updating Allowed IPs": "Actualización del peer falló cuando se actualizó las IPs Permitidas",
|
||||
"Update peer failed when saving the configuration": "Actualización del peer falló cuando se guardaba la configuración",
|
||||
"Peer data usage reset successfully": "Los datos del uso del peer se restablecieron con éxito",
|
||||
"Peer download started": "Descarga del peer comenzada",
|
||||
"Please specify one or more peers": "Por favor, especifica uno o más peers",
|
||||
"Share link failed to create. Reason: (.*)": "Creación del link para compartir fallida. Motivo: $1",
|
||||
"Link expire date updated": "Actualizada la fecha de expiración del link",
|
||||
"Link expire date failed to update. Reason: (.*)": "Actualización de la fecha de expiración fallida. Motivo: $1",
|
||||
"Peer job saved": "Job del Peer guardado",
|
||||
"Please specify job": "Por favor, especifica un job",
|
||||
"Please specify peer and configuration": "Por favor, especifica peer y configuración",
|
||||
"Peer job deleted": "Job del Peer eliminado",
|
||||
"API Keys function is successfully enabled": "La funcionalidad de clave API se ha habilitado con éxito",
|
||||
"API Keys function is successfully disabled": "La funcionalidad de clave API se ha deshabilitado con éxito",
|
||||
"API Keys function is failed to enable": "La funcionalidad de clave API no se ha habilitado",
|
||||
"API Keys function is failed to disable": "La funcionalidad de clave API no se ha habilitado",
|
||||
"WGDashboard API Keys function is disabled": "La funcionalidad de clave API de WGDashboard está deshabilitada",
|
||||
"WireGuard configuration path saved": "Guardado el destino de la configuración de Wireguard",
|
||||
"API Key deleted": "Clave API eliminada",
|
||||
"API Key created": "Clave API creada",
|
||||
"Sign in session ended, please sign in again": "La sesión actual ha caducado, por favor, accede de nuevo",
|
||||
"Please specify an IP Address (v4/v6)": "Por favor, especificado dirección IP (v4/v6)",
|
||||
"Please provide ipAddress and count": "Por favor, especifica dirección IP y cuenta",
|
||||
"Please provide ipAddress": "Por favor, especifica dirección IP",
|
||||
"Dashboard Language": "Idioma del Dashboard",
|
||||
"Dashboard language update failed": "Imposible actualizar el idioma del Dashboard",
|
||||
"Peer Remote Endpoint": "Endpoint remoto del Peer",
|
||||
"New Configuration": "Nueva configuración",
|
||||
"Configuration Name": "Nombre de la configuración",
|
||||
"Configuration name is invalid. Possible reasons:": "El nombre de la configuración es inválido. Motivo:",
|
||||
"Configuration name already exist\\.": "El nombre de la configuración ya existe.",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "El nombre de la configuración solo puede contener 15 letras mayúsculas o minúsculas, números, barrabaja, símbolos de igual, suma, puntos y guiones.",
|
||||
"Invalid Port": "Puerto inválido",
|
||||
"Save Configuration": "Guardar la configuración",
|
||||
"IP Address/CIDR is invalid": "La IP/CIDR no es válida",
|
||||
"IP Address": "Dirección IP",
|
||||
"Enter IP Address / Hostname": "Introduce una dirección IP / Hostname",
|
||||
"IP Address / Hostname": "Dirección IP / Hostname",
|
||||
"Dashboard IP Address \\& Listen Port": "Dirección IP del dashboard y puerto",
|
||||
"Count": "Cuenta",
|
||||
"Geolocation": "Geolocalización",
|
||||
"Is Alive": "Está Activo",
|
||||
"Average / Min / Max Round Trip Time": "Media / Min / Max Redondeo Viaje Tiempo",
|
||||
"Sent / Received / Lost Package": "Enviado / Recibido / Paquetes perdidos",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Un reset manual de WGDashboard es necesario para aplicar los cambios en la dirección IP y el puerto",
|
||||
"Restore Configuration": "Restablecer configuración",
|
||||
"Step (.*)": "Paso $1",
|
||||
"Select a backup you want to restore": "Selecciona el backup que quieres restaurar",
|
||||
"Click to change a backup": "click para cambiar el backup",
|
||||
"Selected Backup": "Backup seleccionado",
|
||||
"You don't have any configuration to restore": "No tienes ninguna configuración que restaurar",
|
||||
"Help": "Ayuda",
|
||||
"Backup": "Backup",
|
||||
"([0-9].*) Backups?": "$1 Backups?",
|
||||
"Yes": "Sí",
|
||||
"No": "No",
|
||||
"Backup not selected": "Backup no seleccionado",
|
||||
"Confirm \\& edit restore information": "Confirmar y editar la información de restauración",
|
||||
"(.*) Available IP Address": "$1 Dirección IP disponible",
|
||||
"Database File": "Fichero de base de datos",
|
||||
"Contain": "Contiene",
|
||||
"Restricted Peers?": "¿Peers restringidos?",
|
||||
"Restore": "Restaurar",
|
||||
"Restoring": "Restaurando",
|
||||
"WGDashboard Settings": "Ajustes de WGDashboard",
|
||||
"Peers Settings": "Ajustes de Peers",
|
||||
"WireGuard Configuration Settings": "Ajustes de Configuraciones de Wireguard",
|
||||
"Appearance": "apariencia",
|
||||
"Theme": "Tema",
|
||||
"Language": "Idioma",
|
||||
"Account Settings": "Ajustes de la cuenta",
|
||||
"Peer Default Settings": "Ajustes por defecto del peer",
|
||||
"Toggle When Start Up": "Activar en Start Up",
|
||||
"Other Settings": "Otros ajustes",
|
||||
"Select Peers": "Seleccionar peers",
|
||||
"Backup & Restore": "Backups y Restaurar",
|
||||
"Delete Configuration": "Eliminar Configuración",
|
||||
"Create Backup": "Crear Backup",
|
||||
"No backup yet, click the button above to create backup\\.": "No hay backups todavía, presiona el botón de arriba para crear un backup.",
|
||||
"Are you sure to delete this backup\\?": "¿Estás seguro de que quieres borrar este backup?",
|
||||
"Are you sure to restore this backup?\\": "¿Estás seguro de que quieres restaurar este backup?",
|
||||
"Backup Date": "Fecha del backup",
|
||||
"File": "Archivo",
|
||||
"Are you sure to delete this configuration\\?": "¿Estás seguro de eliminar esta configuración?",
|
||||
"Once you deleted this configuration\\:": "Una vez eliminada esta configuración:",
|
||||
"All connected peers will get disconnected": "Todos los peers conectados se desconectarán",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Ambos ficheros de configuración (.conf) y de la tabla de la base de datos relacionados con esta configuración serán eliminados",
|
||||
"Checking backups...": "Comprobando backups...",
|
||||
"This configuration have ([0-9].*) backups": "Esta configuración tiene $1 backups",
|
||||
"This configuration have no backup": "Esta configuración no tiene backups",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "Si estás seguro, introduce el nombre de la configuración y presiona eliminar",
|
||||
"Select All": "Seleccionar todo",
|
||||
"Clear Selection": "Deseleccionar",
|
||||
"([0-9].*) Peers?": "¿$1 Peers?",
|
||||
"Downloading": "Descargando",
|
||||
"Download Finished": "Descarga finalizada",
|
||||
"Done": "Hecho",
|
||||
"Are you sure to delete": "¿Estás seguro de eliminar?",
|
||||
"Are you sure to delete this peer\\?": "¿Estás seguro de eliminar este peer?",
|
||||
"Configuration deleted": "Configuración eliminada",
|
||||
"Configuration saved": "Configuración guardada",
|
||||
"WGDashboard language update failed": "La actualización de idioma de WGDashboard falló",
|
||||
"Configuration restored": "Configuración restaurada",
|
||||
"Allowed IP already taken by another peer": "IP Permitida ya ha sido seleccionada por otro peer",
|
||||
"Failed to allow access of peer (.*)": "Fallo de habilitar acceso del peer $1",
|
||||
"Failed to save configuration through WireGuard": "Fallo de salvar configuración a través de WireGuard",
|
||||
"Allow access successfully": "Acceso permitido con éxito",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Eliminados $1 peer(s)",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Eliminados $1 peer(s) con éxito. Fallo al eliminar $2 peer(s)",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Restringidos $1 peer(s)",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Restringidos $1 peer(s) con éxito. Fallo al restringir $2 peer(s)"
|
||||
}
|
||||
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"Welcome to": "Bienvenue",
|
||||
"Username": "Utilisateur",
|
||||
"Password": "Mot de passe",
|
||||
"OTP from your authenticator": "OTP de l'authenticateur",
|
||||
"Sign In": "Se connecter",
|
||||
"Signing In\\.\\.\\.": "Connexion en cours...",
|
||||
"Access Remote Server": "Accéder à distance au serveur",
|
||||
"Server": "Serveur",
|
||||
"Click": "Clique",
|
||||
"Pinging...": "Pinging...",
|
||||
"to add your server": "pour ajouter votre serveur",
|
||||
"Server List": "Liste des serveurs",
|
||||
"Sorry, your username or password is incorrect.": "Désolé, l'utilisateur ou le mot de passe est incorrect",
|
||||
"Home": "Accueil",
|
||||
"Settings": "Paramètres",
|
||||
"Tools": "Outils",
|
||||
"Sign Out": "Se déconnecter",
|
||||
"Checking for update...": "Recherche des mises à jour",
|
||||
"You're on the latest version": "Vous êtes sur la dernière version",
|
||||
"WireGuard Configurations": "Configurations WireGuard",
|
||||
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Vous n'avez pas encore de configurations WireGuard. Veuillez vérifier le dossier de configuration ou faire un changement dans les paramètres. Par défaut, le dossier est /etc/wireguard.",
|
||||
"Configuration": "Configuration",
|
||||
"Configurations": "Configurations",
|
||||
"Peers Default Settings": "Paramètres par défaut des pairs",
|
||||
"Dashboard Theme": "Thème du tableau de bord",
|
||||
"Light": "Clair",
|
||||
"Dark": "Sombre",
|
||||
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "C'est un changement global, qui s'appliquera sur tout les codes QR des pairs ainsi que leur fichier de configuration",
|
||||
"WireGuard Configurations Settings": "Paramètre des configurations WireGuard",
|
||||
"Configurations Directory": "Dossier des configurations",
|
||||
"Remember to remove / at the end of your path. e.g /etc/wireguard": "N'oubliez pas de retirer la / à la fin du chemin vers le dossier. ex: /etc/wireguard",
|
||||
"WGDashboard Account Settings": "Paramètres du compte WGDashboard",
|
||||
"Current Password": "Mot de passe actuel",
|
||||
"New Password": "Nouveau mot de passe",
|
||||
"Repeat New Password": "Répétez le nouveau mot de passe",
|
||||
"Update Password": "Mettre à jour le mot de passe",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Authentification à deux facteurs",
|
||||
"Reset": "Réinitialiser",
|
||||
"Setup": "Configurer",
|
||||
"API Keys": "Clés d'API",
|
||||
"API Key": "Clé d'API",
|
||||
"Key": "Clé",
|
||||
"Enabled": "Activé",
|
||||
"Disabled": "Désactivé",
|
||||
"No WGDashboard API Key": "Pas de clé d'API WGDashboard",
|
||||
"Expire At": "Expire à",
|
||||
"Are you sure to delete this API key\\?": "Êtes-vous sur de supprimer cette clé d'API",
|
||||
"Create API Key": "Créer une clé d'API",
|
||||
"When should this API Key expire\\?": "Quand est-ce que cette clé devrait expirer?",
|
||||
"Never Expire": "N'expire jamais",
|
||||
"Don't think that's a good idea": "Ce n'est probablement pas une bonne idée",
|
||||
"Creating\\.\\.\\.": "Création en cours...",
|
||||
"Create": "Créer",
|
||||
"Status": "Statut",
|
||||
"On": "Marche",
|
||||
"Off": "Arrêt",
|
||||
"Turning On\\.\\.\\.": "Activation",
|
||||
"Turning Off\\.\\.\\.": "Désactivation",
|
||||
"Address": "adresse",
|
||||
"Listen Port": "Port d'écoute",
|
||||
"Public Key": "Clé publique",
|
||||
"Connected Peers": "Pairs connectés",
|
||||
"Total Usage": "Utilisation totale",
|
||||
"Total Received": "Total reçu",
|
||||
"Total Sent": "Total envoyé",
|
||||
"Peers Data Usage": "Utilisation de données des pairs",
|
||||
"Real Time Received Data Usage": "Réception de données en temps réel",
|
||||
"Real Time Sent Data Usage": "Envoie de données en temps réel",
|
||||
"Peer": "Pair",
|
||||
"Peers": "Pairs",
|
||||
"Peer Settings": "Paramètres des pairs",
|
||||
"Download All": "Télécharger tout",
|
||||
"Search Peers\\.\\.\\.": "Rechercher les pairs...",
|
||||
"Display": "Affichage",
|
||||
"Sort By": "Trier par",
|
||||
"Refresh Interval": "Intervalle d'actualisation",
|
||||
"Name": "Nom",
|
||||
"Allowed IPs": "IPs autorisées",
|
||||
"Restricted": "Limité",
|
||||
"(.*) Seconds": "$1 secondes",
|
||||
"(.*) Minutes": "$1 minutes",
|
||||
"Configuration Settings": "Paramètres des configurations",
|
||||
"Peer Jobs": "Tâches des pairs",
|
||||
"Active Jobs": "Tâches actives",
|
||||
"All Active Jobs": "Toutes les tâches actives",
|
||||
"Logs": "Logs",
|
||||
"Private Key": "Clé privée",
|
||||
"\\(Required for QR Code and Download\\)": "(Nécessaire pour code QR et téléchargement",
|
||||
"\\(Required\\)": "Nécessaire",
|
||||
"Endpoint Allowed IPs": "adresses autorisées au Endpoint",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "Paramètres optionnels",
|
||||
"Pre-Shared Key": "Clé prépartagée",
|
||||
"MTU": "MTU",
|
||||
"Persistent Keepalive": "Keepalive permanent",
|
||||
"Reset Data Usage": "Réinitialiser l'utilisation des données",
|
||||
"Total": "Total",
|
||||
"Sent": "Envoyé",
|
||||
"Received": "Reçu",
|
||||
"Revert": "Revenir",
|
||||
"Save Peer": "Enregistrer le pair",
|
||||
"QR Code": "Code QR",
|
||||
"Schedule Jobs": "Panifier les tâches",
|
||||
"Job": "Tâche",
|
||||
"Job ID": "ID de la tâche",
|
||||
"Unsaved Job": "Tâche non-enregistrée",
|
||||
"This peer does not have any job yet\\.": "Ce pair n'a pas encore de tâche",
|
||||
"if": "si",
|
||||
"is": "est",
|
||||
"then": "alors",
|
||||
"larger than": "plus grand que",
|
||||
"Date": "Date",
|
||||
"Restrict Peer": "Limiter le pair",
|
||||
"Delete Peer": "Supprimer le pair",
|
||||
"Edit": "Modifier",
|
||||
"Delete": "Supprimer",
|
||||
"Deleting...": "Suppression...",
|
||||
"Cancel": "Annuler",
|
||||
"Save": "Enregistrer",
|
||||
"No active job at the moment\\.": "Pas de tâche active",
|
||||
"Jobs Logs": "Journaux des tâches",
|
||||
"Updated at": "Mis à jour le",
|
||||
"Refresh": "Rafraîchir",
|
||||
"Filter": "Filtrer",
|
||||
"Success": "Succès",
|
||||
"Failed": "Échec",
|
||||
"Log ID": "ID du journal",
|
||||
"Message": "Message",
|
||||
"Share Peer": "Partager le pair",
|
||||
"Currently the peer is not sharing": "Le pair ne partage pas présentement",
|
||||
"Sharing\\.\\.\\.": "Partage en cours...",
|
||||
"Start Sharing": "Commencer le partage",
|
||||
"Stop Sharing\\.\\.\\.": "Arrêt du partage...",
|
||||
"Stop Sharing": "Le partage est arrêté",
|
||||
"Access Restricted": "Accès limité",
|
||||
"Restrict Access": "Limiter l'accès",
|
||||
"Restricting\\.\\.\\.": "Restriction en cours...",
|
||||
"Allow Access": "Autoriser l'accès",
|
||||
"Allowing Access\\.\\.\\.": "Autorisation de l'accès",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "Le téléchargement et le code QR ne sont pas disponible car il n'y a pas de clé privée associée à ce pair",
|
||||
"Add Peers": "Ajouter des pairs",
|
||||
"Bulk Add": "Ajout en groupe",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "En ajoutant des pairs en groups, le nom de chaque pair sera généré, et l'adresse autorisée sera attribuée selon la prochaine adresse disponible",
|
||||
"How many peers you want to add\\?": "Combien de pairs voulez-vous ajouter?",
|
||||
"You can add up to (.*) peers": "Vous pouvez ajouter jusqu'à $1 pairs",
|
||||
"Use your own Private and Public Key": "Utiliser vos proprés clés privée/publique",
|
||||
"Enter IP Address/CIDR": "Entrer l'IP en format /CIDR",
|
||||
"IP Address/CIDR": "adresse IP/CIDR",
|
||||
"or": "ou",
|
||||
"Pick Available IP": "Choisir l'IP disponible",
|
||||
"No available IP containing": "Aucune IP disponible contient",
|
||||
"Add": "Ajouter",
|
||||
"Adding\\.\\.\\.": "Ajout...",
|
||||
"Failed to check available update": "Échec de la vérification des mises à jour",
|
||||
"Nice to meet you!": "Content de vous rencontrer",
|
||||
"Please fill in the following fields to finish setup": "Veuillez remplir les cases suivants pour terminer la configuration",
|
||||
"Create an account": "Créer un compte",
|
||||
"Enter an username you like": "Entrez le nom d'utilisateur voulu",
|
||||
"Enter a password": "Entrez un mot de passe",
|
||||
"\\(At least 8 characters and make sure is strong enough!\\)": "(assurez vous d'avoir un mot de passe fort, d'au moins 8 charactères",
|
||||
"Confirm password": "Confirmer le mot de passe",
|
||||
"Next": "Suivant",
|
||||
"Saving\\.\\.\\.": "Enregistrement...",
|
||||
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Veuillez balayer le code QR pour générer un TOTP avec l'authenticateur de votre choix",
|
||||
"Or you can click the link below:": "Ou vous pouvez cliquer sur le lien ci-dessous",
|
||||
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Entrez le code TOTP généré par votre authenticateur",
|
||||
"TOTP verified!": "TOTP vérifié",
|
||||
"I don't need MFA": "Je n'ai pas besoin de l'authentification à double facteurs",
|
||||
"Complete": "Complet",
|
||||
"(v[0-9.]{1,}) is now available for update!": "$1 est disponible pour mise à jour",
|
||||
"Current Version:": "Version actuelle",
|
||||
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Oh oh, il semble que ce lien est expiré ou invalide",
|
||||
"Scan QR Code with the WireGuard App to add peer": "Balayez le code QR avec l'application WireGuard pour ajouter le pair",
|
||||
"or click the button below to download the ": "ou cliquez sur le boutton ci-dessous pour télécharger le",
|
||||
" file": " fichier",
|
||||
"FROM ": "DE",
|
||||
"(.*) is on": "$1 est activé",
|
||||
"(.*) is off": "$1 est désactivé",
|
||||
"Allowed IPs is invalid": "Les IPs autorisées sont invalides",
|
||||
"Peer created successfully": "Pair créé avec succès",
|
||||
"Please fill in all required box": "Veuillez remplir toutes les cases",
|
||||
"Please specify amount of peers you want to add": "Veuillez préciser le nombre de pair à ajouter",
|
||||
"No more available IP can assign": "Il n'y a plus d'adresses disponible",
|
||||
"The maximum number of peers can add is (.*)": "Le maximum de pair qu'il est possible d'ajouter est $1",
|
||||
"Generating key pairs by bulk failed": "La génération des clés en groupe a échouée",
|
||||
"Failed to add peers in bulk": "L'ajout de pairs en groupe a échoué",
|
||||
"This peer already exist": "Ce pair existe déja",
|
||||
"This IP is not available: (.*)": "Cette IP n'est pas disponible: $1",
|
||||
"Configuration does not exist": "La configuration n'existe pas",
|
||||
"Peer does not exist": "Le pair n'existe pas",
|
||||
"Please provide a valid configuration name": "Veuillez entrer un nom de configuration valide",
|
||||
"Peer saved": "Pair enregistré",
|
||||
"Allowed IPs already taken by another peer": "Les IP autorisées sont déja prises par un autre pair",
|
||||
"Endpoint Allowed IPs format is incorrect": "Le format des IPs autorisées est incorrect",
|
||||
"DNS format is incorrect": "Le format du DNS est incorrect",
|
||||
"MTU format is not correct": "Le format du MTU est incorrect",
|
||||
"Persistent Keepalive format is not correct": "Le format du Keepalive permanent est incorrect",
|
||||
"Private key does not match with the public key": "La clé privée ne correspond pas à la clé publique",
|
||||
"Update peer failed when updating Pre-Shared Key": "La modification du pair a échouée en changeant la clé prépartagée",
|
||||
"Update peer failed when updating Allowed IPs": "La modification du pair a échouée en changeant les IPs autorisées",
|
||||
"Update peer failed when saving the configuration": "La modification du pair a échouée en enregistrant la configuration",
|
||||
"Peer data usage reset successfully": "L'utilisation des données du pairs a été réinitialisée",
|
||||
"Peer download started": "Téléchargement du pair en cours",
|
||||
"Please specify one or more peers": "Veuillez spécifier un ou plusieurs pairs",
|
||||
"Share link failed to create. Reason: (.*)": "Échec de la création du lien: $1",
|
||||
"Link expire date updated": "Date d'expiration du lien changée",
|
||||
"Link expire date failed to update. Reason: (.*)": "Échec de la modification de la date d'expiration: $1",
|
||||
"Peer job saved": "Tâche du pair enregistré",
|
||||
"Please specify job": "Veuillez spécifier une tâche",
|
||||
"Please specify peer and configuration": "Veuillez spécifier un pair et une configuration",
|
||||
"Peer job deleted": "Tâche du pair supprimée",
|
||||
"API Keys function is successfully enabled": "La clé d'API est activée",
|
||||
"API Keys function is successfully disabled": "La clé d'API est désactivé",
|
||||
"API Keys function is failed to enable": "Échec de l'activation de la clé",
|
||||
"API Keys function is failed to disable": "Échec de la désactivation de la clé",
|
||||
"WGDashboard API Keys function is disabled": "Les clés d'API WGDashboard sont désactivées",
|
||||
"WireGuard configuration path saved": "Chemin de la configuration WireGuard enregistré",
|
||||
"API Key deleted": "Clé d'API supprimée",
|
||||
"API Key created": "Clé d'API créée",
|
||||
"Sign in session ended, please sign in again": "La session est terminée, veuillez vous reconnecter",
|
||||
"Please specify an IP Address (v4/v6)": "Veuillez préciser une adresse (IPv4/IPv6)",
|
||||
"Please provide ipAddress and count": "Veuillez fournir l'adresse IP et le compte",
|
||||
"Please provide ipAddress": "Veuillez fournir l'adresse IP",
|
||||
"Dashboard Language": "Langage du tableau de bord",
|
||||
"Dashboard language update failed": "Échec du changement de langage",
|
||||
"Peer Remote Endpoint": "Endpoint externe du pair",
|
||||
"New Configuration": "Nouvelle configuration",
|
||||
"Configuration Name": "Nom de la configuration",
|
||||
"Configuration name is invalid. Possible reasons:": "Le nom est invalide, raisons possuibles:",
|
||||
"Configuration name already exist\\.": "Le nom est déja utilisé",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Le nom ne peut contenir que 15 charactère. Lettres minuscules/majuscules, nombres,tirer, tiret bas, égal, plus et point",
|
||||
"Invalid Port": "Port invalide",
|
||||
"Save Configuration": "Enregistrer la configuration",
|
||||
"IP Address/CIDR is invalid": "L'adresse IP/CIDR est incorrecte",
|
||||
"IP Address": "adresse IP",
|
||||
"Enter IP Address / Hostname": "Entrez l'adresse",
|
||||
"IP Address / Hostname": "Adresse IP / Nom d'hôte",
|
||||
"Dashboard IP Address \\& Listen Port": "IP et port du tableau de bord",
|
||||
"Count": "Compte:",
|
||||
"Geolocation": "Géolocalisation",
|
||||
"Is Alive": "est actif",
|
||||
"Average / Min / Max Round Trip Time": "Moyen / Min / Max latence allez-retour",
|
||||
"Sent / Received / Lost Package": "Paquets Envoyés / Reçus / Perdus",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Un redémarrage de WGDashboard est nécessaire pour appliquer le changement d'IP/port",
|
||||
"Restore Configuration": "Rétablir la configuration",
|
||||
"Step (.*)": "Étape $1",
|
||||
"Select a backup you want to restore": "Sélectionnez la sauvegarde à Rétablir",
|
||||
"Click to change a backup": "Cliquez pour changer la sauvegarde",
|
||||
"Selected Backup": "Sauvegarde sélectionnée",
|
||||
"You don't have any configuration to restore": "Vous n'avez pas de configruations à Rétablir",
|
||||
"Help": "Assistance",
|
||||
"Backup": "Sauvegarde",
|
||||
"([0-9].*) Backups?": "$1 sauvegardes?",
|
||||
"Yes": "Oui",
|
||||
"No": "Non",
|
||||
"Backup not selected": "Aucune sauvegarde sélectionnée",
|
||||
"Confirm \\& edit restore information": "Valider et modifier les information à Rétablir",
|
||||
"(.*) Available IP Address": "$1 adresses IP disponible",
|
||||
"Database File": "Fichier de base de donnée",
|
||||
"Contain": "Contiens",
|
||||
"Restricted Peers?": "Pairs limités?",
|
||||
"Restore": "Rétablir",
|
||||
"Restoring": "Rétablissement",
|
||||
"WGDashboard Settings": "Paramètres de WGDashboard",
|
||||
"Peers Settings": "Paramètres des pairs",
|
||||
"WireGuard Configuration Settings": "Paramètre des configurations WireGuard",
|
||||
"Appearance": "Apparence",
|
||||
"Theme": "Thème",
|
||||
"Language": "Langage",
|
||||
"Account Settings": "Paramètres du compte",
|
||||
"Peer Default Settings": "Paramètres par défaut des pairs",
|
||||
"Toggle When Start Up": "Activer au démarrage",
|
||||
"Other Settings": "Autre paramètres",
|
||||
"Select Peers": "Sélectionnez les pairs",
|
||||
"Backup & Restore": "Sauvegarde et rétablissement",
|
||||
"Delete Configuration": "Supprimer la configuration",
|
||||
"Create Backup": "Créer une sauvegarde",
|
||||
"No backup yet, click the button above to create backup\\.": "Aucune sauvegarde, appuyez sur le bouton ci-dessus pour en créer une.",
|
||||
"Are you sure to delete this backup\\?": "Êtes-vous certains de supprimer cette sauvegarde?",
|
||||
"Are you sure to restore this backup?\\": "Êtes-vous certains de rétablir cette sauvegarde?",
|
||||
"Backup Date": "Date de la sauvegarde",
|
||||
"File": "Fichier",
|
||||
"Are you sure to delete this configuration\\?": "Êtes-vous certains de supprimer cette configuration",
|
||||
"Once you deleted this configuration\\:": "Quand vous aurez supprimer cette configuration:",
|
||||
"All connected peers will get disconnected": "Tout les pairs seront déconnectés",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Tous les fichiers de configurations ainsi que le tableau de la base de donnée relié à cette configuration seront supprimés",
|
||||
"Checking backups...": "Vérification des sauvegardes...",
|
||||
"This configuration have ([0-9].*) backups": "Cette configuration a $1 sauvegardes",
|
||||
"This configuration have no backup": "Cette configuration n'a pas de sauvegarde",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "Si vous êtez certains, veuillez entrer le nom de la configuration, puis appuyez sur Supprimer",
|
||||
"Select All": "Tout sélectionner",
|
||||
"Clear Selection": "Vider la sélection",
|
||||
"([0-9].*) Peers?": "$1 pairs?",
|
||||
"Downloading": "Téléchargement",
|
||||
"Download Finished": "Téléchargement complété",
|
||||
"Done": "Terminé",
|
||||
"Are you sure to delete": "Êtes-vous certains de supprimer",
|
||||
"Are you sure to delete this peer\\?": "Êtes-vous certains de supprimer ce pair",
|
||||
"Configuration deleted": "Configuration supprimée",
|
||||
"Configuration saved": "Configuration enregistrée",
|
||||
"WGDashboard language update failed": "Échec de la modification de la langue de WGDashboard",
|
||||
"Configuration restored": "Configuration rétablie",
|
||||
"Allowed IP already taken by another peer": "L'IP autorisée est déja prise par un autre pair",
|
||||
"Failed to allow access of peer (.*)": "Échec de l'autorisation d'accès au pair",
|
||||
"Failed to save configuration through WireGuard": "Échec de l'enregistrement de la configuration sur WireGuard",
|
||||
"Allow access successfully": "Accès autorisé avec succès",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s)",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 supprimé(s). Échec de la suppression du(des) pair(s) $2",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limités",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Pair(s) $1 limité(s). Échec de la limitation du(des) pair(s) $2"
|
||||
}
|
||||
@@ -233,8 +233,8 @@
|
||||
"Invalid Port": "Porta non valida",
|
||||
"Save Configuration": "Salva la configurazione",
|
||||
"IP Address/CIDR is invalid": "L'indirizzo IP/CIDR non è valido",
|
||||
"IP Address": "",
|
||||
"Enter IP Address / Hostname": "",
|
||||
"IP Address": "Indirizzo IP",
|
||||
"Enter IP Address / Hostname": "Inserisici l'indirizzo IP/CIDR",
|
||||
"IP Address / Hostname": "",
|
||||
"Dashboard IP Address \\& Listen Port": "",
|
||||
"Count": "",
|
||||
|
||||
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"Welcome to": "",
|
||||
"Username": "",
|
||||
"Password": "",
|
||||
"OTP from your authenticator": "",
|
||||
"Sign In": "",
|
||||
"Signing In\\.\\.\\.": "",
|
||||
"Access Remote Server": "",
|
||||
"Server": "",
|
||||
"Click": "",
|
||||
"Pinging...": "",
|
||||
"to add your server": "",
|
||||
"Server List": "",
|
||||
"Sorry, your username or password is incorrect.": "",
|
||||
"Home": "",
|
||||
"Settings": "",
|
||||
"Tools": "",
|
||||
"Sign Out": "",
|
||||
"Checking for update...": "",
|
||||
"You're on the latest version": "",
|
||||
"WireGuard Configurations": "",
|
||||
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "",
|
||||
"Configuration": "",
|
||||
"Configurations": "",
|
||||
"Peers Default Settings": "",
|
||||
"Dashboard Theme": "",
|
||||
"Light": "",
|
||||
"Dark": "",
|
||||
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "",
|
||||
"WireGuard Configurations Settings": "",
|
||||
"Configurations Directory": "",
|
||||
"Remember to remove / at the end of your path. e.g /etc/wireguard": "",
|
||||
"WGDashboard Account Settings": "",
|
||||
"Current Password": "",
|
||||
"New Password": "",
|
||||
"Repeat New Password": "",
|
||||
"Update Password": "",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "",
|
||||
"Reset": "",
|
||||
"Setup": "",
|
||||
"API Keys": "",
|
||||
"API Key": "",
|
||||
"Key": "",
|
||||
"Enabled": "",
|
||||
"Disabled": "",
|
||||
"No WGDashboard API Key": "",
|
||||
"Expire At": "",
|
||||
"Are you sure to delete this API key\\?": "",
|
||||
"Create API Key": "",
|
||||
"When should this API Key expire\\?": "",
|
||||
"Never Expire": "",
|
||||
"Don't think that's a good idea": "",
|
||||
"Creating\\.\\.\\.": "",
|
||||
"Create": "",
|
||||
"Status": "",
|
||||
"On": "",
|
||||
"Off": "",
|
||||
"Turning On\\.\\.\\.": "",
|
||||
"Turning Off\\.\\.\\.": "",
|
||||
"Address": "",
|
||||
"Listen Port": "",
|
||||
"Public Key": "",
|
||||
"Connected Peers": "",
|
||||
"Total Usage": "",
|
||||
"Total Received": "",
|
||||
"Total Sent": "",
|
||||
"Peers Data Usage": "",
|
||||
"Real Time Received Data Usage": "",
|
||||
"Real Time Sent Data Usage": "",
|
||||
"Peer": "",
|
||||
"Peers": "",
|
||||
"Peer Settings": "",
|
||||
"Download All": "",
|
||||
"Search Peers\\.\\.\\.": "",
|
||||
"Display": "",
|
||||
"Sort By": "",
|
||||
"Refresh Interval": "",
|
||||
"Name": "",
|
||||
"Allowed IPs": "",
|
||||
"Restricted": "",
|
||||
"(.*) Seconds": "",
|
||||
"(.*) Minutes": "",
|
||||
"Configuration Settings": "",
|
||||
"Peer Jobs": "",
|
||||
"Active Jobs": "",
|
||||
"All Active Jobs": "",
|
||||
"Logs": "",
|
||||
"Private Key": "",
|
||||
"\\(Required for QR Code and Download\\)": "",
|
||||
"\\(Required\\)": "",
|
||||
"Endpoint Allowed IPs": "",
|
||||
"DNS": "",
|
||||
"Optional Settings": "",
|
||||
"Pre-Shared Key": "",
|
||||
"MTU": "",
|
||||
"Persistent Keepalive": "",
|
||||
"Reset Data Usage": "",
|
||||
"Total": "",
|
||||
"Sent": "",
|
||||
"Received": "",
|
||||
"Revert": "",
|
||||
"Save Peer": "",
|
||||
"QR Code": "",
|
||||
"Schedule Jobs": "",
|
||||
"Job": "",
|
||||
"Job ID": "",
|
||||
"Unsaved Job": "",
|
||||
"This peer does not have any job yet\\.": "",
|
||||
"if": "",
|
||||
"is": "",
|
||||
"then": "",
|
||||
"larger than": "",
|
||||
"Date": "",
|
||||
"Restrict Peer": "",
|
||||
"Delete Peer": "",
|
||||
"Edit": "",
|
||||
"Delete": "",
|
||||
"Deleting...": "",
|
||||
"Cancel": "",
|
||||
"Save": "",
|
||||
"No active job at the moment\\.": "",
|
||||
"Jobs Logs": "",
|
||||
"Updated at": "",
|
||||
"Refresh": "",
|
||||
"Filter": "",
|
||||
"Success": "",
|
||||
"Failed": "",
|
||||
"Log ID": "",
|
||||
"Message": "",
|
||||
"Share Peer": "",
|
||||
"Currently the peer is not sharing": "",
|
||||
"Sharing\\.\\.\\.": "",
|
||||
"Start Sharing": "",
|
||||
"Stop Sharing\\.\\.\\.": "",
|
||||
"Stop Sharing": "",
|
||||
"Access Restricted": "",
|
||||
"Restrict Access": "",
|
||||
"Restricting\\.\\.\\.": "",
|
||||
"Allow Access": "",
|
||||
"Allowing Access\\.\\.\\.": "",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "",
|
||||
"Add Peers": "",
|
||||
"Bulk Add": "",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "",
|
||||
"How many peers you want to add\\?": "",
|
||||
"You can add up to (.*) peers": "",
|
||||
"Use your own Private and Public Key": "",
|
||||
"Enter IP Address/CIDR": "",
|
||||
"IP Address/CIDR": "",
|
||||
"or": "",
|
||||
"Pick Available IP": "",
|
||||
"No available IP containing": "",
|
||||
"Add": "",
|
||||
"Adding\\.\\.\\.": "",
|
||||
"Failed to check available update": "",
|
||||
"Nice to meet you!": "",
|
||||
"Please fill in the following fields to finish setup": "",
|
||||
"Create an account": "",
|
||||
"Enter an username you like": "",
|
||||
"Enter a password": "",
|
||||
"\\(At least 8 characters and make sure is strong enough!\\)": "",
|
||||
"Confirm password": "",
|
||||
"Next": "",
|
||||
"Saving\\.\\.\\.": "",
|
||||
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "",
|
||||
"Or you can click the link below:": "",
|
||||
"2\\. Enter the TOTP generated by your authenticator to verify": "",
|
||||
"TOTP verified!": "",
|
||||
"I don't need MFA": "",
|
||||
"Complete": "",
|
||||
"(v[0-9.]{1,}) is now available for update!": "",
|
||||
"Current Version:": "",
|
||||
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "",
|
||||
"Scan QR Code with the WireGuard App to add peer": "",
|
||||
"or click the button below to download the ": "",
|
||||
" file": "",
|
||||
"FROM ": "",
|
||||
"(.*) is on": "",
|
||||
"(.*) is off": "",
|
||||
"Allowed IPs is invalid": "",
|
||||
"Peer created successfully": "",
|
||||
"Please fill in all required box": "",
|
||||
"Please specify amount of peers you want to add": "",
|
||||
"No more available IP can assign": "",
|
||||
"The maximum number of peers can add is (.*)": "",
|
||||
"Generating key pairs by bulk failed": "",
|
||||
"Failed to add peers in bulk": "",
|
||||
"This peer already exist": "",
|
||||
"This IP is not available: (.*)": "",
|
||||
"Configuration does not exist": "",
|
||||
"Peer does not exist": "",
|
||||
"Please provide a valid configuration name": "",
|
||||
"Peer saved": "",
|
||||
"Allowed IPs already taken by another peer": "",
|
||||
"Endpoint Allowed IPs format is incorrect": "",
|
||||
"DNS format is incorrect": "",
|
||||
"MTU format is not correct": "",
|
||||
"Persistent Keepalive format is not correct": "",
|
||||
"Private key does not match with the public key": "",
|
||||
"Update peer failed when updating Pre-Shared Key": "",
|
||||
"Update peer failed when updating Allowed IPs": "",
|
||||
"Update peer failed when saving the configuration": "",
|
||||
"Peer data usage reset successfully": "",
|
||||
"Peer download started": "",
|
||||
"Please specify one or more peers": "",
|
||||
"Share link failed to create. Reason: (.*)": "",
|
||||
"Link expire date updated": "",
|
||||
"Link expire date failed to update. Reason: (.*)": "",
|
||||
"Peer job saved": "",
|
||||
"Please specify job": "",
|
||||
"Please specify peer and configuration": "",
|
||||
"Peer job deleted": "",
|
||||
"API Keys function is successfully enabled": "",
|
||||
"API Keys function is successfully disabled": "",
|
||||
"API Keys function is failed to enable": "",
|
||||
"API Keys function is failed to disable": "",
|
||||
"WGDashboard API Keys function is disabled": "",
|
||||
"WireGuard configuration path saved": "",
|
||||
"API Key deleted": "",
|
||||
"API Key created": "",
|
||||
"Sign in session ended, please sign in again": "",
|
||||
"Please specify an IP Address (v4/v6)": "",
|
||||
"Please provide ipAddress and count": "",
|
||||
"Please provide ipAddress": "",
|
||||
"Dashboard Language": "",
|
||||
"Dashboard language update failed": "",
|
||||
"Peer Remote Endpoint": "",
|
||||
"New Configuration": "",
|
||||
"Configuration Name": "",
|
||||
"Configuration name is invalid. Possible reasons:": "",
|
||||
"Configuration name already exist\\.": "",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "",
|
||||
"Invalid Port": "",
|
||||
"Save Configuration": "",
|
||||
"IP Address/CIDR is invalid": "",
|
||||
"IP Address": "",
|
||||
"Enter IP Address / Hostname": "",
|
||||
"IP Address / Hostname": "",
|
||||
"Dashboard IP Address \\& Listen Port": "",
|
||||
"Count": "",
|
||||
"Geolocation": "",
|
||||
"Is Alive": "",
|
||||
"Average / Min / Max Round Trip Time": "",
|
||||
"Sent / Received / Lost Package": "",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "",
|
||||
"Restore Configuration": "",
|
||||
"Step (.*)": "",
|
||||
"Select a backup you want to restore": "",
|
||||
"Click to change a backup": "",
|
||||
"Selected Backup": "",
|
||||
"You don't have any configuration to restore": "",
|
||||
"Help": "",
|
||||
"Backup": "",
|
||||
"([0-9].*) Backups?": "",
|
||||
"Yes": "",
|
||||
"No": "",
|
||||
"Backup not selected": "",
|
||||
"Confirm \\& edit restore information": "",
|
||||
"(.*) Available IP Address": "",
|
||||
"Database File": "",
|
||||
"Contain": "",
|
||||
"Restricted Peers?": "",
|
||||
"Restore": "",
|
||||
"Restoring": "",
|
||||
"WGDashboard Settings": "",
|
||||
"Peers Settings": "",
|
||||
"WireGuard Configuration Settings": "",
|
||||
"Appearance": "",
|
||||
"Theme": "",
|
||||
"Language": "",
|
||||
"Account Settings": "",
|
||||
"Peer Default Settings": "",
|
||||
"Toggle When Start Up": "",
|
||||
"Other Settings": "",
|
||||
"Select Peers": "",
|
||||
"Backup & Restore": "",
|
||||
"Delete Configuration": "",
|
||||
"Create Backup": "",
|
||||
"No backup yet, click the button above to create backup\\.": "",
|
||||
"Are you sure to delete this backup\\?": "",
|
||||
"Are you sure to restore this backup?\\": "",
|
||||
"Backup Date": "",
|
||||
"File": "",
|
||||
"Are you sure to delete this configuration\\?": "",
|
||||
"Once you deleted this configuration\\:": "",
|
||||
"All connected peers will get disconnected": "",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "",
|
||||
"Checking backups...": "",
|
||||
"This configuration have ([0-9].*) backups": "",
|
||||
"This configuration have no backup": "",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "",
|
||||
"Select All": "",
|
||||
"Clear Selection": "",
|
||||
"([0-9].*) Peers?": "",
|
||||
"Downloading": "",
|
||||
"Download Finished": "",
|
||||
"Done": "",
|
||||
"Are you sure to delete": "",
|
||||
"Are you sure to delete this peer\\?": "",
|
||||
"Configuration deleted": "",
|
||||
"Configuration saved": "",
|
||||
"WGDashboard language update failed": "",
|
||||
"Configuration restored": "",
|
||||
"Allowed IP already taken by another peer": "",
|
||||
"Failed to allow access of peer (.*)": "",
|
||||
"Failed to save configuration through WireGuard": "",
|
||||
"Allow access successfully": "",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": ""
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"Password": "Wachtwoord",
|
||||
"OTP from your authenticator": "OTP van uw authenticator",
|
||||
"Sign In": "Inloggen",
|
||||
"Signing In...": "Inloggen...",
|
||||
"Signing In\\.\\.\\.": "Inloggen...",
|
||||
"Access Remote Server": "Toegang tot Remote Server",
|
||||
"Server": "Server",
|
||||
"Click": "Klik",
|
||||
@@ -35,7 +35,6 @@
|
||||
"New Password": "Nieuw Wachtwoord",
|
||||
"Repeat New Password": "Herhaal Nieuw Wachtwoord",
|
||||
"Update Password": "Wachtwoord bijwerken",
|
||||
"Multi-Factor Authentication (MFA)": "Multi-Factor Authenticatie (MFA)",
|
||||
"Reset": "Resetten",
|
||||
"Setup": "Instellen",
|
||||
"API Keys": "API-sleutels",
|
||||
@@ -45,21 +44,16 @@
|
||||
"Disabled": "Uitgeschakeld",
|
||||
"No WGDashboard API Key": "Geen WGDashboard API-sleutel",
|
||||
"Expire At": "Vervalt Op",
|
||||
"Are you sure to delete this API key?": "Weet u zeker dat u deze API-sleutel wilt verwijderen?",
|
||||
"Create API Key": "API-sleutel maken",
|
||||
"When should this API Key expire?": "Wanneer moet deze API-sleutel vervallen?",
|
||||
"Never Expire": "Nooit vervallen",
|
||||
"Don't think that's a good idea": "Dit is geen goed idee, denk ik",
|
||||
"Creating...": "Maken...",
|
||||
"Create": "Maken",
|
||||
"Status": "Status",
|
||||
"On": "Aan",
|
||||
"Off": "Uit",
|
||||
"Turning On...": "Aanzetten...",
|
||||
"Turning Off...": "Uitzetten...",
|
||||
"Address": "Adres",
|
||||
"Listen Port": "Luisterpoort",
|
||||
"Public Key": "Public key",
|
||||
"Public Key": "Publieke Sleutel",
|
||||
"Connected Peers": "Verbonden Peers",
|
||||
"Total Usage": "Totaal Gebruik",
|
||||
"Total Received": "Totaal Ontvangen",
|
||||
@@ -71,7 +65,6 @@
|
||||
"Peers": "Peers",
|
||||
"Peer Settings": "Peer Instellingen",
|
||||
"Download All": "Alles Downloaden",
|
||||
"Search Peers...": "Zoek Peers...",
|
||||
"Display": "Weergave",
|
||||
"Sort By": "Sorteren op",
|
||||
"Refresh Interval": "Vernieuwingsinterval",
|
||||
@@ -85,9 +78,7 @@
|
||||
"Active Jobs": "Actieve Taken",
|
||||
"All Active Jobs": "Alle Actieve Taken",
|
||||
"Logs": "Logboeken",
|
||||
"Private Key": "Private Key",
|
||||
"(Required for QR Code and Download)": "(Vereist voor QR-code en Download)",
|
||||
"(Required)": "(Vereist)",
|
||||
"Private Key": "Privé Sleutel",
|
||||
"Endpoint Allowed IPs": "Allowed-IPs voor Eindpunt",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "Optionele Instellingen",
|
||||
@@ -105,7 +96,6 @@
|
||||
"Job": "Taak",
|
||||
"Job ID": "Taak ID",
|
||||
"Unsaved Job": "Niet Opgeslagen Taak",
|
||||
"This peer does not have any job yet.": "Deze peer heeft nog geen taak.",
|
||||
"if": "als",
|
||||
"is": "is",
|
||||
"then": "dan",
|
||||
@@ -118,7 +108,6 @@
|
||||
"Deleting...": "Aan het verwijderen",
|
||||
"Cancel": "Annuleren",
|
||||
"Save": "Opslaan",
|
||||
"No active job at the moment.": "Momenteel geen actieve taak.",
|
||||
"Jobs Logs": "Taaklogboeken",
|
||||
"Updated at": "Bijgewerkt op",
|
||||
"Refresh": "Vernieuwen",
|
||||
@@ -129,29 +118,21 @@
|
||||
"Message": "Bericht",
|
||||
"Share Peer": "Deel Peer",
|
||||
"Currently the peer is not sharing": "De peer deelt momenteel niet",
|
||||
"Sharing...": "Delen aan het starten...",
|
||||
"Start Sharing": "Start delen",
|
||||
"Stop Sharing...": "Delen aan het stoppen...",
|
||||
"Stop Sharing": "Stop met delen",
|
||||
"Access Restricted": "Toegang Beperkt",
|
||||
"Restrict Access": "Beperk toegang",
|
||||
"Restricting...": "Aan het beperken...",
|
||||
"Allow Access": "Toegang toestaan",
|
||||
"Allowing Access...": "Toegang toe aan het staan...",
|
||||
"Download & QR Code is not available due to no private key set for this peer": "Download & QR-code zijn niet beschikbaar omdat er geen privésleutel voor deze peer is ingesteld",
|
||||
"Add Peers": "Peers toevoegen",
|
||||
"Bulk Add": "Bulk toevoegen",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP.": "Bij het bulk toevoegen wordt de naam van elke peer automatisch gegenereerd en wordt de Allowed-IPs aan het volgende beschikbare IP toegewezen.",
|
||||
"How many peers you want to add?": "Hoeveel peers wil je toevoegen?",
|
||||
"You can add up to (.*) peers": "Je kunt tot $1 peers toevoegen",
|
||||
"Use your own Private and Public Key": "Gebruik je eigen private- en public key",
|
||||
"Use your own Private and Public Key": "Gebruik je eigen Privé- en Publieke Sleutel",
|
||||
"Enter IP Address/CIDR": "Voer IP-adres/CIDR in",
|
||||
"IP Address/CIDR": "IP-adres/CIDR",
|
||||
"or": "of",
|
||||
"Pick Available IP": "Kies beschikbare IP",
|
||||
"No available IP containing": "Geen beschikbare IP bevat",
|
||||
"Add": "Toevoegen",
|
||||
"Adding...": "Toevoegen...",
|
||||
"Failed to check available update": "Controlen van beschikbare updates mislukt",
|
||||
"Nice to meet you!": "Leuk je te ontmoeten!",
|
||||
"Please fill in the following fields to finish setup": "Vul de volgende velden in om de installatie te voltooien",
|
||||
@@ -228,8 +209,6 @@
|
||||
"New Configuration": "Nieuwe configuratie",
|
||||
"Configuration Name": "Configuratienaam",
|
||||
"Configuration name is invalid. Possible reasons:": "Configuratienaam is ongeldig. Mogelijke redenen:",
|
||||
"Configuration name already exist.": "Configuratienaam bestaat al.",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen.": "De configuratienaam mag alleen uit 15 tekens bestaan, inclusief hoofd-/kleine letters, cijfers, onderstrepingsteken, gelijkteken, plusteken, punt en koppelteken.",
|
||||
"Invalid Port": "Ongeldige poort",
|
||||
"Save Configuration": "Configuratie opslaan",
|
||||
"IP Address/CIDR is invalid": "IP-adres/CIDR is ongeldig",
|
||||
@@ -254,7 +233,6 @@
|
||||
"Yes": "Ja",
|
||||
"No": "Nee",
|
||||
"Backup not selected": "Geen back-up geselecteerd",
|
||||
"Confirm & edit restore information": "Bevestigen & herstelinformatie bewerken",
|
||||
"(.*) Available IP Address": "$1 Beschikbaar IP-adres",
|
||||
"Database File": "Databestand",
|
||||
"Contain": "Bevat",
|
||||
@@ -275,15 +253,9 @@
|
||||
"Backup & Restore": "Back-up & Herstellen",
|
||||
"Delete Configuration": "Configuratie Verwijderen",
|
||||
"Create Backup": "Maak een Back-up",
|
||||
"No backup yet, click the button above to create backup.": "Nog geen back-up, klik op de knop hierboven om een back-up te maken.",
|
||||
"Are you sure to delete this backup?": "Weet je zeker dat je deze back-up wilt verwijderen?",
|
||||
"Are you sure to restore this backup?": "Weet je zeker dat je deze back-up wilt herstellen?",
|
||||
"Backup Date": "Back-up Datum",
|
||||
"File": "Bestand",
|
||||
"Are you sure to delete this configuration?": "Weet je zeker dat je deze configuratie wilt verwijderen?",
|
||||
"Once you deleted this configuration:": "Zodra je deze configuratie hebt verwijderd:",
|
||||
"All connected peers will get disconnected": "Alle verbonden peers worden losgekoppeld",
|
||||
"Both configuration file (.conf) and database table related to this configuration will get deleted": "Zowel het configuratiebestand (.conf) als de databasetabel die aan deze configuratie is gekoppeld, worden verwijderd",
|
||||
"Checking backups...": "Back-ups worden gecontroleerd...",
|
||||
"This configuration have ([0-9].*) backups": "Deze configuratie heeft $1 back-ups",
|
||||
"This configuration have no backup": "Deze configuratie heeft geen back-up",
|
||||
@@ -295,7 +267,6 @@
|
||||
"Download Finished": "Download voltooid",
|
||||
"Done": "Klaar",
|
||||
"Are you sure to delete": "Weet je zeker dat je wilt verwijderen?",
|
||||
"Are you sure to delete this peer?": "Weet je zeker dat je deze peer wilt verwijderen?",
|
||||
"Configuration deleted": "Configuratie verwijderd",
|
||||
"Configuration saved": "Configuratie opgeslagen",
|
||||
"WGDashboard language update failed": "Bijwerken van de WGDashboard-taal mislukt",
|
||||
@@ -304,8 +275,38 @@
|
||||
"Failed to allow access of peer (.*)": "Toegang voor peer $1 niet toegestaan",
|
||||
"Failed to save configuration through WireGuard": "Configuratie opslaan via WireGuard mislukt",
|
||||
"Allow access successfully": "Toegang succesvol toegestaan",
|
||||
"Deleted ([0-9]{1,}) peer(s)": "$1 peer(s) verwijderd",
|
||||
"Deleted ([0-9]{1,}) peer(s) successfully. Failed to delete ([0-9]{1,}) peer(s)": "$1 peer(s) succesvol verwijderd. Het verwijderen van $2 peer(s) is mislukt",
|
||||
"Restricted ([0-9]{1,}) peer(s)": "$1 peer(s) beperkt",
|
||||
"Restricted ([0-9]{1,}) peer(s) successfully. Failed to restrict ([0-9]{1,}) peer(s)": "$1 peer(s) succesvol beperkt. Het beperken van $2 peer(s) is mislukt"
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Multi-Factor Authenticatie (MFA)",
|
||||
"Are you sure to delete this API key\\?": "Weet u zeker dat u deze API-sleutel wilt verwijderen?",
|
||||
"When should this API Key expire\\?": "Wanneer moet deze API-sleutel vervallen?",
|
||||
"Creating\\.\\.\\.": "Maken",
|
||||
"Turning On\\.\\.\\.": "Aanzetten...",
|
||||
"Turning Off\\.\\.\\.": "Uitzetten...",
|
||||
"Search Peers\\.\\.\\.": "Zoek Peers...",
|
||||
"\\(Required for QR Code and Download\\)": "(Vereist voor QR-code en Download)",
|
||||
"\\(Required\\)": "(Vereist)",
|
||||
"This peer does not have any job yet\\.": "Deze peer heeft nog geen taak.",
|
||||
"No active job at the moment\\.": "Momenteel geen actieve taak.",
|
||||
"Sharing\\.\\.\\.": "Delen aan het starten...",
|
||||
"Stop Sharing\\.\\.\\.": "Delen aan het stoppen...",
|
||||
"Restricting\\.\\.\\.": "Aan het beperken...",
|
||||
"Allowing Access\\.\\.\\.": "Toegang toe aan het staan...",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "Download & QR-code zijn niet beschikbaar omdat er geen privésleutel voor deze peer is ingesteld",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": " \"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP.\": \"Bij het bulk toevoegen wordt de naam van elke peer automatisch gegenereerd en wordt de Allowed-IPs aan het volgende beschikbare IP toegewezen.",
|
||||
"How many peers you want to add\\?": "Hoeveel peers wil je toevoegen?",
|
||||
"Adding\\.\\.\\.": "Toevoegen...",
|
||||
"Configuration name already exist\\.": "Configuratienaam bestaat al.",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "De configuratienaam mag alleen uit 15 tekens bestaan, inclusief hoofd-/kleine letters, cijfers, onderstrepingsteken, gelijkteken, plusteken, punt en koppelteken.",
|
||||
"Dashboard IP Address \\& Listen Port": "",
|
||||
"Confirm \\& edit restore information": "Bevestigen & herstelinformatie bewerken",
|
||||
"No backup yet, click the button above to create backup\\.": "Nog geen back-up, klik op de knop hierboven om een back-up te maken.",
|
||||
"Are you sure to delete this backup\\?": "Weet je zeker dat je deze back-up wilt verwijderen?",
|
||||
"Are you sure to restore this backup?\\": "Weet je zeker dat je deze back-up wilt herstellen?",
|
||||
"Are you sure to delete this configuration\\?": "Weet je zeker dat je deze configuratie wilt verwijderen?",
|
||||
"Once you deleted this configuration\\:": "Zodra je deze configuratie hebt verwijderd:",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Zowel het configuratiebestand (.conf) als de databasetabel die aan deze configuratie is gekoppeld, worden verwijderd",
|
||||
"Are you sure to delete this peer\\?": "Weet je zeker dat je deze peer wilt verwijderen?",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) verwijderd",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol verwijderd. Het verwijderen van $2 peer(s) is mislukt",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) beperkt",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 peer(s) succesvol beperkt. Het beperken van $2 peer(s) is mislukt"
|
||||
}
|
||||
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"Welcome to": "Witamy w",
|
||||
"Username": "Nazwa Użytkownika",
|
||||
"Password": "Hasło",
|
||||
"OTP from your authenticator": "OTP z Twojego Autentykatora",
|
||||
"Sign In": "Zaloguj",
|
||||
"Signing In\\.\\.\\.": "Trwa Logowanie...",
|
||||
"Access Remote Server": "Połącz się ze zdalnym serwerem",
|
||||
"Server": "Serwer",
|
||||
"Click": "Kliknij",
|
||||
"Pinging...": "Pinguje...",
|
||||
"to add your server": "aby dodać do Twojego serwera",
|
||||
"Server List": "Lista Serwerów",
|
||||
"Sorry, your username or password is incorrect.": "Nazwa użytkownika bądź hasło jest niepoprawne.",
|
||||
"Home": "Strona Główna",
|
||||
"Settings": "Ustawnienia",
|
||||
"Tools": "Narzędzia",
|
||||
"Sign Out": "Wyloguj się",
|
||||
"Checking for update...": "Sprawdzanie aktualizacji...",
|
||||
"You're on the latest version": "Korzystasz z najnowszej wersji",
|
||||
"WireGuard Configurations": "Konfiguracja",
|
||||
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Nie posiadasz żadnych konfiguarcji WireGuard. Sprawdź folder konfiguarcji lub zmień go w Ustawieniach. Domyślnie konfiguracje są zapisywane w /etc/wireguard.",
|
||||
"Configuration": "Konfiguracja",
|
||||
"Configurations": "Konfiguracje",
|
||||
"Peers Default Settings": "Domyślne ustawienia Klientów",
|
||||
"Dashboard Theme": "Styl Panelu",
|
||||
"Light": "Jasny",
|
||||
"Dark": "Ciemny",
|
||||
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Te zmiany zostaną wprowadzone globalnie i nadpiszą kody QR i konfiguracje wszystkich Klientów.",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Aby zapisać zmiany adresów IP lub portu nasłuchiwania wymagany będzie manualny restart WGDashboard.",
|
||||
"WireGuard Configurations Settings": "Ustawienia Konfiguracji WireGuard",
|
||||
"Configurations Directory": "Folder Konfiguracji",
|
||||
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Pamiętaj aby usunąć / na końcu ścieżki, na przykład /etc/wireguard",
|
||||
"WGDashboard Account Settings": "Ustawienia Konta WGDashboard",
|
||||
"Current Password": "Aktualne Hasło",
|
||||
"New Password": "Nowe Hasło",
|
||||
"Repeat New Password": "Powtórz Nowe Hasło",
|
||||
"Update Password": "Aktualizuj Hasło",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Weryfikacja Wieloskładnikowa (MFA)",
|
||||
"Reset": "Reset",
|
||||
"Setup": "Ustawienia",
|
||||
"API Keys": "Klucze API",
|
||||
"API Key": "Klucz API",
|
||||
"Key": "Klucz",
|
||||
"Enabled": "Włączone",
|
||||
"Disabled": "Wyłączone",
|
||||
"No WGDashboard API Key": "Brak Klucza API WGDashboard",
|
||||
"Expire At": "Termin Ważności",
|
||||
"Are you sure to delete this API key\\?": "Czy na pewno chcesz usunąć ten klucz API?",
|
||||
"Create API Key": "Stwórz klucz API",
|
||||
"When should this API Key expire\\?": "Kiedy ten klucz API powinien utracić swoją ważność?",
|
||||
"Never Expire": "Nigdy",
|
||||
"Don't think that's a good idea": "To nie jest dobry pomysł...",
|
||||
"Creating\\.\\.\\.": "Tworzenie...",
|
||||
"Create": "Stwórz",
|
||||
"Status": "Status",
|
||||
"On": "Wł.",
|
||||
"Off": "Wył.",
|
||||
"Turning On\\.\\.\\.": "Włączam...",
|
||||
"Turning Off\\.\\.\\.": "Wyłączam...",
|
||||
"Address": "Adres",
|
||||
"Listen Port": "Port Nasłuchu",
|
||||
"Public Key": "Klucz publiczny",
|
||||
"Connected Peers": "Połączeni Klienci",
|
||||
"Total Usage": "Łączne Użycie",
|
||||
"Total Received": "Łącznie Odebrano",
|
||||
"Total Sent": "Łącznie Wysłano",
|
||||
"Peers Data Usage": "Użycie danych przez Klientów",
|
||||
"Real Time Received Data Usage": "Aktualnie Odbierane Dane",
|
||||
"Real Time Sent Data Usage": "Aktualnie Wysyłane Dane",
|
||||
"Peer": "Klient",
|
||||
"Peers": "Klienci",
|
||||
"Peer Settings": "Ustawienia Klientów",
|
||||
"Download All": "Pobierz Wszystkie",
|
||||
"Search Peers\\.\\.\\.": "Szukaj Klientów...",
|
||||
"Display": "Wyświetlanie",
|
||||
"Sort By": "Sortuj po",
|
||||
"Refresh Interval": "Interwał Odświeżania",
|
||||
"Name": "Nazwa",
|
||||
"Allowed IPs": "Dozwolone IP",
|
||||
"Restricted": "Ograniczone",
|
||||
"(.*) Seconds": "$1 sek.",
|
||||
"(.*) Minutes": "$1 min.",
|
||||
"Configuration Settings": "Ustawienia Konfiguracji",
|
||||
"Peer Jobs": "Automatyzacje Klienta",
|
||||
"Active Jobs": "Aktywne Automatyzacje",
|
||||
"All Active Jobs": "Wszystkie Aktywne Automatyzacje",
|
||||
"Logs": "Logi",
|
||||
"Private Key": "Prywatny Klucz",
|
||||
"\\(Required for QR Code and Download\\)": "(Wymagane aby otrzymać kod QR lub Pobrać)",
|
||||
"\\(Required\\)": "(Wymagane)",
|
||||
"Endpoint Allowed IPs": "Dozwolone IP Punktu Końcowego",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "Opcjonalne Ustawienia",
|
||||
"Pre-Shared Key": "Klucz PSK",
|
||||
"MTU": "MTU",
|
||||
"Persistent Keepalive": "Stałe Utrzymywanie Online",
|
||||
"Reset Data Usage": "Zresetuje Użycie Danych",
|
||||
"Total": "Łącznie",
|
||||
"Sent": "Wysłano",
|
||||
"Received": "Otrzymano",
|
||||
"Revert": "Cofnij",
|
||||
"Save Peer": "Zapisz Klienta",
|
||||
"QR Code": "Kod QR",
|
||||
"Schedule Jobs": "Automatyzacje",
|
||||
"Job": "Automatyzacja",
|
||||
"Job ID": "ID Automatyzacji",
|
||||
"Unsaved Job": "Niezapisana Automatyzacja",
|
||||
"This peer does not have any job yet\\.": "Ten klient nie posiada żadnych automatyzacji.",
|
||||
"if": "Jeśli",
|
||||
"is": "jest",
|
||||
"then": "to wtedy",
|
||||
"larger than": "większy/a niż",
|
||||
"Date": "Data",
|
||||
"Restrict Peer": "Ogranicz Klienta",
|
||||
"Delete Peer": "Usuń Klienta",
|
||||
"Edit": "Edytuj",
|
||||
"Delete": "Usuń",
|
||||
"Deleting...": "Usuwam...",
|
||||
"Cancel": "Anuluj",
|
||||
"Save": "Zapisz",
|
||||
"No active job at the moment\\.": "Brak aktywnych automatyzacji.",
|
||||
"Jobs Logs": "Logi Automatyzacji",
|
||||
"Updated at": "Ostatnia zmiana",
|
||||
"Refresh": "Odśwież",
|
||||
"Filter": "Filtruj",
|
||||
"Success": "Sukces",
|
||||
"Failed": "Porażka",
|
||||
"Log ID": "ID Logów",
|
||||
"Message": "Wiadomość",
|
||||
"Share Peer": "Udostępnij Klienta",
|
||||
"Currently the peer is not sharing": "Aktualnie klient nie jest udostępniony",
|
||||
"Sharing\\.\\.\\.": "Udostępniam...",
|
||||
"Start Sharing": "Rozpocznij Udostępnianie",
|
||||
"Stop Sharing\\.\\.\\.": "Zakańczanie Udostępniania...",
|
||||
"Stop Sharing": "Zakończ",
|
||||
"Access Restricted": "Dostęp Ograniczony",
|
||||
"Restrict Access": "Ogranicz Dostęp",
|
||||
"Restricting\\.\\.\\.": "Ograniczanie...",
|
||||
"Allow Access": "Udostępnij Dostęp",
|
||||
"Allowing Access\\.\\.\\.": "Udostępnianie Dostępu...",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "Kod QR lub pobieranie nie jest dostępne ze względu na brak ustawionego prywatnego klucza dla tego klienta",
|
||||
"Add Peers": "Dodaj Klientów",
|
||||
"Bulk Add": "Masowe Dodawanie",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Dodając klientów masowo, nazwa każdego klienta zostanie wygenerowana automatycznie i przydzielone zostanie następny dostępny adres IP.",
|
||||
"How many peers you want to add\\?": "Ilu klientów chcesz dodać?",
|
||||
"You can add up to (.*) peers": "Możesz dodać do $1 Klientów",
|
||||
"Use your own Private and Public Key": "Użyj własnych publicznych i prywatnych kluczy",
|
||||
"Enter IP Address/CIDR": "Podaj adres IP/CIDR",
|
||||
"IP Address/CIDR": "Adres IP/CIDR",
|
||||
"or": "lub",
|
||||
"Pick Available IP": "Wybierz Dostępny Adres IP",
|
||||
"No available IP containing": "Brak dostępnych adresów IP zawierających",
|
||||
"Add": "Dodaj",
|
||||
"Adding\\.\\.\\.": "Dodawanie...",
|
||||
"Failed to check available update": "Nie udało się sprawdzić dostępnych aktualizacji",
|
||||
"Nice to meet you!": "Miło Cię poznać!",
|
||||
"Please fill in the following fields to finish setup": "Wypełnij następujące pola aby ukończyć instalacje",
|
||||
"Create an account": "Stwórz konto",
|
||||
"Enter an username you like": "Wpisz nazwę użytkownika",
|
||||
"Enter a password": "Utwórz Hasło",
|
||||
"\\(At least 8 characters and make sure is strong enough!\\)": "(Wybierz silne hasło zawierające co najmniej 8 znaków!)",
|
||||
"Confirm password": "Potwierdź Hasło",
|
||||
"Next": "Dalej",
|
||||
"Saving\\.\\.\\.": "Zapisywanie...",
|
||||
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Zeskanuj ten kod QR aby utworzyć jednorazowe hasło (TOTP) za pomocą Twojego Autentykatora",
|
||||
"Or you can click the link below:": "Lub kliknij w poniższy link:",
|
||||
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Podaj swoje jednorazowe hasło (TOTP), utworzone za pomocą Twojego Autentykatora",
|
||||
"TOTP verified!": "Jednorazowe hasło (TOTP) potwierdzone!",
|
||||
"I don't need MFA": "Nie potrzebuję Weryfikacji Wieloskładnikowej (MFA)",
|
||||
"Complete": "Zakończ",
|
||||
"(v[0-9.]{1,}) is now available for update!": "Aktualizacja do wersji $1 jest dostępna do pobrania!",
|
||||
"Current Version:": "Aktualna wersja: ",
|
||||
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Ups. Ten link nie jest poprawny bądź utracił swoją ważność.",
|
||||
"Scan QR Code with the WireGuard App to add peer": "Zeskanuj kod QR za pomocą aplikacji WireGuard aby dodać klienta",
|
||||
"or click the button below to download the ": "lub kliknij przycisk poniżej aby pobrać ",
|
||||
" file": " plik",
|
||||
"FROM ": "z ",
|
||||
"(.*) is on": "$1 jest wł.",
|
||||
"(.*) is off": "$1 jest wył.",
|
||||
"Allowed IPs is invalid": "Dozwolone Adresy IP są niepoprawne",
|
||||
"Peer created successfully": "Klient utworzony pomyślnie",
|
||||
"Please fill in all required box": "Wypełnij wszystkie wymagane pola",
|
||||
"Please specify amount of peers you want to add": "Podaj liczbę klientów do dodania",
|
||||
"No more available IP can assign": "Brak dostępnych adresów IP do dopisania",
|
||||
"The maximum number of peers can add is (.*)": "Maksymalnie można dodać $1 klientów",
|
||||
"Generating key pairs by bulk failed": "Tworzenie par kluczy nie udało się",
|
||||
"Failed to add peers in bulk": "Nie udało się dodać klientów masowo",
|
||||
"This peer already exist": "Ten klient już istnieje",
|
||||
"This IP is not available: (.*)": "Ten adres IP nie jest dostępny: $1",
|
||||
"Configuration does not exist": "Konfiguracja nie istnieje",
|
||||
"Peer does not exist": "Klient nie istnieje",
|
||||
"Please provide a valid configuration name": "Podaj poprawną nazwę konfiguracji",
|
||||
"Peer saved": "Klient zapisany pomyślnie",
|
||||
"Allowed IPs already taken by another peer": "Adres IP jest już wykorzystywany przez innego klienta",
|
||||
"Endpoint Allowed IPs format is incorrect": "Format Dozwolonych adresów IP jest niepoprawny",
|
||||
"DNS format is incorrect": "Niepoprawny format adresu serwera DNS",
|
||||
"MTU format is not correct": "Niepoprawny format wartości MTU",
|
||||
"Persistent Keepalive format is not correct": "Niepoprawny format wartości Stałego Utrzymywania Online",
|
||||
"Private key does not match with the public key": "Prywatny klucz nie pasuje do publicznego klucza",
|
||||
"Update peer failed when updating Pre-Shared Key": "Aktualizacja klientów nie powiodła się przy zapisywaniu Klucza PSK",
|
||||
"Update peer failed when updating Allowed IPs": "Aktualizacja klientów nie powiodła się przy zapisywaniu dozwolonych adresów IP",
|
||||
"Update peer failed when saving the configuration": "Aktualizacja klientów nie powiodła się przy zapisywaniu Konfiguracji",
|
||||
"Peer data usage reset successfully": "Użycie danych klienta zresetowane pomyślnie",
|
||||
"Peer download started": "Pobieranie klienta rozpoczęte",
|
||||
"Please specify one or more peers": "Wybierz co najmniej jednego klienta",
|
||||
"Share link failed to create. Reason: (.*)": "Nie udało się stworzyć linku do udostępniania. Powód: $1",
|
||||
"Link expire date updated": "Data ważności linku zapisana",
|
||||
"Link expire date failed to update. Reason: (.*)": "Nie udało się zapisać daty linku do udostępniania. Powód: $1",
|
||||
"Peer job saved": "Automatyzacja klienta zapisana",
|
||||
"Please specify job": "Wybierz poprawną automatyzacje",
|
||||
"Please specify peer and configuration": "Wybierz klienta i konfiguracje",
|
||||
"Peer job deleted": "Automatyzacja klienta usunięta pomyślnie",
|
||||
"API Keys function is successfully enabled": "Funkcjonalność kluczy API pomyślnie włączona",
|
||||
"API Keys function is successfully disabled": "Funkcjonalność kluczy API pomyślnie wyłączona",
|
||||
"API Keys function is failed to enable": "Nie udało się włączyć funkcjonalności kluczy API",
|
||||
"API Keys function is failed to disable": "Nie udało się wyłączyć funkcjonalności kluczy API",
|
||||
"WGDashboard API Keys function is disabled": "Funkcjonalność kluczy API jest wyłączona",
|
||||
"WireGuard configuration path saved": "Zapisano ścieżkę konfiguracji WireGuard pomyślnie",
|
||||
"API Key deleted": "Klucz API usunięty pomyślnie",
|
||||
"API Key created": "Klucz API stworzony pomyślnie",
|
||||
"Sign in session ended, please sign in again": "Sesja logowania została zakończona. Zaloguj się ponownie",
|
||||
"Please specify an IP Address (v4/v6)": "Podaj adres IP (v4/v6)",
|
||||
"Please provide ipAddress and count": "Podaj adres IP i ilość",
|
||||
"Please provide ipAddress": "Podaj adres IP",
|
||||
"Dashboard Language": "Język Portalu WGDashboard",
|
||||
"Dashboard language update failed": "Nie udało się zmienić języka portalu WGDashboard",
|
||||
"Peer Remote Endpoint": "Zdalny Punkt Końcowy Klienta",
|
||||
"New Configuration": "Nowa Konfiguracja",
|
||||
"Configuration Name": "Nazwa Konfiguracji",
|
||||
"Configuration name is invalid. Possible reasons:": "Nazwa Konfiguracji jest nieprawidłowa. Możliwy powód:",
|
||||
"Configuration name already exist\\.": "Konfiguracja o tej nazwie już istnieje. ",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Nazwa konfiguracji może zawierać tylko 15 znaków składających się z małych i dużych liter alfabetu, liczb, oraz tych znaków: _=+.- ",
|
||||
"Invalid Port": "Niepoprawny Port",
|
||||
"Save Configuration": "Zapisz Konfiguracje",
|
||||
"IP Address/CIDR is invalid": "Adres IP/CIDR jest niepoprawny",
|
||||
"IP Address": "Adres IP",
|
||||
"Enter IP Address / Hostname": "Wpisz Adres IP / Nazwę Hosta",
|
||||
"IP Address / Hostname": "Adres IP / Nazwa Hosta",
|
||||
"Dashboard IP Address \\& Listen Port": "Adres IP Portalu WGDashboard oraz Port Nasłuchiwania",
|
||||
"Count": "Ilość",
|
||||
"Geolocation": "Geolokalizacja",
|
||||
"Is Alive": "Jest Online",
|
||||
"Average / Min / Max Round Trip Time": "Średnia / Min. / Maks. czas podróży pakietu",
|
||||
"Sent / Received / Lost Package": "Wysłane / Otrzymane / Utracone Pakiety",
|
||||
"Restore Configuration": "Przywróc Konfiguracje",
|
||||
"Step (.*)": "Krok $1",
|
||||
"Select a backup you want to restore": "Wybierz kopię zapasową którą chcesz przywrócić",
|
||||
"Click to change a backup": "Wybierz kopię zapasową",
|
||||
"Selected Backup": "Wybrana kopia zapasowa",
|
||||
"You don't have any configuration to restore": "Nie posiadasz żadnej konfiguracji do przywrócenia",
|
||||
"Help": "Pomoc",
|
||||
"Backup": "Kopia Zapasowa",
|
||||
"([0-9].*) Backups?": "$1 Kopii Zapasowych?",
|
||||
"Yes": "Tak",
|
||||
"No": "Nie",
|
||||
"Backup not selected": "Nie wybrano kopii zapasowej",
|
||||
"Confirm \\& edit restore information": "Potwierdź i edytuj informacje o przywróceniu kopii zapasowej",
|
||||
"(.*) Available IP Address": "$1 Dostępne Adresy IP",
|
||||
"Database File": "Plik Bazy Danych",
|
||||
"Contain": "Zawiera",
|
||||
"Restricted Peers?": "Ograniczeni Klienci",
|
||||
"Restore": "Przywróć",
|
||||
"Restoring": "Trwa przywracanie...",
|
||||
"WGDashboard Settings": "Ustawienia WGDashboard",
|
||||
"Peers Settings": "Ustawienia Klientów",
|
||||
"WireGuard Configuration Settings": "Ustawienia Konfiguracji WireGuard",
|
||||
"Appearance": "Wygląd",
|
||||
"Theme": "Styl",
|
||||
"Language": "Język",
|
||||
"Account Settings": "Ustawienia Konta",
|
||||
"Peer Default Settings": "Domyślne Ustawienia Klientów",
|
||||
"Toggle When Start Up": "Włącz przy starcie serwera",
|
||||
"Other Settings": "Inne Ustawienia",
|
||||
"Select Peers": "Wybierz Klientów",
|
||||
"Backup & Restore": "Tworzenie i Przywracanie Kopii Zapasowej",
|
||||
"Delete Configuration": "Usuń Konfiguracje",
|
||||
"Create Backup": "Stwórz Kopię Zapasową",
|
||||
"No backup yet, click the button above to create backup\\.": "Brak kopii Zapasowych, kliknij przycisk powyżej aby utworzyć nową kopię",
|
||||
"Are you sure to delete this backup\\?": "Czy na pewno chcesz usunąć tą kopię zapasową?",
|
||||
"Are you sure to restore this backup?\\": "Czy na pewno chcesz przywrócić tą kopię zapasową?",
|
||||
"Backup Date": "Data Utworzenia",
|
||||
"File": "Plik",
|
||||
"Are you sure to delete this configuration\\?": "Czy na pewno chcesz usunąć tą konfigurację?",
|
||||
"Once you deleted this configuration\\:": "Jak tylko usuniesz tą konfigurację: ",
|
||||
"All connected peers will get disconnected": "Wszyscy klienci zostaną odłączeni",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Zarówno plik konfiguracji (.conf) jak i tabela w bazie danych dotycząca tej konfiguracji zostaną usunięte",
|
||||
"Checking backups...": "Sprawdzanie kopii zapasowych...",
|
||||
"This configuration have ([0-9].*) backups": "Ta konfiguracja ma utworzone $1 kopii zapasowych",
|
||||
"This configuration have no backup": "Ta konfiguracja nie posiada żadnych kopii zapasowych",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "Jeśli jesteś pewny/a wpisz nazwę konfiguracji poniżej i kliknij Usuń",
|
||||
"Select All": "Zaznacz Wszystkie",
|
||||
"Clear Selection": "Wyczyść Zaznaczenie",
|
||||
"([0-9].*) Peers?": "$1 Klientów?",
|
||||
"Downloading": "Pobieranie",
|
||||
"Download Finished": "Pobieranie Zakończone",
|
||||
"Done": "Zakończono",
|
||||
"Are you sure to delete": "Czy na pewno chcesz usunąć",
|
||||
"Are you sure to delete this peer\\?": "Czy na pewno chcesz usunąć tego klienta?",
|
||||
"Configuration deleted": "Konfiguracja usunięta pomyślnie",
|
||||
"Configuration saved": "Konfiguracja zapisana pomyślnie",
|
||||
"WGDashboard language update failed": "Nie udało się zmienić języka WGDashboard",
|
||||
"Configuration restored": "Konfiguracja przywrócona pomyślnie",
|
||||
"Allowed IP already taken by another peer": "Dozwolony Adres IP jest już wykorzystywany przez innego klienta",
|
||||
"Failed to allow access of peer (.*)": "Nie udało się pozwolić na dostęp klientowi:$1",
|
||||
"Failed to save configuration through WireGuard": "Nie udało się zapisać konfiguracji poprzez WireGuard",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Usunięto $1 klienta/ów",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Usunięto $1 klienta/ów pomyślnie. Nie udało się usunąć $2 klienta/ów",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów ",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Ograniczono $1 klienta/ów pomyślnie. Nie udało się ograniczyć $2 klienta/ów",
|
||||
"Allow access successfully": "Pomyślnie udostępniono dostęp"
|
||||
}
|
||||
@@ -77,7 +77,6 @@
|
||||
"Sort By": "Сортировать по",
|
||||
"Refresh Interval": "Интервал обновления",
|
||||
"Name": "Имя",
|
||||
"ago": "назад",
|
||||
"Allowed IPs": "Внутренний IP-адрес",
|
||||
"Restricted": "Прекращен",
|
||||
"(.*) Seconds": "$1 сек.",
|
||||
@@ -238,7 +237,6 @@
|
||||
"IP Address": "IP-адрес",
|
||||
"Enter IP Address / Hostname": "Введите IP-адрес / Имя хоста",
|
||||
"IP Address / Hostname": "IP-адрес / Имя хоста",
|
||||
"Dashboard IP Address & Listen Port": "IP-адрес и порт панели мониторинга",
|
||||
"Count": "Число прыжков",
|
||||
"Geolocation": "Геолокация",
|
||||
"Is Alive": "Живой",
|
||||
@@ -305,13 +303,10 @@
|
||||
"Allowed IP already taken by another peer": "IP-адрес, уже занятый другим узлом",
|
||||
"Failed to allow access of peer (.*)": "Не удалось разрешить доступ этому клиенту:$1",
|
||||
"Failed to save configuration through WireGuard": "Не удалось сохранить конфигурацию с помощью WireGuard",
|
||||
"Allow access successfully!": "Доступ разрешён!",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Удалено $1 клиентов ",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Успешно удалено $1 клиентов. Не удалось удалить $2 ",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Заблокировано $1 клиентов ",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Успешно аблокировано $1 клиентов. Не удалось заблокировать $2 ",
|
||||
"Traceroute": "Трассировка",
|
||||
"Autostart": "Автозапуск",
|
||||
"Path": "Директория"
|
||||
"Dashboard IP Address \\& Listen Port": "IP-адрес и порт панели мониторинга",
|
||||
"Allow access successfully": "Доступ разрешён"
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"Welcome to": "Välkommen till",
|
||||
"Username": "Användarnamn",
|
||||
"Password": "Lösenord",
|
||||
"OTP from your authenticator": "Engångslösenord från din autentiserare",
|
||||
"Sign In": "Logga in",
|
||||
"Access Remote Server": "Åtkomst till fjärrserver",
|
||||
"Server": "Server",
|
||||
"Click": "Klicka",
|
||||
"Pinging...": "Pingar...",
|
||||
"to add your server": "för att lägga till din server",
|
||||
"Server List": "Serverlista",
|
||||
"Sorry, your username or password is incorrect.": "Tyvärr, ditt användarnamn eller lösenord är fel.",
|
||||
"Home": "Hem",
|
||||
"Settings": "Inställningar",
|
||||
"Tools": "Verktyg",
|
||||
"Sign Out": "Logga ut",
|
||||
"Checking for update...": "Kontrollerar efter uppdateringar...",
|
||||
"You're on the latest version": "Du använder den senaste versionen",
|
||||
"WireGuard Configurations": "WireGuard-konfigurationer",
|
||||
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Du har inga WireGuard-konfigurationer ännu. Kontrollera konfigurationsmappen eller ändra den i Inställningar. Som standard är mappen /etc/wireguard.",
|
||||
"Configuration": "Konfiguration",
|
||||
"Configurations": "Konfigurationer",
|
||||
"Peers Default Settings": "Standardinställningar för Peers",
|
||||
"Dashboard Theme": "Paneltema",
|
||||
"Light": "Ljust",
|
||||
"Dark": "Mörkt",
|
||||
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Detta kommer att ändras globalt och tillämpas på alla Peers QR-koder och konfigurationsfiler.",
|
||||
"WireGuard Configurations Settings": "Inställningar för WireGuard-konfigurationer",
|
||||
"Configurations Directory": "Konfigurationskatalog",
|
||||
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Kom ihåg att ta bort / i slutet av sökvägen, t.ex. /etc/wireguard",
|
||||
"WGDashboard Account Settings": "WGDashboard-kontoinställningar",
|
||||
"Current Password": "Nuvarande lösenord",
|
||||
"New Password": "Nytt lösenord",
|
||||
"Repeat New Password": "Upprepa nytt lösenord",
|
||||
"Update Password": "Uppdatera lösenord",
|
||||
"Reset": "Återställ",
|
||||
"Setup": "Installera",
|
||||
"API Keys": "API-nycklar",
|
||||
"API Key": "API-nyckel",
|
||||
"Key": "Nyckel",
|
||||
"Enabled": "Aktiverad",
|
||||
"Disabled": "Inaktiverad",
|
||||
"No WGDashboard API Key": "Ingen WGDashboard API-nyckel",
|
||||
"Expire At": "Utgår",
|
||||
"Create API Key": "Skapa API-nyckel",
|
||||
"Never Expire": "Löper aldrig ut",
|
||||
"Don't think that's a good idea": "Det är nog inte en bra idé",
|
||||
"Create": "Skapa",
|
||||
"Status": "Status",
|
||||
"On": "På",
|
||||
"Off": "Av",
|
||||
"Address": "Adress",
|
||||
"Listen Port": "Lyssnarport",
|
||||
"Public Key": "Publik nyckel",
|
||||
"Connected Peers": "Anslutna Peers",
|
||||
"Total Usage": "Total användning",
|
||||
"Total Received": "Totalt mottaget",
|
||||
"Total Sent": "Totalt skickat",
|
||||
"Peers Data Usage": "Dataanvändning för Peers",
|
||||
"Real Time Received Data Usage": "Realtidsanvändning mottagen data",
|
||||
"Real Time Sent Data Usage": "Realtidsanvändning skickad data",
|
||||
"Peer": "Peer",
|
||||
"Peers": "Peers",
|
||||
"Peer Settings": "Peer-inställningar",
|
||||
"Download All": "Ladda ner alla",
|
||||
"Display": "Visa",
|
||||
"Sort By": "Sortera efter",
|
||||
"Refresh Interval": "Uppdateringsintervall",
|
||||
"Name": "Namn",
|
||||
"Allowed IPs": "Tillåtna IP-adresser",
|
||||
"Restricted": "Begränsad",
|
||||
"(.*) Seconds": "$1 sekunder",
|
||||
"(.*) Minutes": "$1 minuter",
|
||||
"Configuration Settings": "Konfigurationsinställningar",
|
||||
"Peer Jobs": "Peer-jobb",
|
||||
"Active Jobs": "Aktiva jobb",
|
||||
"All Active Jobs": "Alla aktiva jobb",
|
||||
"Logs": "Loggar",
|
||||
"Private Key": "Privat nyckel",
|
||||
"Endpoint Allowed IPs": "Tillåtna IP-adresser för slutpunkt",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "Valfria inställningar",
|
||||
"Pre-Shared Key": "Fördelad nyckel",
|
||||
"MTU": "MTU",
|
||||
"Persistent Keepalive": "Persistent Keepalive",
|
||||
"Reset Data Usage": "Återställ dataanvändning",
|
||||
"Total": "Totalt",
|
||||
"Sent": "Skickat",
|
||||
"Received": "Mottaget",
|
||||
"Revert": "Återställ",
|
||||
"Save Peer": "Spara Peer",
|
||||
"QR Code": "QR-kod",
|
||||
"Schedule Jobs": "Schemalägg jobb",
|
||||
"Job": "Jobb",
|
||||
"Job ID": "Jobb-ID",
|
||||
"Unsaved Job": "Osparat jobb",
|
||||
"if": "om",
|
||||
"is": "är",
|
||||
"then": "då",
|
||||
"larger than": "större än",
|
||||
"Date": "Datum",
|
||||
"Restrict Peer": "Begränsa Peer",
|
||||
"Delete Peer": "Radera Peer",
|
||||
"Edit": "Redigera",
|
||||
"Delete": "Radera",
|
||||
"Deleting...": "Raderar...",
|
||||
"Cancel": "Avbryt",
|
||||
"Save": "Spara",
|
||||
"Jobs Logs": "Jobbloggar",
|
||||
"Updated at": "Uppdaterad",
|
||||
"Refresh": "Uppdatera",
|
||||
"Filter": "Filter",
|
||||
"Success": "Lyckades",
|
||||
"Failed": "Misslyckades",
|
||||
"Log ID": "Logg-ID",
|
||||
"Message": "Meddelande",
|
||||
"Share Peer": "Dela Peer",
|
||||
"Currently the peer is not sharing": "Peer delar inte för tillfället",
|
||||
"Start Sharing": "Starta delning",
|
||||
"Stop Sharing": "Stoppa delning",
|
||||
"Access Restricted": "Begränsad åtkomst",
|
||||
"Restrict Access": "Begränsa åtkomst",
|
||||
"Allow Access": "Tillåt åtkomst",
|
||||
"Add Peers": "Lägg till Peers",
|
||||
"Bulk Add": "Lägg till i bulk",
|
||||
"You can add up to (.*) peers": "Du kan lägga till upp till $1 Peers",
|
||||
"Use your own Private and Public Key": "Använd din egen privata och publika nyckel",
|
||||
"Enter IP Address/CIDR": "Ange IP-adress/CIDR",
|
||||
"IP Address/CIDR": "IP-adress/CIDR",
|
||||
"or": "eller",
|
||||
"Pick Available IP": "Välj tillgänglig IP",
|
||||
"No available IP containing": "Ingen tillgänglig IP som innehåller ",
|
||||
"Add": "Lägg till",
|
||||
"Failed to check available update": "Misslyckades med att kontrollera tillgänglig uppdatering",
|
||||
"Nice to meet you!": "Trevligt att träffas!",
|
||||
"Please fill in the following fields to finish setup": "Fyll i följande fält för att slutföra installationen",
|
||||
"Create an account": "Skapa ett konto",
|
||||
"Enter an username you like": "Skriv in ett användarnamn du gillar",
|
||||
"Enter a password": "Ange ett lösenord",
|
||||
"Confirm password": "Bekräfta lösenord",
|
||||
"Next": "Nästa",
|
||||
"Or you can click the link below:": "Eller så kan du klicka på länken nedan:",
|
||||
"TOTP verified!": "TOTP verifierad!",
|
||||
"I don't need MFA": "Jag behöver inte MFA",
|
||||
"Complete": "Komplett",
|
||||
"(v[0-9.]{1,}) is now available for update!": "Version $1 är nu tillgänglig för uppdatering!",
|
||||
"Current Version:": "Nuvarande version:",
|
||||
"Scan QR Code with the WireGuard App to add peer": "Skanna QR-koden med WireGuard-appen för att lägga till peer",
|
||||
"or click the button below to download the ": "eller klicka på knappen nedan för att ladda ner ",
|
||||
" file": " fil",
|
||||
"FROM ": "FRÅN ",
|
||||
"(.*) is on": "$1 är aktiverad",
|
||||
"(.*) is off": "$1 är avstängd",
|
||||
"Allowed IPs is invalid": "Tillåtna IP-adresser är ogiltiga",
|
||||
"Peer created successfully": "Peer skapad framgångsrikt",
|
||||
"Please fill in all required box": "Vänligen fyll i alla obligatoriska fält",
|
||||
"Please specify amount of peers you want to add": "Ange antalet peers du vill lägga till",
|
||||
"No more available IP can assign": "Det finns inga fler tillgängliga IP-adresser att tilldela",
|
||||
"The maximum number of peers can add is (.*)": "Det maximala antalet peers som kan läggas till är $1",
|
||||
"Generating key pairs by bulk failed": "Generering av nyckelpar i bulk misslyckades",
|
||||
"Failed to add peers in bulk": "Misslyckades med att lägga till peers i bulk",
|
||||
"This peer already exist": "Den här peeren finns redan",
|
||||
"This IP is not available: (.*)": "Den här IP-adressen är inte tillgänglig: $1",
|
||||
"Configuration does not exist": "Konfigurationen finns inte",
|
||||
"Peer does not exist": "Peer finns inte",
|
||||
"Please provide a valid configuration name": "Vänligen ange ett giltigt konfigurationsnamn",
|
||||
"Peer saved": "Peer sparad",
|
||||
"Allowed IPs already taken by another peer": "Tillåtna IP-adresser är redan upptagna av en annan peer",
|
||||
"Endpoint Allowed IPs format is incorrect": "Endpoint tillåtna IP-adresser är i fel format",
|
||||
"DNS format is incorrect": "DNS-formatet är felaktigt",
|
||||
"MTU format is not correct": "MTU-formatet är inte korrekt",
|
||||
"Persistent Keepalive format is not correct": "Formatet för Persistent Keepalive är inte korrekt",
|
||||
"Private key does not match with the public key": "Privat nyckel matchar inte med den offentliga nyckeln",
|
||||
"Update peer failed when updating Pre-Shared Key": "Uppdatering av peer misslyckades vid uppdatering av Pre-Shared Key",
|
||||
"Update peer failed when updating Allowed IPs": "Uppdatering av peer misslyckades vid uppdatering av tillåtna IP-adresser",
|
||||
"Update peer failed when saving the configuration": "Uppdatering av peer misslyckades vid sparande av konfigurationen",
|
||||
"Peer data usage reset successfully": "Peer dataanvändning återställd framgångsrikt",
|
||||
"Peer download started": "Peer nedladdning påbörjad",
|
||||
"Please specify one or more peers": "Vänligen ange en eller flera peers",
|
||||
"Share link failed to create. Reason: (.*)": "Delningslänk skapades inte. Orsak: $1",
|
||||
"Link expire date updated": "Länkens utgångsdatum uppdaterat",
|
||||
"Link expire date failed to update. Reason: (.*)": "Länkens utgångsdatum misslyckades med att uppdateras. Orsak: $1",
|
||||
"Peer job saved": "Peer-jobb sparad",
|
||||
"Please specify job": "Vänligen ange jobb",
|
||||
"Please specify peer and configuration": "Vänligen ange peer och konfiguration",
|
||||
"Peer job deleted": "Peer-jobb raderad",
|
||||
"API Keys function is successfully enabled": "API-nyckelfunktion har aktiverats",
|
||||
"API Keys function is successfully disabled": "API-nyckelfunktion har inaktiverats",
|
||||
"API Keys function is failed to enable": "API-nyckelfunktion misslyckades med att aktiveras",
|
||||
"API Keys function is failed to disable": "API-nyckelfunktion misslyckades med att inaktiveras",
|
||||
"WGDashboard API Keys function is disabled": "WGDashboard API-nyckelfunktion är inaktiverad",
|
||||
"WireGuard configuration path saved": "WireGuard-konfigurationsväg sparad",
|
||||
"API Key deleted": "API-nyckel raderad",
|
||||
"API Key created": "API-nyckel skapad",
|
||||
"Sign in session ended, please sign in again": "Inloggningen har gått ut, vänligen logga in igen",
|
||||
"Please specify an IP Address (v4/v6)": "Vänligen ange en IP-adress (v4/v6)",
|
||||
"Please provide ipAddress and count": "Vänligen ange ipAddress och count",
|
||||
"Please provide ipAddress": "Vänligen ange ipAddress",
|
||||
"Dashboard Language": "Panelens språk",
|
||||
"Dashboard language update failed": "Uppdatering av panelens språk misslyckades",
|
||||
"Peer Remote Endpoint": "Peer fjärrslutpunkt",
|
||||
"New Configuration": "Ny konfiguration",
|
||||
"Configuration Name": "Konfigurationsnamn",
|
||||
"Configuration name is invalid. Possible reasons:": "Konfigurationsnamn är ogiltigt. Möjliga orsaker:",
|
||||
"Configuration name already exist\\.": "Konfigurationsnamnet finns redan.",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Konfigurationsnamnet får endast innehålla 15 små/stora bokstäver, siffror, understreck, likhetstecken, plustecken, punkt och bindestreck.",
|
||||
"Invalid Port": "Ogiltig port",
|
||||
"Save Configuration": "Spara konfiguration",
|
||||
"IP Address/CIDR is invalid": "IP-adress/CIDR är ogiltig",
|
||||
"IP Address": "IP-adress",
|
||||
"Enter IP Address / Hostname": "Ange IP-adress / Värdnamn",
|
||||
"IP Address / Hostname": "IP-adress / Värdnamn",
|
||||
"Dashboard IP Address \\& Listen Port": "Panelens IP-adress & Lyssningsport",
|
||||
"Count": "Antal",
|
||||
"Geolocation": "Geolokalisering",
|
||||
"Is Alive": "Är aktiv",
|
||||
"Average / Min / Max Round Trip Time": "Genomsnitt / Min / Max rundturstid",
|
||||
"Sent / Received / Lost Package": "Skickade / Mottagna / Förlorade paket",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "Manuell omstart av WGDashboard krävs för att tillämpa ändringar på IP-adress och lyssningsport",
|
||||
"Restore Configuration": "Återställ konfiguration",
|
||||
"Step (.*)": "Steg $1",
|
||||
"Select a backup you want to restore": "Välj en säkerhetskopia du vill återställa",
|
||||
"Click to change a backup": "Klicka för att ändra säkerhetskopia",
|
||||
"Selected Backup": "Vald säkerhetskopia",
|
||||
"You don't have any configuration to restore": "Du har ingen konfiguration att återställa",
|
||||
"Help": "Hjälp",
|
||||
"Backup": "Säkerhetskopiering",
|
||||
"([0-9].*) Backups?": "$1 säkerhetskopior?",
|
||||
"Yes": "Ja",
|
||||
"No": "Nej",
|
||||
"Backup not selected": "Ingen säkerhetskopia vald",
|
||||
"Confirm \\& edit restore information": "Bekräfta och redigera återställningsinformation",
|
||||
"(.*) Available IP Address": "$1 tillgängliga IP-adresser",
|
||||
"Database File": "Databasfil",
|
||||
"Contain": "Innehåller",
|
||||
"Restricted Peers?": "Begränsade peers?",
|
||||
"Restore": "Återställ",
|
||||
"Restoring": "Återställer...",
|
||||
"WGDashboard Settings": "WGDashboard inställningar",
|
||||
"Peers Settings": "Peer-inställningar",
|
||||
"WireGuard Configuration Settings": "WireGuard konfigurationsinställningar",
|
||||
"Appearance": "Utseende",
|
||||
"Theme": "Tema",
|
||||
"Language": "Språk",
|
||||
"Account Settings": "Kontoinställningar",
|
||||
"Peer Default Settings": "Peer-standardinställningar",
|
||||
"Toggle When Start Up": "Växla vid start",
|
||||
"Other Settings": "Övriga inställningar",
|
||||
"Select Peers": "Välj peers",
|
||||
"Backup & Restore": "Säkerhetskopiering & Återställning",
|
||||
"Delete Configuration": "Radera konfiguration",
|
||||
"Create Backup": "Skapa säkerhetskopia",
|
||||
"No backup yet, click the button above to create backup\\.": "Ingen säkerhetskopia än, klicka på knappen ovan för att skapa en.",
|
||||
"Are you sure to delete this backup\\?": "Är du säker på att du vill radera denna säkerhetskopia?",
|
||||
"Are you sure to restore this backup?\\": "Är du säker på att du vill återställa denna säkerhetskopia?",
|
||||
"Backup Date": "Säkerhetskopieringsdatum",
|
||||
"File": "Fil",
|
||||
"Are you sure to delete this configuration\\?": "Är du säker på att du vill radera denna konfiguration?",
|
||||
"Once you deleted this configuration\\:": "När du raderat denna konfiguration:",
|
||||
"All connected peers will get disconnected": "Alla anslutna peers kommer att kopplas bort",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Både konfigurationsfilen (.conf) och databastabellen relaterad till denna konfiguration kommer att raderas",
|
||||
"Checking backups...": "Kontrollerar säkerhetskopior...",
|
||||
"This configuration have ([0-9].*) backups": "Denna konfiguration har $1 säkerhetskopior",
|
||||
"This configuration have no backup": "Denna konfiguration har ingen säkerhetskopia",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "Om du är säker, skriv in konfigurationsnamnet nedan och klicka på Radera",
|
||||
"Select All": "Välj alla",
|
||||
"Clear Selection": "Rensa urval",
|
||||
"([0-9].*) Peers?": "$1 Peers?",
|
||||
"Downloading": "Hämtar",
|
||||
"Download Finished": "Nedladdning slutförd",
|
||||
"Done": "Klar",
|
||||
"Are you sure to delete": "Är du säker på att du vill radera",
|
||||
"Are you sure to delete this peer\\?": "Är du säker på att du vill radera denna peer?",
|
||||
"Configuration deleted": "Konfiguration raderad",
|
||||
"Configuration saved": "Konfiguration sparad",
|
||||
"WGDashboard language update failed": "Uppdatering av WGDashboard språk misslyckades",
|
||||
"Configuration restored": "Konfiguration återställd",
|
||||
"Allowed IP already taken by another peer": "Tillåten IP-adress är redan upptagen av en annan peer",
|
||||
"Failed to allow access of peer (.*)": "Misslyckades att ge access till peer (.*)",
|
||||
"Failed to save configuration through WireGuard": "Misslyckades att spara konfiguration genom WireGuard",
|
||||
"Allow access successfully": "Åtkomst beviljad framgångsrikt",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "Raderade $1 peer(s)",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "Raderade framgångsrikt $1 peer(s), misslyckades att radera $2 peer(s)",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "Begränsade $1 peer(s)",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "Begränsade framgångsrikt $1 peer(s), misslyckades att begränsa $2 peer(s)",
|
||||
"Signing In\\.\\.\\.": "Loggar in...",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Flerfaktorsautentisering (MFA)",
|
||||
"Are you sure to delete this API key\\?": "Är du säker på att du vill radera denna API-nyckel?",
|
||||
"When should this API Key expire\\?": "När ska denna API-nyckel löpa ut?",
|
||||
"Creating\\.\\.\\.": "Skapar...",
|
||||
"Turning On\\.\\.\\.": "Aktiverar...",
|
||||
"Turning Off\\.\\.\\.": "Inaktiverar...",
|
||||
"Search Peers\\.\\.\\.": "Sök Peers...",
|
||||
"\\(Required for QR Code and Download\\)": "(Krävs för QR-kod och nedladdning)",
|
||||
"\\(Required\\)": "(Krävs)",
|
||||
"This peer does not have any job yet\\.": "Denna Peer har inga jobb ännu.",
|
||||
"No active job at the moment\\.": "Inga aktiva jobb just nu.",
|
||||
"Sharing\\.\\.\\.": "Delar...",
|
||||
"Stop Sharing\\.\\.\\.": "Stoppar delning...",
|
||||
"Restricting\\.\\.\\.": "Begränsar åtkomst...",
|
||||
"Allowing Access\\.\\.\\.": "Tillåter åtkomst...",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "Nedladdning & QR-kod är inte tillgängligt eftersom ingen privat nyckel är inställd för denna Peer",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Vid bulk-läggning genereras varje Peer's namn automatiskt och tillåtet IP tilldelas nästa tillgängliga IP.",
|
||||
"How many peers you want to add\\?": "Hur många Peers vill du lägga till?",
|
||||
"Adding\\.\\.\\.": "Lägger till...",
|
||||
"\\(At least 8 characters and make sure is strong enough!\\)": "(Minst 8 tecken och se till att det är tillräckligt starkt!)",
|
||||
"Saving\\.\\.\\.": "Sparar...",
|
||||
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Vänligen skanna följande QR-kod för att generera TOTP med din valda autentiserare",
|
||||
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Ange den TOTP som din autentiserare genererade för att verifiera",
|
||||
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Åh nej... Den här länken är antingen utgången eller ogiltig."
|
||||
}
|
||||
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"Welcome to": "Hoş geldiniz",
|
||||
"Username": "Kullanıcı adı",
|
||||
"Password": "Parola",
|
||||
"OTP from your authenticator": "Kimlik doğrulama uygulamanızdan tek kullanımlık parola",
|
||||
"Sign In": "Giriş Yap",
|
||||
"Signing In\\.\\.\\.": "Giriş Yapılıyor...",
|
||||
"Access Remote Server": "Uzak Sunuculara Eriş",
|
||||
"Server": "Sunucu",
|
||||
"Click": "Tıkla",
|
||||
"Pinging...": "Ping atılıyor...",
|
||||
"to add your server": "sunucunu eklemek için",
|
||||
"Server List": "Sunucu Listesi",
|
||||
"Sorry, your username or password is incorrect.": "Üzgünüm, kullanıcı adı veya parola yanlış.",
|
||||
"Home": "Ana sayfa",
|
||||
"Settings": "Ayarlar",
|
||||
"Tools": "Araçlar",
|
||||
"Sign Out": "Çıkış yap",
|
||||
"Checking for update...": "Yeni sürüm için kontrol sağlanıyor...",
|
||||
"You're on the latest version": "En güncel sürümü kullanıyorsunuz",
|
||||
"WireGuard Configurations": "WireGuard Ayarları",
|
||||
"You don't have any WireGuard configurations yet. Please check the configuration folder or change it in Settings. By default the folder is /etc/wireguard.": "Henüz herhangi bir WireGuard ayarınız bulunmuyor. Lütfen yapılandırma dizinini kontrol edin veya Ayarlar kısmından değiştirin. Ön tanımlı ayar dizini /etc/wireguard.",
|
||||
"Configuration": "Ayar",
|
||||
"Configurations": "Ayarlar",
|
||||
"Peers Default Settings": "Ön Tanımlı Eş Ayarları",
|
||||
"Dashboard Theme": "Arayüz Teması",
|
||||
"Light": "Aydınlık",
|
||||
"Dark": "Karanlık",
|
||||
"This will be changed globally, and will be apply to all peer's QR code and configuration file.": "Bu değişiklik global olarak, tüm eşlerin QR kod ve yapılandırma dosyalarına uygulanacak.",
|
||||
"WireGuard Configurations Settings": "WireGuard Yapılandırma Ayarları",
|
||||
"Configurations Directory": "Yapılandırma Dizini",
|
||||
"Remember to remove / at the end of your path. e.g /etc/wireguard": "Dizin adresinin sonundaki /'ı kaldırmayı unutmayın. Örnek; /etc/wireguard",
|
||||
"WGDashboard Account Settings": "WGDashboard Hesap Ayarları",
|
||||
"Current Password": "Geçerli Parola",
|
||||
"New Password": "Yeni Parola",
|
||||
"Repeat New Password": "Yeni Parolayı Tekrarla",
|
||||
"Update Password": "Parolayı Guncelle",
|
||||
"Reset": "Sıfırla",
|
||||
"Setup": "Kurulum",
|
||||
"API Keys": "API Anahtarları",
|
||||
"API Key": "API Anahtarı",
|
||||
"Key": "Anahtar",
|
||||
"Enabled": "Aktif",
|
||||
"Disabled": "Devre Dışı",
|
||||
"No WGDashboard API Key": "WGDashboard API Anahtarı Yok",
|
||||
"Expire At": "Geçerliliğini yitirme tarihi",
|
||||
"Create API Key": "Yeni API anahtarı oluştur",
|
||||
"Never Expire": "Geçerliligi asla yitirme",
|
||||
"Don't think that's a good idea": "Bunun iyi bir fikir oldugunu düşünmüyorum",
|
||||
"Create": "Oluştur",
|
||||
"Status": "Durum",
|
||||
"On": "Açık",
|
||||
"Off": "Kapalı",
|
||||
"Address": "Adres",
|
||||
"Listen Port": "Port",
|
||||
"Public Key": "Genel Anahtar",
|
||||
"Connected Peers": "Bağlı Eşler",
|
||||
"Total Usage": "Toplam Kullanım",
|
||||
"Total Received": "Toplam Gelen",
|
||||
"Total Sent": "Toplam Gönderilen",
|
||||
"Peers Data Usage": "Eşlerin Veri Kullanımı",
|
||||
"Real Time Received Data Usage": "Gerçek Zamanlı Gelen Veri Kullanımı",
|
||||
"Real Time Sent Data Usage": "Gerçek Zamanlı Gönderilen Veri Kullanımı",
|
||||
"Peer": "Eş",
|
||||
"Peers": "Eşler",
|
||||
"Peer Settings": "Eş Ayarları",
|
||||
"Download All": "Hepsini İndir",
|
||||
"Display": "Göster",
|
||||
"Sort By": "Sırala",
|
||||
"Refresh Interval": "Yenileme Sıklığı",
|
||||
"Name": "Ad",
|
||||
"Allowed IPs": "İzin Verilen IP Adresleri",
|
||||
"Restricted": "Kısıtla",
|
||||
"(.*) Seconds": "$1 Saniye",
|
||||
"(.*) Minutes": "$1 Dakika",
|
||||
"Configuration Settings": "Yapılandırma Ayarları",
|
||||
"Peer Jobs": "Eş Görevleri",
|
||||
"Active Jobs": "Aktif Eşler",
|
||||
"All Active Jobs": "Aktif Tüm Görevler",
|
||||
"Logs": "Loglar",
|
||||
"Private Key": "Özel Anahtar",
|
||||
"Endpoint Allowed IPs": "Endpointe Erişim İçin İzin Verilen IP Adresleri",
|
||||
"DNS": "DNS",
|
||||
"Optional Settings": "İsteğe Bağlı Ayarlar",
|
||||
"Pre-Shared Key": "Ön Paylaşımlı Anahtar",
|
||||
"MTU": "MTU",
|
||||
"Persistent Keepalive": "Sürekli Oturum süresi",
|
||||
"Reset Data Usage": "Veri Kullanımını Sıfırla",
|
||||
"Total": "Toplam",
|
||||
"Sent": "Gönderilen",
|
||||
"Received": "Gelen",
|
||||
"Revert": "Geri al",
|
||||
"Save Peer": "Eşi Kaydet",
|
||||
"QR Code": "QR Kod",
|
||||
"Schedule Jobs": "Zamanlanmış Görevler",
|
||||
"Job": "Görev",
|
||||
"Job ID": "Görev ID",
|
||||
"Unsaved Job": "Kaydedilmemiş Görev",
|
||||
"if": "eğer",
|
||||
"is": "",
|
||||
"then": "öyleyse",
|
||||
"larger than": "daha büyük",
|
||||
"Date": "Tarih",
|
||||
"Restrict Peer": "Eşi Kısıtla",
|
||||
"Delete Peer": "Eşi Sil",
|
||||
"Edit": "Düzenle",
|
||||
"Delete": "Sil",
|
||||
"Deleting...": "Siliniyor...",
|
||||
"Cancel": "İptal Et",
|
||||
"Save": "Kaydet",
|
||||
"Jobs Logs": "Görev Logları",
|
||||
"Updated at": "tarihinde güncellenmiş",
|
||||
"Refresh": "Yenile",
|
||||
"Filter": "Filtre",
|
||||
"Success": "Başarılı",
|
||||
"Failed": "Başarısız",
|
||||
"Log ID": "Log ID",
|
||||
"Message": "Mesaj",
|
||||
"Share Peer": "Eşi Paylaş",
|
||||
"Currently the peer is not sharing": "Eş şu an paylaşım yapmıyor",
|
||||
"Start Sharing": "Paylaşımı Başlat",
|
||||
"Stop Sharing": "Paylaşımı Durdur",
|
||||
"Access Restricted": "Erişim Kısıtlandı",
|
||||
"Restrict Access": "Erişimi Kısıtla",
|
||||
"Allow Access": "Erişim Ver",
|
||||
"Add Peers": "Eş Ekle",
|
||||
"Bulk Add": "Toplu Ekle",
|
||||
"You can add up to (.*) peers": "$1 adete kadar eş ekleyebilirsiniz",
|
||||
"Use your own Private and Public Key": "Kendi özel ve genel anahtarınızı kullanın",
|
||||
"Enter IP Address/CIDR": "IP Adresi/CIDR girin",
|
||||
"IP Address/CIDR": "IP Adresi/CIDR",
|
||||
"or": "veya",
|
||||
"Pick Available IP": "Mevcut IP Adresi Seç",
|
||||
"No available IP containing": "Mevcut IP Adresi bulunmuyor",
|
||||
"Add": "Ekle",
|
||||
"Failed to check available update": "Mevcut güncelleştirme kontrol edilemedi",
|
||||
"Nice to meet you!": "Tanıştığıma memnun oldum!",
|
||||
"Please fill in the following fields to finish setup": "Lütfen kurulumu bitirmek için şu alanları doldurun",
|
||||
"Create an account": "Hesap oluştur",
|
||||
"Enter an username you like": "Bir kullanıcı adı girin",
|
||||
"Enter a password": "Parola girin",
|
||||
"\\(At least 8 characters and make sure is strong enough!\\)": "(En az 8 karakter girin ve güçlü bir parola seçtiğinizden emin olun!)",
|
||||
"Confirm password": "Parolayı doğrula",
|
||||
"Next": "Sonraki",
|
||||
"Saving\\.\\.\\.": "Kaydediliyor...",
|
||||
"1\\. Please scan the following QR Code to generate TOTP with your choice of authenticator": "1. Lütfen zaman tabanlı parola oluşturmak için aşağıdaki QR kodunu kimlik doğrulama uygulamanız ile tarayın",
|
||||
"Or you can click the link below:": "Veya aşağıdaki linkte tıklayabilirsiniz:",
|
||||
"2\\. Enter the TOTP generated by your authenticator to verify": "2. Doğrulamak için kimlik doğrulama uygulaması tarafından üretilen zaman tabanlı parolayı girin",
|
||||
"TOTP verified!": "Zaman tabanlı parola doğrulandı!",
|
||||
"I don't need MFA": "Çok adımlı doğrulamaya ihtiyacım yok",
|
||||
"Complete": "Tamamla",
|
||||
"(v[0-9.]{1,}) is now available for update!": "Sürüm $1 güncelleme için hazır!",
|
||||
"Current Version:": "Geçerli Sürüm:",
|
||||
"Oh no\\.\\.\\. This link is either expired or invalid\\.": "Tüh... Link geçerliliğini yitirmiş veya geçersiz link.",
|
||||
"Scan QR Code with the WireGuard App to add peer": "Eşi eklemek için WireGuard uygulaması ile QR kodu okutun",
|
||||
"or click the button below to download the ": "veya indirmek için aşağıdaki butona tıklayın",
|
||||
" file": " dosyası",
|
||||
"FROM ": "Kimden ",
|
||||
"(.*) is on": "$1 açık",
|
||||
"(.*) is off": "$1 kapalı",
|
||||
"Allowed IPs is invalid": "İzin Verilen IP Adresleri geçersiz",
|
||||
"Peer created successfully": "Eş başarıyla oluşturuldu",
|
||||
"Please fill in all required box": "Lütfen zorunlu tüm alanları doldurun",
|
||||
"Please specify amount of peers you want to add": "Lütfen eklemek istediğiniz eş adetini belirtin",
|
||||
"No more available IP can assign": "Atanabilecek daha fazla mevcut IP adresi yok",
|
||||
"The maximum number of peers can add is (.*)": "En fazla $1 adet eş ekleyebilirsiniz",
|
||||
"Generating key pairs by bulk failed": "Toplu anahtar oluşturma işlemi başarısız oldu",
|
||||
"Failed to add peers in bulk": "Toplu eş ekleme işlemi başarısız oldu",
|
||||
"This peer already exist": "Bu eş zaten mevcut",
|
||||
"This IP is not available: (.*)": "$1 adresi mevcut değil",
|
||||
"Configuration does not exist": "Yapılandırma mevcut değil",
|
||||
"Peer does not exist": "Eş mevcut değil",
|
||||
"Please provide a valid configuration name": "Lütfen geçerli bir yapılandırma ismi girin",
|
||||
"Peer saved": "Eş kaydedildi",
|
||||
"Allowed IPs already taken by another peer": "İzin Verilen IP Adresleri başka bir eş tarafından zaten kullanılıyor",
|
||||
"Endpoint Allowed IPs format is incorrect": "Endpoint için İzin Verilen IP Adreslerinin formatı yanlış",
|
||||
"DNS format is incorrect": "DNS formatı yanlış",
|
||||
"MTU format is not correct": "MTU formatı yanlış",
|
||||
"Persistent Keepalive format is not correct": "Sürekli Oturum formatı yanlış",
|
||||
"Private key does not match with the public key": "Özel anahtar genel anahtar ile eşleşmiyor",
|
||||
"Update peer failed when updating Pre-Shared Key": "Eş güncellemesi Ön Tanımlı Anahtar güncellenirken başarısız oldu",
|
||||
"Update peer failed when updating Allowed IPs": "Eş güncellemesi İzin Verilen IP Adresleri güncellenirken başarısız oldu",
|
||||
"Update peer failed when saving the configuration": "Eş güncellemesi yapılandırma kaydedilirken başarısız oldu",
|
||||
"Peer data usage reset successfully": "Eşin veri kullanım istatistiği başarıyla sıfırlandı",
|
||||
"Peer download started": "Eş indirmesi başladı",
|
||||
"Please specify one or more peers": "Lütfen bir veya daha fazla eş belirtin",
|
||||
"Share link failed to create. Reason: (.*)": "Link paylaşımı oluşturulamadı. Sebebi: $1",
|
||||
"Link expire date updated": "Link geçerlilik tarihi güncellendi",
|
||||
"Link expire date failed to update. Reason: (.*)": "Link gerçerliliği güncellenemedi. Sebebi: $1",
|
||||
"Peer job saved": "Eş görevi kaydedildi",
|
||||
"Please specify job": "Lütfen görev belirtin",
|
||||
"Please specify peer and configuration": "Lütfen eş ve yapılandırma belirtin",
|
||||
"Peer job deleted": "Eş görevi silindi",
|
||||
"API Keys function is successfully enabled": "API Anahtar işlevi başarıyla aktifleştirildi",
|
||||
"API Keys function is successfully disabled": "API Anahtar işlevi başarıyle devre dışı bırakıldı",
|
||||
"API Keys function is failed to enable": "API Anahtar işlevi aktifleştirilemedi",
|
||||
"API Keys function is failed to disable": "API Anahtar işlevi devre dışı bırakılamadı",
|
||||
"WGDashboard API Keys function is disabled": "WGDashboard API Anahtar işlevi devre dışı bırakılamadı",
|
||||
"WireGuard configuration path saved": "WireGuard yapılandırma yolu kaydedildi",
|
||||
"API Key deleted": "API Anahtarı silindi",
|
||||
"API Key created": "API Anahtarı oluşturuldu",
|
||||
"Sign in session ended, please sign in again": "Oturum süresi doldu, lütfen tekrar giriş yapın",
|
||||
"Please specify an IP Address (v4/v6)": "Lütfen IP Adresi belirtin (v4/v6)",
|
||||
"Please provide ipAddress and count": "Lütfen IP Adresı ve sayısını belirtin",
|
||||
"Please provide ipAddress": "Lütfen IP Adresi belirtin",
|
||||
"Dashboard Language": "Arayüz Dili",
|
||||
"Dashboard language update failed": "Arayüz dil değişikliği başarısız oldu",
|
||||
"Peer Remote Endpoint": "Uzak eş endpointi",
|
||||
"New Configuration": "Yeni Yapılandırma",
|
||||
"Configuration Name": "Yapılandırma Adı",
|
||||
"Configuration name is invalid. Possible reasons:": "Yapılandırma ismi geçersiz. Muhtemel sebepler:",
|
||||
"Invalid Port": "Geçersiz Port",
|
||||
"Save Configuration": "Yapılandırmayı Kaydet",
|
||||
"IP Address/CIDR is invalid": "IP Adresi/CIDR geçersiz",
|
||||
"IP Address": "IP Adresi",
|
||||
"Enter IP Address / Hostname": "IP Adresi/Hostname girin",
|
||||
"IP Address / Hostname": "IP Adresi/Hostname",
|
||||
"Count": "Sayı",
|
||||
"Geolocation": "Coğrafi Konum",
|
||||
"Is Alive": "Erişilebilir mi",
|
||||
"Average / Min / Max Round Trip Time": "Ortalama / Min / Maks RTT",
|
||||
"Sent / Received / Lost Package": "Gönderilen / Alınan / Kayıp Paket",
|
||||
"Manual restart of WGDashboard is needed to apply changes on IP Address and Listen Port": "IP Adresi ve Port değişikliklerinin uygulanması için WGDashboard'un elle yeniden başlatılması gerekiyor",
|
||||
"Restore Configuration": "Yapılandırmayı Geri Yükle",
|
||||
"Step (.*)": "$1. Adım",
|
||||
"Select a backup you want to restore": "Geri yüklemek istediğiniz yedeği seçin",
|
||||
"Click to change a backup": "Yedek seçmek için tıklayın",
|
||||
"Selected Backup": "Seçilen Yedek",
|
||||
"You don't have any configuration to restore": "Geri yüklemek için herhangi bir yapılandırmanız yok",
|
||||
"Help": "Yardım",
|
||||
"Backup": "Yedek",
|
||||
"([0-9].*) Backups?": "$1 Yedek?",
|
||||
"Yes": "Evet",
|
||||
"No": "Hayır",
|
||||
"Backup not selected": "Yedek seçilmedi",
|
||||
"(.*) Available IP Address": "$1 adet mevcut IP Adresi",
|
||||
"Database File": "Veritabanı Dosyası",
|
||||
"Contain": "İçeriyor",
|
||||
"Restricted Peers?": "Kısıtlanmış Eşler?",
|
||||
"Restore": "Geri Yükle",
|
||||
"Restoring": "Geri Yükleniyor...",
|
||||
"WGDashboard Settings": "WGDashboard Ayarları",
|
||||
"Peers Settings": "Eş Ayarları",
|
||||
"WireGuard Configuration Settings": "WireGuard Yapılandırma Ayarları",
|
||||
"Appearance": "Görünüm",
|
||||
"Theme": "Tema",
|
||||
"Language": "Dil",
|
||||
"Account Settings": "Hesap Ayarları",
|
||||
"Peer Default Settings": "Ön Tanımlı Eş Ayarları",
|
||||
"Toggle When Start Up": "Açılışta Ayarla",
|
||||
"Other Settings": "Diğer Ayarlar",
|
||||
"Select Peers": "Eş Seç",
|
||||
"Backup & Restore": "Yedekleme ve Geri Yükleme",
|
||||
"Delete Configuration": "Yapılandırmayı Sil",
|
||||
"Create Backup": "Yedek Oluştur",
|
||||
"Backup Date": "Yedek Tarihi",
|
||||
"File": "Dosya",
|
||||
"All connected peers will get disconnected": "Bağlı tüm eşlerin bağlantısı kopacak",
|
||||
"Checking backups...": "Yedekler kontrol ediliyor...",
|
||||
"This configuration have ([0-9].*) backups": "Bu yapılandırmanın $1 adet yedeği bulunuyor",
|
||||
"This configuration have no backup": "Bu yapılandırmanın hiç yedeği bulunmuyor",
|
||||
"If you're sure, please type in the configuration name below and click Delete": "Eğer eminseniz aşağıya yapılandırma ismini girin ve Sil'e tıklayın",
|
||||
"Select All": "Hepsini Seç",
|
||||
"Clear Selection": "Seçimi Kaldır",
|
||||
"([0-9].*) Peers?": "$1 Eş?",
|
||||
"Download Finished": "İndirme Tamamlandı",
|
||||
"Done": "Bitti",
|
||||
"Are you sure to delete": "Silmek istediğinize emin misiniz?",
|
||||
"Configuration deleted": "Yapılandırma silindi",
|
||||
"Configuration saved": "Yapılandırma kaydedildi",
|
||||
"WGDashboard language update failed": "WGDashboard ismi güncellenemedi",
|
||||
"Configuration restored": "Yapılandırma geri yüklendi",
|
||||
"Allowed IP already taken by another peer": "İzin verilen IP başka bir eş tarafından kullanılıyor",
|
||||
"Failed to allow access of peer (.*)": "$1 eşe erişim izni verilemedi",
|
||||
"Failed to save configuration through WireGuard": "WireGuard üzerinden yapılandırma kaydedilemedi",
|
||||
"Allow access successfully": "Erişim izni başarıyla verildi",
|
||||
"Multi-Factor Authentication \\(MFA\\)": "Çok Adımlı Dogrulama (MFA)",
|
||||
"Are you sure to delete this API key\\?": "Bu API anahtarını silmek istediğine emin misiniz?",
|
||||
"When should this API Key expire\\?": "Bu API anahtarı ne zamana kadar geçerli olmalı?",
|
||||
"Creating\\.\\.\\.": "Oluşturuluyor...",
|
||||
"Turning On\\.\\.\\.": "Açılıyor...",
|
||||
"Turning Off\\.\\.\\.": "Kapatılıyor...",
|
||||
"Search Peers\\.\\.\\.": "Eşleri Ara...",
|
||||
"\\(Required for QR Code and Download\\)": "(QR Kodu ve İndirme için zorunlu)",
|
||||
"\\(Required\\)": "(Zorunlu)",
|
||||
"This peer does not have any job yet\\.": "Bu eşe ait henüz herhangi bir görev yok.",
|
||||
"No active job at the moment\\.": "Şu an herhangi bir aktif görev yok.",
|
||||
"Sharing\\.\\.\\.": "Paylaşılıyor...",
|
||||
"Stop Sharing\\.\\.\\.": "Paylaşım Durduruluyor...",
|
||||
"Restricting\\.\\.\\.": "Erişim Kısıtlanıyor...",
|
||||
"Allowing Access\\.\\.\\.": "Erişim Veriliyor...",
|
||||
"Download \\& QR Code is not available due to no private key set for this peer": "Bu eş için özel anahtar tanımlandığı için İndirme ve QR Kod mevcut değil",
|
||||
"By adding peers by bulk, each peer's name will be auto generated, and Allowed IP will be assign to the next available IP\\.": "Toplu ekleme yaparsanız eşlerin isimleri otomatik olarak oluşturulacak ve İzin Verilen IP adresi mevcut olan bir sonraki IP olarak tanımlanacak.",
|
||||
"How many peers you want to add\\?": "Kaç adet eş eklemek istiyorsunuz?",
|
||||
"Adding\\.\\.\\.": "Ekleniyor...",
|
||||
"Configuration name already exist\\.": "Yapılandırma ismi zaten mevcut.",
|
||||
"Configuration name can only contain 15 lower/uppercase alphabet, numbers, underscore, equal sign, plus sign, period and hyphen\\.": "Yapılandırma ismi 15 karakterden oluşur; büyük/küçük harf, sayı, alt çizgi, eşittir, artı, nokta ve tire içerebilir.",
|
||||
"Dashboard IP Address \\& Listen Port": "",
|
||||
"Confirm \\& edit restore information": "Geri yükleme bilgisini doğrula ve düzelt",
|
||||
"No backup yet, click the button above to create backup\\.": "Henüz herhangi bir yedek bulunmuyor, oluşturmak için üstteki butona tıklayın.",
|
||||
"Are you sure to delete this backup\\?": "Bu yedeği silmek istediğinize emin misiniz?",
|
||||
"Are you sure to restore this backup?\\": "Bu yedeği geri yüklemek istediğinize emin misiniz?",
|
||||
"Are you sure to delete this configuration\\?": "Bu yapılandırmayı silmek istediğinize emin misiniz?",
|
||||
"Once you deleted this configuration\\:": "Bu yapılandırmayı sildiğiniz an:",
|
||||
"Both configuration file \\(\\.conf\\) and database table related to this configuration will get deleted": "Hem yapılandırma dosyası (.conf) hem de bu yapılandırmanın veritabanı tablosu silinecek",
|
||||
"Downloading": "İndiriliyor",
|
||||
"Are you sure to delete this peer\\?": "Bu eşi silmek istediğinize emin misiniz?",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\)": "$1 eş silindi",
|
||||
"Deleted ([0-9]{1,}) peer\\(s\\) successfully. Failed to delete ([0-9]{1,}) peer\\(s\\)": "$1 eş başarıyla silindi. $2 eş silinemedi",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı",
|
||||
"Restricted ([0-9]{1,}) peer\\(s\\) successfully. Failed to restrict ([0-9]{1,}) peer\\(s\\)": "$1 eşin erişimi kısıtlandı. $2 eşin erişimi kısıtlanamadı"
|
||||
}
|
||||
@@ -236,6 +236,7 @@
|
||||
"IP Address": "IP-адреса",
|
||||
"Enter IP Address / Hostname": "Введіть IP-адресу / ім’я хоста",
|
||||
"IP Address / Hostname": "IP-адресу / ім’я хоста",
|
||||
"Dashboard IP Address \\& Listen Port": "",
|
||||
"Count": "Граф",
|
||||
"Geolocation": "",
|
||||
"Is Alive": "",
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
import json
|
||||
active_languages = json.loads(open("active_languages.json", "r").read())
|
||||
language_template = json.loads(open("language_template.json", "r").read())
|
||||
|
||||
if __name__ == "__main__":
|
||||
welcome = "WGDashboard Locale File Verification [by @donaldzou]"
|
||||
print("="*(len(welcome) + 4))
|
||||
print(f"| {welcome} |")
|
||||
print("="*(len(welcome) + 4))
|
||||
print()
|
||||
print("Active Languages\n")
|
||||
status = False
|
||||
|
||||
for language in active_languages:
|
||||
print(f"{language['lang_name']} | {language['lang_id']}")
|
||||
|
||||
lang_ids = list(map(lambda x: x['lang_id'], active_languages))
|
||||
print()
|
||||
|
||||
lang_id = ""
|
||||
|
||||
while not status:
|
||||
lang_id = input("Please enter the language ID to verify: ")
|
||||
if lang_id not in lang_ids:
|
||||
print(f'{lang_id} is not a valid language ID')
|
||||
elif lang_id == 'en':
|
||||
print(f'{lang_id} is not a editable language')
|
||||
else:
|
||||
status = True
|
||||
|
||||
|
||||
with open(f"{lang_id}.json", "r") as f:
|
||||
lang_file = json.load(f)
|
||||
|
||||
# Identify missing and deprecated translations
|
||||
missing_translation = [
|
||||
key for key in language_template
|
||||
if key not in lang_file or not lang_file[key].strip()
|
||||
]
|
||||
|
||||
deprecated_translation = [
|
||||
key for key in lang_file
|
||||
if key not in language_template
|
||||
]
|
||||
|
||||
with open(f"{lang_id}.json", "w") as f:
|
||||
new_lang_file = dict(lang_file)
|
||||
for key in missing_translation:
|
||||
new_lang_file[key] = ""
|
||||
|
||||
for key in deprecated_translation:
|
||||
new_lang_file.pop(key)
|
||||
|
||||
f.write(json.dumps(new_lang_file, ensure_ascii=False, indent='\t'))
|
||||
|
||||
|
||||
print()
|
||||
# Print missing translations
|
||||
print(f"\t[Missing Translations] {len(missing_translation)} translation{'s' if len(missing_translation) > 1 else ''}")
|
||||
# Print deprecated translations
|
||||
print(f"\t[Deprecated Translations] {len(deprecated_translation)} translation{'s' if len(deprecated_translation) > 1 else ''}")
|
||||
print(f"\t[Note] All missing translations are added into {lang_id}.json, all deprecated translations are removed from {lang_id}.json")
|
||||
@@ -298,7 +298,7 @@
|
||||
"Are you sure to delete": "您确定要删除",
|
||||
"Are you sure to delete this peer\\?": "您确定要删除此端点吗?",
|
||||
"Configuration deleted": "配置删除成功",
|
||||
"Configuration saved": "",
|
||||
"Configuration saved": "配置保存成功",
|
||||
"WGDashboard language update failed": "WGDashboard 语言更新失败",
|
||||
"Configuration restored": "配置恢复成功",
|
||||
"Allowed IP already taken by another peer": "允许的 IP 地址已经被别的端点占用",
|
||||
|
||||
@@ -298,7 +298,7 @@
|
||||
"Are you sure to delete": "您確定要刪除",
|
||||
"Are you sure to delete this peer\\?": "您確定要刪除此端點嗎?",
|
||||
"Configuration deleted": "配置刪除成功",
|
||||
"Configuration saved": "",
|
||||
"Configuration saved": "配置保存成功",
|
||||
"WGDashboard language update failed": "WGDashboard 語言更新失敗",
|
||||
"Configuration restored": "配置恢復成功",
|
||||
"Allowed IP already taken by another peer": "允許的 IP 地址已經被別的端點佔用",
|
||||
|
||||
Reference in New Issue
Block a user