aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile24
-rw-r--r--README.md8
-rw-r--r--build.bat19
-rw-r--r--go-patches/highres-timer.patch395
-rw-r--r--go-patches/no-ctrlc-handler.patch184
-rw-r--r--go.mod8
-rw-r--r--go.sum9
-rw-r--r--gotext.go39
-rw-r--r--installer/build.bat2
-rw-r--r--locales/de/messages.gotext.json6
-rw-r--r--locales/fa/messages.gotext.json863
-rw-r--r--locales/fr/messages.gotext.json6
-rw-r--r--locales/id/messages.gotext.json874
-rw-r--r--locales/it/messages.gotext.json6
-rw-r--r--locales/ja/messages.gotext.json6
-rw-r--r--locales/pl/messages.gotext.json23
-rw-r--r--locales/ro/messages.gotext.json1821
-rw-r--r--locales/ru/messages.gotext.json10
-rw-r--r--locales/sk/messages.gotext.json669
-rw-r--r--locales/sl/messages.gotext.json6
-rw-r--r--locales/vi/messages.gotext.json382
-rw-r--r--locales/zh-CN/messages.gotext.json202
-rw-r--r--locales/zh-TW/messages.gotext.json1761
-rw-r--r--main.go13
-rw-r--r--quickinstall.bat2
-rw-r--r--resources.rc11
-rw-r--r--tunnel/firewall/types_windows_32.go (renamed from tunnel/firewall/types_windows_386.go)2
-rw-r--r--tunnel/firewall/types_windows_64.go (renamed from tunnel/firewall/types_windows_amd64.go)2
-rw-r--r--tunnel/winipcfg/netsh.go3
-rw-r--r--tunnel/winipcfg/types_32.go (renamed from tunnel/winipcfg/types_386.go)2
-rw-r--r--tunnel/winipcfg/types_64.go (renamed from tunnel/winipcfg/types_amd64.go)2
-rw-r--r--tunnel/winipcfg/types_test_32.go (renamed from tunnel/winipcfg/types_test_386.go)2
-rw-r--r--tunnel/winipcfg/types_test_64.go (renamed from tunnel/winipcfg/types_test_amd64.go)2
-rw-r--r--ui/aboutdialog.go2
-rw-r--r--ui/syntax/syntaxedit.go51
-rw-r--r--ui/syntax/syntaxedit.h6
-rw-r--r--ui/syntax/syntaxedit_cgo.go58
-rw-r--r--ui/syntax/syntaxedit_default.go43
-rw-r--r--updater/versions.go2
-rw-r--r--version/useragent.go12
-rw-r--r--version/version.h2
-rw-r--r--zgotext.go2142
43 files changed, 8723 insertions, 960 deletions
diff --git a/.gitignore b/.gitignore
index 3883ded0..089dcfaa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
# Build Output
/x86
/amd64
+/arm
# Misc
/locales/*/out.gotext.json
diff --git a/Makefile b/Makefile
index 446ddd34..923a840e 100644
--- a/Makefile
+++ b/Makefile
@@ -5,14 +5,21 @@ export CGO_LDFLAGS := -Wl,--dynamicbase -Wl,--nxcompat -Wl,--export-all-symbols
export GOOS := windows
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
-SOURCE_FILES := $(call rwildcard,,*.go *.c *.h) go.mod go.sum
-RESOURCE_FILES := resources.rc version/version.h manifest.xml $(patsubst %.svg,%.ico,$(wildcard ui/icon/*.svg))
+SOURCE_FILES := $(call rwildcard,,*.go *.c *.h) .deps/prepared go.mod go.sum
+RESOURCE_FILES := resources.rc manifest.xml $(patsubst %.svg,%.ico,$(wildcard ui/icon/*.svg))
DEPLOYMENT_HOST ?= winvm
DEPLOYMENT_PATH ?= Desktop
all: amd64/wireguard.exe x86/wireguard.exe
+.deps/prepared: $(wildcard go-patches/*.patch)
+ rm -rf .deps && mkdir -p .deps
+ if ! rsync --exclude=pkg/obj/go-build/trim.txt -aqL $$(go env GOROOT)/ .deps/goroot; then chmod -R +w .deps/goroot; exit 1; fi
+ chmod -R +w .deps/goroot
+ cat $^ | patch -f -N -r- -p1 -d .deps/goroot
+ touch $@
+
%.ico: %.svg
convert -background none $< -define icon:auto-resize="256,192,128,96,64,48,32,24,16" $@
@@ -26,12 +33,12 @@ amd64/wireguard.exe: export CC := x86_64-w64-mingw32-gcc
amd64/wireguard.exe: export GOARCH := amd64
amd64/wireguard.exe: CGO_LDFLAGS += -Wl,--high-entropy-va
amd64/wireguard.exe: resources_amd64.syso $(SOURCE_FILES)
- go build $(GOFLAGS) -o $@
+ GOROOT="$(CURDIR)/.deps/goroot" go build $(GOFLAGS) -o $@
x86/wireguard.exe: export CC := i686-w64-mingw32-gcc
x86/wireguard.exe: export GOARCH := 386
x86/wireguard.exe: resources_386.syso $(SOURCE_FILES)
- go build $(GOFLAGS) -o $@
+ GOROOT="$(CURDIR)/.deps/goroot" go build $(GOFLAGS) -o $@
remaster: export CC := x86_64-w64-mingw32-gcc
remaster: export GOARCH := amd64
@@ -51,11 +58,18 @@ generate: export CGO_ENABLED := 0
generate:
go generate ./...
+crowdin:
+ find locales -maxdepth 1 -mindepth 1 -type d \! -name en -exec rm -rf {} +
+ @[[ -n $$CROWDIN_API_KEY ]] || read -r -p "Enter Crowdin API key: " CROWDIN_API_KEY && \
+ curl -Lo - https://api.crowdin.com/api/project/WireGuard/download/all.zip?key=$$CROWDIN_API_KEY | bsdtar -C locales -x -f - --strip-components 2 wireguard-windows
+ find locales -name messages.gotext.json -exec bash -c '[[ $$(jq ".messages | length" {}) -ne 0 ]] || rm -rf "$$(dirname {})"' \;
+ @$(MAKE) --no-print-directory generate
+
deploy: amd64/wireguard.exe
-ssh $(DEPLOYMENT_HOST) -- 'taskkill /im wireguard.exe /f'
scp $< $(DEPLOYMENT_HOST):$(DEPLOYMENT_PATH)
clean:
- rm -rf *.syso ui/icon/*.ico x86/ amd64/
+ rm -rf *.syso ui/icon/*.ico x86/ amd64/ .deps
.PHONY: deploy clean fmt remaster generate all
diff --git a/README.md b/README.md
index 6bda7f1e..33cc6fa5 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,11 @@ To translate WireGuard UI to your language:
1. Upgrade `resources.rc` accordingly. Follow the pattern.
-2. Add your language ID to the `//go:generate ... -lang=en,<langID>...` line in `gotext.go`.
+2. Make a new directory in `locales\` containing the language ID:
+
+ ```
+ C:\Projects\wireguard-windows> mkdir locales\<langID>
+ ```
3. Configure and run `build` to prepare initial `locales\<langID>\messages.gotext.json` file:
@@ -40,7 +44,7 @@ To translate WireGuard UI to your language:
C:\Projects\wireguard-windows> copy locales\<langID>\out.gotext.json locales\<langID>\messages.gotext.json
```
-4. Translate `locales\<langID>\messages.gotext.json`. See other language message files how to translate messages and how to tackle plural.
+4. Translate `locales\<langID>\messages.gotext.json`. See other language message files how to translate messages and how to tackle plural. For this step, the project is currently using [CrowdIn](https://crowdin.com/translate/WireGuard); please make sure your translations make it there in order to be added here.
5. Run `build` from the step 3 again, and test.
diff --git a/build.bat b/build.bat
index bb8c66f4..9c4d222b 100644
--- a/build.bat
+++ b/build.bat
@@ -13,16 +13,20 @@ if exist .deps\prepared goto :render
rmdir /s /q .deps 2> NUL
mkdir .deps || goto :error
cd .deps || goto :error
- call :download go.zip https://dl.google.com/go/go1.14.4.windows-amd64.zip e04f591219b18e7cabe73eb79c90405b5c7a5baee61377670d7a48429c5c978d || goto :error
+ call :download go.zip https://dl.google.com/go/go1.15.2.windows-amd64.zip e72782cc6de233188c75b06849368826eaa1b8bd9e1cd766db9466a12b7138ca || goto :error
rem Mirror of https://musl.cc/i686-w64-mingw32-native.zip
- call :download mingw-x86.zip https://download.wireguard.com/windows-toolchain/distfiles/i686-w64-mingw32-native-20190903.zip dfb297cc86c4a4c12eedaeb0a89dff2e1cfa9afacfb9c32690dd23ca7726560a || goto :error
+ call :download mingw-x86.zip https://download.wireguard.com/windows-toolchain/distfiles/i686-w64-mingw32-native-20200907.zip c972c00993727ac9bff83c799f4df65662adb95bc871fa30cfa8857e744a7fbd || goto :error
rem Mirror of https://musl.cc/x86_64-w64-mingw32-native.zip
- call :download mingw-amd64.zip https://download.wireguard.com/windows-toolchain/distfiles/x86_64-w64-mingw32-native-20190903.zip 15cf5596ece5394be0d71c22f586ef252e0390689ef6526f990a262f772aecf8 || goto :error
+ call :download mingw-amd64.zip https://download.wireguard.com/windows-toolchain/distfiles/x86_64-w64-mingw32-native-20200907.zip e34fbacbd25b007a8074fc96f7e08f886241e0473a055987ee57483c37567aa5 || goto :error
rem Mirror of https://imagemagick.org/download/binaries/ImageMagick-7.0.8-42-portable-Q16-x64.zip
call :download imagemagick.zip https://download.wireguard.com/windows-toolchain/distfiles/ImageMagick-7.0.8-42-portable-Q16-x64.zip 584e069f56456ce7dde40220948ff9568ac810688c892c5dfb7f6db902aa05aa "convert.exe colors.xml delegates.xml" || goto :error
rem Mirror of https://sourceforge.net/projects/ezwinports/files/make-4.2.1-without-guile-w32-bin.zip
call :download make.zip https://download.wireguard.com/windows-toolchain/distfiles/make-4.2.1-without-guile-w32-bin.zip 30641be9602712be76212b99df7209f4f8f518ba764cf564262bc9d6e4047cc7 "--strip-components 1 bin" || goto :error
call :download wireguard-tools.zip https://git.zx2c4.com/wireguard-tools/snapshot/wireguard-tools-1.0.20200319.zip f0f186924b67696e5dac6020270b0ac27fd7d96b4976605d1cded405d27b2f54 "--exclude wg-quick --strip-components 1" || goto :error
+ rem Mirror of https://sourceforge.net/projects/gnuwin32/files/patch/2.5.9-7/patch-2.5.9-7-bin.zip with fixed manifest
+ call :download patch.zip https://download.wireguard.com/windows-toolchain/distfiles/patch-2.5.9-7-bin-fixed-manifest.zip 25977006ca9713f2662a5d0a2ed3a5a138225b8be3757035bd7da9dcf985d0a1 "--strip-components 1 bin" || goto :error
+ echo [+] Patching go
+ for %%a in ("..\go-patches\*.patch") do .\patch.exe -f -N -r- -d go -p1 --binary < "%%a" || goto :error
copy /y NUL prepared > NUL || goto :error
cd .. || goto :error
@@ -45,6 +49,9 @@ if exist .deps\prepared goto :render
call :build_plat x86 i686 386 || goto :error
set CGO_LDFLAGS=%CGO_LDFLAGS% -Wl,--high-entropy-va
call :build_plat amd64 x86_64 amd64 || goto :error
+ set CGO_ENABLED=0
+ set GOARM=7
+ call :build_plat arm arm arm || goto :error
:sign
if exist .\sign.bat call .\sign.bat
@@ -76,8 +83,10 @@ if exist .deps\prepared goto :render
echo [+] Assembling resources %1
windres -i resources.rc -o resources.syso -O coff || exit /b %errorlevel%
echo [+] Building program %1
- go build -ldflags="-H windowsgui -s -w" -tags walk_use_cgo -trimpath -v -o "%~1\wireguard.exe" || exit /b 1
- if not exist "%~1\wg.exe" (
+ set GO_BUILD_FLAGS=-ldflags="-H windowsgui -s -w" -trimpath -v
+ if "%CGO_ENABLED%"=="1" set GO_BUILD_FLAGS=%GO_BUILD_FLAGS% -tags walk_use_cgo
+ go build %GO_BUILD_FLAGS% -o "%~1\wireguard.exe" || exit /b 1
+ if "%CGO_ENABLED%"=="1" if not exist "%~1\wg.exe" (
echo [+] Building command line tools %1
del .deps\src\*.exe .deps\src\*.o .deps\src\wincompat\*.o 2> NUL
make --no-print-directory -C .deps\src PLATFORM=windows CC=%CC% V=1 LDFLAGS=-s RUNSTATEDIR= SYSTEMDUNITDIR= -j%NUMBER_OF_PROCESSORS% || exit /b 1
diff --git a/go-patches/highres-timer.patch b/go-patches/highres-timer.patch
new file mode 100644
index 00000000..87dd6b17
--- /dev/null
+++ b/go-patches/highres-timer.patch
@@ -0,0 +1,395 @@
+From 2975b381dc3f559a2eef875582d73cec00ab6b17 Mon Sep 17 00:00:00 2001
+From: Alex Brainman <alex.brainman@gmail.com>
+Date: Sun, 19 Jul 2020 16:06:48 +1000
+Subject: [PATCH] runtime: use CreateWaitableTimerEx to implement usleep
+
+@jstarks suggested that recent versions of Windows provide access to high resolution timers. See
+
+https://github.com/golang/go/issues/8687#issuecomment-656259353
+
+for details.
+
+I tried to run this C program on my Windows 10 computer
+
+```
+ #include <stdio.h>
+ #include <Windows.h>
+
+ #pragma comment(lib, "Winmm.lib")
+
+// Apparently this is already defined when I use msvc cl.
+//#define CREATE_WAITABLE_TIMER_HIGH_RESOLUTION = 0x00000002;
+
+int usleep(HANDLE timer, LONGLONG d) {
+ LARGE_INTEGER liDueTime;
+ DWORD ret;
+ LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds;
+ LARGE_INTEGER Frequency;
+
+ QueryPerformanceFrequency(&Frequency);
+ QueryPerformanceCounter(&StartingTime);
+
+ liDueTime.QuadPart = d;
+ liDueTime.QuadPart = liDueTime.QuadPart * 10; // us into 100 of ns units
+ liDueTime.QuadPart = -liDueTime.QuadPart; // negative for relative dure time
+
+ if (!SetWaitableTimer(timer, &liDueTime, 0, NULL, NULL, 0)) {
+ printf("SetWaitableTimer failed: errno=%d\n", GetLastError());
+ return 1;
+ }
+
+ ret = WaitForSingleObject(timer, INFINITE);
+ if (ret != WAIT_OBJECT_0) {
+ printf("WaitForSingleObject failed: ret=%d errno=%d\n", ret, GetLastError());
+ return 1;
+ }
+
+ QueryPerformanceCounter(&EndingTime);
+ ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;
+ ElapsedMicroseconds.QuadPart *= 1000000;
+ ElapsedMicroseconds.QuadPart /= Frequency.QuadPart;
+
+ printf("delay is %lld us - slept for %lld us\n", d, ElapsedMicroseconds.QuadPart);
+
+ return 0;
+}
+
+int testTimer(DWORD createFlag)
+{
+ HANDLE timer;
+
+ timer = CreateWaitableTimerEx(NULL, NULL, createFlag, TIMER_ALL_ACCESS);
+ if (timer == NULL) {
+ printf("CreateWaitableTimerEx failed: errno=%d\n", GetLastError());
+ return 1;
+ }
+
+ usleep(timer, 1000LL);
+ usleep(timer, 100LL);
+ usleep(timer, 10LL);
+ usleep(timer, 1LL);
+
+ CloseHandle(timer);
+
+ return 0;
+}
+
+int main()
+{
+ printf("\n1. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is off - timeBeginPeriod is off\n");
+ testTimer(0);
+
+ printf("\n2. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is on - timeBeginPeriod is off\n");
+ testTimer(CREATE_WAITABLE_TIMER_HIGH_RESOLUTION);
+
+ timeBeginPeriod(1);
+
+ printf("\n3. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is off - timeBeginPeriod is on\n");
+ testTimer(0);
+
+ printf("\n4. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is on - timeBeginPeriod is on\n");
+ testTimer(CREATE_WAITABLE_TIMER_HIGH_RESOLUTION);
+}
+```
+
+and I see this output
+
+```
+1. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is off - timeBeginPeriod is off
+delay is 1000 us - slept for 4045 us
+delay is 100 us - slept for 3915 us
+delay is 10 us - slept for 3291 us
+delay is 1 us - slept for 2234 us
+
+2. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is on - timeBeginPeriod is off
+delay is 1000 us - slept for 1076 us
+delay is 100 us - slept for 569 us
+delay is 10 us - slept for 585 us
+delay is 1 us - slept for 17 us
+
+3. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is off - timeBeginPeriod is on
+delay is 1000 us - slept for 742 us
+delay is 100 us - slept for 893 us
+delay is 10 us - slept for 414 us
+delay is 1 us - slept for 920 us
+
+4. CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is on - timeBeginPeriod is on
+delay is 1000 us - slept for 1466 us
+delay is 100 us - slept for 559 us
+delay is 10 us - slept for 535 us
+delay is 1 us - slept for 5 us
+```
+
+That shows, that indeed using CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
+will provide sleeps as low as about 500 microseconds, while our
+current approach provides about 1 millisecond sleep.
+
+New approach also does not require for timeBeginPeriod to be on,
+so this change solves long standing problem with go programs draining
+laptop battery, because it calls timeBeginPeriod.
+
+This change will only run on systems where
+CREATE_WAITABLE_TIMER_HIGH_RESOLUTION flag is available. If not
+available, the runtime will fallback to original code that uses
+timeBeginPeriod.
+
+This is how this change affects benchmark reported in issue #14790
+
+name               old time/op  new time/op  delta
+ChanToSyscallPing  1.05ms ± 2%  0.68ms ±11%  -35.43%  (p=0.000 n=10+10)
+
+The benchmark was run with GOMAXPROCS set to 1.
+
+Fixes #8687
+Updates #14790
+
+Change-Id: I5b97ba58289c088c17c05292e12e45285c467eae
+---
+
+diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go
+index a62e941..46f4a23 100644
+--- a/src/runtime/os_windows.go
++++ b/src/runtime/os_windows.go
+@@ -21,6 +21,7 @@
+ //go:cgo_import_dynamic runtime._CreateIoCompletionPort CreateIoCompletionPort%4 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._CreateThread CreateThread%6 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._CreateWaitableTimerA CreateWaitableTimerA%3 "kernel32.dll"
++//go:cgo_import_dynamic runtime._CreateWaitableTimerExW CreateWaitableTimerExW%4 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._DuplicateHandle DuplicateHandle%7 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._ExitProcess ExitProcess%1 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._FreeEnvironmentStringsW FreeEnvironmentStringsW%1 "kernel32.dll"
+@@ -68,6 +69,7 @@
+ _CreateIoCompletionPort,
+ _CreateThread,
+ _CreateWaitableTimerA,
++ _CreateWaitableTimerExW,
+ _DuplicateHandle,
+ _ExitProcess,
+ _FreeEnvironmentStringsW,
+@@ -151,6 +153,8 @@
+ waitsema uintptr // semaphore for parking on locks
+ resumesema uintptr // semaphore to indicate suspend/resume
+
++ highResTimer uintptr // high resolution timer handle used in usleep
++
+ // preemptExtLock synchronizes preemptM with entry/exit from
+ // external C code.
+ //
+@@ -407,6 +411,12 @@
+ // if we're already using the CPU, but if all Ps are idle there's no
+ // need to consume extra power to drive the high-res timer.
+ func osRelax(relax bool) uint32 {
++ if haveHighResTimer {
++ // Only call timeBeginPeriod/timeEndPeriod, if
++ // high resolution timer is not available.
++ return 0
++ }
++
+ if relax {
+ return uint32(stdcall1(_timeEndPeriod, 1))
+ } else {
+@@ -414,6 +424,37 @@
+ }
+ }
+
++// haveHighResTimer determines, if CreateWaitableTimerEx
++// CREATE_WAITABLE_TIMER_HIGH_RESOLUTION flag is available.
++var haveHighResTimer = false
++
++// createHighResTimer calls CreateWaitableTimerEx with
++// CREATE_WAITABLE_TIMER_HIGH_RESOLUTION flag to create high
++// resolution timer. createHighResTimer returns new timer
++// handle or 0, if CreateWaitableTimerEx failed.
++func createHighResTimer() uintptr {
++ const (
++ // As per @jstarks, see
++ // https://github.com/golang/go/issues/8687#issuecomment-656259353
++ _CREATE_WAITABLE_TIMER_HIGH_RESOLUTION = 0x00000002
++ _TIMER_ALL_ACCESS = 0x1F0003
++ )
++ return stdcall4(_CreateWaitableTimerExW, 0, 0, _CREATE_WAITABLE_TIMER_HIGH_RESOLUTION, _TIMER_ALL_ACCESS)
++}
++
++func initHighResTimer() {
++ if GOARCH == "arm" {
++ // TODO: Not yet implemented.
++ return
++ }
++ h := createHighResTimer()
++ if h != 0 {
++ haveHighResTimer = true
++ usleep2Addr = unsafe.Pointer(funcPC(usleep2HighRes))
++ stdcall1(_CloseHandle, h)
++ }
++}
++
+ func osinit() {
+ asmstdcallAddr = unsafe.Pointer(funcPC(asmstdcall))
+ usleep2Addr = unsafe.Pointer(funcPC(usleep2))
+@@ -429,6 +470,7 @@
+
+ stdcall2(_SetConsoleCtrlHandler, funcPC(ctrlhandler), 1)
+
++ initHighResTimer()
+ timeBeginPeriodRetValue = osRelax(false)
+
+ ncpu = getproccount()
+@@ -844,9 +886,20 @@
+ var thandle uintptr
+ stdcall7(_DuplicateHandle, currentProcess, currentThread, currentProcess, uintptr(unsafe.Pointer(&thandle)), 0, 0, _DUPLICATE_SAME_ACCESS)
+
++ // Configure usleep timer, if possible.
++ var timer uintptr
++ if haveHighResTimer {
++ timer = createHighResTimer()
++ if timer == 0 {
++ print("runtime: CreateWaitableTimerEx failed; errno=", getlasterror(), "\n")
++ throw("CreateWaitableTimerEx when creating timer failed")
++ }
++ }
++
+ mp := getg().m
+ lock(&mp.threadLock)
+ mp.thread = thandle
++ mp.highResTimer = timer
+ unlock(&mp.threadLock)
+
+ // Query the true stack base from the OS. Currently we're
+@@ -884,6 +937,10 @@
+ lock(&mp.threadLock)
+ stdcall1(_CloseHandle, mp.thread)
+ mp.thread = 0
++ if mp.highResTimer != 0 {
++ stdcall1(_CloseHandle, mp.highResTimer)
++ mp.highResTimer = 0
++ }
+ unlock(&mp.threadLock)
+ }
+
+@@ -979,6 +1036,7 @@
+ // in sys_windows_386.s and sys_windows_amd64.s
+ func onosstack(fn unsafe.Pointer, arg uint32)
+ func usleep2(usec uint32)
++func usleep2HighRes(usec uint32)
+ func switchtothread()
+
+ var usleep2Addr unsafe.Pointer
+diff --git a/src/runtime/sys_windows_386.s b/src/runtime/sys_windows_386.s
+index 9e1f409..4ac1527 100644
+--- a/src/runtime/sys_windows_386.s
++++ b/src/runtime/sys_windows_386.s
+@@ -428,6 +428,42 @@
+ MOVL BP, SP
+ RET
+
++// Runs on OS stack. duration (in 100ns units) is in BX.
++TEXT runtime·usleep2HighRes(SB),NOSPLIT,$36
++ // Want negative 100ns units.
++ NEGL BX
++ MOVL $-1, hi-4(SP)
++ MOVL BX, lo-8(SP)
++
++ get_tls(CX)
++ MOVL g(CX), CX
++ MOVL g_m(CX), CX
++ MOVL (m_mOS+mOS_highResTimer)(CX), CX
++ MOVL CX, saved_timer-12(SP)
++
++ MOVL $0, fResume-16(SP)
++ MOVL $0, lpArgToCompletionRoutine-20(SP)
++ MOVL $0, pfnCompletionRoutine-24(SP)
++ MOVL $0, lPeriod-28(SP)
++ LEAL lo-8(SP), BX
++ MOVL BX, lpDueTime-32(SP)
++ MOVL CX, hTimer-36(SP)
++ MOVL SP, BP
++ MOVL runtime·_SetWaitableTimer(SB), AX
++ CALL AX
++ MOVL BP, SP
++
++ MOVL $0, ptime-28(SP)
++ MOVL $0, alertable-32(SP)
++ MOVL saved_timer-12(SP), CX
++ MOVL CX, handle-36(SP)
++ MOVL SP, BP
++ MOVL runtime·_NtWaitForSingleObject(SB), AX
++ CALL AX
++ MOVL BP, SP
++
++ RET
++
+ // Runs on OS stack.
+ TEXT runtime·switchtothread(SB),NOSPLIT,$0
+ MOVL SP, BP
+diff --git a/src/runtime/sys_windows_amd64.s b/src/runtime/sys_windows_amd64.s
+index 6c8eecd..8475425 100644
+--- a/src/runtime/sys_windows_amd64.s
++++ b/src/runtime/sys_windows_amd64.s
+@@ -457,6 +457,38 @@
+ MOVQ 40(SP), SP
+ RET
+
++// Runs on OS stack. duration (in 100ns units) is in BX.
++TEXT runtime·usleep2HighRes(SB),NOSPLIT|NOFRAME,$72
++ MOVQ SP, AX
++ ANDQ $~15, SP // alignment as per Windows requirement
++ MOVQ AX, 64(SP)
++
++ get_tls(CX)
++ MOVQ g(CX), CX
++ MOVQ g_m(CX), CX
++ MOVQ (m_mOS+mOS_highResTimer)(CX), CX // hTimer
++ MOVQ CX, 48(SP) // save hTimer for later
++ // Want negative 100ns units.
++ NEGQ BX
++ LEAQ 56(SP), DX // lpDueTime
++ MOVQ BX, (DX)
++ MOVQ $0, R8 // lPeriod
++ MOVQ $0, R9 // pfnCompletionRoutine
++ MOVQ $0, AX
++ MOVQ AX, 32(SP) // lpArgToCompletionRoutine
++ MOVQ AX, 40(SP) // fResume
++ MOVQ runtime·_SetWaitableTimer(SB), AX
++ CALL AX
++
++ MOVQ 48(SP), CX // handle
++ MOVQ $0, DX // alertable
++ MOVQ $0, R8 // ptime
++ MOVQ runtime·_NtWaitForSingleObject(SB), AX
++ CALL AX
++
++ MOVQ 64(SP), SP
++ RET
++
+ // Runs on OS stack.
+ TEXT runtime·switchtothread(SB),NOSPLIT|NOFRAME,$0
+ MOVQ SP, AX
+diff --git a/src/runtime/sys_windows_arm.s b/src/runtime/sys_windows_arm.s
+index 256b5ff..e6c61a4 100644
+--- a/src/runtime/sys_windows_arm.s
++++ b/src/runtime/sys_windows_arm.s
+@@ -468,6 +468,24 @@
+ MOVW R4, R13 // Restore SP
+ MOVM.IA.W (R13), [R4, R15] // pop {R4, pc}
+
++// Runs on OS stack. Duration (in 100ns units) is in R0.
++// TODO: neeeds to be implemented properly.
++TEXT runtime·usleep2HighRes(SB),NOSPLIT|NOFRAME,$0
++ MOVM.DB.W [R4, R14], (R13) // push {r4, lr}
++ MOVW R13, R4 // Save SP
++ SUB $8, R13 // R13 = R13 - 8
++ BIC $0x7, R13 // Align SP for ABI
++ RSB $0, R0, R3 // R3 = -R0
++ MOVW $0, R1 // R1 = FALSE (alertable)
++ MOVW $-1, R0 // R0 = handle
++ MOVW R13, R2 // R2 = pTime
++ MOVW R3, 0(R2) // time_lo
++ MOVW R0, 4(R2) // time_hi
++ MOVW runtime·_NtWaitForSingleObject(SB), R3
++ BL (R3)
++ MOVW R4, R13 // Restore SP
++ MOVM.IA.W (R13), [R4, R15] // pop {R4, pc}
++
+ // Runs on OS stack.
+ TEXT runtime·switchtothread(SB),NOSPLIT|NOFRAME,$0
+ MOVM.DB.W [R4, R14], (R13) // push {R4, lr}
diff --git a/go-patches/no-ctrlc-handler.patch b/go-patches/no-ctrlc-handler.patch
new file mode 100644
index 00000000..157ed88f
--- /dev/null
+++ b/go-patches/no-ctrlc-handler.patch
@@ -0,0 +1,184 @@
+From 8bc7bff3bff8f61312f8d2307cfe2e433d356c31 Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Fri, 11 Sep 2020 13:04:11 +0200
+Subject: [PATCH 1/2] Revert "[release-branch.go1.15] runtime: detect services
+ in signal handler"
+
+This reverts commit b1253d24e159129c778377c3a2a0bde15904a417.
+---
+ src/runtime/os_windows.go | 73 +++------------------------------------
+ 1 file changed, 4 insertions(+), 69 deletions(-)
+
+diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go
+index 769197db46..a584ada702 100644
+--- a/src/runtime/os_windows.go
++++ b/src/runtime/os_windows.go
+@@ -36,10 +36,7 @@ const (
+ //go:cgo_import_dynamic runtime._SetThreadContext SetThreadContext%2 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._LoadLibraryW LoadLibraryW%1 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._LoadLibraryA LoadLibraryA%1 "kernel32.dll"
+-//go:cgo_import_dynamic runtime._OpenProcess OpenProcess%3 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._PostQueuedCompletionStatus PostQueuedCompletionStatus%4 "kernel32.dll"
+-//go:cgo_import_dynamic runtime._ProcessIdToSessionId ProcessIdToSessionId%2 "kernel32.dll"
+-//go:cgo_import_dynamic runtime._QueryFullProcessImageNameA QueryFullProcessImageNameA%4 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._ResumeThread ResumeThread%1 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._SetConsoleCtrlHandler SetConsoleCtrlHandler%2 "kernel32.dll"
+ //go:cgo_import_dynamic runtime._SetErrorMode SetErrorMode%1 "kernel32.dll"
+@@ -87,10 +84,7 @@ var (
+ _SetThreadContext,
+ _LoadLibraryW,
+ _LoadLibraryA,
+- _OpenProcess,
+ _PostQueuedCompletionStatus,
+- _ProcessIdToSessionId,
+- _QueryFullProcessImageNameA,
+ _QueryPerformanceCounter,
+ _QueryPerformanceFrequency,
+ _ResumeThread,
+@@ -134,8 +128,7 @@ var (
+ // Load ntdll.dll manually during startup, otherwise Mingw
+ // links wrong printf function to cgo executable (see issue
+ // 12030 for details).
+- _NtWaitForSingleObject stdFunction
+- _NtQueryInformationProcess stdFunction
++ _NtWaitForSingleObject stdFunction
+
+ // These are from non-kernel32.dll, so we prefer to LoadLibraryEx them.
+ _timeBeginPeriod,
+@@ -262,7 +255,6 @@ func loadOptionalSyscalls() {
+ throw("ntdll.dll not found")
+ }
+ _NtWaitForSingleObject = windowsFindfunc(n32, []byte("NtWaitForSingleObject\000"))
+- _NtQueryInformationProcess = windowsFindfunc(n32, []byte("NtQueryInformationProcess\000"))
+
+ if GOARCH == "arm" {
+ _QueryPerformanceCounter = windowsFindfunc(k32, []byte("QueryPerformanceCounter\000"))
+@@ -1003,63 +995,6 @@ func usleep(us uint32) {
+ onosstack(usleep2Addr, 10*us)
+ }
+
+-// isWindowsService returns whether the process is currently executing as a
+-// Windows service. The below technique looks a bit hairy, but it's actually
+-// exactly what the .NET framework does for the similarly named function:
+-// https://github.com/dotnet/extensions/blob/f4066026ca06984b07e90e61a6390ac38152ba93/src/Hosting/WindowsServices/src/WindowsServiceHelpers.cs#L26-L31
+-// Specifically, it looks up whether the parent process has session ID zero
+-// and is called "services".
+-func isWindowsService() bool {
+- const (
+- _CURRENT_PROCESS = ^uintptr(0)
+- _PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
+- )
+- // pbi is a PROCESS_BASIC_INFORMATION struct, where we just care about
+- // the 6th pointer inside of it, which contains the pid of the process
+- // parent:
+- // https://github.com/wine-mirror/wine/blob/42cb7d2ad1caba08de235e6319b9967296b5d554/include/winternl.h#L1294
+- var pbi [6]uintptr
+- var pbiLen uint32
+- err := stdcall5(_NtQueryInformationProcess, _CURRENT_PROCESS, 0, uintptr(unsafe.Pointer(&pbi[0])), uintptr(unsafe.Sizeof(pbi)), uintptr(unsafe.Pointer(&pbiLen)))
+- if err != 0 {
+- return false
+- }
+- var psid uint32
+- err = stdcall2(_ProcessIdToSessionId, pbi[5], uintptr(unsafe.Pointer(&psid)))
+- if err == 0 || psid != 0 {
+- return false
+- }
+- pproc := stdcall3(_OpenProcess, _PROCESS_QUERY_LIMITED_INFORMATION, 0, pbi[5])
+- if pproc == 0 {
+- return false
+- }
+- defer stdcall1(_CloseHandle, pproc)
+- // exeName gets the path to the executable image of the parent process
+- var exeName [261]byte
+- exeNameLen := uint32(len(exeName) - 1)
+- err = stdcall4(_QueryFullProcessImageNameA, pproc, 0, uintptr(unsafe.Pointer(&exeName[0])), uintptr(unsafe.Pointer(&exeNameLen)))
+- if err == 0 || exeNameLen == 0 {
+- return false
+- }
+- servicesLower := "services.exe"
+- servicesUpper := "SERVICES.EXE"
+- i := int(exeNameLen) - 1
+- j := len(servicesLower) - 1
+- if i < j {
+- return false
+- }
+- for {
+- if j == -1 {
+- return i == -1 || exeName[i] == '\\'
+- }
+- if exeName[i] != servicesLower[j] && exeName[i] != servicesUpper[j] {
+- return false
+- }
+- i--
+- j--
+- }
+-}
+-
+ func ctrlhandler1(_type uint32) uint32 {
+ var s uint32
+
+@@ -1075,9 +1010,9 @@ func ctrlhandler1(_type uint32) uint32 {
+ if sigsend(s) {
+ return 1
+ }
+- if !islibrary && !isarchive && !isWindowsService() {
+- // Only exit the program if we don't have a DLL or service.
+- // See https://golang.org/issues/35965 and https://golang.org/issues/40167
++ if !islibrary && !isarchive {
++ // Only exit the program if we don't have a DLL.
++ // See https://golang.org/issues/35965.
+ exit(2) // SIGINT, SIGTERM, etc
+ }
+ return 0
+--
+2.28.0
+
+From 84cc2046962e754af08f99327561be2e979eaf16 Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Tue, 14 Jul 2020 01:41:03 -0600
+Subject: [PATCH 2/2] runtime: do not explicitly exit on ctrl handler
+
+The default ctrl+c handler should process exits in situations where it
+makes sense, like console apps, but not in situations where it doesn't,
+like libraries or services. Therefore, we should remove the exit(2) so
+that the default handler is used for this. This also uses the more
+proper windows exit code of STATUS_CONTROL_C_EXIT, with the base case
+handler installed by KernelBase.dll. In particular, this helps in the
+case of services, which previously would terminate when receiving
+shutdown signals, instead of passing them onward to the service program.
+In this CL, contrary to CL 244959, we do not need to special case
+services with expensive detection algorithms, or rely on hard-coded
+library/archive flags.
+
+Fixes #40167.
+Fixes #40074.
+
+Change-Id: I9bf6ed6f65cefeff754d270aa33fa4df8d0b451f
+Reviewed-on: https://go-review.googlesource.com/c/go/+/243597
+Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
+TryBot-Result: Gobot Gobot <gobot@golang.org>
+Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
+Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
+---
+ src/runtime/os_windows.go | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go
+index a584ada702..a62e941229 100644
+--- a/src/runtime/os_windows.go
++++ b/src/runtime/os_windows.go
+@@ -1010,11 +1010,6 @@ func ctrlhandler1(_type uint32) uint32 {
+ if sigsend(s) {
+ return 1
+ }
+- if !islibrary && !isarchive {
+- // Only exit the program if we don't have a DLL.
+- // See https://golang.org/issues/35965.
+- exit(2) // SIGINT, SIGTERM, etc
+- }
+ return 0
+ }
+
+--
+2.28.0
+
diff --git a/go.mod b/go.mod
index 8c90c297..ec078dea 100644
--- a/go.mod
+++ b/go.mod
@@ -7,14 +7,14 @@ require (
github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899
golang.org/x/net v0.0.0-20200707034311-ab3426394381
- golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae
+ golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1
golang.org/x/text v0.3.3
- golang.zx2c4.com/wireguard v0.0.20200321-0.20200714205944-31b574ef99a7
+ golang.zx2c4.com/wireguard v0.0.20200321-0.20200715051853-507f148e1c42
)
replace (
- github.com/lxn/walk => golang.zx2c4.com/wireguard/windows v0.0.0-20200319192453-d35a18df246f
- github.com/lxn/win => golang.zx2c4.com/wireguard/windows v0.0.0-20191128151145-b4e4933852d5
+ github.com/lxn/walk => ..\walk
+ github.com/lxn/win => ..\win
golang.zx2c4.com/wireguard => ..\wireguard-go
)
diff --git a/go.sum b/go.sum
index 39c17a21..916b67a1 100644
--- a/go.sum
+++ b/go.sum
@@ -12,15 +12,16 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1 h1:sIky/MyNRSHTrdxfsiUSS4WIAMvInbeXljJz+jDjeYE=
+golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.zx2c4.com/wireguard v0.0.20200321-0.20200714205944-31b574ef99a7 h1:uplYgQzH47Y1vvkPLdb+BbR36Jb4UjQgqhWAneKzQ/k=
-golang.zx2c4.com/wireguard v0.0.20200321-0.20200714205944-31b574ef99a7/go.mod h1:GJvYs5O24/ASlwPiRklVnjMx2xQzrOic0DuU6GvYJL4=
+golang.zx2c4.com/wireguard v0.0.20200321-0.20200715051853-507f148e1c42 h1:SrR1hmxGKKarHEEDvaHxatwnqE3uT+7jvMcin6SHOkw=
+golang.zx2c4.com/wireguard v0.0.20200321-0.20200715051853-507f148e1c42/go.mod h1:GJvYs5O24/ASlwPiRklVnjMx2xQzrOic0DuU6GvYJL4=
golang.zx2c4.com/wireguard/windows v0.0.0-20191128151145-b4e4933852d5 h1:tkrF3cHqbnFQ068q0cUbu9nJMXKChFT2rGL9sSAMlrI=
golang.zx2c4.com/wireguard/windows v0.0.0-20191128151145-b4e4933852d5/go.mod h1:ouWl4wViUNh8tPSIwxTVMuS014WakR1hqvBc2I0bMoA=
golang.zx2c4.com/wireguard/windows v0.0.0-20200319192453-d35a18df246f h1:55sAe6dUkYZS7m8s/+eoEAdggzZjNkku8lj/W3vHu+U=
diff --git a/gotext.go b/gotext.go
index e9a59aea..d61ce393 100644
--- a/gotext.go
+++ b/gotext.go
@@ -1,5 +1,5 @@
// +build generate
-//go:generate go run gotext.go -srclang=en update -out=zgotext.go -lang=en,de,fr,it,ja,ru,sl,zh-CN
+//go:generate go run gotext.go
/* SPDX-License-Identifier: MIT
*
@@ -9,12 +9,47 @@
package main
import (
+ "encoding/json"
"io/ioutil"
"os"
"os/exec"
+ "path/filepath"
+ "strings"
+
+ "golang.org/x/text/message/pipeline"
)
func main() {
+ langDirs, err := ioutil.ReadDir("locales")
+ if err != nil {
+ panic(err)
+ }
+ var langs []string
+ for _, dir := range langDirs {
+ if !dir.IsDir() {
+ continue
+ }
+ lang := dir.Name()
+ if jsonData, err := ioutil.ReadFile(filepath.Join("locales", lang, "messages.gotext.json")); err == nil {
+ var translations pipeline.Messages
+ if err := json.Unmarshal(jsonData, &translations); err != nil {
+ panic(err)
+ }
+ lang = translations.Language.String()
+ if lang != dir.Name() {
+ err = os.Rename(filepath.Join("locales", dir.Name()), filepath.Join("locales", lang))
+ if err != nil {
+ panic(err)
+ }
+ }
+ } else if os.IsNotExist(err) {
+ panic(err)
+ }
+ langs = append(langs, lang)
+ }
+ if len(langs) == 0 {
+ panic("no locales found")
+ }
gotext, err := ioutil.TempFile("", "gotext*.exe")
if err != nil {
panic(err)
@@ -29,7 +64,7 @@ func main() {
if err != nil {
panic(err)
}
- cmd = exec.Command(gotextFilename, os.Args[1:]...)
+ cmd = exec.Command(gotextFilename, "-srclang=en", "update", "-out=zgotext.go", "-lang="+strings.Join(langs, ","))
cmd.Env = append(os.Environ(), "GOOS=windows", "GOARCH=amd64", "CGO_ENABLED=1", "CC=x86_64-w64-mingw32-gcc")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
diff --git a/installer/build.bat b/installer/build.bat
index 864987d8..2769acdd 100644
--- a/installer/build.bat
+++ b/installer/build.bat
@@ -7,7 +7,7 @@ set PATHEXT=.exe
set BUILDDIR=%~dp0
cd /d %BUILDDIR% || exit /b 1
-for /f "tokens=3" %%a in ('findstr /r "WIREGUARD_WINDOWS_VERSION_STRING.*[0-9.]*" ..\version\version.h') do set WIREGUARD_VERSION=%%a
+for /f "tokens=3" %%a in ('findstr /r "WIREGUARD_WINDOWS_VERSION_STRING.*[0-9.]*" ..\resources.rc') do set WIREGUARD_VERSION=%%a
set WIREGUARD_VERSION=%WIREGUARD_VERSION:"=%
set WIX_CANDLE_FLAGS=-nologo -dWIREGUARD_VERSION="%WIREGUARD_VERSION%"
diff --git a/locales/de/messages.gotext.json b/locales/de/messages.gotext.json
index 85353269..fa49c849 100644
--- a/locales/de/messages.gotext.json
+++ b/locales/de/messages.gotext.json
@@ -496,9 +496,9 @@
"translatorComment": "Copied from source."
},
{
- "id": "Invalid config key is missing an equals separator",
- "message": "Invalid config key is missing an equals separator",
- "translation": "Ungültiger Konfigurationseintrag, es fehlt ein = Trennzeichen",
+ "id": "Config key is missing an equals separator",
+ "message": "Config key is missing an equals separator",
+ "translation": "Konfigurationsschlüssel fehlt ein Gleichheitstrennzeichen",
"translatorComment": "Copied from source."
},
{
diff --git a/locales/fa/messages.gotext.json b/locales/fa/messages.gotext.json
new file mode 100644
index 00000000..5933b60c
--- /dev/null
+++ b/locales/fa/messages.gotext.json
@@ -0,0 +1,863 @@
+{
+ "language": "fa",
+ "messages": [
+ {
+ "id": "Error",
+ "message": "Error",
+ "translation": "خطا",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Command Line Options",
+ "message": "Command Line Options",
+ "translation": "گزینه‌های خط فرمان",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "You must use the 64-bit version of WireGuard on this computer.",
+ "message": "You must use the 64-bit version of WireGuard on this computer.",
+ "translation": "شما باید نگارش ۶۴-بیت WireGuard را در این رایانه استفاده کنید.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Now",
+ "message": "Now",
+ "translation": "هم اکنون",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Years} year(s)",
+ "message": "{Years} year(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Years",
+ "cases": {
+ "one": {
+ "msg": "{Years} سال"
+ },
+ "other": {
+ "msg": "{Years} سال"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Years",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "years"
+ }
+ ]
+ },
+ {
+ "id": "{Days} day(s)",
+ "message": "{Days} day(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Days",
+ "cases": {
+ "one": {
+ "msg": "{Days} روز"
+ },
+ "other": {
+ "msg": "{Days} روز"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Days",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "days"
+ }
+ ]
+ },
+ {
+ "id": "{Hours} hour(s)",
+ "message": "{Hours} hour(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Hours",
+ "cases": {
+ "one": {
+ "msg": "{Hours} ساعت"
+ },
+ "other": {
+ "msg": "{Hours} ساعت"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Hours",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "hours"
+ }
+ ]
+ },
+ {
+ "id": "{Minutes} minute(s)",
+ "message": "{Minutes} minute(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Minutes",
+ "cases": {
+ "one": {
+ "msg": "{Minutes} دقیقه"
+ },
+ "other": {
+ "msg": "{Minutes} دقیقه"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Minutes",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "minutes"
+ }
+ ]
+ },
+ {
+ "id": "{Seconds} second(s)",
+ "message": "{Seconds} second(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Seconds",
+ "cases": {
+ "one": {
+ "msg": "{Seconds} ثانیه"
+ },
+ "other": {
+ "msg": "{Seconds} ثانیه"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Seconds",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "seconds"
+ }
+ ]
+ },
+ {
+ "id": "{Timestamp} ago",
+ "message": "{Timestamp} ago",
+ "translation": "{Timestamp} پیش",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Timestamp",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "timestamp"
+ }
+ ]
+ },
+ {
+ "id": "{Bytes} B",
+ "message": "{Bytes} B",
+ "translation": "{Bytes} بایت",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Bytes",
+ "string": "%[1]d",
+ "type": "golang.zx2c4.com/wireguard/windows/conf.Bytes",
+ "underlyingType": "uint64",
+ "argNum": 1,
+ "expr": "b"
+ }
+ ]
+ },
+ {
+ "id": "Invalid IP address",
+ "message": "Invalid IP address",
+ "translation": "نشانی آی‌پی نامعتبر است",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid MTU",
+ "message": "Invalid MTU",
+ "translation": "MTU نامعتبر است",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid port",
+ "message": "Invalid port",
+ "translation": "پورت نامعتبر",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Key must have a value",
+ "message": "Key must have a value",
+ "translation": "کلید باید یک مقدار داشته باشد",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[none specified]",
+ "message": "[none specified]",
+ "translation": "[مشخص نشده]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "All peers must have public keys",
+ "message": "All peers must have public keys",
+ "translation": "همه همتاها باید کلید‌های عمومی داشته باشند",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error in getting configuration",
+ "message": "Error in getting configuration",
+ "translation": "خطا در دریافت پیکربندی",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[EnumerationSeparator]",
+ "message": "[EnumerationSeparator]",
+ "translation": "، ",
+ "comment": "Text to insert between items when listing - most western languages will translate ‘[EnumerationSeparator]’ into ‘, ’ to produce lists like ‘apple, orange, strawberry’. Eastern languages might translate into ‘、’ to produce lists like ‘リンゴ、オレンジ、イチゴ’."
+ },
+ {
+ "id": "[UnitSeparator]",
+ "message": "[UnitSeparator]",
+ "translation": "، ",
+ "comment": "Text to insert when combining units of a measure - most languages will translate ‘[UnitSeparator]’ into ‘ ’ (space) to produce lists like ‘2 minuti 30 sekund’, or empty string ‘’ to produce ‘2分30秒’."
+ },
+ {
+ "id": "About WireGuard",
+ "message": "About WireGuard",
+ "translation": "درباره WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Close",
+ "message": "Close",
+ "translation": "بستن",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "♥ &Donate!",
+ "message": "♥ &Donate!",
+ "translation": "♥&کمک‌مالی!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status:",
+ "message": "Status:",
+ "translation": "وضعیت:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Deactivate",
+ "message": "&Deactivate",
+ "translation": "&غیرفعال‌سازی",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Activate",
+ "message": "&Activate",
+ "translation": "&فعال‌سازی",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Public key:",
+ "message": "Public key:",
+ "translation": "کلید عمومی:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Listen port:",
+ "message": "Listen port:",
+ "translation": "پورت شنود:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "MTU:",
+ "message": "MTU:",
+ "translation": "MTU:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Addresses:",
+ "message": "Addresses:",
+ "translation": "نشانی‌ها:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "DNS servers:",
+ "message": "DNS servers:",
+ "translation": "سرورهای DNS:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Preshared key:",
+ "message": "Preshared key:",
+ "translation": "کلید از پیش تقسیم شده:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Allowed IPs:",
+ "message": "Allowed IPs:",
+ "translation": "IPهای مجاز:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Endpoint:",
+ "message": "Endpoint:",
+ "translation": "نقطه پایان:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Persistent keepalive:",
+ "message": "Persistent keepalive:",
+ "translation": "زنده نگه‌داشتن پیوسته:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Transfer:",
+ "message": "Transfer:",
+ "translation": "انتقال:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "enabled",
+ "message": "enabled",
+ "translation": "فعال شده",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Interface: {Name}",
+ "message": "Interface: {Name}",
+ "translation": "رابط: {Name}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "config.Name"
+ }
+ ]
+ },
+ {
+ "id": "Peer",
+ "message": "Peer",
+ "translation": "همتا",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Create new tunnel",
+ "message": "Create new tunnel",
+ "translation": "ایجاد تونل جدید",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Edit tunnel",
+ "message": "Edit tunnel",
+ "translation": "ویرایش تونل",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Name:",
+ "message": "&Name:",
+ "translation": "&نام:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Public key:",
+ "message": "&Public key:",
+ "translation": "&کلید عمومی:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "(unknown)",
+ "message": "(unknown)",
+ "translation": "(ناشناخته)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Save",
+ "message": "&Save",
+ "translation": "&ذخیره",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Cancel",
+ "message": "Cancel",
+ "translation": "لغو",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Configuration:",
+ "message": "&Configuration:",
+ "translation": "&پیکربندی:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid name",
+ "message": "Invalid name",
+ "translation": "نام نامعتبر",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "A name is required.",
+ "message": "A name is required.",
+ "translation": "یک نام الزامی است.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to list existing tunnels",
+ "message": "Unable to list existing tunnels",
+ "translation": "نمی‌توان تونل‌های موجود را فهرست کرد",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel already exists",
+ "message": "Tunnel already exists",
+ "translation": "تونل هم‌اکنون موجود است",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Active",
+ "message": "Active",
+ "translation": "فعال",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Activating",
+ "message": "Activating",
+ "translation": "در حال فعال‌سازی",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Inactive",
+ "message": "Inactive",
+ "translation": "غیرفعال",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Deactivating",
+ "message": "Deactivating",
+ "translation": "در حال غیرفعال‌سازی",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unknown state",
+ "message": "Unknown state",
+ "translation": "وضعیت ناشناخته",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log",
+ "message": "Log",
+ "translation": "گزارش وقایع",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Copy",
+ "message": "&Copy",
+ "translation": "&روگرفت",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Save to file…",
+ "message": "&Save to file…",
+ "translation": "&ذخیره در پرونده…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Time",
+ "message": "Time",
+ "translation": "زمان",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log message",
+ "message": "Log message",
+ "translation": "پیام گزارش رویداد",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export log to file",
+ "message": "Export log to file",
+ "translation": "برون‌برد گزارش رویداد به پرونده",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&About WireGuard…",
+ "message": "&About WireGuard…",
+ "translation": "&درباره WireGuard…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel Error",
+ "message": "Tunnel Error",
+ "translation": "خطالی تونل",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Unknown",
+ "message": "Status: Unknown",
+ "translation": "وضعیت: ناشناخته",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Addresses: None",
+ "message": "Addresses: None",
+ "translation": "نشانی‌ها: هیچ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Manage tunnels…",
+ "message": "&Manage tunnels…",
+ "translation": "&مدیریت تونل‌ها…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard Tunnel Error",
+ "message": "WireGuard Tunnel Error",
+ "translation": "خطای تونل WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: {StateText}",
+ "message": "Status: {StateText}",
+ "translation": "وضعیت: {StateText}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "StateText",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "stateText"
+ }
+ ]
+ },
+ {
+ "id": "Addresses: {String}",
+ "message": "Addresses: {String}",
+ "translation": "نشانی‌ها: {String}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "String",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "sb.String()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Activated",
+ "message": "WireGuard Activated",
+ "translation": "WireGuard فعال‌شد",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "The {Name} tunnel has been activated.",
+ "message": "The {Name} tunnel has been activated.",
+ "translation": "تونل {Name} فعال‌شده.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnel.Name"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Deactivated",
+ "message": "WireGuard Deactivated",
+ "translation": "WireGuard غیرفعال شد",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "An Update is Available!",
+ "message": "An Update is Available!",
+ "translation": "یک به‌روزرسانی در دسترس است!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard Update Available",
+ "message": "WireGuard Update Available",
+ "translation": "به‌روزرسانی WireGuard در دسترس است",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnels",
+ "message": "Tunnels",
+ "translation": "تونل‌ها",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Edit",
+ "message": "&Edit",
+ "translation": "&ویرایش",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Add &empty tunnel…",
+ "message": "Add &empty tunnel…",
+ "translation": "افزودن &خالی‌کردن تونل…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Add Tunnel",
+ "message": "Add Tunnel",
+ "translation": "افزودن تونل",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Remove selected tunnel(s)",
+ "message": "Remove selected tunnel(s)",
+ "translation": "حذف تونل(ها) انتخابی",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export all tunnels to zip",
+ "message": "Export all tunnels to zip",
+ "translation": "برون‌بری همه تونل‌ها به زیپ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export all tunnels to &zip…",
+ "message": "Export all tunnels to &zip…",
+ "translation": "برون‌بری همه تونل‌ها به &زیپ…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Imported tunnels",
+ "message": "Imported tunnels",
+ "translation": "تونل‌های وارد شده",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Imported {M} tunnels",
+ "message": "Imported {M} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "M",
+ "cases": {
+ "one": {
+ "msg": "{M} تونل وارد شد"
+ },
+ "other": {
+ "msg": "{M} تونل وارد شد"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "M",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "m"
+ }
+ ]
+ },
+ {
+ "id": "Imported {M} of {N} tunnels",
+ "message": "Imported {M} of {N} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "N",
+ "cases": {
+ "one": {
+ "msg": "{M} از {N} تونل وارد شد"
+ },
+ "other": {
+ "msg": "{M} از {N} تونل وارد شد"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "M",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "m"
+ },
+ {
+ "id": "N",
+ "string": "%[2]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 2,
+ "expr": "n"
+ }
+ ]
+ },
+ {
+ "id": "Unable to create tunnel",
+ "message": "Unable to create tunnel",
+ "translation": "نمی‌توان تونل ایجاد کرد",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Delete {TunnelCount} tunnels",
+ "message": "Delete {TunnelCount} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "TunnelCount",
+ "cases": {
+ "one": {
+ "msg": "حذف {TunnelCount} تونل"
+ },
+ "other": {
+ "msg": "حذف {TunnelCount} تونل"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "TunnelCount",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "tunnelCount"
+ }
+ ]
+ },
+ {
+ "id": "Delete tunnel ‘{TunnelName}’",
+ "message": "Delete tunnel ‘{TunnelName}’",
+ "translation": "حذف تونل ‘{TunnelName}’",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TunnelName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnelName"
+ }
+ ]
+ },
+ {
+ "id": "Unable to delete tunnel",
+ "message": "Unable to delete tunnel",
+ "translation": "حذف تونل‌ امکان‌پذیر نیست",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to delete tunnels",
+ "message": "Unable to delete tunnels",
+ "translation": "نمی‌توان تونل‌ها را حذف کرد",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Import tunnel(s) from file",
+ "message": "Import tunnel(s) from file",
+ "translation": "وارد کردن تونل(ها) از پرونده",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Configuration ZIP Files (*.zip)|*.zip",
+ "message": "Configuration ZIP Files (*.zip)|*.zip",
+ "translation": "پرونده‌های پیکربندی زیپ (*.zip)|*.zip",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export tunnels to zip",
+ "message": "Export tunnels to zip",
+ "translation": "برون‌بری تونل‌ها به زیپ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error Exiting WireGuard",
+ "message": "Error Exiting WireGuard",
+ "translation": "خطا در هنگام خارج شدن از WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Waiting for user",
+ "message": "Status: Waiting for user",
+ "translation": "وضعیت: درانتظار برای کاربر",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Update Now",
+ "message": "Update Now",
+ "translation": "اکنون به‌روز رسانی کن",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Waiting for updater service",
+ "message": "Status: Waiting for updater service",
+ "translation": "وضعیت: درانتظار برای سرویس به‌روزرسانی",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error: {Err}. Please try again.",
+ "message": "Error: {Err}. Please try again.",
+ "translation": "خطا: {Err}. لطفا دوباره تلاش کنید.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Status: Complete!",
+ "message": "Status: Complete!",
+ "translation": "وضعیت: کامل شد!",
+ "translatorComment": "Copied from source."
+ }
+ ]
+} \ No newline at end of file
diff --git a/locales/fr/messages.gotext.json b/locales/fr/messages.gotext.json
index 87100f52..8c4b44f5 100644
--- a/locales/fr/messages.gotext.json
+++ b/locales/fr/messages.gotext.json
@@ -496,9 +496,9 @@
"translatorComment": "Copied from source."
},
{
- "id": "Invalid config key is missing an equals separator",
- "message": "Invalid config key is missing an equals separator",
- "translation": "Clé de configuration non valide, il manque le séparateur est égal à",
+ "id": "Config key is missing an equals separator",
+ "message": "Config key is missing an equals separator",
+ "translation": "Il manque le séparateur égal à la clé de configuration",
"translatorComment": "Copied from source."
},
{
diff --git a/locales/id/messages.gotext.json b/locales/id/messages.gotext.json
new file mode 100644
index 00000000..e3ebdd87
--- /dev/null
+++ b/locales/id/messages.gotext.json
@@ -0,0 +1,874 @@
+{
+ "language": "id",
+ "messages": [
+ {
+ "id": "Error",
+ "message": "Error",
+ "translation": "Kesalahan",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "(no argument): elevate and install manager service",
+ "message": "(no argument): elevate and install manager service",
+ "translation": "(tidak ada argumen): naikkan akses dan instal servis manajer",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Usage: {Args0} [\n{String}]",
+ "message": "Usage: {Args0} [\n{String}]",
+ "translation": "Penggunaan: {Args0} [\n{String}]",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Args0",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "os.Args[0]"
+ },
+ {
+ "id": "String",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "builder.String()"
+ }
+ ]
+ },
+ {
+ "id": "Command Line Options",
+ "message": "Command Line Options",
+ "translation": "Opsi Command Line",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to determine whether the process is running under WOW64: {Err}",
+ "message": "Unable to determine whether the process is running under WOW64: {Err}",
+ "translation": "Tidak dapat menentukan apakah proses sedang berjalan di bawah WOW64: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "You must use the 64-bit version of WireGuard on this computer.",
+ "message": "You must use the 64-bit version of WireGuard on this computer.",
+ "translation": "Anda harus menggunakan WireGuard versi 64-bit di komputer ini.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to open current process token: {Err}",
+ "message": "Unable to open current process token: {Err}",
+ "translation": "Tidak dapat membuka token proses saat ini: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard hanya dapat digunakan oleh pengguna yang merupakan anggota grup Bawaan {AdminGroupName}.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard sedang berjalan, tetapi UI hanya dapat diakses dari desktop grup Bawaan {AdminGroupName}.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard system tray icon did not appear after 30 seconds.",
+ "message": "WireGuard system tray icon did not appear after 30 seconds.",
+ "translation": "Ikon sistem WireGuard tidak muncul setelah 30 detik.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Now",
+ "message": "Now",
+ "translation": "Sekarang",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "System clock wound backward!",
+ "message": "System clock wound backward!",
+ "translation": "Jam sistem mundur!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Years} year(s)",
+ "message": "{Years} year(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Years",
+ "cases": {
+ "other": {
+ "msg": "{Years} tahun\n{Years} tahun"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Years",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "years"
+ }
+ ]
+ },
+ {
+ "id": "{Days} day(s)",
+ "message": "{Days} day(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Days",
+ "cases": {
+ "other": {
+ "msg": "{Days} Hari"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Days",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "days"
+ }
+ ]
+ },
+ {
+ "id": "{Hours} hour(s)",
+ "message": "{Hours} hour(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Hours",
+ "cases": {
+ "other": {
+ "msg": "{Hours} jam"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Hours",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "hours"
+ }
+ ]
+ },
+ {
+ "id": "{Minutes} minute(s)",
+ "message": "{Minutes} minute(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Minutes",
+ "cases": {
+ "other": {
+ "msg": "{Minutes} menit"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Minutes",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "minutes"
+ }
+ ]
+ },
+ {
+ "id": "{Seconds} second(s)",
+ "message": "{Seconds} second(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Seconds",
+ "cases": {
+ "other": {
+ "msg": "{Seconds} detik"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Seconds",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "seconds"
+ }
+ ]
+ },
+ {
+ "id": "{Timestamp} ago",
+ "message": "{Timestamp} ago",
+ "translation": "{Timestamp} yang lalu",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Timestamp",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "timestamp"
+ }
+ ]
+ },
+ {
+ "id": "{Bytes} B",
+ "message": "{Bytes} B",
+ "translation": "{Bytes} B",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Bytes",
+ "string": "%[1]d",
+ "type": "golang.zx2c4.com/wireguard/windows/conf.Bytes",
+ "underlyingType": "uint64",
+ "argNum": 1,
+ "expr": "b"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024} KiB",
+ "message": "{Float64b__1024} KiB",
+ "translation": "{Float64b__1024} KiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024} MiB",
+ "message": "{Float64b__1024__1024} MiB",
+ "translation": "{Float64b__1024__1024} MiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024} GiB",
+ "message": "{Float64b__1024__1024__1024} GiB",
+ "translation": "{Float64b__1024__1024__1024} GiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024__1024} TiB",
+ "message": "{Float64b__1024__1024__1024__1024} TiB",
+ "translation": "{Float64b__1024__1024__1024__1024} TiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Why}: {Offender}",
+ "message": "{Why}: {Offender}",
+ "translation": "{Why}: {Offender}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Why",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "e.why"
+ },
+ {
+ "id": "Offender",
+ "string": "%[2]q",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "e.offender"
+ }
+ ]
+ },
+ {
+ "id": "Invalid IP address",
+ "message": "Invalid IP address",
+ "translation": "Alamat IP tidak valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid network prefix length",
+ "message": "Invalid network prefix length",
+ "translation": "Network prefix tidak valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Missing port from endpoint",
+ "message": "Missing port from endpoint",
+ "translation": "Port belum terisi dari endpoint",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid endpoint host",
+ "message": "Invalid endpoint host",
+ "translation": "Host endpoint tidak valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Brackets must contain an IPv6 address",
+ "message": "Brackets must contain an IPv6 address",
+ "translation": "Dalam Kurung harus berisi alamat IPv6",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid MTU",
+ "message": "Invalid MTU",
+ "translation": "MTU tidak valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid port",
+ "message": "Invalid port",
+ "translation": "Port tidak valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid persistent keepalive",
+ "message": "Invalid persistent keepalive",
+ "translation": "Persistent keepalive tidak valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key: {Err}",
+ "message": "Invalid key: {Err}",
+ "translation": "Kunci tidak sah:{Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Keys must decode to exactly 32 bytes",
+ "message": "Keys must decode to exactly 32 bytes",
+ "translation": "Kunci harus diterjemahkan tepat 32 byte",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Number must be a number between 0 and 2^64-1: {Err}",
+ "message": "Number must be a number between 0 and 2^64-1: {Err}",
+ "translation": "Nomor harus diantara 0 sampai dengan 2^64-1:{Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Two commas in a row",
+ "message": "Two commas in a row",
+ "translation": "Dua koma dalam satu baris",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name is not valid",
+ "message": "Tunnel name is not valid",
+ "translation": "Nama Tunnel tidak valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Line must occur in a section",
+ "message": "Line must occur in a section",
+ "translation": "Garis harus muncul perbagian",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Key must have a value",
+ "message": "Key must have a value",
+ "translation": "Kunci harus memiliki value",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Interface] section",
+ "message": "Invalid key for [Interface] section",
+ "translation": "Kunci tidak valid pada bagian [Interface]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Peer] section",
+ "message": "Invalid key for [Peer] section",
+ "translation": "Kunci tidak valid pada bagian [Peer]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "An interface must have a private key",
+ "message": "An interface must have a private key",
+ "translation": "Interface harus memiliki Private Key",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[none specified]",
+ "message": "[none specified]",
+ "translation": "Tidak Ditetapkan",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "All peers must have public keys",
+ "message": "All peers must have public keys",
+ "translation": "Semua peers harus memiliki kunci publik",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error in getting configuration",
+ "message": "Error in getting configuration",
+ "translation": "Eror ketika mendapatkan konfigurasi",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for interface section",
+ "message": "Invalid key for interface section",
+ "translation": "Kunci tidak valid pada bagian [Interface]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Protocol version must be 1",
+ "message": "Protocol version must be 1",
+ "translation": "Versi protokol harus 1",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for peer section",
+ "message": "Invalid key for peer section",
+ "translation": "Kunci tidak valid pada bagian [Peer]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[EnumerationSeparator]",
+ "message": "[EnumerationSeparator]",
+ "translation": ", ",
+ "comment": "Text to insert between items when listing - most western languages will translate ‘[EnumerationSeparator]’ into ‘, ’ to produce lists like ‘apple, orange, strawberry’. Eastern languages might translate into ‘、’ to produce lists like ‘リンゴ、オレンジ、イチゴ’."
+ },
+ {
+ "id": "About WireGuard",
+ "message": "About WireGuard",
+ "translation": "Tentang WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "message": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "translation": "Versi Aplikasi: {Number}\nVersi back-end Go: {WireGuardGoVersion}\nVersi Go: {Version_go}\nSistem Operasi: {OsName}\nArsitektur: {GOARCH}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Number",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "version.Number"
+ },
+ {
+ "id": "WireGuardGoVersion",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "device.WireGuardGoVersion"
+ },
+ {
+ "id": "Version_go",
+ "string": "%[3]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 3,
+ "expr": "strings.TrimPrefix(runtime.Version(), \"go\")"
+ },
+ {
+ "id": "OsName",
+ "string": "%[4]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 4,
+ "expr": "version.OsName()"
+ },
+ {
+ "id": "GOARCH",
+ "string": "%[5]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 5,
+ "expr": "runtime.GOARCH"
+ }
+ ]
+ },
+ {
+ "id": "Close",
+ "message": "Close",
+ "translation": "Tutup",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "♥ &Donate!",
+ "message": "♥ &Donate!",
+ "translation": "♥ &Donasi!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status:",
+ "message": "Status:",
+ "translation": "Status:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Active",
+ "message": "Active",
+ "translation": "Aktif",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Activating",
+ "message": "Activating",
+ "translation": "Mengaktifkan",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Inactive",
+ "message": "Inactive",
+ "translation": "Nonaktif",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Deactivating",
+ "message": "Deactivating",
+ "translation": "Menonaktifkan",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unknown state",
+ "message": "Unknown state",
+ "translation": "Status tidak diketahui",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log",
+ "message": "Log",
+ "translation": "Catatan",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Copy",
+ "message": "&Copy",
+ "translation": "Salin",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Select &all",
+ "message": "Select &all",
+ "translation": "Pilih semua",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Save to file…",
+ "message": "&Save to file…",
+ "translation": "Menyimpan ke dalam berkas…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Time",
+ "message": "Time",
+ "translation": "Waktu",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log message",
+ "message": "Log message",
+ "translation": "Pesan log",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
+ "message": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
+ "translation": "Berkas Txt (*.Txt)|*.Txt|Semua berkas (*.*)|*.*",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export log to file",
+ "message": "Export log to file",
+ "translation": "Ekspor log kedalam file",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&About WireGuard…",
+ "message": "&About WireGuard…",
+ "translation": "&Tentang WireGuard…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel Error",
+ "message": "Tunnel Error",
+ "translation": "Tunnel eror",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{ErrMsg}\n\nPlease consult the log for more information.",
+ "message": "{ErrMsg}\n\nPlease consult the log for more information.",
+ "translation": "{ErrMsg}\n\nSilakan baca log untuk informasi lebih lanjut.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "ErrMsg",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "errMsg"
+ }
+ ]
+ },
+ {
+ "id": "{Title} (out of date)",
+ "message": "{Title} (out of date)",
+ "translation": "{Title} (kadaluarsa)",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Title",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "mtw.Title()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Detection Error",
+ "message": "WireGuard Detection Error",
+ "translation": "Deteksi eror WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to wait for WireGuard window to appear: {Err}",
+ "message": "Unable to wait for WireGuard window to appear: {Err}",
+ "translation": "Tidak dapat menunggu jendela WireGuard muncul: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard: Deactivated",
+ "message": "WireGuard: Deactivated",
+ "translation": "WireGuard: Dinonaktifkan",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Unknown",
+ "message": "Status: Unknown",
+ "translation": "Status: Tidak diketahui",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Addresses: None",
+ "message": "Addresses: None",
+ "translation": "Alamat: Kosong",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Manage tunnels…",
+ "message": "&Manage tunnels…",
+ "translation": "&Manajer Tunnel…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Import tunnel(s) from file…",
+ "message": "&Import tunnel(s) from file…",
+ "translation": "&Impor tunnel dari file…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "E&xit",
+ "message": "E&xit",
+ "translation": "&Keluar",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard Tunnel Error",
+ "message": "WireGuard Tunnel Error",
+ "translation": "Wireguard Tunnel Eror",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard: {TextForStateglobalState_true}",
+ "message": "WireGuard: {TextForStateglobalState_true}",
+ "translation": "WireGuard: {TextForStateglobalState_true}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TextForStateglobalState_true",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "textForState(globalState, true)"
+ }
+ ]
+ },
+ {
+ "id": "Status: {StateText}",
+ "message": "Status: {StateText}",
+ "translation": "Status: {StateText}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "StateText",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "stateText"
+ }
+ ]
+ },
+ {
+ "id": "Export all tunnels to &zip…",
+ "message": "Export all tunnels to &zip…",
+ "translation": "Ekspor semua tunnel ke &zip…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Edit &selected tunnel…",
+ "message": "Edit &selected tunnel…",
+ "translation": "Ubah tunnel &terpilih…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Remove selected tunnel(s)",
+ "message": "&Remove selected tunnel(s)",
+ "translation": "&Hapus tunnel terpilih",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Could not import selected configuration: {LastErr}",
+ "message": "Could not import selected configuration: {LastErr}",
+ "translation": "Tidak dapat mengimpor konfigurasi yang dipilih: {LastErr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "LastErr",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "lastErr"
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/locales/it/messages.gotext.json b/locales/it/messages.gotext.json
index c2ff1eec..7943e5da 100644
--- a/locales/it/messages.gotext.json
+++ b/locales/it/messages.gotext.json
@@ -496,12 +496,6 @@
"translatorComment": "Copied from source."
},
{
- "id": "Invalid config key is missing an equals separator",
- "message": "Invalid config key is missing an equals separator",
- "translation": "Chiave di configurazione non valida manca di un separatore di uguale",
- "translatorComment": "Copied from source."
- },
- {
"id": "Key must have a value",
"message": "Key must have a value",
"translation": "La chiave deve avere un valore",
diff --git a/locales/ja/messages.gotext.json b/locales/ja/messages.gotext.json
index 8c1a7ddc..5d29fcd8 100644
--- a/locales/ja/messages.gotext.json
+++ b/locales/ja/messages.gotext.json
@@ -481,9 +481,9 @@
"translatorComment": "Copied from source."
},
{
- "id": "Invalid config key is missing an equals separator",
- "message": "Invalid config key is missing an equals separator",
- "translation": "イコール(=)が無いためキー項目として不正です",
+ "id": "Config key is missing an equals separator",
+ "message": "Config key is missing an equals separator",
+ "translation": "設定項目にイコール(=)セパレータがない",
"translatorComment": "Copied from source."
},
{
diff --git a/locales/pl/messages.gotext.json b/locales/pl/messages.gotext.json
new file mode 100644
index 00000000..da52f616
--- /dev/null
+++ b/locales/pl/messages.gotext.json
@@ -0,0 +1,23 @@
+{
+ "language": "pl",
+ "messages": [
+ {
+ "id": "Error",
+ "message": "Error",
+ "translation": "Błąd",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Command Line Options",
+ "message": "Command Line Options",
+ "translation": "Opcje wiersza poleceń",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "You must use the 64-bit version of WireGuard on this computer.",
+ "message": "You must use the 64-bit version of WireGuard on this computer.",
+ "translation": "Musisz użyć 64-bitowej wersji WireGuard na tym komputerze.",
+ "translatorComment": "Copied from source."
+ }
+ ]
+} \ No newline at end of file
diff --git a/locales/ro/messages.gotext.json b/locales/ro/messages.gotext.json
new file mode 100644
index 00000000..9c75901f
--- /dev/null
+++ b/locales/ro/messages.gotext.json
@@ -0,0 +1,1821 @@
+{
+ "language": "ro",
+ "messages": [
+ {
+ "id": "Error",
+ "message": "Error",
+ "translation": "Eroare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "(no argument): elevate and install manager service",
+ "message": "(no argument): elevate and install manager service",
+ "translation": "(fără argument): obținere drept administrativ și instalare serviciu de gestionare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Usage: {Args0} [\n{String}]",
+ "message": "Usage: {Args0} [\n{String}]",
+ "translation": "Utilizare: {Args0} [\n{String}]",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Args0",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "os.Args[0]"
+ },
+ {
+ "id": "String",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "builder.String()"
+ }
+ ]
+ },
+ {
+ "id": "Command Line Options",
+ "message": "Command Line Options",
+ "translation": "Opțiuni linie de comandă",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to determine whether the process is running under WOW64: {Err}",
+ "message": "Unable to determine whether the process is running under WOW64: {Err}",
+ "translation": "Nu se poate determina dacă procesul rulează sub WOW64: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "You must use the 64-bit version of WireGuard on this computer.",
+ "message": "You must use the 64-bit version of WireGuard on this computer.",
+ "translation": "Trebuie să utilizezi versiunea de 64 biți a WireGuard pe acest calculator.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to open current process token: {Err}",
+ "message": "Unable to open current process token: {Err}",
+ "translation": "Nu poate fi deschis tokenul actual de proces: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard poate fi utilizat doar de către utilizatorii care sunt membri ai grupului Builtin {AdminGroupName}.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard rulează, dar interfața cu utilizatorul este accesibilă doar din spațiile de lucru ale grupului Builtin {AdminGroupName}.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard system tray icon did not appear after 30 seconds.",
+ "message": "WireGuard system tray icon did not appear after 30 seconds.",
+ "translation": "Pictograma WireGuard din bara de sistem nu a apărut după 30 de secunde.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Now",
+ "message": "Now",
+ "translation": "Acum",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "System clock wound backward!",
+ "message": "System clock wound backward!",
+ "translation": "Ceasul de sistem a fost dat în spate!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Years} year(s)",
+ "message": "{Years} year(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Years",
+ "cases": {
+ "one": {
+ "msg": "{Years} an"
+ },
+ "few": {
+ "msg": "{Years} ani"
+ },
+ "other": {
+ "msg": "{Years} de ani"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Years",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "years"
+ }
+ ]
+ },
+ {
+ "id": "{Days} day(s)",
+ "message": "{Days} day(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Days",
+ "cases": {
+ "one": {
+ "msg": "{Days} zi"
+ },
+ "few": {
+ "msg": "{Days} zile"
+ },
+ "other": {
+ "msg": "{Days} de zile"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Days",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "days"
+ }
+ ]
+ },
+ {
+ "id": "{Hours} hour(s)",
+ "message": "{Hours} hour(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Hours",
+ "cases": {
+ "one": {
+ "msg": "{Hours} oră"
+ },
+ "few": {
+ "msg": "{Hours} ore"
+ },
+ "other": {
+ "msg": "{Hours} de ore"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Hours",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "hours"
+ }
+ ]
+ },
+ {
+ "id": "{Minutes} minute(s)",
+ "message": "{Minutes} minute(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Minutes",
+ "cases": {
+ "one": {
+ "msg": "{Minutes} minut"
+ },
+ "few": {
+ "msg": "{Minutes} minute"
+ },
+ "other": {
+ "msg": "{Minutes} de minute"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Minutes",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "minutes"
+ }
+ ]
+ },
+ {
+ "id": "{Seconds} second(s)",
+ "message": "{Seconds} second(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Seconds",
+ "cases": {
+ "one": {
+ "msg": "{Seconds} secundă"
+ },
+ "few": {
+ "msg": "{Seconds} secunde"
+ },
+ "other": {
+ "msg": "{Seconds} de secunde"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Seconds",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "seconds"
+ }
+ ]
+ },
+ {
+ "id": "{Timestamp} ago",
+ "message": "{Timestamp} ago",
+ "translation": "acum {Timestamp}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Timestamp",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "timestamp"
+ }
+ ]
+ },
+ {
+ "id": "{Bytes} B",
+ "message": "{Bytes} B",
+ "translation": "{Bytes} B",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Bytes",
+ "string": "%[1]d",
+ "type": "golang.zx2c4.com/wireguard/windows/conf.Bytes",
+ "underlyingType": "uint64",
+ "argNum": 1,
+ "expr": "b"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024} KiB",
+ "message": "{Float64b__1024} KiB",
+ "translation": "{Float64b__1024} KiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024} MiB",
+ "message": "{Float64b__1024__1024} MiB",
+ "translation": "{Float64b__1024__1024} MiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024} GiB",
+ "message": "{Float64b__1024__1024__1024} GiB",
+ "translation": "{Float64b__1024__1024__1024} GiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024__1024} TiB",
+ "message": "{Float64b__1024__1024__1024__1024} TiB",
+ "translation": "{Float64b__1024__1024__1024__1024} TiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Why}: {Offender}",
+ "message": "{Why}: {Offender}",
+ "translation": "{Why}: {Offender}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Why",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "e.why"
+ },
+ {
+ "id": "Offender",
+ "string": "%[2]q",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "e.offender"
+ }
+ ]
+ },
+ {
+ "id": "Invalid IP address",
+ "message": "Invalid IP address",
+ "translation": "Adresă IP invalidă",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid network prefix length",
+ "message": "Invalid network prefix length",
+ "translation": "Lungimea prefixului de rețea este invalidă",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Missing port from endpoint",
+ "message": "Missing port from endpoint",
+ "translation": "Lipsește portul de la punctul final",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid endpoint host",
+ "message": "Invalid endpoint host",
+ "translation": "Gazdă invalidă a punctului final",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Brackets must contain an IPv6 address",
+ "message": "Brackets must contain an IPv6 address",
+ "translation": "Parantezele trebuie să conțină o adresă IPv6",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid MTU",
+ "message": "Invalid MTU",
+ "translation": "MTU invalidă",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid port",
+ "message": "Invalid port",
+ "translation": "Port invalid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid persistent keepalive",
+ "message": "Invalid persistent keepalive",
+ "translation": "Mesaj keepalive persistent invalid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key: {Err}",
+ "message": "Invalid key: {Err}",
+ "translation": "Cheie invalidă: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Keys must decode to exactly 32 bytes",
+ "message": "Keys must decode to exactly 32 bytes",
+ "translation": "Rezultatul decodificat de chei trebuie să aibă exact 32 de octeți",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Number must be a number between 0 and 2^64-1: {Err}",
+ "message": "Number must be a number between 0 and 2^64-1: {Err}",
+ "translation": "Numărul trebuie să fie cuprins între 0 și 2^64-1: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Two commas in a row",
+ "message": "Two commas in a row",
+ "translation": "Două virgule una după cealaltă",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name is not valid",
+ "message": "Tunnel name is not valid",
+ "translation": "Numele tunelului nu este valid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Line must occur in a section",
+ "message": "Line must occur in a section",
+ "translation": "Linia trebuie să apară într-o secțiune",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Config key is missing an equals separator",
+ "message": "Config key is missing an equals separator",
+ "translation": "Cheii de configurare îi lipsește un separator de forma semnului egal",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Key must have a value",
+ "message": "Key must have a value",
+ "translation": "Cheia trebuie să conțină o valoare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Interface] section",
+ "message": "Invalid key for [Interface] section",
+ "translation": "Cheie invalidă pentru secțiunea [Interface]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Peer] section",
+ "message": "Invalid key for [Peer] section",
+ "translation": "Cheie invalidă pentru secțiunea [Peer]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "An interface must have a private key",
+ "message": "An interface must have a private key",
+ "translation": "O interfață trebuie să aibă o cheie privată",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[none specified]",
+ "message": "[none specified]",
+ "translation": "[niciuna specificată]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "All peers must have public keys",
+ "message": "All peers must have public keys",
+ "translation": "Toate perechile trebuie să aibă chei publice",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error in getting configuration",
+ "message": "Error in getting configuration",
+ "translation": "Eroare la obținerea configurației",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for interface section",
+ "message": "Invalid key for interface section",
+ "translation": "Cheie invalidă pentru secțiunea interfeței",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Protocol version must be 1",
+ "message": "Protocol version must be 1",
+ "translation": "Versiunea de protocol trebuie să fie 1",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for peer section",
+ "message": "Invalid key for peer section",
+ "translation": "Cheie invalidă pentru secțiunea perechii",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[EnumerationSeparator]",
+ "message": "[EnumerationSeparator]",
+ "translation": ", ",
+ "comment": "Text to insert between items when listing - most western languages will translate ‘[EnumerationSeparator]’ into ‘, ’ to produce lists like ‘apple, orange, strawberry’. Eastern languages might translate into ‘、’ to produce lists like ‘リンゴ、オレンジ、イチゴ’."
+ },
+ {
+ "id": "[UnitSeparator]",
+ "message": "[UnitSeparator]",
+ "translation": ", ",
+ "comment": "Text to insert when combining units of a measure - most languages will translate ‘[UnitSeparator]’ into ‘ ’ (space) to produce lists like ‘2 minuti 30 sekund’, or empty string ‘’ to produce ‘2分30秒’."
+ },
+ {
+ "id": "About WireGuard",
+ "message": "About WireGuard",
+ "translation": "Despre WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard logo image",
+ "message": "WireGuard logo image",
+ "translation": "Imagine siglă WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "message": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "translation": "Versiunea aplicației: {Number}\nVersiunea bibliotecii subiacente Go: {WireGuardGoVersion}\nVersiunea Go: {Version_go}\nSistem de operare: {OsName}\nArhitectură: {GOARCH}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Number",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "version.Number"
+ },
+ {
+ "id": "WireGuardGoVersion",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "device.WireGuardGoVersion"
+ },
+ {
+ "id": "Version_go",
+ "string": "%[3]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 3,
+ "expr": "strings.TrimPrefix(runtime.Version(), \"go\")"
+ },
+ {
+ "id": "OsName",
+ "string": "%[4]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 4,
+ "expr": "version.OsName()"
+ },
+ {
+ "id": "GOARCH",
+ "string": "%[5]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 5,
+ "expr": "runtime.GOARCH"
+ }
+ ]
+ },
+ {
+ "id": "Close",
+ "message": "Close",
+ "translation": "Închidere",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "♥ &Donate!",
+ "message": "♥ &Donate!",
+ "translation": "♥ &Donează!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status:",
+ "message": "Status:",
+ "translation": "Stare:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Deactivate",
+ "message": "&Deactivate",
+ "translation": "&Dezactivare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Activate",
+ "message": "&Activate",
+ "translation": "&Activare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Public key:",
+ "message": "Public key:",
+ "translation": "Cheie publică:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Listen port:",
+ "message": "Listen port:",
+ "translation": "Port de ascultare:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "MTU:",
+ "message": "MTU:",
+ "translation": "MTU:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Addresses:",
+ "message": "Addresses:",
+ "translation": "Adrese:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "DNS servers:",
+ "message": "DNS servers:",
+ "translation": "Servere DNS:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Preshared key:",
+ "message": "Preshared key:",
+ "translation": "Cheie predistribuită:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Allowed IPs:",
+ "message": "Allowed IPs:",
+ "translation": "IP-uri permise:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Endpoint:",
+ "message": "Endpoint:",
+ "translation": "Punct final:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Persistent keepalive:",
+ "message": "Persistent keepalive:",
+ "translation": "Mesaj keepalive persistent:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Latest handshake:",
+ "message": "Latest handshake:",
+ "translation": "Ultimul acord de interogare:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Transfer:",
+ "message": "Transfer:",
+ "translation": "Transferare:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "enabled",
+ "message": "enabled",
+ "translation": "activată",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{String} received, {String_1} sent",
+ "message": "{String} received, {String_1} sent",
+ "translation": "{String} primit, {String_1} trimis",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "String",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "c.RxBytes.String()"
+ },
+ {
+ "id": "String_1",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "c.TxBytes.String()"
+ }
+ ]
+ },
+ {
+ "id": "Failed to determine tunnel state",
+ "message": "Failed to determine tunnel state",
+ "translation": "Nu a putut fi determinată starea tunelului",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Failed to activate tunnel",
+ "message": "Failed to activate tunnel",
+ "translation": "Tunelul nu a putut fi activat",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Failed to deactivate tunnel",
+ "message": "Failed to deactivate tunnel",
+ "translation": "Tunelul nu a putut fi dezactivat",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Interface: {Name}",
+ "message": "Interface: {Name}",
+ "translation": "Interfață: {Name}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "config.Name"
+ }
+ ]
+ },
+ {
+ "id": "Peer",
+ "message": "Peer",
+ "translation": "Pereche",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Create new tunnel",
+ "message": "Create new tunnel",
+ "translation": "Creare tunel nou",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Edit tunnel",
+ "message": "Edit tunnel",
+ "translation": "Editare tunel",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Name:",
+ "message": "&Name:",
+ "translation": "&Nume:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Public key:",
+ "message": "&Public key:",
+ "translation": "Cheie &publică:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "(unknown)",
+ "message": "(unknown)",
+ "translation": "(necunoscută)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Block untunneled traffic (kill-switch)",
+ "message": "&Block untunneled traffic (kill-switch)",
+ "translation": "&Blochează traficul care nu trece prin tunel (întrerupător de activitate)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.",
+ "message": "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.",
+ "translation": "Când o configurație conține exact o pereche, iar acea pereche are IP-uri permise care conțin cel puțin o variantă dintre 0.0.0.0/0 sau ::/0, atunci serviciul tunelului activează un set de reguli al paravanului de protecție pentru a bloca întregul trafic care nu provine de la interfața tunelului, precum și întregul trafic direcționat spre aceasta, existând excepții speciale pentru DHCP și NDP.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Save",
+ "message": "&Save",
+ "translation": "&Salvare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Cancel",
+ "message": "Cancel",
+ "translation": "Anulare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Configuration:",
+ "message": "&Configuration:",
+ "translation": "&Configurație:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid name",
+ "message": "Invalid name",
+ "translation": "Nume invalid",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "A name is required.",
+ "message": "A name is required.",
+ "translation": "Este necesar un nume.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name ‘{NewName}’ is invalid.",
+ "message": "Tunnel name ‘{NewName}’ is invalid.",
+ "translation": "Numele tunelului „{NewName}” este invalid.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "NewName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "newName"
+ }
+ ]
+ },
+ {
+ "id": "Unable to list existing tunnels",
+ "message": "Unable to list existing tunnels",
+ "translation": "Tunelurile existente nu pot fi listate",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel already exists",
+ "message": "Tunnel already exists",
+ "translation": "Tunelul există deja",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Another tunnel already exists with the name ‘{NewName}’.",
+ "message": "Another tunnel already exists with the name ‘{NewName}’.",
+ "translation": "Există deja un alt tunel cu numele „{NewName}”.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "NewName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "newName"
+ }
+ ]
+ },
+ {
+ "id": "Unable to create new configuration",
+ "message": "Unable to create new configuration",
+ "translation": "Nu se poate crea configurația nouă",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Writing file failed",
+ "message": "Writing file failed",
+ "translation": "Scrierea fișierului a eșuat",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "File ‘{FilePath}’ already exists.\n\nDo you want to overwrite it?",
+ "message": "File ‘{FilePath}’ already exists.\n\nDo you want to overwrite it?",
+ "translation": "Fișierul „{FilePath}” există deja.\n\nDorești suprascrierea acestuia?",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "FilePath",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "filePath"
+ }
+ ]
+ },
+ {
+ "id": "Active",
+ "message": "Active",
+ "translation": "Activ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Activating",
+ "message": "Activating",
+ "translation": "Se activează",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Inactive",
+ "message": "Inactive",
+ "translation": "Inactiv",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Deactivating",
+ "message": "Deactivating",
+ "translation": "Se dezactivează",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unknown state",
+ "message": "Unknown state",
+ "translation": "Stare necunoscută",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log",
+ "message": "Log",
+ "translation": "Jurnal",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Copy",
+ "message": "&Copy",
+ "translation": "&Copiere",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Select &all",
+ "message": "Select &all",
+ "translation": "Selectare &totală",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Save to file…",
+ "message": "&Save to file…",
+ "translation": "&Salvare în fișier…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Time",
+ "message": "Time",
+ "translation": "Timp",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log message",
+ "message": "Log message",
+ "translation": "Mesaj de jurnal",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
+ "message": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
+ "translation": "Fișiere text (*.txt)|*.txt|Toate fișierele (*.*)|*.*",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export log to file",
+ "message": "Export log to file",
+ "translation": "Exportare jurnal în fișier",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&About WireGuard…",
+ "message": "&About WireGuard…",
+ "translation": "&Despre WireGuard…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel Error",
+ "message": "Tunnel Error",
+ "translation": "Eroare de tunel",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{ErrMsg}\n\nPlease consult the log for more information.",
+ "message": "{ErrMsg}\n\nPlease consult the log for more information.",
+ "translation": "{ErrMsg}\n\nConsultă jurnalul pentru mai multe informații.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "ErrMsg",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "errMsg"
+ }
+ ]
+ },
+ {
+ "id": "{Title} (out of date)",
+ "message": "{Title} (out of date)",
+ "translation": "{Title} (neactualizat)",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Title",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "mtw.Title()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Detection Error",
+ "message": "WireGuard Detection Error",
+ "translation": "Eroare de detectare WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to wait for WireGuard window to appear: {Err}",
+ "message": "Unable to wait for WireGuard window to appear: {Err}",
+ "translation": "Nu se poate aștepta ca fereastra WireGuard să apară: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard: Deactivated",
+ "message": "WireGuard: Deactivated",
+ "translation": "WireGuard: dezactivat",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Unknown",
+ "message": "Status: Unknown",
+ "translation": "Stare: necunoscută",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Addresses: None",
+ "message": "Addresses: None",
+ "translation": "Adrese: niciuna",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Manage tunnels…",
+ "message": "&Manage tunnels…",
+ "translation": "&Gestionare tuneluri…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Import tunnel(s) from file…",
+ "message": "&Import tunnel(s) from file…",
+ "translation": "&Importare tunel(uri) din fișier…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "E&xit",
+ "message": "E&xit",
+ "translation": "Ie&șire",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard Tunnel Error",
+ "message": "WireGuard Tunnel Error",
+ "translation": "Eroare de tunel WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard: {TextForStateglobalState_true}",
+ "message": "WireGuard: {TextForStateglobalState_true}",
+ "translation": "WireGuard: {TextForStateglobalState_true}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TextForStateglobalState_true",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "textForState(globalState, true)"
+ }
+ ]
+ },
+ {
+ "id": "Status: {StateText}",
+ "message": "Status: {StateText}",
+ "translation": "Stare: {StateText}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "StateText",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "stateText"
+ }
+ ]
+ },
+ {
+ "id": "Addresses: {String}",
+ "message": "Addresses: {String}",
+ "translation": "Adrese: {String}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "String",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "sb.String()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Activated",
+ "message": "WireGuard Activated",
+ "translation": "WireGuard activat",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "The {Name} tunnel has been activated.",
+ "message": "The {Name} tunnel has been activated.",
+ "translation": "Tunelul {Name} a fost activat.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnel.Name"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Deactivated",
+ "message": "WireGuard Deactivated",
+ "translation": "WireGuard dezactivat",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "The {Name} tunnel has been deactivated.",
+ "message": "The {Name} tunnel has been deactivated.",
+ "translation": "Tunelul {Name} a fost dezactivat.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnel.Name"
+ }
+ ]
+ },
+ {
+ "id": "An Update is Available!",
+ "message": "An Update is Available!",
+ "translation": "Este disponibilă o actualizare!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard Update Available",
+ "message": "WireGuard Update Available",
+ "translation": "Actualizare disponibilă pentru WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "An update to WireGuard is now available. You are advised to update as soon as possible.",
+ "message": "An update to WireGuard is now available. You are advised to update as soon as possible.",
+ "translation": "O actualizare pentru WireGuard este acum disponibilă. Se recomandă efectuarea actualizării cât mai rapid posibil.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnels",
+ "message": "Tunnels",
+ "translation": "Tuneluri",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Edit",
+ "message": "&Edit",
+ "translation": "%Editare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Add &empty tunnel…",
+ "message": "Add &empty tunnel…",
+ "translation": "Adăugare tunel &gol…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Add Tunnel",
+ "message": "Add Tunnel",
+ "translation": "Adăugare tunel",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Remove selected tunnel(s)",
+ "message": "Remove selected tunnel(s)",
+ "translation": "Eliminare tunel(uri) selectat(e)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export all tunnels to zip",
+ "message": "Export all tunnels to zip",
+ "translation": "Exportă toate tunelurile în zip",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Toggle",
+ "message": "&Toggle",
+ "translation": "&Comutare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export all tunnels to &zip…",
+ "message": "Export all tunnels to &zip…",
+ "translation": "Exportă toate tunelurile în &zip…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Edit &selected tunnel…",
+ "message": "Edit &selected tunnel…",
+ "translation": "Editare tunel &selectat…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Remove selected tunnel(s)",
+ "message": "&Remove selected tunnel(s)",
+ "translation": "&Eliminare tunel(uri) selectat(e)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Could not import selected configuration: {LastErr}",
+ "message": "Could not import selected configuration: {LastErr}",
+ "translation": "Configurația selectată nu a putut fi importată: {LastErr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "LastErr",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "lastErr"
+ }
+ ]
+ },
+ {
+ "id": "Could not enumerate existing tunnels: {LastErr}",
+ "message": "Could not enumerate existing tunnels: {LastErr}",
+ "translation": "Tunelurile existente nu au putut fi enumerate: {LastErr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "LastErr",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "lastErr"
+ }
+ ]
+ },
+ {
+ "id": "Another tunnel already exists with the name ‘{Name}’",
+ "message": "Another tunnel already exists with the name ‘{Name}’",
+ "translation": "Există deja un alt tunel cu numele „{Name}”",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "unparsedConfig.Name"
+ }
+ ]
+ },
+ {
+ "id": "Unable to import configuration: {LastErr}",
+ "message": "Unable to import configuration: {LastErr}",
+ "translation": "Configurația nu poate fi importată: {LastErr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "LastErr",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "lastErr"
+ }
+ ]
+ },
+ {
+ "id": "Imported tunnels",
+ "message": "Imported tunnels",
+ "translation": "Tuneluri importate",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Imported {M} tunnels",
+ "message": "Imported {M} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "M",
+ "cases": {
+ "one": {
+ "msg": "Importat {M} tunel"
+ },
+ "few": {
+ "msg": "Importat {M} tuneluri"
+ },
+ "other": {
+ "msg": "Importat {M} de tuneluri"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "M",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "m"
+ }
+ ]
+ },
+ {
+ "id": "Imported {M} of {N} tunnels",
+ "message": "Imported {M} of {N} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "N",
+ "cases": {
+ "one": {
+ "msg": "Importat {M} din {N} tunel"
+ },
+ "few": {
+ "msg": "Importat {M} din {N} tuneluri"
+ },
+ "other": {
+ "msg": "Importat {M} din {N} de tuneluri"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "M",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "m"
+ },
+ {
+ "id": "N",
+ "string": "%[2]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 2,
+ "expr": "n"
+ }
+ ]
+ },
+ {
+ "id": "Unable to create tunnel",
+ "message": "Unable to create tunnel",
+ "translation": "Tunelul nu poate fi creat",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Delete {TunnelCount} tunnels",
+ "message": "Delete {TunnelCount} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "TunnelCount",
+ "cases": {
+ "one": {
+ "msg": "Ștergere {TunnelCount} tunel"
+ },
+ "few": {
+ "msg": "Ștergere {TunnelCount} tuneluri"
+ },
+ "other": {
+ "msg": "Ștergere {TunnelCount} de tuneluri"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "TunnelCount",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "tunnelCount"
+ }
+ ]
+ },
+ {
+ "id": "Are you sure you would like to delete {TunnelCount} tunnels?",
+ "message": "Are you sure you would like to delete {TunnelCount} tunnels?",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "TunnelCount",
+ "cases": {
+ "one": {
+ "msg": "Ești sigur că dorești să ștergi {TunnelCount} tunel?"
+ },
+ "few": {
+ "msg": "Ești sigur că dorești să ștergi {TunnelCount} tuneluri?"
+ },
+ "other": {
+ "msg": "Ești sigur că dorești să ștergi {TunnelCount} de tuneluri?"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "TunnelCount",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "tunnelCount"
+ }
+ ]
+ },
+ {
+ "id": "Delete tunnel ‘{TunnelName}’",
+ "message": "Delete tunnel ‘{TunnelName}’",
+ "translation": "Ștergere tunel „{TunnelName}”",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TunnelName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnelName"
+ }
+ ]
+ },
+ {
+ "id": "Are you sure you would like to delete tunnel ‘{TunnelName}’?",
+ "message": "Are you sure you would like to delete tunnel ‘{TunnelName}’?",
+ "translation": "Ești sigur că dorești să ștergi tunelul „{TunnelName}”?",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TunnelName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnelName"
+ }
+ ]
+ },
+ {
+ "id": "{Question} You cannot undo this action.",
+ "message": "{Question} You cannot undo this action.",
+ "translation": "{Question} Această acțiune nu poate fi anulată.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Question",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "question"
+ }
+ ]
+ },
+ {
+ "id": "Unable to delete tunnel",
+ "message": "Unable to delete tunnel",
+ "translation": "Tunelul nu poate fi șters",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "A tunnel was unable to be removed: {Error}",
+ "message": "A tunnel was unable to be removed: {Error}",
+ "translation": "Un tunel nu a putut fi eliminat: {Error}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Error",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "errors[0].Error()"
+ }
+ ]
+ },
+ {
+ "id": "Unable to delete tunnels",
+ "message": "Unable to delete tunnels",
+ "translation": "Nu se pot șterge tunelurile",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Lenerrors} tunnels were unable to be removed.",
+ "message": "{Lenerrors} tunnels were unable to be removed.",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Lenerrors",
+ "cases": {
+ "one": {
+ "msg": "{Lenerrors} tunel nu a putut fi eliminat."
+ },
+ "few": {
+ "msg": "{Lenerrors} tuneluri nu au putut fi eliminate."
+ },
+ "other": {
+ "msg": "{Lenerrors} de tuneluri nu au putut fi eliminate."
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Lenerrors",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "len(errors)"
+ }
+ ]
+ },
+ {
+ "id": "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*",
+ "message": "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*",
+ "translation": "Fișiere de configurare (*.zip, *.conf)|*.zip;*.conf|Toate fișierele (*.*)|*.*",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Import tunnel(s) from file",
+ "message": "Import tunnel(s) from file",
+ "translation": "Importare tunel(uri) din fișier",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Configuration ZIP Files (*.zip)|*.zip",
+ "message": "Configuration ZIP Files (*.zip)|*.zip",
+ "translation": "Fișiere ZIP de configurare (*.zip)|*.zip",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export tunnels to zip",
+ "message": "Export tunnels to zip",
+ "translation": "Exportare tuneluri în zip",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Title} (unsigned build, no updates)",
+ "message": "{Title} (unsigned build, no updates)",
+ "translation": "{Title} (versiune nesemnată, fără actualizări)",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Title",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "mtw.Title()"
+ }
+ ]
+ },
+ {
+ "id": "Error Exiting WireGuard",
+ "message": "Error Exiting WireGuard",
+ "translation": "Eroare la ieșirea din WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to exit service due to: {Err}. You may want to stop WireGuard from the service manager.",
+ "message": "Unable to exit service due to: {Err}. You may want to stop WireGuard from the service manager.",
+ "translation": "Nu se poate ieși din serviciu din cauza: {Err}. Poți opri WireGuard din managerul de servicii.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "An update to WireGuard is available. It is highly advisable to update without delay.",
+ "message": "An update to WireGuard is available. It is highly advisable to update without delay.",
+ "translation": "Este disponibilă o actualizare pentru WireGuard. Se recomandă ferm actualizarea imediată.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Waiting for user",
+ "message": "Status: Waiting for user",
+ "translation": "Stare: se așteaptă utilizatorul",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Update Now",
+ "message": "Update Now",
+ "translation": "Actualizare acum",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Waiting for updater service",
+ "message": "Status: Waiting for updater service",
+ "translation": "Stare: se așteaptă serviciul de actualizare",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error: {Err}. Please try again.",
+ "message": "Error: {Err}. Please try again.",
+ "translation": "Eroare: {Err}. Încearcă din nou.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Status: Complete!",
+ "message": "Status: Complete!",
+ "translation": "Stare: finalizată!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "http2: Framer {F}: failed to decode just-written frame",
+ "message": "http2: Framer {F}: failed to decode just-written frame",
+ "translation": "http2: Framer {F}: decodificarea cadrului recent scris a eșuat",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "F",
+ "string": "%[1]p",
+ "type": "*net/http.http2Framer",
+ "underlyingType": "*net/http.http2Framer",
+ "argNum": 1,
+ "expr": "f"
+ }
+ ]
+ },
+ {
+ "id": "http2: Framer {F}: wrote {Http2summarizeFramefr}",
+ "message": "http2: Framer {F}: wrote {Http2summarizeFramefr}",
+ "translation": "http2: Framer {F}: a scris {Http2summarizeFramefr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "F",
+ "string": "%[1]p",
+ "type": "*net/http.http2Framer",
+ "underlyingType": "*net/http.http2Framer",
+ "argNum": 1,
+ "expr": "f"
+ },
+ {
+ "id": "Http2summarizeFramefr",
+ "string": "%[2]v",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "http2summarizeFrame(fr)"
+ }
+ ]
+ },
+ {
+ "id": "http2: Framer {Fr}: read {Http2summarizeFramef}",
+ "message": "http2: Framer {Fr}: read {Http2summarizeFramef}",
+ "translation": "http2: Framer {Fr}: a citit {Http2summarizeFramef}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Fr",
+ "string": "%[1]p",
+ "type": "*net/http.http2Framer",
+ "underlyingType": "*net/http.http2Framer",
+ "argNum": 1,
+ "expr": "fr"
+ },
+ {
+ "id": "Http2summarizeFramef",
+ "string": "%[2]v",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "http2summarizeFrame(f)"
+ }
+ ]
+ },
+ {
+ "id": "http2: decoded hpack field {HeaderField}",
+ "message": "http2: decoded hpack field {HeaderField}",
+ "translation": "http2: câmp hpack decodificat {HeaderField}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "HeaderField",
+ "string": "%+[1]v",
+ "type": "vendor/golang.org/x/net/http2/hpack.HeaderField",
+ "underlyingType": "struct{Name string; Value string; Sensitive bool}",
+ "argNum": 1,
+ "expr": "hf"
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/locales/ru/messages.gotext.json b/locales/ru/messages.gotext.json
index 1d5f6775..c4438813 100644
--- a/locales/ru/messages.gotext.json
+++ b/locales/ru/messages.gotext.json
@@ -526,12 +526,6 @@
"translatorComment": "Copied from source."
},
{
- "id": "Invalid config key is missing an equals separator",
- "message": "Invalid config key is missing an equals separator",
- "translation": "В ключе конфигурации отсутствует разделитель",
- "translatorComment": "Copied from source."
- },
- {
"id": "Key must have a value",
"message": "Key must have a value",
"translation": "Ключ должен иметь значение",
@@ -684,13 +678,13 @@
{
"id": "&Deactivate",
"message": "&Deactivate",
- "translation": "&Отключен",
+ "translation": "&Отключить",
"translatorComment": "Copied from source."
},
{
"id": "&Activate",
"message": "&Activate",
- "translation": "&Подключен",
+ "translation": "&Подключить",
"translatorComment": "Copied from source."
},
{
diff --git a/locales/sk/messages.gotext.json b/locales/sk/messages.gotext.json
new file mode 100644
index 00000000..cbe7412a
--- /dev/null
+++ b/locales/sk/messages.gotext.json
@@ -0,0 +1,669 @@
+{
+ "language": "sk",
+ "messages": [
+ {
+ "id": "Error",
+ "message": "Error",
+ "translation": "Chyba",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "(no argument): elevate and install manager service",
+ "message": "(no argument): elevate and install manager service",
+ "translation": "(bez argumentu): získať administrátorské práva a nainštalovať službu manažéra",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Usage: {Args0} [\n{String}]",
+ "message": "Usage: {Args0} [\n{String}]",
+ "translation": "Použitie: {Args0} [\n{String}]",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Args0",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "os.Args[0]"
+ },
+ {
+ "id": "String",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "builder.String()"
+ }
+ ]
+ },
+ {
+ "id": "Command Line Options",
+ "message": "Command Line Options",
+ "translation": "Možnosti príkazového riadku",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to determine whether the process is running under WOW64: {Err}",
+ "message": "Unable to determine whether the process is running under WOW64: {Err}",
+ "translation": "Nepodarilo sa zistiť, či proces beží pod WOW64: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "You must use the 64-bit version of WireGuard on this computer.",
+ "message": "You must use the 64-bit version of WireGuard on this computer.",
+ "translation": "Na tomto počítači je potrebné použiť 64 bitovú verziu aplikácie WireGuard.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to open current process token: {Err}",
+ "message": "Unable to open current process token: {Err}",
+ "translation": "Nepodarilo sa otvoriť token aktuálneho procesu: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard môžu používať iba členovia Builtin skupiny {AdminGroupName}.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard je spustený, ale používateľské rozhranie je prístupné iba členom Builtin skupiny {AdminGroupName}.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard system tray icon did not appear after 30 seconds.",
+ "message": "WireGuard system tray icon did not appear after 30 seconds.",
+ "translation": "WireGuard ikona sa ani po 30 sekundách neobjavila na systémovej lište.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Now",
+ "message": "Now",
+ "translation": "Teraz",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "System clock wound backward!",
+ "message": "System clock wound backward!",
+ "translation": "Systémové hodiny sa vrátili v čase!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Days} day(s)",
+ "message": "{Days} day(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Days",
+ "cases": {
+ "one": {
+ "msg": "{Days} deň"
+ },
+ "few": {
+ "msg": "{Days} dni"
+ },
+ "many": {
+ "msg": "{Days} dní"
+ },
+ "other": {
+ "msg": "{Days} dní"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Days",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "days"
+ }
+ ]
+ },
+ {
+ "id": "{Hours} hour(s)",
+ "message": "{Hours} hour(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Hours",
+ "cases": {
+ "one": {
+ "msg": "{Hours} hodina"
+ },
+ "few": {
+ "msg": "{Hours} hodiny"
+ },
+ "many": {
+ "msg": "{Hours} hodín"
+ },
+ "other": {
+ "msg": "{Hours} hodín"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Hours",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "hours"
+ }
+ ]
+ },
+ {
+ "id": "{Minutes} minute(s)",
+ "message": "{Minutes} minute(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Minutes",
+ "cases": {
+ "one": {
+ "msg": "{Minutes} minúta"
+ },
+ "few": {
+ "msg": "{Minutes} minúty"
+ },
+ "many": {
+ "msg": "{Minutes} minút"
+ },
+ "other": {
+ "msg": "{Minutes} minút"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Minutes",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "minutes"
+ }
+ ]
+ },
+ {
+ "id": "{Seconds} second(s)",
+ "message": "{Seconds} second(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Seconds",
+ "cases": {
+ "one": {
+ "msg": "{Seconds} sekunda"
+ },
+ "few": {
+ "msg": "{Seconds} sekundy"
+ },
+ "many": {
+ "msg": "{Seconds} sekúnd"
+ },
+ "other": {
+ "msg": "{Seconds} sekúnd"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Seconds",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "seconds"
+ }
+ ]
+ },
+ {
+ "id": "{Timestamp} ago",
+ "message": "{Timestamp} ago",
+ "translation": "Pred {Timestamp}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Timestamp",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "timestamp"
+ }
+ ]
+ },
+ {
+ "id": "{Bytes} B",
+ "message": "{Bytes} B",
+ "translation": "{Bytes} B",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Bytes",
+ "string": "%[1]d",
+ "type": "golang.zx2c4.com/wireguard/windows/conf.Bytes",
+ "underlyingType": "uint64",
+ "argNum": 1,
+ "expr": "b"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024} KiB",
+ "message": "{Float64b__1024} KiB",
+ "translation": "{Float64b__1024} KiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024} MiB",
+ "message": "{Float64b__1024__1024} MiB",
+ "translation": "{Float64b__1024__1024} MiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024} GiB",
+ "message": "{Float64b__1024__1024__1024} GiB",
+ "translation": "{Float64b__1024__1024__1024} GiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024__1024} TiB",
+ "message": "{Float64b__1024__1024__1024__1024} TiB",
+ "translation": "{Float64b__1024__1024__1024__1024} TiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Why}: {Offender}",
+ "message": "{Why}: {Offender}",
+ "translation": "{Why}: {Offender}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Why",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "e.why"
+ },
+ {
+ "id": "Offender",
+ "string": "%[2]q",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "e.offender"
+ }
+ ]
+ },
+ {
+ "id": "Invalid IP address",
+ "message": "Invalid IP address",
+ "translation": "Neplatná adresa IP",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid network prefix length",
+ "message": "Invalid network prefix length",
+ "translation": "Neplatná dĺžka sieťového prefixu",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Missing port from endpoint",
+ "message": "Missing port from endpoint",
+ "translation": "Koncovému bodu chýba číslo portu",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid endpoint host",
+ "message": "Invalid endpoint host",
+ "translation": "Neplatný hostiteľ koncového bodu",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Brackets must contain an IPv6 address",
+ "message": "Brackets must contain an IPv6 address",
+ "translation": "Medzi zátvorkami musí byť IPv6 adresa",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid MTU",
+ "message": "Invalid MTU",
+ "translation": "Neplatné MTU",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid port",
+ "message": "Invalid port",
+ "translation": "Neplatný port",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid persistent keepalive",
+ "message": "Invalid persistent keepalive",
+ "translation": "Neplatný perzistentný keepalive",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key: {Err}",
+ "message": "Invalid key: {Err}",
+ "translation": "Neplatný kľúč: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Keys must decode to exactly 32 bytes",
+ "message": "Keys must decode to exactly 32 bytes",
+ "translation": "Dekódované kľúče musia mať veľkosť 32 bajtov",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Number must be a number between 0 and 2^64-1: {Err}",
+ "message": "Number must be a number between 0 and 2^64-1: {Err}",
+ "translation": "Číslo musí mať hodnotu medzi 0 a 2^64-1: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Two commas in a row",
+ "message": "Two commas in a row",
+ "translation": "Dve čiarky v poradí",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name is not valid",
+ "message": "Tunnel name is not valid",
+ "translation": "Názov tunela nie je platný",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Line must occur in a section",
+ "message": "Line must occur in a section",
+ "translation": "Sekcia musí obsahovať čiaru",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Config key is missing an equals separator",
+ "message": "Config key is missing an equals separator",
+ "translation": "Konfiguračný kľúč neobsahuje separátor (znamienko rovnosti)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Key must have a value",
+ "message": "Key must have a value",
+ "translation": "Kľúč musí obsahovať hodnotu",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Interface] section",
+ "message": "Invalid key for [Interface] section",
+ "translation": "Neplatný kľúč sekcie [Interface]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Peer] section",
+ "message": "Invalid key for [Peer] section",
+ "translation": "Neplatný kľúč sekcie [Peer]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "An interface must have a private key",
+ "message": "An interface must have a private key",
+ "translation": "Rozhranie musí mať priradený súkromný kľúč",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[none specified]",
+ "message": "[none specified]",
+ "translation": "[nešpecifikované]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "All peers must have public keys",
+ "message": "All peers must have public keys",
+ "translation": "Všetci peeri musia mať priradený verejný kľúč",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error in getting configuration",
+ "message": "Error in getting configuration",
+ "translation": "Chyba pri získavaní konfigurácie",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for interface section",
+ "message": "Invalid key for interface section",
+ "translation": "Neplatný kľúč sekcie rozhrania",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Protocol version must be 1",
+ "message": "Protocol version must be 1",
+ "translation": "Verzia protokolu musí byť 1",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for peer section",
+ "message": "Invalid key for peer section",
+ "translation": "Neplatný kľúč peer sekcie",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[EnumerationSeparator]",
+ "message": "[EnumerationSeparator]",
+ "translation": ", ",
+ "comment": "Text to insert between items when listing - most western languages will translate ‘[EnumerationSeparator]’ into ‘, ’ to produce lists like ‘apple, orange, strawberry’. Eastern languages might translate into ‘、’ to produce lists like ‘リンゴ、オレンジ、イチゴ’."
+ },
+ {
+ "id": "[UnitSeparator]",
+ "message": "[UnitSeparator]",
+ "translation": " ",
+ "comment": "Text to insert when combining units of a measure - most languages will translate ‘[UnitSeparator]’ into ‘ ’ (space) to produce lists like ‘2 minuti 30 sekund’, or empty string ‘’ to produce ‘2分30秒’."
+ },
+ {
+ "id": "About WireGuard",
+ "message": "About WireGuard",
+ "translation": "O WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard logo image",
+ "message": "WireGuard logo image",
+ "translation": "Obrázok WireGuard loga",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "message": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "translation": "Verzia aplikácie: {Number}\nVerzia Go backendu: {WireGuardGoVersion}\nVerzia Go: {Version_go}\nOperačný systém: {OsName}\nArchitektúra: {GOARCH}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Number",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "version.Number"
+ },
+ {
+ "id": "WireGuardGoVersion",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "device.WireGuardGoVersion"
+ },
+ {
+ "id": "Version_go",
+ "string": "%[3]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 3,
+ "expr": "strings.TrimPrefix(runtime.Version(), \"go\")"
+ },
+ {
+ "id": "OsName",
+ "string": "%[4]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 4,
+ "expr": "version.OsName()"
+ },
+ {
+ "id": "GOARCH",
+ "string": "%[5]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 5,
+ "expr": "runtime.GOARCH"
+ }
+ ]
+ },
+ {
+ "id": "Close",
+ "message": "Close",
+ "translation": "Zatvoriť",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "♥ &Donate!",
+ "message": "♥ &Donate!",
+ "translation": "♥ a Darovat!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status:",
+ "message": "Status:",
+ "translation": "Stav:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Deactivate",
+ "message": "&Deactivate",
+ "translation": "a Deaktivovať",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Activate",
+ "message": "&Activate",
+ "translation": "a Aktivovať",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Public key:",
+ "message": "Public key:",
+ "translation": "Verejný kľúč:",
+ "translatorComment": "Copied from source."
+ }
+ ]
+} \ No newline at end of file
diff --git a/locales/sl/messages.gotext.json b/locales/sl/messages.gotext.json
index 2c7bd56d..0b1b4cbc 100644
--- a/locales/sl/messages.gotext.json
+++ b/locales/sl/messages.gotext.json
@@ -526,12 +526,6 @@
"translatorComment": "Copied from source."
},
{
- "id": "Invalid config key is missing an equals separator",
- "message": "Invalid config key is missing an equals separator",
- "translation": "Napačnemu ključu konfiguracije manjka ločilo-enačaj",
- "translatorComment": "Copied from source."
- },
- {
"id": "Key must have a value",
"message": "Key must have a value",
"translation": "Ključ mora imeti vrednost",
diff --git a/locales/vi/messages.gotext.json b/locales/vi/messages.gotext.json
new file mode 100644
index 00000000..b167b27f
--- /dev/null
+++ b/locales/vi/messages.gotext.json
@@ -0,0 +1,382 @@
+{
+ "language": "vi",
+ "messages": [
+ {
+ "id": "Error",
+ "message": "Error",
+ "translation": "Lỗi",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Now",
+ "message": "Now",
+ "translation": "Vừa xong",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Years} year(s)",
+ "message": "{Years} year(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Years",
+ "cases": {
+ "other": {
+ "msg": "{Years} năm"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Years",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "years"
+ }
+ ]
+ },
+ {
+ "id": "{Days} day(s)",
+ "message": "{Days} day(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Days",
+ "cases": {
+ "other": {
+ "msg": "{Days} ngày"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Days",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "days"
+ }
+ ]
+ },
+ {
+ "id": "{Hours} hour(s)",
+ "message": "{Hours} hour(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Hours",
+ "cases": {
+ "other": {
+ "msg": "{Hours} giờ"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Hours",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "hours"
+ }
+ ]
+ },
+ {
+ "id": "{Minutes} minute(s)",
+ "message": "{Minutes} minute(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Minutes",
+ "cases": {
+ "other": {
+ "msg": "{Minutes} phút"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Minutes",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "minutes"
+ }
+ ]
+ },
+ {
+ "id": "{Seconds} second(s)",
+ "message": "{Seconds} second(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Seconds",
+ "cases": {
+ "other": {
+ "msg": "{Seconds} giây"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Seconds",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "seconds"
+ }
+ ]
+ },
+ {
+ "id": "{Timestamp} ago",
+ "message": "{Timestamp} ago",
+ "translation": "{Timestamp} trước",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Timestamp",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "timestamp"
+ }
+ ]
+ },
+ {
+ "id": "Invalid IP address",
+ "message": "Invalid IP address",
+ "translation": "Địa chỉ IP không hợp lệ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid port",
+ "message": "Invalid port",
+ "translation": "Cổng (port) không hợp lệ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name is not valid",
+ "message": "Tunnel name is not valid",
+ "translation": "Tên VPN không hợp lệ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "About WireGuard",
+ "message": "About WireGuard",
+ "translation": "Thông tin về WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard logo image",
+ "message": "WireGuard logo image",
+ "translation": "Logo WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "message": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "translation": "Phiên bản ứng dụng: {Number}\nPhiên bản Golang của WG: {WireGuardGoVersion}\nPhiên bản Golang: {Version_go}\nHệ điều hành: {OsName}\nKiến trúc xử lý: {GOARCH}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Number",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "version.Number"
+ },
+ {
+ "id": "WireGuardGoVersion",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "device.WireGuardGoVersion"
+ },
+ {
+ "id": "Version_go",
+ "string": "%[3]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 3,
+ "expr": "strings.TrimPrefix(runtime.Version(), \"go\")"
+ },
+ {
+ "id": "OsName",
+ "string": "%[4]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 4,
+ "expr": "version.OsName()"
+ },
+ {
+ "id": "GOARCH",
+ "string": "%[5]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 5,
+ "expr": "runtime.GOARCH"
+ }
+ ]
+ },
+ {
+ "id": "Close",
+ "message": "Close",
+ "translation": "Đóng",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status:",
+ "message": "Status:",
+ "translation": "Trạng thái:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Endpoint:",
+ "message": "Endpoint:",
+ "translation": "Đầu cuối:",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "enabled",
+ "message": "enabled",
+ "translation": "đã kích hoạt",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{String} received, {String_1} sent",
+ "message": "{String} received, {String_1} sent",
+ "translation": "Nhận {String}, gứi {String_1}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "String",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "c.RxBytes.String()"
+ },
+ {
+ "id": "String_1",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "c.TxBytes.String()"
+ }
+ ]
+ },
+ {
+ "id": "Failed to determine tunnel state",
+ "message": "Failed to determine tunnel state",
+ "translation": "Không thể xác định tình trạng VPN",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Failed to activate tunnel",
+ "message": "Failed to activate tunnel",
+ "translation": "Không thể kích hoạt VPN",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Failed to deactivate tunnel",
+ "message": "Failed to deactivate tunnel",
+ "translation": "Không thể vô hiệu hóa VPN",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Peer",
+ "message": "Peer",
+ "translation": "Mạng ngang hàng",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Create new tunnel",
+ "message": "Create new tunnel",
+ "translation": "Tạo VPN",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Edit tunnel",
+ "message": "Edit tunnel",
+ "translation": "Chỉnh sửa VPN",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Cancel",
+ "message": "Cancel",
+ "translation": "Huỷ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid name",
+ "message": "Invalid name",
+ "translation": "Tên không hợp lệ",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "A name is required.",
+ "message": "A name is required.",
+ "translation": "Yêu cầu nhập tên.",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name ‘{NewName}’ is invalid.",
+ "message": "Tunnel name ‘{NewName}’ is invalid.",
+ "translation": "Tên VPN ‘{NewName}' không hợp lệ.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "NewName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "newName"
+ }
+ ]
+ },
+ {
+ "id": "Unable to list existing tunnels",
+ "message": "Unable to list existing tunnels",
+ "translation": "Không thể liệt kê các VPN",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel already exists",
+ "message": "Tunnel already exists",
+ "translation": "VPN đã tồn tại",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Another tunnel already exists with the name ‘{NewName}’.",
+ "message": "Another tunnel already exists with the name ‘{NewName}’.",
+ "translation": "Đã tồn tại VPN với tên ‘{NewName}’.",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "NewName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "newName"
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/locales/zh-CN/messages.gotext.json b/locales/zh-CN/messages.gotext.json
index d16d523d..f8cc24df 100644
--- a/locales/zh-CN/messages.gotext.json
+++ b/locales/zh-CN/messages.gotext.json
@@ -10,7 +10,7 @@
{
"id": "(no argument): elevate and install manager service",
"message": "(no argument): elevate and install manager service",
- "translation": "(无参数):提升并安装管理服务",
+ "translation": "(无参数): 提升并安装管理服务",
"translatorComment": "Copied from source."
},
{
@@ -46,7 +46,7 @@
{
"id": "Unable to determine whether the process is running under WOW64: {Err}",
"message": "Unable to determine whether the process is running under WOW64: {Err}",
- "translation": "无法确定该进程是否在WOW64下运行: {Err}",
+ "translation": "无法确定该进程是否在WOW64下运行: {Err}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -62,7 +62,7 @@
{
"id": "You must use the 64-bit version of WireGuard on this computer.",
"message": "You must use the 64-bit version of WireGuard on this computer.",
- "translation": "您必须在此计算机上使用64位版本的 WireGuard 。",
+ "translation": "您必须在此计算机上使用64位版本的 WireGuard。",
"translatorComment": "Copied from source."
},
{
@@ -128,7 +128,7 @@
{
"id": "System clock wound backward!",
"message": "System clock wound backward!",
- "translation": "系统时钟倒转!",
+ "translation": "系统时间倒退了!",
"translatorComment": "Copied from source."
},
{
@@ -391,19 +391,19 @@
{
"id": "Missing port from endpoint",
"message": "Missing port from endpoint",
- "translation": "端点中缺少端口",
+ "translation": "对端 (endpoint) 中缺少端口",
"translatorComment": "Copied from source."
},
{
"id": "Invalid endpoint host",
"message": "Invalid endpoint host",
- "translation": "端点主机无效",
+ "translation": "对端主机名 (endpoint host) 无效",
"translatorComment": "Copied from source."
},
{
"id": "Brackets must contain an IPv6 address",
"message": "Brackets must contain an IPv6 address",
- "translation": "括号应包含一个 IPv6 地址",
+ "translation": "方括号中应包含一个 IPv6 地址",
"translatorComment": "Copied from source."
},
{
@@ -443,13 +443,13 @@
{
"id": "Keys must decode to exactly 32 bytes",
"message": "Keys must decode to exactly 32 bytes",
- "translation": "密钥必须解码为正好32字节",
+ "translation": "解码后的密钥长度必须为32字节",
"translatorComment": "Copied from source."
},
{
"id": "Number must be a number between 0 and 2^64-1: {Err}",
"message": "Number must be a number between 0 and 2^64-1: {Err}",
- "translation": "数必须是一个介于 0 至 2^64-1 之间的数字:{Err}",
+ "translation": "数值必须介于 0 至 2^64-1 之间: {Err}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -481,15 +481,15 @@
"translatorComment": "Copied from source."
},
{
- "id": "Invalid config key is missing an equals separator",
- "message": "Invalid config key is missing an equals separator",
- "translation": "无效的配置键缺少一个等于分隔符",
+ "id": "Config key is missing an equals separator",
+ "message": "Config key is missing an equals separator",
+ "translation": "配置项必须要有一个等于号",
"translatorComment": "Copied from source."
},
{
"id": "Key must have a value",
"message": "Key must have a value",
- "translation": "键必须有一个值",
+ "translation": "必须有一个值",
"translatorComment": "Copied from source."
},
{
@@ -513,7 +513,7 @@
{
"id": "[none specified]",
"message": "[none specified]",
- "translation": "【未指定】",
+ "translation": "[未指定]",
"translatorComment": "Copied from source."
},
{
@@ -549,13 +549,13 @@
{
"id": "[EnumerationSeparator]",
"message": "[EnumerationSeparator]",
- "translation": ", ",
+ "translation": "、",
"comment": "Text to insert between items when listing - most western languages will translate ‘[EnumerationSeparator]’ into ‘, ’ to produce lists like ‘apple, orange, strawberry’. Eastern languages might translate into ‘、’ to produce lists like ‘リンゴ、オレンジ、イチゴ’."
},
{
"id": "[UnitSeparator]",
"message": "[UnitSeparator]",
- "translation": ", ",
+ "translation": " ",
"comment": "Text to insert when combining units of a measure - most languages will translate ‘[UnitSeparator]’ into ‘ ’ (space) to produce lists like ‘2 minuti 30 sekund’, or empty string ‘’ to produce ‘2分30秒’."
},
{
@@ -567,7 +567,7 @@
{
"id": "WireGuard logo image",
"message": "WireGuard logo image",
- "translation": "WireGuard 标志图片",
+ "translation": "WireGuard logo 图片",
"translatorComment": "Copied from source."
},
{
@@ -627,25 +627,25 @@
{
"id": "♥ &Donate!",
"message": "♥ &Donate!",
- "translation": "♥ &捐助!",
+ "translation": "♥ 捐助! (&D)",
"translatorComment": "Copied from source."
},
{
"id": "Status:",
"message": "Status:",
- "translation": "状态:",
+ "translation": "状态:",
"translatorComment": "Copied from source."
},
{
"id": "&Deactivate",
"message": "&Deactivate",
- "translation": "&停用",
+ "translation": "断开 (&D)",
"translatorComment": "Copied from source."
},
{
"id": "&Activate",
"message": "&Activate",
- "translation": "&启动",
+ "translation": "连接 (&A)",
"translatorComment": "Copied from source."
},
{
@@ -669,7 +669,7 @@
{
"id": "Addresses:",
"message": "Addresses:",
- "translation": "地址:",
+ "translation": "地址:",
"translatorComment": "Copied from source."
},
{
@@ -681,19 +681,19 @@
{
"id": "Preshared key:",
"message": "Preshared key:",
- "translation": "预分享密钥:",
+ "translation": "预共享密钥:",
"translatorComment": "Copied from source."
},
{
"id": "Allowed IPs:",
"message": "Allowed IPs:",
- "translation": "允许的 IP:",
+ "translation": "允许的 IP:",
"translatorComment": "Copied from source."
},
{
"id": "Endpoint:",
"message": "Endpoint:",
- "translation": "端点:",
+ "translation": "对端:",
"translatorComment": "Copied from source."
},
{
@@ -705,7 +705,7 @@
{
"id": "Latest handshake:",
"message": "Latest handshake:",
- "translation": "最新的握手:",
+ "translation": "上次握手时间:",
"translatorComment": "Copied from source."
},
{
@@ -723,7 +723,7 @@
{
"id": "{String} received, {String_1} sent",
"message": "{String} received, {String_1} sent",
- "translation": "{String} 已收到, {String_1} 已发送",
+ "translation": "接收 {String}, 发送 {String_1}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -747,25 +747,25 @@
{
"id": "Failed to determine tunnel state",
"message": "Failed to determine tunnel state",
- "translation": "判断隧道状态失败",
+ "translation": "无法确认隧道状态",
"translatorComment": "Copied from source."
},
{
"id": "Failed to activate tunnel",
"message": "Failed to activate tunnel",
- "translation": "启动隧道失败",
+ "translation": "无法连接隧道",
"translatorComment": "Copied from source."
},
{
"id": "Failed to deactivate tunnel",
"message": "Failed to deactivate tunnel",
- "translation": "停用隧道失败",
+ "translation": "无法断开隧道连接",
"translatorComment": "Copied from source."
},
{
"id": "Interface: {Name}",
"message": "Interface: {Name}",
- "translation": "接口:{Name}",
+ "translation": "接口: {Name}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -799,37 +799,37 @@
{
"id": "&Name:",
"message": "&Name:",
- "translation": "&名称:",
+ "translation": "名称 (&N):",
"translatorComment": "Copied from source."
},
{
"id": "&Public key:",
"message": "&Public key:",
- "translation": "&公钥:",
+ "translation": "公钥 (&P):",
"translatorComment": "Copied from source."
},
{
"id": "(unknown)",
"message": "(unknown)",
- "translation": "(未知)",
+ "translation": "(未知)",
"translatorComment": "Copied from source."
},
{
"id": "&Block untunneled traffic (kill-switch)",
"message": "&Block untunneled traffic (kill-switch)",
- "translation": "&拦截未经隧道的流量(禁用交换)",
+ "translation": "拦截未经隧道的流量 (kill-switch) (&B)",
"translatorComment": "Copied from source."
},
{
"id": "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.",
"message": "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.",
- "translation": "当配置只有一个节点,且该节点的允许 IP 列表至少包含 0.0.0.0/0 或 ::/0 的其中一个 IP 时,隧道服务会使用防火墙规则集来拦截所有进出隧道接口的流量,但 DHCP 和 NDP 除外。",
+ "translation": "只有一个节点,且该节点允许的 IP 中包含 0.0.0.0/0 或 ::/0 时,使用防火墙规则拦截所有未通过隧道的流量 (DHCP 和 NDP 流量除外)。",
"translatorComment": "Copied from source."
},
{
"id": "&Save",
"message": "&Save",
- "translation": "&保存",
+ "translation": "保存 (&S)",
"translatorComment": "Copied from source."
},
{
@@ -841,7 +841,7 @@
{
"id": "&Configuration:",
"message": "&Configuration:",
- "translation": "&配置:",
+ "translation": "配置 (&C):",
"translatorComment": "Copied from source."
},
{
@@ -853,13 +853,13 @@
{
"id": "A name is required.",
"message": "A name is required.",
- "translation": "名称是必需的。",
+ "translation": "必须输入名称。",
"translatorComment": "Copied from source."
},
{
"id": "Tunnel name ‘{NewName}’ is invalid.",
"message": "Tunnel name ‘{NewName}’ is invalid.",
- "translation": "隧道名称 ”{NewName}“ 无效",
+ "translation": "隧道名「{NewName}」无效。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -887,7 +887,7 @@
{
"id": "Another tunnel already exists with the name ‘{NewName}’.",
"message": "Another tunnel already exists with the name ‘{NewName}’.",
- "translation": "另一个同名的隧道 \"{NewName}\" 已存在。",
+ "translation": "隧道名「{NewName}」已存在。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -915,7 +915,7 @@
{
"id": "File ‘{FilePath}’ already exists.\n\nDo you want to overwrite it?",
"message": "File ‘{FilePath}’ already exists.\n\nDo you want to overwrite it?",
- "translation": "文件”{FilePath}“ 已存在。\n\n您确定要覆盖它吗?",
+ "translation": "文件「{FilePath}」已存在。\n\n您确定要覆盖它吗?",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -931,31 +931,31 @@
{
"id": "Active",
"message": "Active",
- "translation": "激活",
+ "translation": "已连接",
"translatorComment": "Copied from source."
},
{
"id": "Activating",
"message": "Activating",
- "translation": "启动中",
+ "translation": "正在连接",
"translatorComment": "Copied from source."
},
{
"id": "Inactive",
"message": "Inactive",
- "translation": "未激活",
+ "translation": "已断开",
"translatorComment": "Copied from source."
},
{
"id": "Deactivating",
"message": "Deactivating",
- "translation": "停用中",
+ "translation": "正在断开",
"translatorComment": "Copied from source."
},
{
"id": "Unknown state",
"message": "Unknown state",
- "translation": "未知状态",
+ "translation": "未知",
"translatorComment": "Copied from source."
},
{
@@ -967,19 +967,19 @@
{
"id": "&Copy",
"message": "&Copy",
- "translation": "&复制",
+ "translation": "复制 (&C)",
"translatorComment": "Copied from source."
},
{
"id": "Select &all",
"message": "Select &all",
- "translation": "选择 &所有",
+ "translation": "全选 (&A)",
"translatorComment": "Copied from source."
},
{
"id": "&Save to file…",
"message": "&Save to file…",
- "translation": "&保存到文件…",
+ "translation": "导出… (&S)",
"translatorComment": "Copied from source."
},
{
@@ -991,25 +991,25 @@
{
"id": "Log message",
"message": "Log message",
- "translation": "记录消息",
+ "translation": "日志消息",
"translatorComment": "Copied from source."
},
{
"id": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
"message": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
- "translation": "文本文件 (*.txt)|*.txt|All Files (*.*)|*.*",
+ "translation": "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*",
"translatorComment": "Copied from source."
},
{
"id": "Export log to file",
"message": "Export log to file",
- "translation": "导出日志到文件",
+ "translation": "导出日志",
"translatorComment": "Copied from source."
},
{
"id": "&About WireGuard…",
"message": "&About WireGuard…",
- "translation": "&关于 WireGuard…",
+ "translation": "关于 WireGuard… (&A)",
"translatorComment": "Copied from source."
},
{
@@ -1021,7 +1021,7 @@
{
"id": "{ErrMsg}\n\nPlease consult the log for more information.",
"message": "{ErrMsg}\n\nPlease consult the log for more information.",
- "translation": "{ErrMsg}\n\n更多信息请查看日志",
+ "translation": "{ErrMsg}\n\n更多信息请查看日志。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1037,7 +1037,7 @@
{
"id": "{Title} (out of date)",
"message": "{Title} (out of date)",
- "translation": "{Title} (已过时)",
+ "translation": "{Title} (已过时)",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1075,37 +1075,37 @@
{
"id": "WireGuard: Deactivated",
"message": "WireGuard: Deactivated",
- "translation": "WireGuard :已停用",
+ "translation": "WireGuard: 已断开",
"translatorComment": "Copied from source."
},
{
"id": "Status: Unknown",
"message": "Status: Unknown",
- "translation": "状态:未知",
+ "translation": "状态: 未知",
"translatorComment": "Copied from source."
},
{
"id": "Addresses: None",
"message": "Addresses: None",
- "translation": "地址:无",
+ "translation": "地址: 无",
"translatorComment": "Copied from source."
},
{
"id": "&Manage tunnels…",
"message": "&Manage tunnels…",
- "translation": "&管理隧道…",
+ "translation": "管理隧道… (&M)",
"translatorComment": "Copied from source."
},
{
"id": "&Import tunnel(s) from file…",
"message": "&Import tunnel(s) from file…",
- "translation": "&从文件导入隧道…",
+ "translation": "从文件导入隧道… (&I)",
"translatorComment": "Copied from source."
},
{
"id": "E&xit",
"message": "E&xit",
- "translation": "退&出",
+ "translation": "退出 (&E)",
"translatorComment": "Copied from source."
},
{
@@ -1133,7 +1133,7 @@
{
"id": "Status: {StateText}",
"message": "Status: {StateText}",
- "translation": "状态: {StateText}",
+ "translation": "状态: {StateText}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1149,7 +1149,7 @@
{
"id": "Addresses: {String}",
"message": "Addresses: {String}",
- "translation": "地址: {String}",
+ "translation": "地址: {String}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1165,13 +1165,13 @@
{
"id": "WireGuard Activated",
"message": "WireGuard Activated",
- "translation": "WireGuard :已启动",
+ "translation": "WireGuard 已连接",
"translatorComment": "Copied from source."
},
{
"id": "The {Name} tunnel has been activated.",
"message": "The {Name} tunnel has been activated.",
- "translation": "隧道 ”{Name}“ 已被启动。",
+ "translation": "隧道「{Name}」已连接。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1187,13 +1187,13 @@
{
"id": "WireGuard Deactivated",
"message": "WireGuard Deactivated",
- "translation": "WireGuard :未启动",
+ "translation": "WireGuard 已断开",
"translatorComment": "Copied from source."
},
{
"id": "The {Name} tunnel has been deactivated.",
"message": "The {Name} tunnel has been deactivated.",
- "translation": "隧道 {Name} 已停用。",
+ "translation": "隧道「{Name}」已断开连接。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1209,19 +1209,19 @@
{
"id": "An Update is Available!",
"message": "An Update is Available!",
- "translation": "有一项可用更新!",
+ "translation": "发现更新!",
"translatorComment": "Copied from source."
},
{
"id": "WireGuard Update Available",
"message": "WireGuard Update Available",
- "translation": "WireGuard 有可用的更新",
+ "translation": "WireGuard 更新",
"translatorComment": "Copied from source."
},
{
"id": "An update to WireGuard is now available. You are advised to update as soon as possible.",
"message": "An update to WireGuard is now available. You are advised to update as soon as possible.",
- "translation": "发现一个可用的 WireGuard 更新。强烈建议尽快安装。",
+ "translation": "新的 WireGuard 版本发布了。强烈建议您现在安装。",
"translatorComment": "Copied from source."
},
{
@@ -1233,61 +1233,61 @@
{
"id": "&Edit",
"message": "&Edit",
- "translation": "&编辑",
+ "translation": "编辑 (&E)",
"translatorComment": "Copied from source."
},
{
"id": "Add &empty tunnel…",
"message": "Add &empty tunnel…",
- "translation": "添加&空隧道…",
+ "translation": "新建空隧道… (&E)",
"translatorComment": "Copied from source."
},
{
"id": "Add Tunnel",
"message": "Add Tunnel",
- "translation": "添加隧道",
+ "translation": "新建隧道",
"translatorComment": "Copied from source."
},
{
"id": "Remove selected tunnel(s)",
"message": "Remove selected tunnel(s)",
- "translation": "移除选择的隧道",
+ "translation": "删除所选隧道",
"translatorComment": "Copied from source."
},
{
"id": "Export all tunnels to zip",
"message": "Export all tunnels to zip",
- "translation": "导出所有隧道到zip",
+ "translation": "导出所有隧道 (ZIP 压缩包)",
"translatorComment": "Copied from source."
},
{
"id": "&Toggle",
"message": "&Toggle",
- "translation": "&切换",
+ "translation": "切换连接状态 (&T)",
"translatorComment": "Copied from source."
},
{
"id": "Export all tunnels to &zip…",
"message": "Export all tunnels to &zip…",
- "translation": "导出所有隧道到&zip…",
+ "translation": "导出所有隧道 (ZIP 压缩包)… (&Z)",
"translatorComment": "Copied from source."
},
{
"id": "Edit &selected tunnel…",
"message": "Edit &selected tunnel…",
- "translation": "编辑 &选择的隧道…",
+ "translation": "编辑所选隧道… (&E)",
"translatorComment": "Copied from source."
},
{
"id": "&Remove selected tunnel(s)",
"message": "&Remove selected tunnel(s)",
- "translation": "&移除选择的隧道",
+ "translation": "删除所选隧道 (&R)",
"translatorComment": "Copied from source."
},
{
"id": "Could not import selected configuration: {LastErr}",
"message": "Could not import selected configuration: {LastErr}",
- "translation": "无法导入选择的配置:{LastErr}",
+ "translation": "无法导入配置: {LastErr}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1303,7 +1303,7 @@
{
"id": "Could not enumerate existing tunnels: {LastErr}",
"message": "Could not enumerate existing tunnels: {LastErr}",
- "translation": "无法列出现有的隧道: {LastErr}",
+ "translation": "无法列出现有隧道: {LastErr}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1319,7 +1319,7 @@
{
"id": "Another tunnel already exists with the name ‘{Name}’",
"message": "Another tunnel already exists with the name ‘{Name}’",
- "translation": "另一个同名的隧道 \"{Name}\" 已存在",
+ "translation": "另一个同名的隧道「{Name}」已存在",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1335,7 +1335,7 @@
{
"id": "Unable to import configuration: {LastErr}",
"message": "Unable to import configuration: {LastErr}",
- "translation": "无法导入配置:{LastErr}",
+ "translation": "无法导入配置: {LastErr}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1363,7 +1363,7 @@
"arg": "M",
"cases": {
"other": {
- "msg": "导入了 {M} 隧道"
+ "msg": "导入了 {M} 个隧道"
}
}
}
@@ -1452,7 +1452,7 @@
"arg": "TunnelCount",
"cases": {
"other": {
- "msg": "您确定要删除 {TunnelCount} 个隧道吗?"
+ "msg": "您确定要删除这 {TunnelCount} 个隧道吗?"
}
}
}
@@ -1471,7 +1471,7 @@
{
"id": "Delete tunnel ‘{TunnelName}’",
"message": "Delete tunnel ‘{TunnelName}’",
- "translation": "删除隧道 ”{TunnelName}“",
+ "translation": "删除隧道「{TunnelName}」",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1487,7 +1487,7 @@
{
"id": "Are you sure you would like to delete tunnel ‘{TunnelName}’?",
"message": "Are you sure you would like to delete tunnel ‘{TunnelName}’?",
- "translation": "您确定要删除隧道 \"{TunnelName}\" 吗?",
+ "translation": "您确定要删除隧道「{TunnelName}」吗?",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1503,7 +1503,7 @@
{
"id": "{Question} You cannot undo this action.",
"message": "{Question} You cannot undo this action.",
- "translation": "{Question} 您无法撤销此操作。",
+ "translation": "{Question}此操作无法撤销。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1525,7 +1525,7 @@
{
"id": "A tunnel was unable to be removed: {Error}",
"message": "A tunnel was unable to be removed: {Error}",
- "translation": "无法移除隧道: {Error}",
+ "translation": "无法删除隧道: {Error}",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1553,7 +1553,7 @@
"arg": "Lenerrors",
"cases": {
"other": {
- "msg": "{Lenerrors} 隧道无法被移除。"
+ "msg": "无法删除 {Lenerrors} 个隧道。"
}
}
}
@@ -1572,7 +1572,7 @@
{
"id": "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*",
"message": "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*",
- "translation": "配置文件 (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*",
+ "translation": "配置文件 (*.zip, *.conf)|*.zip;*.conf|所有文件 (*.*)|*.*",
"translatorComment": "Copied from source."
},
{
@@ -1584,19 +1584,19 @@
{
"id": "Configuration ZIP Files (*.zip)|*.zip",
"message": "Configuration ZIP Files (*.zip)|*.zip",
- "translation": "配置 ZIP 文件 (*.zip)|*.zip",
+ "translation": "配置文件 (*.zip)|*.zip",
"translatorComment": "Copied from source."
},
{
"id": "Export tunnels to zip",
"message": "Export tunnels to zip",
- "translation": "导出隧道为Zip",
+ "translation": "导出配置文件 (ZIP 压缩包)",
"translatorComment": "Copied from source."
},
{
"id": "{Title} (unsigned build, no updates)",
"message": "{Title} (unsigned build, no updates)",
- "translation": "{Title} (未签名构建,无更新)",
+ "translation": "{Title} (未签名版本,禁用自动更新)",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1618,7 +1618,7 @@
{
"id": "Unable to exit service due to: {Err}. You may want to stop WireGuard from the service manager.",
"message": "Unable to exit service due to: {Err}. You may want to stop WireGuard from the service manager.",
- "translation": "因为: {Err} 无法退出服务。您可能想要从服务管理器中停止 WireGuard 。",
+ "translation": "无法停止服务: {Err}。您可能需要在服务管理器中手动停止 WireGuard 服务。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1634,13 +1634,13 @@
{
"id": "An update to WireGuard is available. It is highly advisable to update without delay.",
"message": "An update to WireGuard is available. It is highly advisable to update without delay.",
- "translation": "发现一个可用的 WireGuard 更新。强烈建议尽快安装。",
+ "translation": "发现新版 WireGuard。强烈建议您现在安装。",
"translatorComment": "Copied from source."
},
{
"id": "Status: Waiting for user",
"message": "Status: Waiting for user",
- "translation": "状态:等待用户",
+ "translation": "状态: 等待用户",
"translatorComment": "Copied from source."
},
{
@@ -1652,13 +1652,13 @@
{
"id": "Status: Waiting for updater service",
"message": "Status: Waiting for updater service",
- "translation": "状态:等待更新服务",
+ "translation": "状态: 等待更新服务",
"translatorComment": "Copied from source."
},
{
"id": "Error: {Err}. Please try again.",
"message": "Error: {Err}. Please try again.",
- "translation": "错误:{Err}。请重试。",
+ "translation": "错误: {Err}。请重试。",
"translatorComment": "Copied from source.",
"placeholders": [
{
@@ -1674,7 +1674,7 @@
{
"id": "Status: Complete!",
"message": "Status: Complete!",
- "translation": "状态:完成!",
+ "translation": "状态: 完成!",
"translatorComment": "Copied from source."
},
{
diff --git a/locales/zh-TW/messages.gotext.json b/locales/zh-TW/messages.gotext.json
new file mode 100644
index 00000000..55167a1e
--- /dev/null
+++ b/locales/zh-TW/messages.gotext.json
@@ -0,0 +1,1761 @@
+{
+ "language": "zh-TW",
+ "messages": [
+ {
+ "id": "Error",
+ "message": "Error",
+ "translation": "錯誤",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "(no argument): elevate and install manager service",
+ "message": "(no argument): elevate and install manager service",
+ "translation": "(無參數):提升權限並安裝管理服務",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Usage: {Args0} [\n{String}]",
+ "message": "Usage: {Args0} [\n{String}]",
+ "translation": "使用方法: {Args0} [\n{String}]",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Args0",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "os.Args[0]"
+ },
+ {
+ "id": "String",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "builder.String()"
+ }
+ ]
+ },
+ {
+ "id": "Command Line Options",
+ "message": "Command Line Options",
+ "translation": "命令列選項",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to determine whether the process is running under WOW64: {Err}",
+ "message": "Unable to determine whether the process is running under WOW64: {Err}",
+ "translation": "無法確定該處理程序是否在 WOW64 下執行: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "You must use the 64-bit version of WireGuard on this computer.",
+ "message": "You must use the 64-bit version of WireGuard on this computer.",
+ "translation": "您必須在此電腦上執行 64 位元版本的 WireGuard。",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to open current process token: {Err}",
+ "message": "Unable to open current process token: {Err}",
+ "translation": "無法開啓目前處理程序的權杖: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard may only be used by users who are a member of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard 可能只能被內建的「{AdminGroupName}」群組成員使用。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "message": "WireGuard is running, but the UI is only accessible from desktops of the Builtin {AdminGroupName} group.",
+ "translation": "WireGuard 正在執行,但 UI 只能從內建的內建的「{AdminGroupName}」群組成員的桌面存取。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "AdminGroupName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "elevate.AdminGroupName()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard system tray icon did not appear after 30 seconds.",
+ "message": "WireGuard system tray icon did not appear after 30 seconds.",
+ "translation": "WireGuard 的工作列圖示在 30 秒後並沒有顯示。",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Now",
+ "message": "Now",
+ "translation": "就是現在",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "System clock wound backward!",
+ "message": "System clock wound backward!",
+ "translation": "系統時鐘倒退了!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Years} year(s)",
+ "message": "{Years} year(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Years",
+ "cases": {
+ "other": {
+ "msg": "{Years} 年"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Years",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "years"
+ }
+ ]
+ },
+ {
+ "id": "{Days} day(s)",
+ "message": "{Days} day(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Days",
+ "cases": {
+ "other": {
+ "msg": "{Days} 天"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Days",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "days"
+ }
+ ]
+ },
+ {
+ "id": "{Hours} hour(s)",
+ "message": "{Hours} hour(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Hours",
+ "cases": {
+ "other": {
+ "msg": "{Hours} 小時"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Hours",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "hours"
+ }
+ ]
+ },
+ {
+ "id": "{Minutes} minute(s)",
+ "message": "{Minutes} minute(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Minutes",
+ "cases": {
+ "other": {
+ "msg": "{Minutes} 分鐘"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Minutes",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "minutes"
+ }
+ ]
+ },
+ {
+ "id": "{Seconds} second(s)",
+ "message": "{Seconds} second(s)",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Seconds",
+ "cases": {
+ "other": {
+ "msg": "{Seconds} 秒"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Seconds",
+ "string": "%[1]d",
+ "type": "int64",
+ "underlyingType": "int64",
+ "argNum": 1,
+ "expr": "seconds"
+ }
+ ]
+ },
+ {
+ "id": "{Timestamp} ago",
+ "message": "{Timestamp} ago",
+ "translation": "{Timestamp} 前",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Timestamp",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "timestamp"
+ }
+ ]
+ },
+ {
+ "id": "{Bytes} B",
+ "message": "{Bytes} B",
+ "translation": "{Bytes} B",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Bytes",
+ "string": "%[1]d",
+ "type": "golang.zx2c4.com/wireguard/windows/conf.Bytes",
+ "underlyingType": "uint64",
+ "argNum": 1,
+ "expr": "b"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024} KiB",
+ "message": "{Float64b__1024} KiB",
+ "translation": "{Float64b__1024} KiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024} MiB",
+ "message": "{Float64b__1024__1024} MiB",
+ "translation": "{Float64b__1024__1024} MiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024} GiB",
+ "message": "{Float64b__1024__1024__1024} GiB",
+ "translation": "{Float64b__1024__1024__1024} GiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024)"
+ }
+ ]
+ },
+ {
+ "id": "{Float64b__1024__1024__1024__1024} TiB",
+ "message": "{Float64b__1024__1024__1024__1024} TiB",
+ "translation": "{Float64b__1024__1024__1024__1024} TiB",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Float64b__1024__1024__1024__1024",
+ "string": "%.2[1]f",
+ "type": "float64",
+ "underlyingType": "float64",
+ "argNum": 1,
+ "expr": "float64(b) / (1024 * 1024 * 1024) / 1024"
+ }
+ ]
+ },
+ {
+ "id": "{Why}: {Offender}",
+ "message": "{Why}: {Offender}",
+ "translation": "{Why}: {Offender}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Why",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "e.why"
+ },
+ {
+ "id": "Offender",
+ "string": "%[2]q",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "e.offender"
+ }
+ ]
+ },
+ {
+ "id": "Invalid IP address",
+ "message": "Invalid IP address",
+ "translation": "無效的 IP 位址",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid network prefix length",
+ "message": "Invalid network prefix length",
+ "translation": "無效的網路位址首碼長度",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Missing port from endpoint",
+ "message": "Missing port from endpoint",
+ "translation": "Endpoint 中沒有指定埠號",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid endpoint host",
+ "message": "Invalid endpoint host",
+ "translation": "無效的 Endpoint 位址",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Brackets must contain an IPv6 address",
+ "message": "Brackets must contain an IPv6 address",
+ "translation": "括號中必須包含一個 IPv6 位址",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid MTU",
+ "message": "Invalid MTU",
+ "translation": "無效的 MTU",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid port",
+ "message": "Invalid port",
+ "translation": "無效的埠號",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid persistent keepalive",
+ "message": "Invalid persistent keepalive",
+ "translation": "無效的 Persistent Keepalive 設定",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key: {Err}",
+ "message": "Invalid key: {Err}",
+ "translation": "無效的金鑰: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Keys must decode to exactly 32 bytes",
+ "message": "Keys must decode to exactly 32 bytes",
+ "translation": "金鑰必須剛好長 32 bytes",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Number must be a number between 0 and 2^64-1: {Err}",
+ "message": "Number must be a number between 0 and 2^64-1: {Err}",
+ "translation": "數值必須介於 0 到 2^64-1: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Two commas in a row",
+ "message": "Two commas in a row",
+ "translation": "一行中有兩個逗號",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name is not valid",
+ "message": "Tunnel name is not valid",
+ "translation": "隧道名稱無效",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Line must occur in a section",
+ "message": "Line must occur in a section",
+ "translation": "行必須出現在段落中",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Config key is missing an equals separator",
+ "message": "Config key is missing an equals separator",
+ "translation": "設定的項目必須要有一個等號",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Key must have a value",
+ "message": "Key must have a value",
+ "translation": "必須要有一個值",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Interface] section",
+ "message": "Invalid key for [Interface] section",
+ "translation": "[Interface] 中有無效選項",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for [Peer] section",
+ "message": "Invalid key for [Peer] section",
+ "translation": "[Peer] 中有無效選項",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "An interface must have a private key",
+ "message": "An interface must have a private key",
+ "translation": "Interface 中必須要有一把私鑰",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[none specified]",
+ "message": "[none specified]",
+ "translation": "[未指定]",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "All peers must have public keys",
+ "message": "All peers must have public keys",
+ "translation": "每個 Peer 都必須要有公鑰",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error in getting configuration",
+ "message": "Error in getting configuration",
+ "translation": "讀取設定時發生錯誤",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for interface section",
+ "message": "Invalid key for interface section",
+ "translation": "Interface 中的金鑰無效",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Protocol version must be 1",
+ "message": "Protocol version must be 1",
+ "translation": "協定版本必須為 1",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid key for peer section",
+ "message": "Invalid key for peer section",
+ "translation": "Peer 中的金鑰無效",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "[EnumerationSeparator]",
+ "message": "[EnumerationSeparator]",
+ "translation": "、",
+ "comment": "Text to insert between items when listing - most western languages will translate ‘[EnumerationSeparator]’ into ‘, ’ to produce lists like ‘apple, orange, strawberry’. Eastern languages might translate into ‘、’ to produce lists like ‘リンゴ、オレンジ、イチゴ’."
+ },
+ {
+ "id": "[UnitSeparator]",
+ "message": "[UnitSeparator]",
+ "translation": " ",
+ "comment": "Text to insert when combining units of a measure - most languages will translate ‘[UnitSeparator]’ into ‘ ’ (space) to produce lists like ‘2 minuti 30 sekund’, or empty string ‘’ to produce ‘2分30秒’."
+ },
+ {
+ "id": "About WireGuard",
+ "message": "About WireGuard",
+ "translation": "關於 WireGuard",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard logo image",
+ "message": "WireGuard logo image",
+ "translation": "WireGuard logo 圖片",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "message": "App version: {Number}\nGo backend version: {WireGuardGoVersion}\nGo version: {Version_go}\nOperating system: {OsName}\nArchitecture: {GOARCH}",
+ "translation": "應用程式版本: {Number}\n後端程式(Go 實作)版本: {WireGuardGoVersion}\nGo 版本: {Version_go}\n作業系統: {OsName}\n架構: {GOARCH}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Number",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "version.Number"
+ },
+ {
+ "id": "WireGuardGoVersion",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "device.WireGuardGoVersion"
+ },
+ {
+ "id": "Version_go",
+ "string": "%[3]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 3,
+ "expr": "strings.TrimPrefix(runtime.Version(), \"go\")"
+ },
+ {
+ "id": "OsName",
+ "string": "%[4]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 4,
+ "expr": "version.OsName()"
+ },
+ {
+ "id": "GOARCH",
+ "string": "%[5]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 5,
+ "expr": "runtime.GOARCH"
+ }
+ ]
+ },
+ {
+ "id": "Close",
+ "message": "Close",
+ "translation": "關閉",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "♥ &Donate!",
+ "message": "♥ &Donate!",
+ "translation": "♥ 捐贈! (&D)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status:",
+ "message": "Status:",
+ "translation": "狀態",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Deactivate",
+ "message": "&Deactivate",
+ "translation": "中斷連線 (&D)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Activate",
+ "message": "&Activate",
+ "translation": "連線 (&A)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Public key:",
+ "message": "Public key:",
+ "translation": "公鑰",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Listen port:",
+ "message": "Listen port:",
+ "translation": "監聽埠",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "MTU:",
+ "message": "MTU:",
+ "translation": "MTU",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Addresses:",
+ "message": "Addresses:",
+ "translation": "位址",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "DNS servers:",
+ "message": "DNS servers:",
+ "translation": "DNS 伺服器",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Preshared key:",
+ "message": "Preshared key:",
+ "translation": "預交換金鑰",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Allowed IPs:",
+ "message": "Allowed IPs:",
+ "translation": "允許的位址",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Endpoint:",
+ "message": "Endpoint:",
+ "translation": "連接點",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Persistent keepalive:",
+ "message": "Persistent keepalive:",
+ "translation": "Keepalive 間隔",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Latest handshake:",
+ "message": "Latest handshake:",
+ "translation": "最後交握時間",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Transfer:",
+ "message": "Transfer:",
+ "translation": "流量",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "enabled",
+ "message": "enabled",
+ "translation": "已啓用",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{String} received, {String_1} sent",
+ "message": "{String} received, {String_1} sent",
+ "translation": "已收到 {String};已傳送 {String_1}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "String",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "c.RxBytes.String()"
+ },
+ {
+ "id": "String_1",
+ "string": "%[2]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "c.TxBytes.String()"
+ }
+ ]
+ },
+ {
+ "id": "Failed to determine tunnel state",
+ "message": "Failed to determine tunnel state",
+ "translation": "無法確認隧道狀態",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Failed to activate tunnel",
+ "message": "Failed to activate tunnel",
+ "translation": "無法連接隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Failed to deactivate tunnel",
+ "message": "Failed to deactivate tunnel",
+ "translation": "無法斷開隧道連線",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Interface: {Name}",
+ "message": "Interface: {Name}",
+ "translation": "[隧道] {Name}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "config.Name"
+ }
+ ]
+ },
+ {
+ "id": "Peer",
+ "message": "Peer",
+ "translation": "節點",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Create new tunnel",
+ "message": "Create new tunnel",
+ "translation": "建立新隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Edit tunnel",
+ "message": "Edit tunnel",
+ "translation": "編輯隧道設定",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Name:",
+ "message": "&Name:",
+ "translation": "名稱 (&N)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Public key:",
+ "message": "&Public key:",
+ "translation": "公鑰 (&P)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "(unknown)",
+ "message": "(unknown)",
+ "translation": "(未知)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Block untunneled traffic (kill-switch)",
+ "message": "&Block untunneled traffic (kill-switch)",
+ "translation": "阻斷未經過隧道的流量(kill-switch) (&B)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.",
+ "message": "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.",
+ "translation": "只有一個節點且該節點允許位址包含 0.0.0.0/0 或 ::/0 時,使用防火牆攔截所有非通過隧道的流量。\n(DHCP 及 NDP 流量除外)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Save",
+ "message": "&Save",
+ "translation": "儲存 (&S)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Cancel",
+ "message": "Cancel",
+ "translation": "取消",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Configuration:",
+ "message": "&Configuration:",
+ "translation": "設定 (&C)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Invalid name",
+ "message": "Invalid name",
+ "translation": "無效的名稱",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "A name is required.",
+ "message": "A name is required.",
+ "translation": "必須填寫名稱。",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel name ‘{NewName}’ is invalid.",
+ "message": "Tunnel name ‘{NewName}’ is invalid.",
+ "translation": "無效的隧道名稱「{NewName}」。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "NewName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "newName"
+ }
+ ]
+ },
+ {
+ "id": "Unable to list existing tunnels",
+ "message": "Unable to list existing tunnels",
+ "translation": "無法列出現有隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel already exists",
+ "message": "Tunnel already exists",
+ "translation": "隧道已存在",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Another tunnel already exists with the name ‘{NewName}’.",
+ "message": "Another tunnel already exists with the name ‘{NewName}’.",
+ "translation": "已有同名隧道「{NewName}」。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "NewName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "newName"
+ }
+ ]
+ },
+ {
+ "id": "Unable to create new configuration",
+ "message": "Unable to create new configuration",
+ "translation": "無法建立新的隧道設定",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Writing file failed",
+ "message": "Writing file failed",
+ "translation": "檔案寫入失敗",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "File ‘{FilePath}’ already exists.\n\nDo you want to overwrite it?",
+ "message": "File ‘{FilePath}’ already exists.\n\nDo you want to overwrite it?",
+ "translation": "檔案已存在: {FilePath}\n\n您確定要覆蓋嗎?",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "FilePath",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "filePath"
+ }
+ ]
+ },
+ {
+ "id": "Active",
+ "message": "Active",
+ "translation": "已連線",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Activating",
+ "message": "Activating",
+ "translation": "正在連線…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Inactive",
+ "message": "Inactive",
+ "translation": "已中斷連線",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Deactivating",
+ "message": "Deactivating",
+ "translation": "正在中斷…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unknown state",
+ "message": "Unknown state",
+ "translation": "未知",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log",
+ "message": "Log",
+ "translation": "日誌",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Copy",
+ "message": "&Copy",
+ "translation": "複製 (&C)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Select &all",
+ "message": "Select &all",
+ "translation": "全選 (&A)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Save to file…",
+ "message": "&Save to file…",
+ "translation": "匯出… (&S)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Time",
+ "message": "Time",
+ "translation": "時間",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Log message",
+ "message": "Log message",
+ "translation": "日誌訊息",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
+ "message": "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
+ "translation": "純文字 (*.txt)|*.txt|所有檔案 (*.*)|*.*",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export log to file",
+ "message": "Export log to file",
+ "translation": "匯出日誌…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&About WireGuard…",
+ "message": "&About WireGuard…",
+ "translation": "關於 WireGuard (&A)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnel Error",
+ "message": "Tunnel Error",
+ "translation": "隧道錯誤",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{ErrMsg}\n\nPlease consult the log for more information.",
+ "message": "{ErrMsg}\n\nPlease consult the log for more information.",
+ "translation": "{ErrMsg}\n\n如需更多資訊,請查看日誌。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "ErrMsg",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "errMsg"
+ }
+ ]
+ },
+ {
+ "id": "{Title} (out of date)",
+ "message": "{Title} (out of date)",
+ "translation": "{Title}(已過時)",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Title",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "mtw.Title()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Detection Error",
+ "message": "WireGuard Detection Error",
+ "translation": "偵測 WireGuard 錯誤",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to wait for WireGuard window to appear: {Err}",
+ "message": "Unable to wait for WireGuard window to appear: {Err}",
+ "translation": "無法等待 WireGuard 視窗開啓: {Err}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard: Deactivated",
+ "message": "WireGuard: Deactivated",
+ "translation": "WireGuard - 未連線",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Unknown",
+ "message": "Status: Unknown",
+ "translation": "[狀態] 未知",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Addresses: None",
+ "message": "Addresses: None",
+ "translation": "[位址] 無",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Manage tunnels…",
+ "message": "&Manage tunnels…",
+ "translation": "管理隧道 (&M)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Import tunnel(s) from file…",
+ "message": "&Import tunnel(s) from file…",
+ "translation": "從檔案匯入… (&I)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "E&xit",
+ "message": "E&xit",
+ "translation": "離開 (&X)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard Tunnel Error",
+ "message": "WireGuard Tunnel Error",
+ "translation": "WireGuard 隧道錯誤",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard: {TextForStateglobalState_true}",
+ "message": "WireGuard: {TextForStateglobalState_true}",
+ "translation": "WireGuard - {TextForStateglobalState_true}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TextForStateglobalState_true",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "textForState(globalState, true)"
+ }
+ ]
+ },
+ {
+ "id": "Status: {StateText}",
+ "message": "Status: {StateText}",
+ "translation": "[狀態] {StateText}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "StateText",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "stateText"
+ }
+ ]
+ },
+ {
+ "id": "Addresses: {String}",
+ "message": "Addresses: {String}",
+ "translation": "[位址] {String}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "String",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "sb.String()"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Activated",
+ "message": "WireGuard Activated",
+ "translation": "WireGuard 已連線",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "The {Name} tunnel has been activated.",
+ "message": "The {Name} tunnel has been activated.",
+ "translation": "已連線至隧道 - {Name}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnel.Name"
+ }
+ ]
+ },
+ {
+ "id": "WireGuard Deactivated",
+ "message": "WireGuard Deactivated",
+ "translation": "WireGuard 已中斷連線",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "The {Name} tunnel has been deactivated.",
+ "message": "The {Name} tunnel has been deactivated.",
+ "translation": "已中斷與隧道的連線 - {Name}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnel.Name"
+ }
+ ]
+ },
+ {
+ "id": "An Update is Available!",
+ "message": "An Update is Available!",
+ "translation": "更新",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "WireGuard Update Available",
+ "message": "WireGuard Update Available",
+ "translation": "WireGuard 更新",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "An update to WireGuard is now available. You are advised to update as soon as possible.",
+ "message": "An update to WireGuard is now available. You are advised to update as soon as possible.",
+ "translation": "更新的 WireGuard 已經為您準備好了。\n強烈建議您立即更新 WireGuard。",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Tunnels",
+ "message": "Tunnels",
+ "translation": "隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Edit",
+ "message": "&Edit",
+ "translation": "編輯 (&E)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Add &empty tunnel…",
+ "message": "Add &empty tunnel…",
+ "translation": "新增隧道精靈 (&E)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Add Tunnel",
+ "message": "Add Tunnel",
+ "translation": "新增隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Remove selected tunnel(s)",
+ "message": "Remove selected tunnel(s)",
+ "translation": "刪除選取隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export all tunnels to zip",
+ "message": "Export all tunnels to zip",
+ "translation": "匯出所有隧道(ZIP 格式)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Toggle",
+ "message": "&Toggle",
+ "translation": "切換連線狀態 (&T)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export all tunnels to &zip…",
+ "message": "Export all tunnels to &zip…",
+ "translation": "匯出所有隧道至 &ZIP 壓縮檔",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Edit &selected tunnel…",
+ "message": "Edit &selected tunnel…",
+ "translation": "編輯選取隧道 (&S)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "&Remove selected tunnel(s)",
+ "message": "&Remove selected tunnel(s)",
+ "translation": "刪除已選取隧道 (&R)",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Could not import selected configuration: {LastErr}",
+ "message": "Could not import selected configuration: {LastErr}",
+ "translation": "無法匯入設定: {LastErr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "LastErr",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "lastErr"
+ }
+ ]
+ },
+ {
+ "id": "Could not enumerate existing tunnels: {LastErr}",
+ "message": "Could not enumerate existing tunnels: {LastErr}",
+ "translation": "無法列出隧道: {LastErr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "LastErr",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "lastErr"
+ }
+ ]
+ },
+ {
+ "id": "Another tunnel already exists with the name ‘{Name}’",
+ "message": "Another tunnel already exists with the name ‘{Name}’",
+ "translation": "已有另一個同名的隧道「{Name}」",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Name",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "unparsedConfig.Name"
+ }
+ ]
+ },
+ {
+ "id": "Unable to import configuration: {LastErr}",
+ "message": "Unable to import configuration: {LastErr}",
+ "translation": "無法匯入設定: {LastErr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "LastErr",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "lastErr"
+ }
+ ]
+ },
+ {
+ "id": "Imported tunnels",
+ "message": "Imported tunnels",
+ "translation": "已匯入隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Imported {M} tunnels",
+ "message": "Imported {M} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "M",
+ "cases": {
+ "other": {
+ "msg": "已匯入 {M} 個隧道"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "M",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "m"
+ }
+ ]
+ },
+ {
+ "id": "Imported {M} of {N} tunnels",
+ "message": "Imported {M} of {N} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "N",
+ "cases": {
+ "other": {
+ "msg": "已匯入 {M} 個隧道(共 {N} 個)"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "M",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "m"
+ },
+ {
+ "id": "N",
+ "string": "%[2]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 2,
+ "expr": "n"
+ }
+ ]
+ },
+ {
+ "id": "Unable to create tunnel",
+ "message": "Unable to create tunnel",
+ "translation": "無法建立隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Delete {TunnelCount} tunnels",
+ "message": "Delete {TunnelCount} tunnels",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "TunnelCount",
+ "cases": {
+ "other": {
+ "msg": "刪除 {TunnelCount} 個隧道"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "TunnelCount",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "tunnelCount"
+ }
+ ]
+ },
+ {
+ "id": "Are you sure you would like to delete {TunnelCount} tunnels?",
+ "message": "Are you sure you would like to delete {TunnelCount} tunnels?",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "TunnelCount",
+ "cases": {
+ "other": {
+ "msg": "您確定要刪除 {TunnelCount} 個隧道嗎?"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "TunnelCount",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "tunnelCount"
+ }
+ ]
+ },
+ {
+ "id": "Delete tunnel ‘{TunnelName}’",
+ "message": "Delete tunnel ‘{TunnelName}’",
+ "translation": "刪除隧道 - {TunnelName}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TunnelName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnelName"
+ }
+ ]
+ },
+ {
+ "id": "Are you sure you would like to delete tunnel ‘{TunnelName}’?",
+ "message": "Are you sure you would like to delete tunnel ‘{TunnelName}’?",
+ "translation": "您確定要刪除隧道「{TunnelName}」嗎?",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "TunnelName",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "tunnelName"
+ }
+ ]
+ },
+ {
+ "id": "{Question} You cannot undo this action.",
+ "message": "{Question} You cannot undo this action.",
+ "translation": "{Question}\n\n您將無法復原此操作。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Question",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "question"
+ }
+ ]
+ },
+ {
+ "id": "Unable to delete tunnel",
+ "message": "Unable to delete tunnel",
+ "translation": "無法刪除隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "A tunnel was unable to be removed: {Error}",
+ "message": "A tunnel was unable to be removed: {Error}",
+ "translation": "無法刪除隧道: {Error}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Error",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "errors[0].Error()"
+ }
+ ]
+ },
+ {
+ "id": "Unable to delete tunnels",
+ "message": "Unable to delete tunnels",
+ "translation": "無法刪除隧道",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Lenerrors} tunnels were unable to be removed.",
+ "message": "{Lenerrors} tunnels were unable to be removed.",
+ "translation": {
+ "select": {
+ "feature": "plural",
+ "arg": "Lenerrors",
+ "cases": {
+ "other": {
+ "msg": "無法刪除 {Lenerrors} 個隧道"
+ }
+ }
+ }
+ },
+ "placeholders": [
+ {
+ "id": "Lenerrors",
+ "string": "%[1]d",
+ "type": "int",
+ "underlyingType": "int",
+ "argNum": 1,
+ "expr": "len(errors)"
+ }
+ ]
+ },
+ {
+ "id": "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*",
+ "message": "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*",
+ "translation": "隧道設定檔 (*.zip, *.conf)|*.zip;*.conf|所有檔案 (*.*)|*.*",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Import tunnel(s) from file",
+ "message": "Import tunnel(s) from file",
+ "translation": "從檔案中匯入隧道…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Configuration ZIP Files (*.zip)|*.zip",
+ "message": "Configuration ZIP Files (*.zip)|*.zip",
+ "translation": "隧道設定檔 (*.zip)|*.zip",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Export tunnels to zip",
+ "message": "Export tunnels to zip",
+ "translation": "匯出隧道設定至…",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "{Title} (unsigned build, no updates)",
+ "message": "{Title} (unsigned build, no updates)",
+ "translation": "{Title}(未簽署發行版本,無法自動更新)",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Title",
+ "string": "%[1]s",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 1,
+ "expr": "mtw.Title()"
+ }
+ ]
+ },
+ {
+ "id": "Error Exiting WireGuard",
+ "message": "Error Exiting WireGuard",
+ "translation": "離開 WireGuard 失敗",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Unable to exit service due to: {Err}. You may want to stop WireGuard from the service manager.",
+ "message": "Unable to exit service due to: {Err}. You may want to stop WireGuard from the service manager.",
+ "translation": "無法結束服務: {Err}。\n您可能需要手動從服務管理中結束 WireGuard 服務。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "An update to WireGuard is available. It is highly advisable to update without delay.",
+ "message": "An update to WireGuard is available. It is highly advisable to update without delay.",
+ "translation": "更新的 WireGuard 已經為您準備好了。\n強烈建議您立即進行更新。",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Waiting for user",
+ "message": "Status: Waiting for user",
+ "translation": "狀態:等待使用者",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Update Now",
+ "message": "Update Now",
+ "translation": "立即更新",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Status: Waiting for updater service",
+ "message": "Status: Waiting for updater service",
+ "translation": "狀態:等待更新服務",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "Error: {Err}. Please try again.",
+ "message": "Error: {Err}. Please try again.",
+ "translation": "錯誤: {Err}。請稍後再試。",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Err",
+ "string": "%[1]v",
+ "type": "error",
+ "underlyingType": "interface{Error() string}",
+ "argNum": 1,
+ "expr": "err"
+ }
+ ]
+ },
+ {
+ "id": "Status: Complete!",
+ "message": "Status: Complete!",
+ "translation": "狀態:已完成!",
+ "translatorComment": "Copied from source."
+ },
+ {
+ "id": "http2: Framer {F}: failed to decode just-written frame",
+ "message": "http2: Framer {F}: failed to decode just-written frame",
+ "translation": "http2: Framer {F}: failed to decode just-written frame",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "F",
+ "string": "%[1]p",
+ "type": "*net/http.http2Framer",
+ "underlyingType": "*net/http.http2Framer",
+ "argNum": 1,
+ "expr": "f"
+ }
+ ]
+ },
+ {
+ "id": "http2: Framer {F}: wrote {Http2summarizeFramefr}",
+ "message": "http2: Framer {F}: wrote {Http2summarizeFramefr}",
+ "translation": "http2: Framer {F}: wrote {Http2summarizeFramefr}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "F",
+ "string": "%[1]p",
+ "type": "*net/http.http2Framer",
+ "underlyingType": "*net/http.http2Framer",
+ "argNum": 1,
+ "expr": "f"
+ },
+ {
+ "id": "Http2summarizeFramefr",
+ "string": "%[2]v",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "http2summarizeFrame(fr)"
+ }
+ ]
+ },
+ {
+ "id": "http2: Framer {Fr}: read {Http2summarizeFramef}",
+ "message": "http2: Framer {Fr}: read {Http2summarizeFramef}",
+ "translation": "http2: Framer {Fr}: read {Http2summarizeFramef}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "Fr",
+ "string": "%[1]p",
+ "type": "*net/http.http2Framer",
+ "underlyingType": "*net/http.http2Framer",
+ "argNum": 1,
+ "expr": "fr"
+ },
+ {
+ "id": "Http2summarizeFramef",
+ "string": "%[2]v",
+ "type": "string",
+ "underlyingType": "string",
+ "argNum": 2,
+ "expr": "http2summarizeFrame(f)"
+ }
+ ]
+ },
+ {
+ "id": "http2: decoded hpack field {HeaderField}",
+ "message": "http2: decoded hpack field {HeaderField}",
+ "translation": "http2: decoded hpack field {HeaderField}",
+ "translatorComment": "Copied from source.",
+ "placeholders": [
+ {
+ "id": "HeaderField",
+ "string": "%+[1]v",
+ "type": "vendor/golang.org/x/net/http2/hpack.HeaderField",
+ "underlyingType": "struct{Name string; Value string; Sensitive bool}",
+ "argNum": 1,
+ "expr": "hf"
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/main.go b/main.go
index 79dfcdfc..0d5a4f21 100644
--- a/main.go
+++ b/main.go
@@ -58,17 +58,6 @@ func usage() {
os.Exit(1)
}
-func checkForWow64() {
- var b bool
- err := windows.IsWow64Process(windows.CurrentProcess(), &b)
- if err != nil {
- fatalf("Unable to determine whether the process is running under WOW64: %v", err)
- }
- if b {
- fatalf("You must use the 64-bit version of WireGuard on this computer.")
- }
-}
-
func checkForAdminGroup() {
// This is not a security check, but rather a user-confusion one.
var processToken windows.Token
@@ -111,8 +100,6 @@ func pipeFromHandleArgument(handleStr string) (*os.File, error) {
}
func main() {
- checkForWow64()
-
if len(os.Args) <= 1 {
checkForAdminGroup()
if ui.RaiseUI() {
diff --git a/quickinstall.bat b/quickinstall.bat
index 9765fdb0..0de87412 100644
--- a/quickinstall.bat
+++ b/quickinstall.bat
@@ -11,6 +11,6 @@ call .\installer\build.bat || exit /b 1
echo [+] Uninstalling old versions
for /f %%a in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s /d /c /e /f WireGuard ^| findstr CurrentVersion\Uninstall') do msiexec /qb /x %%~na
echo [+] Installing new version
-for /f "tokens=3" %%a in ('findstr /r "WIREGUARD_WINDOWS_VERSION_STRING.*[0-9.]*" .\version.h') do set WIREGUARD_VERSION=%%a
+for /f "tokens=3" %%a in ('findstr /r "WIREGUARD_WINDOWS_VERSION_STRING.*[0-9.]*" .\resources.rc') do set WIREGUARD_VERSION=%%a
set WIREGUARD_VERSION=%WIREGUARD_VERSION:"=%
msiexec /qb /i installer\dist\wireguard-%PROCESSOR_ARCHITECTURE%-%WIREGUARD_VERSION%.msi
diff --git a/resources.rc b/resources.rc
index c1794582..9ed16087 100644
--- a/resources.rc
+++ b/resources.rc
@@ -4,10 +4,12 @@
*/
#include <windows.h>
-#include "version/version.h"
#pragma code_page(65001) // UTF-8
+#define WIREGUARD_WINDOWS_VERSION_ARRAY 0,1,1
+#define WIREGUARD_WINDOWS_VERSION_STRING "0.1.1"
+
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST manifest.xml
$wireguard.ico ICON ui/icon/wireguard.ico
@@ -76,3 +78,10 @@ VERSIONINFO_TEMPLATE(
"WireGuard: hiter, sodoben, varen tunel VPN",
"https://www.wireguard.com/"
)
+
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
+VERSIONINFO_TEMPLATE(
+ "040404b0", 0x404, 0x4b0,
+ "WireGuard:快速、現代、安全的 VPN 隧道",
+ "https://www.wireguard.com/"
+) \ No newline at end of file
diff --git a/tunnel/firewall/types_windows_386.go b/tunnel/firewall/types_windows_32.go
index e8e90663..0bb3bb03 100644
--- a/tunnel/firewall/types_windows_386.go
+++ b/tunnel/firewall/types_windows_32.go
@@ -1,3 +1,5 @@
+// +build 386 arm
+
/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
diff --git a/tunnel/firewall/types_windows_amd64.go b/tunnel/firewall/types_windows_64.go
index 13fde97a..5d4edb25 100644
--- a/tunnel/firewall/types_windows_amd64.go
+++ b/tunnel/firewall/types_windows_64.go
@@ -1,3 +1,5 @@
+// +build amd64
+
/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
diff --git a/tunnel/winipcfg/netsh.go b/tunnel/winipcfg/netsh.go
index 4714c520..1962266e 100644
--- a/tunnel/winipcfg/netsh.go
+++ b/tunnel/winipcfg/netsh.go
@@ -12,6 +12,7 @@ import (
"os/exec"
"path/filepath"
"strings"
+ "syscall"
"golang.org/x/sys/windows"
)
@@ -25,6 +26,8 @@ func runNetsh(cmds []string) error {
return err
}
cmd := exec.Command(filepath.Join(system32, "netsh.exe")) // I wish we could append (, "-f", "CONIN$") but Go sets up the process context wrong.
+ cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
+
stdin, err := cmd.StdinPipe()
if err != nil {
return fmt.Errorf("runNetsh stdin pipe - %v", err)
diff --git a/tunnel/winipcfg/types_386.go b/tunnel/winipcfg/types_32.go
index 3a4b5733..d5d29da6 100644
--- a/tunnel/winipcfg/types_386.go
+++ b/tunnel/winipcfg/types_32.go
@@ -1,3 +1,5 @@
+// +build 386 arm
+
/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
diff --git a/tunnel/winipcfg/types_amd64.go b/tunnel/winipcfg/types_64.go
index 11242891..a11d83bb 100644
--- a/tunnel/winipcfg/types_amd64.go
+++ b/tunnel/winipcfg/types_64.go
@@ -1,3 +1,5 @@
+// +build amd64
+
/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
diff --git a/tunnel/winipcfg/types_test_386.go b/tunnel/winipcfg/types_test_32.go
index db5f5f86..7d7aef53 100644
--- a/tunnel/winipcfg/types_test_386.go
+++ b/tunnel/winipcfg/types_test_32.go
@@ -1,3 +1,5 @@
+// +build 386 arm
+
/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
diff --git a/tunnel/winipcfg/types_test_amd64.go b/tunnel/winipcfg/types_test_64.go
index acc74118..2b55de9b 100644
--- a/tunnel/winipcfg/types_test_amd64.go
+++ b/tunnel/winipcfg/types_test_64.go
@@ -1,3 +1,5 @@
+// +build amd64
+
/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
diff --git a/ui/aboutdialog.go b/ui/aboutdialog.go
index 007ddea6..ec2ac9a9 100644
--- a/ui/aboutdialog.go
+++ b/ui/aboutdialog.go
@@ -95,7 +95,7 @@ func runAboutDialog(owner walk.Form) error {
return err
}
detailsLbl.SetTextAlignment(walk.AlignHCenterVNear)
- detailsLbl.SetText(l18n.Sprintf("App version: %s\nGo backend version: %s\nGo version: %s\nOperating system: %s\nArchitecture: %s", version.Number, device.WireGuardGoVersion, strings.TrimPrefix(runtime.Version(), "go"), version.OsName(), runtime.GOARCH))
+ detailsLbl.SetText(l18n.Sprintf("App version: %s\nGo backend version: %s\nGo version: %s\nOperating system: %s\nArchitecture: %s", version.Number(), device.WireGuardGoVersion, strings.TrimPrefix(runtime.Version(), "go"), version.OsName(), runtime.GOARCH))
copyrightLbl, err := walk.NewTextLabel(showingAboutDialog)
if err != nil {
diff --git a/ui/syntax/syntaxedit.go b/ui/syntax/syntaxedit.go
index 257bdbd2..b6634ebe 100644
--- a/ui/syntax/syntaxedit.go
+++ b/ui/syntax/syntaxedit.go
@@ -15,9 +15,11 @@ import (
"github.com/lxn/win"
)
-// #cgo LDFLAGS: -lgdi32
-// #include "syntaxedit.h"
-import "C"
+const (
+ InevaluableBlockingUntunneledTraffic int = 0
+ BlockingUntunneledTraffic int = 1
+ NotBlockingUntunneledTraffic int = 2
+)
type SyntaxEdit struct {
walk.WidgetBase
@@ -26,12 +28,6 @@ type SyntaxEdit struct {
blockUntunneledTrafficPublisher walk.IntEventPublisher
}
-const (
- InevaluableBlockingUntunneledTraffic = C.InevaluableBlockingUntunneledTraffic
- BlockingUntunneledTraffic = C.BlockingUntunneledTraffic
- NotBlockingUntunneledTraffic = C.NotBlockingUntunneledTraffic
-)
-
func (se *SyntaxEdit) LayoutFlags() walk.LayoutFlags {
return walk.GrowableHorz | walk.GrowableVert | walk.GreedyHorz | walk.GreedyVert
}
@@ -79,41 +75,12 @@ func (se *SyntaxEdit) BlockUntunneledTrafficStateChanged() *walk.IntEvent {
return se.blockUntunneledTrafficPublisher.Event()
}
-func (se *SyntaxEdit) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr {
- switch msg {
- case win.WM_NOTIFY, win.WM_COMMAND:
- switch win.HIWORD(uint32(wParam)) {
- case win.EN_CHANGE:
- se.textChangedPublisher.Publish()
- }
- // This is a horrible trick from MFC where we reflect the event back to the child.
- se.SendMessage(msg+C.WM_REFLECT, wParam, lParam)
- case C.SE_PRIVATE_KEY:
- if lParam == 0 {
- se.privateKeyPublisher.Publish("")
- } else {
- se.privateKeyPublisher.Publish(C.GoString((*C.char)(unsafe.Pointer(lParam))))
- }
- case C.SE_TRAFFIC_BLOCK:
- se.blockUntunneledTrafficPublisher.Publish(int(lParam))
- }
- return se.WidgetBase.WndProc(hwnd, msg, wParam, lParam)
-}
-
func NewSyntaxEdit(parent walk.Container) (*SyntaxEdit, error) {
- C.register_syntax_edit()
- se := &SyntaxEdit{}
- err := walk.InitWidget(
- se,
- parent,
- "WgQuickSyntaxEdit",
- C.SYNTAXEDIT_STYLE,
- C.SYNTAXEDIT_EXTSTYLE,
- )
+ se, err := makeSyntaxEdit(parent)
if err != nil {
return nil, err
}
- se.SendMessage(C.SE_SET_PARENT_DPI, uintptr(parent.DPI()), 0)
+ se.ApplyDPI(parent.DPI())
se.GraphicsEffects().Add(walk.InteractionEffect)
se.GraphicsEffects().Add(walk.FocusEffect)
@@ -131,7 +98,3 @@ func NewSyntaxEdit(parent walk.Container) (*SyntaxEdit, error) {
return se, nil
}
-
-func (se *SyntaxEdit) ApplyDPI(dpi int) {
- se.SendMessage(C.SE_SET_PARENT_DPI, uintptr(dpi), 0)
-}
diff --git a/ui/syntax/syntaxedit.h b/ui/syntax/syntaxedit.h
index 048e7bc4..b8c59162 100644
--- a/ui/syntax/syntaxedit.h
+++ b/ui/syntax/syntaxedit.h
@@ -21,9 +21,9 @@
#define SE_SET_PARENT_DPI (WM_USER + 0x3102)
enum block_state {
- InevaluableBlockingUntunneledTraffic,
- BlockingUntunneledTraffic,
- NotBlockingUntunneledTraffic
+ InevaluableBlockingUntunneledTraffic = 0,
+ BlockingUntunneledTraffic = 1,
+ NotBlockingUntunneledTraffic = 2
};
extern bool register_syntax_edit(void);
diff --git a/ui/syntax/syntaxedit_cgo.go b/ui/syntax/syntaxedit_cgo.go
new file mode 100644
index 00000000..b41edd90
--- /dev/null
+++ b/ui/syntax/syntaxedit_cgo.go
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package syntax
+
+import (
+ "unsafe"
+
+ "github.com/lxn/walk"
+ "github.com/lxn/win"
+)
+
+// #cgo LDFLAGS: -lgdi32
+// #include "syntaxedit.h"
+import "C"
+
+func (se *SyntaxEdit) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr {
+ switch msg {
+ case win.WM_NOTIFY, win.WM_COMMAND:
+ switch win.HIWORD(uint32(wParam)) {
+ case win.EN_CHANGE:
+ se.textChangedPublisher.Publish()
+ }
+ // This is a horrible trick from MFC where we reflect the event back to the child.
+ se.SendMessage(msg+C.WM_REFLECT, wParam, lParam)
+ case C.SE_PRIVATE_KEY:
+ if lParam == 0 {
+ se.privateKeyPublisher.Publish("")
+ } else {
+ se.privateKeyPublisher.Publish(C.GoString((*C.char)(unsafe.Pointer(lParam))))
+ }
+ case C.SE_TRAFFIC_BLOCK:
+ se.blockUntunneledTrafficPublisher.Publish(int(lParam))
+ }
+ return se.WidgetBase.WndProc(hwnd, msg, wParam, lParam)
+}
+
+func makeSyntaxEdit(parent walk.Container) (*SyntaxEdit, error) {
+ C.register_syntax_edit()
+ se := &SyntaxEdit{}
+ err := walk.InitWidget(
+ se,
+ parent,
+ "WgQuickSyntaxEdit",
+ C.SYNTAXEDIT_STYLE,
+ C.SYNTAXEDIT_EXTSTYLE,
+ )
+ if err != nil {
+ return nil, err
+ }
+ return se, nil
+}
+
+func (se *SyntaxEdit) ApplyDPI(dpi int) {
+ se.SendMessage(C.SE_SET_PARENT_DPI, uintptr(dpi), 0)
+}
diff --git a/ui/syntax/syntaxedit_default.go b/ui/syntax/syntaxedit_default.go
new file mode 100644
index 00000000..993ee2f8
--- /dev/null
+++ b/ui/syntax/syntaxedit_default.go
@@ -0,0 +1,43 @@
+// +build !cgo
+
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package syntax
+
+import (
+ "github.com/lxn/walk"
+ "github.com/lxn/win"
+)
+
+func (se *SyntaxEdit) WndProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) uintptr {
+ switch msg {
+ case win.WM_NOTIFY, win.WM_COMMAND:
+ switch win.HIWORD(uint32(wParam)) {
+ case win.EN_CHANGE:
+ se.textChangedPublisher.Publish()
+ }
+ // This is a horrible trick from MFC where we reflect the event back to the child.
+ se.SendMessage(msg+ /*win.WM_REFLECT*/ win.WM_USER+0x1c00, wParam, lParam)
+ }
+ return se.WidgetBase.WndProc(hwnd, msg, wParam, lParam)
+}
+
+func makeSyntaxEdit(parent walk.Container) (*SyntaxEdit, error) {
+ se := &SyntaxEdit{}
+ err := walk.InitWidget(
+ se,
+ parent,
+ win.MSFTEDIT_CLASS,
+ win.WS_CHILD|win.ES_MULTILINE|win.WS_VISIBLE|win.WS_VSCROLL|win.WS_BORDER|win.WS_HSCROLL|win.WS_TABSTOP|win.ES_WANTRETURN|win.ES_NOOLEDRAGDROP,
+ 0,
+ )
+ if err != nil {
+ return nil, err
+ }
+ return se, nil
+}
+
+// TODO: Implement func (se *SyntaxEdit) ApplyDPI(dpi int)
diff --git a/updater/versions.go b/updater/versions.go
index 72f90240..ee293813 100644
--- a/updater/versions.go
+++ b/updater/versions.go
@@ -17,7 +17,7 @@ import (
func versionNewerThanUs(candidate string) (bool, error) {
candidateParts := strings.Split(candidate, ".")
- ourParts := strings.Split(version.Number, ".")
+ ourParts := strings.Split(version.Number(), ".")
if len(candidateParts) == 0 || len(ourParts) == 0 {
return false, errors.New("Empty version")
}
diff --git a/version/useragent.go b/version/useragent.go
index 1c1adf55..afbc0ad7 100644
--- a/version/useragent.go
+++ b/version/useragent.go
@@ -10,11 +10,11 @@ import (
"runtime"
)
-// #include "version.h"
-import "C"
-
-const Number = C.WIREGUARD_WINDOWS_VERSION_STRING
-
func UserAgent() string {
- return fmt.Sprintf("WireGuard/%s (%s; %s)", Number, OsName(), runtime.GOARCH)
+ return fmt.Sprintf("WireGuard/%s (%s; %s)", Number(), OsName(), runtime.GOARCH)
+}
+
+func Number() string {
+ // TODO: Get VERSION_INFO resource of the EXE and read version from there.
+ return "0.1.1"
}
diff --git a/version/version.h b/version/version.h
deleted file mode 100644
index 0da08178..00000000
--- a/version/version.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WIREGUARD_WINDOWS_VERSION_ARRAY 0,1,1
-#define WIREGUARD_WINDOWS_VERSION_STRING "0.1.1"
diff --git a/zgotext.go b/zgotext.go
index e5a933e5..ffa3d208 100644
--- a/zgotext.go
+++ b/zgotext.go
@@ -29,12 +29,19 @@ func init() {
dict := map[string]catalog.Dictionary{
"de": &dictionary{index: deIndex, data: deData},
"en": &dictionary{index: enIndex, data: enData},
+ "fa": &dictionary{index: faIndex, data: faData},
"fr": &dictionary{index: frIndex, data: frData},
+ "id": &dictionary{index: idIndex, data: idData},
"it": &dictionary{index: itIndex, data: itData},
"ja": &dictionary{index: jaIndex, data: jaData},
+ "pl": &dictionary{index: plIndex, data: plData},
+ "ro": &dictionary{index: roIndex, data: roData},
"ru": &dictionary{index: ruIndex, data: ruData},
+ "sk": &dictionary{index: skIndex, data: skData},
"sl": &dictionary{index: slIndex, data: slData},
+ "vi": &dictionary{index: viIndex, data: viData},
"zh_CN": &dictionary{index: zh_CNIndex, data: zh_CNData},
+ "zh_TW": &dictionary{index: zh_TWIndex, data: zh_TWData},
}
fallback := language.MustParse("en")
cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback))
@@ -53,174 +60,174 @@ var messageKeyToIndex = map[string]int{
"%d hour(s)": 14,
"%d minute(s)": 15,
"%d second(s)": 16,
- "%d tunnels were unable to be removed.": 157,
+ "%d tunnels were unable to be removed.": 158,
"%d year(s)": 12,
"%d\u00a0B": 18,
- "%s\n\nPlease consult the log for more information.": 110,
- "%s (out of date)": 111,
- "%s (unsigned build, no updates)": 162,
- "%s You cannot undo this action.": 153,
+ "%s\n\nPlease consult the log for more information.": 111,
+ "%s (out of date)": 112,
+ "%s (unsigned build, no updates)": 163,
+ "%s You cannot undo this action.": 154,
"%s ago": 17,
- "%s received, %s sent": 70,
+ "%s received, %s sent": 71,
"%s: %q": 23,
- "&About WireGuard…": 108,
- "&Activate": 57,
- "&Block untunneled traffic (kill-switch)": 81,
- "&Configuration:": 85,
- "&Copy": 101,
- "&Deactivate": 56,
- "&Edit": 132,
- "&Import tunnel(s) from file…": 118,
- "&Manage tunnels…": 117,
- "&Name:": 78,
- "&Public key:": 79,
- "&Remove selected tunnel(s)": 140,
- "&Save": 83,
- "&Save to file…": 103,
- "&Toggle": 137,
+ "&About WireGuard…": 109,
+ "&Activate": 58,
+ "&Block untunneled traffic (kill-switch)": 82,
+ "&Configuration:": 86,
+ "&Copy": 102,
+ "&Deactivate": 57,
+ "&Edit": 133,
+ "&Import tunnel(s) from file…": 119,
+ "&Manage tunnels…": 118,
+ "&Name:": 79,
+ "&Public key:": 80,
+ "&Remove selected tunnel(s)": 141,
+ "&Save": 84,
+ "&Save to file…": 104,
+ "&Toggle": 138,
"(no argument): elevate and install manager service": 1,
- "(unknown)": 80,
- "A name is required.": 87,
- "A tunnel was unable to be removed: %s": 155,
- "About WireGuard": 50,
- "Activating": 96,
- "Active": 95,
- "Add &empty tunnel…": 133,
- "Add Tunnel": 134,
- "Addresses:": 61,
- "Addresses: %s": 123,
- "Addresses: None": 116,
- "All peers must have public keys": 43,
- "Allowed IPs:": 64,
- "An Update is Available!": 128,
- "An interface must have a private key": 41,
- "An update to WireGuard is available. It is highly advisable to update without delay.": 165,
- "An update to WireGuard is now available. You are advised to update as soon as possible.": 130,
- "Another tunnel already exists with the name ‘%s’": 143,
- "Another tunnel already exists with the name ‘%s’.": 91,
- "App version: %s\nGo backend version: %s\nGo version: %s\nOperating system: %s\nArchitecture: %s": 52,
- "Are you sure you would like to delete %d tunnels?": 150,
- "Are you sure you would like to delete tunnel ‘%s’?": 152,
+ "(unknown)": 81,
+ "A name is required.": 88,
+ "A tunnel was unable to be removed: %s": 156,
+ "About WireGuard": 51,
+ "Activating": 97,
+ "Active": 96,
+ "Add &empty tunnel…": 134,
+ "Add Tunnel": 135,
+ "Addresses:": 62,
+ "Addresses: %s": 124,
+ "Addresses: None": 117,
+ "All peers must have public keys": 44,
+ "Allowed IPs:": 65,
+ "An Update is Available!": 129,
+ "An interface must have a private key": 42,
+ "An update to WireGuard is available. It is highly advisable to update without delay.": 166,
+ "An update to WireGuard is now available. You are advised to update as soon as possible.": 131,
+ "Another tunnel already exists with the name ‘%s’": 144,
+ "Another tunnel already exists with the name ‘%s’.": 92,
+ "App version: %s\nGo backend version: %s\nGo version: %s\nOperating system: %s\nArchitecture: %s": 53,
+ "Are you sure you would like to delete %d tunnels?": 151,
+ "Are you sure you would like to delete tunnel ‘%s’?": 153,
"Brackets must contain an IPv6 address": 28,
- "Cancel": 84,
- "Close": 53,
+ "Cancel": 85,
+ "Close": 54,
"Command Line Options": 3,
- "Config key is missing an equals separator": 175,
- "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*": 158,
- "Configuration ZIP Files (*.zip)|*.zip": 160,
- "Could not enumerate existing tunnels: %v": 142,
- "Could not import selected configuration: %v": 141,
- "Create new tunnel": 76,
- "DNS servers:": 62,
- "Deactivating": 98,
- "Delete %d tunnels": 149,
- "Delete tunnel ‘%s’": 151,
- "E&xit": 119,
- "Edit &selected tunnel…": 139,
- "Edit tunnel": 77,
- "Endpoint:": 65,
+ "Config key is missing an equals separator": 38,
+ "Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*": 159,
+ "Configuration ZIP Files (*.zip)|*.zip": 161,
+ "Could not enumerate existing tunnels: %v": 143,
+ "Could not import selected configuration: %v": 142,
+ "Create new tunnel": 77,
+ "DNS servers:": 63,
+ "Deactivating": 99,
+ "Delete %d tunnels": 150,
+ "Delete tunnel ‘%s’": 152,
+ "E&xit": 120,
+ "Edit &selected tunnel…": 140,
+ "Edit tunnel": 78,
+ "Endpoint:": 66,
"Error": 0,
- "Error Exiting WireGuard": 163,
- "Error in getting configuration": 44,
- "Error: %v. Please try again.": 169,
- "Export all tunnels to &zip…": 138,
- "Export all tunnels to zip": 136,
- "Export log to file": 107,
- "Export tunnels to zip": 161,
- "Failed to activate tunnel": 72,
- "Failed to deactivate tunnel": 73,
- "Failed to determine tunnel state": 71,
- "File ‘%s’ already exists.\n\nDo you want to overwrite it?": 94,
- "Import tunnel(s) from file": 159,
- "Imported %d of %d tunnels": 147,
- "Imported %d tunnels": 146,
- "Imported tunnels": 145,
- "Inactive": 97,
- "Interface: %s": 74,
+ "Error Exiting WireGuard": 164,
+ "Error in getting configuration": 45,
+ "Error: %v. Please try again.": 170,
+ "Export all tunnels to &zip…": 139,
+ "Export all tunnels to zip": 137,
+ "Export log to file": 108,
+ "Export tunnels to zip": 162,
+ "Failed to activate tunnel": 73,
+ "Failed to deactivate tunnel": 74,
+ "Failed to determine tunnel state": 72,
+ "File ‘%s’ already exists.\n\nDo you want to overwrite it?": 95,
+ "Import tunnel(s) from file": 160,
+ "Imported %d of %d tunnels": 148,
+ "Imported %d tunnels": 147,
+ "Imported tunnels": 146,
+ "Inactive": 98,
+ "Interface: %s": 75,
"Invalid IP address": 24,
"Invalid MTU": 29,
"Invalid endpoint host": 27,
- "Invalid key for [Interface] section": 39,
- "Invalid key for [Peer] section": 40,
- "Invalid key for interface section": 45,
- "Invalid key for peer section": 47,
+ "Invalid key for [Interface] section": 40,
+ "Invalid key for [Peer] section": 41,
+ "Invalid key for interface section": 46,
+ "Invalid key for peer section": 48,
"Invalid key: %v": 32,
- "Invalid name": 86,
+ "Invalid name": 87,
"Invalid network prefix length": 25,
"Invalid persistent keepalive": 31,
"Invalid port": 30,
- "Key must have a value": 38,
+ "Key must have a value": 39,
"Keys must decode to exactly 32 bytes": 33,
- "Latest handshake:": 67,
+ "Latest handshake:": 68,
"Line must occur in a section": 37,
- "Listen port:": 59,
- "Log": 100,
- "Log message": 105,
- "MTU:": 60,
+ "Listen port:": 60,
+ "Log": 101,
+ "Log message": 106,
+ "MTU:": 61,
"Missing port from endpoint": 26,
"Now": 10,
"Number must be a number between 0 and 2^64-1: %v": 34,
- "Peer": 75,
- "Persistent keepalive:": 66,
- "Preshared key:": 63,
- "Protocol version must be 1": 46,
- "Public key:": 58,
- "Remove selected tunnel(s)": 135,
- "Select &all": 102,
- "Status:": 55,
- "Status: %s": 122,
- "Status: Complete!": 170,
- "Status: Unknown": 115,
- "Status: Waiting for updater service": 168,
- "Status: Waiting for user": 166,
+ "Peer": 76,
+ "Persistent keepalive:": 67,
+ "Preshared key:": 64,
+ "Protocol version must be 1": 47,
+ "Public key:": 59,
+ "Remove selected tunnel(s)": 136,
+ "Select &all": 103,
+ "Status:": 56,
+ "Status: %s": 123,
+ "Status: Complete!": 171,
+ "Status: Unknown": 116,
+ "Status: Waiting for updater service": 169,
+ "Status: Waiting for user": 167,
"System clock wound backward!": 11,
- "Text Files (*.txt)|*.txt|All Files (*.*)|*.*": 106,
- "The %s tunnel has been activated.": 125,
- "The %s tunnel has been deactivated.": 127,
- "Time": 104,
- "Transfer:": 68,
- "Tunnel Error": 109,
- "Tunnel already exists": 90,
+ "Text Files (*.txt)|*.txt|All Files (*.*)|*.*": 107,
+ "The %s tunnel has been activated.": 126,
+ "The %s tunnel has been deactivated.": 128,
+ "Time": 105,
+ "Transfer:": 69,
+ "Tunnel Error": 110,
+ "Tunnel already exists": 91,
"Tunnel name is not valid": 36,
- "Tunnel name ‘%s’ is invalid.": 88,
- "Tunnels": 131,
+ "Tunnel name ‘%s’ is invalid.": 89,
+ "Tunnels": 132,
"Two commas in a row": 35,
- "Unable to create new configuration": 92,
- "Unable to create tunnel": 148,
- "Unable to delete tunnel": 154,
- "Unable to delete tunnels": 156,
+ "Unable to create new configuration": 93,
+ "Unable to create tunnel": 149,
+ "Unable to delete tunnel": 155,
+ "Unable to delete tunnels": 157,
"Unable to determine whether the process is running under WOW64: %v": 4,
- "Unable to exit service due to: %v. You may want to stop WireGuard from the service manager.": 164,
- "Unable to import configuration: %v": 144,
- "Unable to list existing tunnels": 89,
+ "Unable to exit service due to: %v. You may want to stop WireGuard from the service manager.": 165,
+ "Unable to import configuration: %v": 145,
+ "Unable to list existing tunnels": 90,
"Unable to open current process token: %v": 6,
- "Unable to wait for WireGuard window to appear: %v": 113,
- "Unknown state": 99,
- "Update Now": 167,
+ "Unable to wait for WireGuard window to appear: %v": 114,
+ "Unknown state": 100,
+ "Update Now": 168,
"Usage: %s [\n%s]": 2,
- "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.": 82,
- "WireGuard Activated": 124,
- "WireGuard Deactivated": 126,
- "WireGuard Detection Error": 112,
- "WireGuard Tunnel Error": 120,
- "WireGuard Update Available": 129,
+ "When a configuration has exactly one peer, and that peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall ruleset to block all traffic that is neither to nor from the tunnel interface, with special exceptions for DHCP and NDP.": 83,
+ "WireGuard Activated": 125,
+ "WireGuard Deactivated": 127,
+ "WireGuard Detection Error": 113,
+ "WireGuard Tunnel Error": 121,
+ "WireGuard Update Available": 130,
"WireGuard is running, but the UI is only accessible from desktops of the Builtin %s group.": 8,
- "WireGuard logo image": 51,
+ "WireGuard logo image": 52,
"WireGuard may only be used by users who are a member of the Builtin %s group.": 7,
"WireGuard system tray icon did not appear after 30 seconds.": 9,
- "WireGuard: %s": 121,
- "WireGuard: Deactivated": 114,
- "Writing file failed": 93,
+ "WireGuard: %s": 122,
+ "WireGuard: Deactivated": 115,
+ "Writing file failed": 94,
"You must use the 64-bit version of WireGuard on this computer.": 5,
- "[EnumerationSeparator]": 48,
- "[UnitSeparator]": 49,
- "[none specified]": 42,
- "enabled": 69,
- "http2: Framer %p: failed to decode just-written frame": 171,
- "http2: Framer %p: read %v": 173,
- "http2: Framer %p: wrote %v": 172,
- "http2: decoded hpack field %+v": 174,
- "♥ &Donate!": 54,
+ "[EnumerationSeparator]": 49,
+ "[UnitSeparator]": 50,
+ "[none specified]": 43,
+ "enabled": 70,
+ "http2: Framer %p: failed to decode just-written frame": 172,
+ "http2: Framer %p: read %v": 174,
+ "http2: Framer %p: wrote %v": 173,
+ "http2: decoded hpack field %+v": 175,
+ "♥ &Donate!": 55,
}
var deIndex = []uint32{ // 177 elements
@@ -235,49 +242,49 @@ var deIndex = []uint32{ // 177 elements
0x00000422, 0x00000456, 0x00000465, 0x00000476,
// Entry 20 - 3F
0x00000496, 0x000004b4, 0x000004eb, 0x00000517,
- 0x00000533, 0x00000550, 0x00000581, 0x0000059f,
- 0x000005cd, 0x000005f5, 0x0000062f, 0x00000644,
- 0x00000682, 0x000006a8, 0x000006d5, 0x000006f6,
- 0x0000071e, 0x00000721, 0x00000724, 0x00000734,
- 0x00000743, 0x000007ab, 0x000007b6, 0x000007c4,
- 0x000007cc, 0x000007da, 0x000007e6, 0x00000800,
- 0x0000080e, 0x00000813, 0x0000081d, 0x00000829,
+ 0x00000533, 0x00000550, 0x00000581, 0x000005bc,
+ 0x000005da, 0x00000608, 0x00000630, 0x0000066a,
+ 0x0000067f, 0x000006bd, 0x000006e3, 0x00000710,
+ 0x00000731, 0x00000759, 0x0000075c, 0x0000075f,
+ 0x0000076f, 0x0000077e, 0x000007e6, 0x000007f1,
+ 0x000007ff, 0x00000807, 0x00000815, 0x00000821,
+ 0x0000083b, 0x00000849, 0x0000084e, 0x00000858,
// Entry 40 - 5F
- 0x0000083f, 0x0000084d, 0x00000857, 0x0000086c,
- 0x00000886, 0x00000893, 0x0000089d, 0x000008bd,
- 0x000008e8, 0x0000090d, 0x00000934, 0x00000949,
- 0x00000954, 0x00000971, 0x00000983, 0x0000098a,
- 0x000009a5, 0x000009b1, 0x000009e5, 0x00000b13,
- 0x00000b1e, 0x00000b28, 0x00000b38, 0x00000b49,
- 0x00000b61, 0x00000b85, 0x00000bb8, 0x00000bd1,
- 0x00000c09, 0x00000c37, 0x00000c57, 0x00000c9c,
+ 0x00000864, 0x0000087a, 0x00000888, 0x00000892,
+ 0x000008a7, 0x000008c1, 0x000008ce, 0x000008d8,
+ 0x000008f8, 0x00000923, 0x00000948, 0x0000096f,
+ 0x00000984, 0x0000098f, 0x000009ac, 0x000009be,
+ 0x000009c5, 0x000009e0, 0x000009ec, 0x00000a20,
+ 0x00000b4e, 0x00000b59, 0x00000b63, 0x00000b73,
+ 0x00000b84, 0x00000b9c, 0x00000bc0, 0x00000bf3,
+ 0x00000c0c, 0x00000c44, 0x00000c72, 0x00000c92,
// Entry 60 - 7F
- 0x00000ca2, 0x00000cac, 0x00000cb4, 0x00000cc0,
- 0x00000cd4, 0x00000cde, 0x00000ce8, 0x00000cf9,
- 0x00000d10, 0x00000d15, 0x00000d26, 0x00000d57,
- 0x00000d75, 0x00000d89, 0x00000d97, 0x00000dd8,
- 0x00000de9, 0x00000e04, 0x00000e4c, 0x00000e63,
- 0x00000e75, 0x00000e85, 0x00000e9a, 0x00000ebb,
- 0x00000ec4, 0x00000edc, 0x00000eed, 0x00000efb,
- 0x00000f0b, 0x00000f1f, 0x00000f41, 0x00000f57,
+ 0x00000cd7, 0x00000cdd, 0x00000ce7, 0x00000cef,
+ 0x00000cfb, 0x00000d0f, 0x00000d19, 0x00000d23,
+ 0x00000d34, 0x00000d4b, 0x00000d50, 0x00000d61,
+ 0x00000d92, 0x00000db0, 0x00000dc4, 0x00000dd2,
+ 0x00000e13, 0x00000e24, 0x00000e3f, 0x00000e87,
+ 0x00000e9e, 0x00000eb0, 0x00000ec0, 0x00000ed5,
+ 0x00000ef6, 0x00000eff, 0x00000f17, 0x00000f28,
+ 0x00000f36, 0x00000f46, 0x00000f5a, 0x00000f7c,
// Entry 80 - 9F
- 0x00000f7b, 0x00000f9f, 0x00000fc3, 0x00001036,
- 0x0000103d, 0x00001049, 0x0000106d, 0x00001080,
- 0x0000109e, 0x000010c8, 0x000010d4, 0x000010f9,
- 0x0000111d, 0x0000113e, 0x0000117f, 0x000011b1,
- 0x000011eb, 0x0000121f, 0x00001231, 0x0000126a,
- 0x000012b6, 0x000012d6, 0x0000130b, 0x0000137b,
- 0x00001397, 0x000013ce, 0x0000140b, 0x0000142a,
- 0x0000145a, 0x00001480, 0x000014e1, 0x0000152b,
+ 0x00000f92, 0x00000fb6, 0x00000fda, 0x00000ffe,
+ 0x00001071, 0x00001078, 0x00001084, 0x000010a8,
+ 0x000010bb, 0x000010d9, 0x00001103, 0x0000110f,
+ 0x00001134, 0x00001158, 0x00001179, 0x000011ba,
+ 0x000011ec, 0x00001226, 0x0000125a, 0x0000126c,
+ 0x000012a5, 0x000012f1, 0x00001311, 0x00001346,
+ 0x000013b6, 0x000013d2, 0x00001409, 0x00001446,
+ 0x00001465, 0x00001495, 0x000014bb, 0x0000151c,
// Entry A0 - BF
- 0x00001547, 0x00001570, 0x0000158f, 0x000015ba,
- 0x000015dc, 0x00001648, 0x000016b6, 0x000016d0,
- 0x000016e4, 0x0000170d, 0x0000173b, 0x0000174b,
- 0x00001797, 0x000017be, 0x000017e1, 0x00001804,
- 0x00001804,
+ 0x00001566, 0x00001582, 0x000015ab, 0x000015ca,
+ 0x000015f5, 0x00001617, 0x00001683, 0x000016f1,
+ 0x0000170b, 0x0000171f, 0x00001748, 0x00001776,
+ 0x00001786, 0x000017d2, 0x000017f9, 0x0000181c,
+ 0x0000183f,
} // Size: 732 bytes
-const deData string = "" + // Size: 6148 bytes
+const deData string = "" + // Size: 6207 bytes
"\x02Fehler\x02(kein Argument): Als Administrator ausführen und den Manag" +
"er-Dienst installieren\x02Verwendung: %[1]s [\x0a%[2]s]\x02Kommandozeile" +
"noptionen\x02Es kann nicht festgestellt werden, ob der Prozess unter WOW" +
@@ -301,80 +308,80 @@ const deData string = "" + // Size: 6148 bytes
"intervall\x02Ungültiger Schlüssel: %[1]v\x02Schlüssel müssen auf exakt 3" +
"2 Bytes dekodiert werden\x02Zahl muss zwischen 0 und 2^64-1 sein: %[1]v" +
"\x02Zwei Kommata in einer Zeile\x02Der Tunnelname ist ungültig\x02Die Ze" +
- "ile muss innerhalb eines Abschnitts stehen\x02Eintrag muss einen Wert ha" +
- "ben\x02Ungültiger Eintrage im [Interface] Abschnitt\x02Ungültiger Eintra" +
- "g im [Peer] Abschnitt\x02Eine Schnittstelle muss einen privaten Schlssel" +
- " enthalten\x02[nicht spezifiziert]\x02Alle Teilnehmer (peers) müssen öff" +
- "entliche Schlüssel haben\x02Fehler beim Abrufen der Konfiguration\x02Ung" +
- "ültiger Eintrag im Abschnitt [interface]\x02Die Protokollversion muss 1" +
- " sein\x02Ungültiger Eintrag im Abschnitt [peer]\x02, \x02, \x02Über Wire" +
- "Guard\x02WireGuard Logo\x02App Version: %[1]s\x0aGo Backend Version: %[2" +
- "]s\x0aGo Version: %[3]s\x0aBetriebssystem: %[4]s\x0aArchitektur: %[5]s" +
- "\x02Schließen\x02♥ &Spenden!\x02Status:\x02&Deaktivieren\x02&Aktivieren" +
- "\x02Öffentlicher Schlüssel:\x02Eingangsport:\x02MTU:\x02Adressen:\x02DNS" +
- "-Server:\x02Geteilter Schlüssel:\x02Erlaubte IPs:\x02Endpunkt:\x02Erhalt" +
- "ungsintervall:\x02Letzter Schlüsseltausch:\x02Übertragen:\x02aktiviert" +
- "\x02%[1]s empfangen, %[1]s gesendet\x02Tunnelstatus konnte nicht ermitte" +
- "lt werden\x02Tunnel aktivieren ist fehlgeschlagen\x02Tunnel deaktivieren" +
- " ist fehlgeschlagen\x02Schnittstelle: %[1]s\x02Teilnehmer\x02Einen neuen" +
- " Tunnel erstellen\x02Tunnel bearbeiten\x02&Name:\x02&Öffentlicher Schlüs" +
- "sel:\x02(unbekannt)\x02&Blockiere Verkehr außerhalb des Tunnels (Not-Aus" +
- ")\x02Wenn die Konfiguration genau einen Teilnehmer enthält und dieser ei" +
- "nen der Einträge 0.0.0.0/0 oder ::/0 in den Erlaubten IPs enthält, so wi" +
- "rd ein Firewall-Regelsatz erstellt, der allen Verkehr blockiert, der wed" +
- "er aus dem Tunnel stammt noch in diesen geht, mit Ausnahmen für DHCP- un" +
- "d NDP-Verkehr.\x02&Speichern\x02Abbrechen\x02&Konfiguration:\x02Ungültig" +
- "er Name\x02Ein Name ist notwendig.\x02Der Name „%[1]s“ ist ungültig.\x02" +
- "Vorhandene Tunnel können nicht aufgelistet werden\x02Tunnel existiert be" +
- "reits\x02Ein Tunnel mit dem Namen „%[1]s“ existiert bereits.\x02Neue Kon" +
- "figuration kann nicht erstellt werden\x02Schreiben der Datei schlug fehl" +
- "\x02Die Datei „%[1]s“ existiert bereits.\x0a\x0aMöchten Sie sie ersetzen" +
- "?\x02Aktiv\x02Aktiviere\x02Inaktiv\x02Deaktiviere\x02Unbekannter Zustand" +
- "\x02Protokoll\x02&Kopieren\x02&Alles markieren\x02&In Datei Speichern…" +
- "\x02Zeit\x02Protokolleintrag\x02Textdateien (*.txt)|*.txt|Alle Dateien (" +
- "*.*)|*.*\x02Exportiere Protokoll in Datei\x02&Über WireGuard…\x02Tunnel " +
- "Fehler\x02%[1]s\x0a\x0aBitte lesen Sie das Protokoll für weitere Informa" +
- "tionen.\x02%[1]s (veraltet)\x02WireGuard Erkennungsfehler\x02Warten auf " +
- "das Erscheinen des WireGuard Fensters nicht möglich: %[1]v \x02WireGuard" +
- ": Deaktiviert\x02Status: Unbekannt\x02Adressen: Keine\x02Tunnel &verwalt" +
- "en…\x02Tunnel aus Datei &importieren…\x02&Beenden\x02WireGuard Tunnel Fe" +
- "hler\x02WireGuard: %[1]s\x02Status: %[1]s\x02Adressen: %[1]s\x02WireGuar" +
- "d aktiviert\x02Der Tunnel %[1]s wurde aktiviert.\x02WireGuard deaktivier" +
- "t\x02Der Tunnel %[1]s wurde deaktiviert.\x02Eine Aktualisierung ist verf" +
- "ügbar!\x02WireGuard Aktualisierung verfügbar\x02Eine Aktualisierung für" +
- " WireGuard ist jetzt verfügbar. Es wird empfohlen diese schnellstmöglich" +
- " durchzuführen.\x02Tunnel\x02&Bearbeiten\x02Einen &leeren Tunnel hinzufü" +
- "gen…\x02Tunnel hinzufügen\x02Markierte(n) Tunnel entfernen\x02Alle Tunne" +
- "l in eine Zip-Datei exportieren\x02&Umschalten\x02Exportiere alle Tunnel" +
- " in &Zip-Datei\x02Ausgewählten Tunnel &bearbeiten…\x02Ausgewählte(n) Tun" +
- "nel &löschen\x02Ausgewählte Konfiguration konnte nicht importiert werden" +
- ": %[1]v\x02Konnte existierende Tunnel nicht auflisten: %[1]v\x02Es exist" +
- "iert bereits ein Tunnel mit dem Namen „%[1]s“\x02Importieren der Konfigu" +
- "ration nicht möglich: %[1]v\x02Tunnel importiert\x14\x01\x81\x01\x00\x02" +
- "\x18\x02%[1]d Tunnel importiert\x00\x18\x02%[1]d Tunnel importiert\x14" +
- "\x02\x80\x01\x02\x22\x02%[1]d von %[2]d Tunnel importiert\x00\x22\x02%[1" +
- "]d von %[2]d Tunnel importiert\x02Tunnel erstellen nicht möglich\x14\x01" +
- "\x81\x01\x00\x02\x16\x02%[1]d Tunnel löschen\x00\x16\x02%[1]d Tunnel lös" +
- "chen\x14\x01\x81\x01\x00\x024\x02Möchten Sie diesen %[1]d Tunnel wirklic" +
- "h löschen?\x003\x02Möchten Sie diese %[1]d Tunnel wirklich löschen?\x02T" +
- "unnel „%[1]s“ löschen\x02Möchten Sie den Tunnel „%[1]s“ wirklich löschen" +
- "?\x02%[1]s Dieser Schritt kann nicht rückgängig gemacht werden.\x02Tunne" +
- "l löschen nicht möglich\x02Ein Tunnel konnte nicht gelöscht werden: %[1]" +
- "s\x02Tunnel konnten nicht gelöscht werden\x14\x01\x81\x01\x00\x02+\x02%[" +
- "1]d Tunnel konnte nicht entfernt werden.\x00-\x02%[1]d Tunnel konnten ni" +
- "cht gelöscht werden.\x02Konfigurationsdateien (*.zip, *.conf)|*.zip;*.co" +
- "nf|Alle Dateien (*.*)|*.*\x02Importiere Tunnel aus Datei\x02Konfiguratio" +
- "ns-ZIP-Dateien (*.zip)|*.zip\x02Exportiere Tunnel in Zip-Datei\x02%[1]s " +
- "(unsigniert, keine Aktualisierungen)\x02Fehler beim Beenden von WireGuar" +
- "d\x02Der Dienst konnte nicht gestoppt werden: %[1]v. Versuchen Sie WireG" +
- "uard in der Dienstverwaltung zu beenden.\x02Eine Aktualisierung für Wire" +
- "Guard ist verfügbar. Es ist höchst empfehlenswert diese sofort durchzufü" +
- "hren.\x02Status: Auf Nutzer warten\x02Jetzt aktualisieren\x02Status: Auf" +
- " Aktualisierungsdienst warten\x02Fehler: %[1]v. Bitte versuchen Sie es e" +
- "rneut.\x02Status: Fertig!\x02http2: Framer %[1]p: Fehler beim dekodieren" +
- " des gerade geschriebenen Frames\x02http2: Framer %[1]p: %[2]v geschrieb" +
- "en\x02http2: Framer %[1]p: %[2]v gelesen\x02http2: hpack Feld %+[1]v dek" +
- "odiert"
+ "ile muss innerhalb eines Abschnitts stehen\x02Konfigurationsschlüssel fe" +
+ "hlt ein Gleichheitstrennzeichen\x02Eintrag muss einen Wert haben\x02Ungü" +
+ "ltiger Eintrage im [Interface] Abschnitt\x02Ungültiger Eintrag im [Peer]" +
+ " Abschnitt\x02Eine Schnittstelle muss einen privaten Schlssel enthalten" +
+ "\x02[nicht spezifiziert]\x02Alle Teilnehmer (peers) müssen öffentliche S" +
+ "chlüssel haben\x02Fehler beim Abrufen der Konfiguration\x02Ungültiger Ei" +
+ "ntrag im Abschnitt [interface]\x02Die Protokollversion muss 1 sein\x02Un" +
+ "gültiger Eintrag im Abschnitt [peer]\x02, \x02, \x02Über WireGuard\x02Wi" +
+ "reGuard Logo\x02App Version: %[1]s\x0aGo Backend Version: %[2]s\x0aGo Ve" +
+ "rsion: %[3]s\x0aBetriebssystem: %[4]s\x0aArchitektur: %[5]s\x02Schließen" +
+ "\x02♥ &Spenden!\x02Status:\x02&Deaktivieren\x02&Aktivieren\x02Öffentlich" +
+ "er Schlüssel:\x02Eingangsport:\x02MTU:\x02Adressen:\x02DNS-Server:\x02Ge" +
+ "teilter Schlüssel:\x02Erlaubte IPs:\x02Endpunkt:\x02Erhaltungsintervall:" +
+ "\x02Letzter Schlüsseltausch:\x02Übertragen:\x02aktiviert\x02%[1]s empfan" +
+ "gen, %[1]s gesendet\x02Tunnelstatus konnte nicht ermittelt werden\x02Tun" +
+ "nel aktivieren ist fehlgeschlagen\x02Tunnel deaktivieren ist fehlgeschla" +
+ "gen\x02Schnittstelle: %[1]s\x02Teilnehmer\x02Einen neuen Tunnel erstelle" +
+ "n\x02Tunnel bearbeiten\x02&Name:\x02&Öffentlicher Schlüssel:\x02(unbekan" +
+ "nt)\x02&Blockiere Verkehr außerhalb des Tunnels (Not-Aus)\x02Wenn die Ko" +
+ "nfiguration genau einen Teilnehmer enthält und dieser einen der Einträge" +
+ " 0.0.0.0/0 oder ::/0 in den Erlaubten IPs enthält, so wird ein Firewall-" +
+ "Regelsatz erstellt, der allen Verkehr blockiert, der weder aus dem Tunne" +
+ "l stammt noch in diesen geht, mit Ausnahmen für DHCP- und NDP-Verkehr." +
+ "\x02&Speichern\x02Abbrechen\x02&Konfiguration:\x02Ungültiger Name\x02Ein" +
+ " Name ist notwendig.\x02Der Name „%[1]s“ ist ungültig.\x02Vorhandene Tun" +
+ "nel können nicht aufgelistet werden\x02Tunnel existiert bereits\x02Ein T" +
+ "unnel mit dem Namen „%[1]s“ existiert bereits.\x02Neue Konfiguration kan" +
+ "n nicht erstellt werden\x02Schreiben der Datei schlug fehl\x02Die Datei " +
+ "„%[1]s“ existiert bereits.\x0a\x0aMöchten Sie sie ersetzen?\x02Aktiv" +
+ "\x02Aktiviere\x02Inaktiv\x02Deaktiviere\x02Unbekannter Zustand\x02Protok" +
+ "oll\x02&Kopieren\x02&Alles markieren\x02&In Datei Speichern…\x02Zeit\x02" +
+ "Protokolleintrag\x02Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*\x02" +
+ "Exportiere Protokoll in Datei\x02&Über WireGuard…\x02Tunnel Fehler\x02%[" +
+ "1]s\x0a\x0aBitte lesen Sie das Protokoll für weitere Informationen.\x02%" +
+ "[1]s (veraltet)\x02WireGuard Erkennungsfehler\x02Warten auf das Erschein" +
+ "en des WireGuard Fensters nicht möglich: %[1]v \x02WireGuard: Deaktivier" +
+ "t\x02Status: Unbekannt\x02Adressen: Keine\x02Tunnel &verwalten…\x02Tunne" +
+ "l aus Datei &importieren…\x02&Beenden\x02WireGuard Tunnel Fehler\x02Wire" +
+ "Guard: %[1]s\x02Status: %[1]s\x02Adressen: %[1]s\x02WireGuard aktiviert" +
+ "\x02Der Tunnel %[1]s wurde aktiviert.\x02WireGuard deaktiviert\x02Der Tu" +
+ "nnel %[1]s wurde deaktiviert.\x02Eine Aktualisierung ist verfügbar!\x02W" +
+ "ireGuard Aktualisierung verfügbar\x02Eine Aktualisierung für WireGuard i" +
+ "st jetzt verfügbar. Es wird empfohlen diese schnellstmöglich durchzuführ" +
+ "en.\x02Tunnel\x02&Bearbeiten\x02Einen &leeren Tunnel hinzufügen…\x02Tunn" +
+ "el hinzufügen\x02Markierte(n) Tunnel entfernen\x02Alle Tunnel in eine Zi" +
+ "p-Datei exportieren\x02&Umschalten\x02Exportiere alle Tunnel in &Zip-Dat" +
+ "ei\x02Ausgewählten Tunnel &bearbeiten…\x02Ausgewählte(n) Tunnel &löschen" +
+ "\x02Ausgewählte Konfiguration konnte nicht importiert werden: %[1]v\x02K" +
+ "onnte existierende Tunnel nicht auflisten: %[1]v\x02Es existiert bereits" +
+ " ein Tunnel mit dem Namen „%[1]s“\x02Importieren der Konfiguration nicht" +
+ " möglich: %[1]v\x02Tunnel importiert\x14\x01\x81\x01\x00\x02\x18\x02%[1]" +
+ "d Tunnel importiert\x00\x18\x02%[1]d Tunnel importiert\x14\x02\x80\x01" +
+ "\x02\x22\x02%[1]d von %[2]d Tunnel importiert\x00\x22\x02%[1]d von %[2]d" +
+ " Tunnel importiert\x02Tunnel erstellen nicht möglich\x14\x01\x81\x01\x00" +
+ "\x02\x16\x02%[1]d Tunnel löschen\x00\x16\x02%[1]d Tunnel löschen\x14\x01" +
+ "\x81\x01\x00\x024\x02Möchten Sie diesen %[1]d Tunnel wirklich löschen?" +
+ "\x003\x02Möchten Sie diese %[1]d Tunnel wirklich löschen?\x02Tunnel „%[1" +
+ "]s“ löschen\x02Möchten Sie den Tunnel „%[1]s“ wirklich löschen?\x02%[1]s" +
+ " Dieser Schritt kann nicht rückgängig gemacht werden.\x02Tunnel löschen " +
+ "nicht möglich\x02Ein Tunnel konnte nicht gelöscht werden: %[1]s\x02Tunne" +
+ "l konnten nicht gelöscht werden\x14\x01\x81\x01\x00\x02+\x02%[1]d Tunnel" +
+ " konnte nicht entfernt werden.\x00-\x02%[1]d Tunnel konnten nicht gelösc" +
+ "ht werden.\x02Konfigurationsdateien (*.zip, *.conf)|*.zip;*.conf|Alle Da" +
+ "teien (*.*)|*.*\x02Importiere Tunnel aus Datei\x02Konfigurations-ZIP-Dat" +
+ "eien (*.zip)|*.zip\x02Exportiere Tunnel in Zip-Datei\x02%[1]s (unsignier" +
+ "t, keine Aktualisierungen)\x02Fehler beim Beenden von WireGuard\x02Der D" +
+ "ienst konnte nicht gestoppt werden: %[1]v. Versuchen Sie WireGuard in de" +
+ "r Dienstverwaltung zu beenden.\x02Eine Aktualisierung für WireGuard ist " +
+ "verfügbar. Es ist höchst empfehlenswert diese sofort durchzuführen.\x02S" +
+ "tatus: Auf Nutzer warten\x02Jetzt aktualisieren\x02Status: Auf Aktualisi" +
+ "erungsdienst warten\x02Fehler: %[1]v. Bitte versuchen Sie es erneut.\x02" +
+ "Status: Fertig!\x02http2: Framer %[1]p: Fehler beim dekodieren des gerad" +
+ "e geschriebenen Frames\x02http2: Framer %[1]p: %[2]v geschrieben\x02http" +
+ "2: Framer %[1]p: %[2]v gelesen\x02http2: hpack Feld %+[1]v dekodiert"
var enIndex = []uint32{ // 177 elements
// Entry 0 - 1F
@@ -388,45 +395,45 @@ var enIndex = []uint32{ // 177 elements
0x0000037d, 0x000003a3, 0x000003af, 0x000003bc,
// Entry 20 - 3F
0x000003d9, 0x000003ec, 0x00000411, 0x00000445,
- 0x00000459, 0x00000472, 0x0000048f, 0x000004a5,
- 0x000004c9, 0x000004e8, 0x0000050d, 0x0000051e,
- 0x0000053e, 0x0000055d, 0x0000057f, 0x0000059a,
- 0x000005b7, 0x000005ba, 0x000005bd, 0x000005cd,
- 0x000005e2, 0x0000064d, 0x00000653, 0x00000660,
- 0x00000668, 0x00000674, 0x0000067e, 0x0000068a,
- 0x00000697, 0x0000069c, 0x000006a7, 0x000006b4,
+ 0x00000459, 0x00000472, 0x0000048f, 0x000004b9,
+ 0x000004cf, 0x000004f3, 0x00000512, 0x00000537,
+ 0x00000548, 0x00000568, 0x00000587, 0x000005a9,
+ 0x000005c4, 0x000005e1, 0x000005e4, 0x000005e7,
+ 0x000005f7, 0x0000060c, 0x00000677, 0x0000067d,
+ 0x0000068a, 0x00000692, 0x0000069e, 0x000006a8,
+ 0x000006b4, 0x000006c1, 0x000006c6, 0x000006d1,
// Entry 40 - 5F
- 0x000006c3, 0x000006d0, 0x000006da, 0x000006f0,
- 0x00000702, 0x0000070c, 0x00000714, 0x0000072f,
- 0x00000750, 0x0000076a, 0x00000786, 0x00000797,
- 0x0000079c, 0x000007ae, 0x000007ba, 0x000007c1,
- 0x000007ce, 0x000007d8, 0x00000800, 0x0000091e,
- 0x00000924, 0x0000092b, 0x0000093b, 0x00000948,
- 0x0000095c, 0x00000980, 0x000009a0, 0x000009b6,
- 0x000009ef, 0x00000a12, 0x00000a26, 0x00000a65,
+ 0x000006de, 0x000006ed, 0x000006fa, 0x00000704,
+ 0x0000071a, 0x0000072c, 0x00000736, 0x0000073e,
+ 0x00000759, 0x0000077a, 0x00000794, 0x000007b0,
+ 0x000007c1, 0x000007c6, 0x000007d8, 0x000007e4,
+ 0x000007eb, 0x000007f8, 0x00000802, 0x0000082a,
+ 0x00000948, 0x0000094e, 0x00000955, 0x00000965,
+ 0x00000972, 0x00000986, 0x000009aa, 0x000009ca,
+ 0x000009e0, 0x00000a19, 0x00000a3c, 0x00000a50,
// Entry 60 - 7F
- 0x00000a6c, 0x00000a77, 0x00000a80, 0x00000a8d,
- 0x00000a9b, 0x00000a9f, 0x00000aa5, 0x00000ab1,
- 0x00000ac2, 0x00000ac7, 0x00000ad3, 0x00000b00,
- 0x00000b13, 0x00000b27, 0x00000b34, 0x00000b68,
- 0x00000b7c, 0x00000b96, 0x00000bcb, 0x00000be2,
- 0x00000bf2, 0x00000c02, 0x00000c15, 0x00000c34,
- 0x00000c3a, 0x00000c51, 0x00000c62, 0x00000c70,
- 0x00000c81, 0x00000c95, 0x00000cba, 0x00000cd0,
+ 0x00000a8f, 0x00000a96, 0x00000aa1, 0x00000aaa,
+ 0x00000ab7, 0x00000ac5, 0x00000ac9, 0x00000acf,
+ 0x00000adb, 0x00000aec, 0x00000af1, 0x00000afd,
+ 0x00000b2a, 0x00000b3d, 0x00000b51, 0x00000b5e,
+ 0x00000b92, 0x00000ba6, 0x00000bc0, 0x00000bf5,
+ 0x00000c0c, 0x00000c1c, 0x00000c2c, 0x00000c3f,
+ 0x00000c5e, 0x00000c64, 0x00000c7b, 0x00000c8c,
+ 0x00000c9a, 0x00000cab, 0x00000cbf, 0x00000ce4,
// Entry 80 - 9F
- 0x00000cf7, 0x00000d0f, 0x00000d2a, 0x00000d82,
- 0x00000d8a, 0x00000d90, 0x00000da5, 0x00000db0,
- 0x00000dca, 0x00000de4, 0x00000dec, 0x00000e0a,
- 0x00000e23, 0x00000e3e, 0x00000e6d, 0x00000e99,
- 0x00000ed1, 0x00000ef7, 0x00000f08, 0x00000f3e,
- 0x00000f85, 0x00000f9d, 0x00000fcf, 0x00001041,
- 0x0000105b, 0x00001095, 0x000010b8, 0x000010d0,
- 0x000010f9, 0x00001112, 0x0000116b, 0x000011b0,
+ 0x00000cfa, 0x00000d21, 0x00000d39, 0x00000d54,
+ 0x00000dac, 0x00000db4, 0x00000dba, 0x00000dcf,
+ 0x00000dda, 0x00000df4, 0x00000e0e, 0x00000e16,
+ 0x00000e34, 0x00000e4d, 0x00000e68, 0x00000e97,
+ 0x00000ec3, 0x00000efb, 0x00000f21, 0x00000f32,
+ 0x00000f68, 0x00000faf, 0x00000fc7, 0x00000ff9,
+ 0x0000106b, 0x00001085, 0x000010bf, 0x000010e2,
+ 0x000010fa, 0x00001123, 0x0000113c, 0x00001195,
// Entry A0 - BF
- 0x000011cb, 0x000011f1, 0x00001207, 0x0000122a,
- 0x00001242, 0x000012a1, 0x000012f6, 0x0000130f,
- 0x0000131a, 0x0000133e, 0x0000135e, 0x00001370,
- 0x000013a9, 0x000013ca, 0x000013ea, 0x0000140c,
+ 0x000011da, 0x000011f5, 0x0000121b, 0x00001231,
+ 0x00001254, 0x0000126c, 0x000012cb, 0x00001320,
+ 0x00001339, 0x00001344, 0x00001368, 0x00001388,
+ 0x0000139a, 0x000013d3, 0x000013f4, 0x00001414,
0x00001436,
} // Size: 732 bytes
@@ -451,70 +458,163 @@ const enData string = "" + // Size: 5174 bytes
"nvalid port\x02Invalid persistent keepalive\x02Invalid key: %[1]v\x02Key" +
"s must decode to exactly 32 bytes\x02Number must be a number between 0 a" +
"nd 2^64-1: %[1]v\x02Two commas in a row\x02Tunnel name is not valid\x02L" +
- "ine must occur in a section\x02Key must have a value\x02Invalid key for " +
- "[Interface] section\x02Invalid key for [Peer] section\x02An interface mu" +
- "st have a private key\x02[none specified]\x02All peers must have public " +
- "keys\x02Error in getting configuration\x02Invalid key for interface sect" +
- "ion\x02Protocol version must be 1\x02Invalid key for peer section\x02, " +
- "\x02, \x02About WireGuard\x02WireGuard logo image\x02App version: %[1]s" +
- "\x0aGo backend version: %[2]s\x0aGo version: %[3]s\x0aOperating system: " +
- "%[4]s\x0aArchitecture: %[5]s\x02Close\x02♥ &Donate!\x02Status:\x02&Deact" +
- "ivate\x02&Activate\x02Public key:\x02Listen port:\x02MTU:\x02Addresses:" +
- "\x02DNS servers:\x02Preshared key:\x02Allowed IPs:\x02Endpoint:\x02Persi" +
- "stent keepalive:\x02Latest handshake:\x02Transfer:\x02enabled\x02%[1]s r" +
- "eceived, %[2]s sent\x02Failed to determine tunnel state\x02Failed to act" +
- "ivate tunnel\x02Failed to deactivate tunnel\x02Interface: %[1]s\x02Peer" +
- "\x02Create new tunnel\x02Edit tunnel\x02&Name:\x02&Public key:\x02(unkno" +
- "wn)\x02&Block untunneled traffic (kill-switch)\x02When a configuration h" +
- "as exactly one peer, and that peer has an allowed IPs containing at leas" +
- "t one of 0.0.0.0/0 or ::/0, then the tunnel service engages a firewall r" +
- "uleset to block all traffic that is neither to nor from the tunnel inter" +
- "face, with special exceptions for DHCP and NDP.\x02&Save\x02Cancel\x02&C" +
- "onfiguration:\x02Invalid name\x02A name is required.\x02Tunnel name ‘%[1" +
- "]s’ is invalid.\x02Unable to list existing tunnels\x02Tunnel already exi" +
- "sts\x02Another tunnel already exists with the name ‘%[1]s’.\x02Unable to" +
- " create new configuration\x02Writing file failed\x02File ‘%[1]s’ already" +
- " exists.\x0a\x0aDo you want to overwrite it?\x02Active\x02Activating\x02" +
- "Inactive\x02Deactivating\x02Unknown state\x02Log\x02&Copy\x02Select &all" +
- "\x02&Save to file…\x02Time\x02Log message\x02Text Files (*.txt)|*.txt|Al" +
- "l Files (*.*)|*.*\x02Export log to file\x02&About WireGuard…\x02Tunnel E" +
- "rror\x02%[1]s\x0a\x0aPlease consult the log for more information.\x02%[1" +
- "]s (out of date)\x02WireGuard Detection Error\x02Unable to wait for Wire" +
- "Guard window to appear: %[1]v\x02WireGuard: Deactivated\x02Status: Unkno" +
- "wn\x02Addresses: None\x02&Manage tunnels…\x02&Import tunnel(s) from file" +
- "…\x02E&xit\x02WireGuard Tunnel Error\x02WireGuard: %[1]s\x02Status: %[" +
- "1]s\x02Addresses: %[1]s\x02WireGuard Activated\x02The %[1]s tunnel has b" +
- "een activated.\x02WireGuard Deactivated\x02The %[1]s tunnel has been dea" +
- "ctivated.\x02An Update is Available!\x02WireGuard Update Available\x02An" +
- " update to WireGuard is now available. You are advised to update as soon" +
- " as possible.\x02Tunnels\x02&Edit\x02Add &empty tunnel…\x02Add Tunnel" +
- "\x02Remove selected tunnel(s)\x02Export all tunnels to zip\x02&Toggle" +
- "\x02Export all tunnels to &zip…\x02Edit &selected tunnel…\x02&Remove sel" +
- "ected tunnel(s)\x02Could not import selected configuration: %[1]v\x02Cou" +
- "ld not enumerate existing tunnels: %[1]v\x02Another tunnel already exist" +
- "s with the name ‘%[1]s’\x02Unable to import configuration: %[1]v\x02Impo" +
- "rted tunnels\x14\x01\x81\x01\x00\x02\x16\x02Imported %[1]d tunnel\x00" +
- "\x17\x02Imported %[1]d tunnels\x14\x02\x80\x01\x02\x1f\x02Imported %[1]d" +
- " of %[2]d tunnel\x00 \x02Imported %[1]d of %[2]d tunnels\x02Unable to cr" +
- "eate tunnel\x14\x01\x81\x01\x00\x02\x14\x02Delete %[1]d tunnel\x00\x15" +
- "\x02Delete %[1]d tunnels\x14\x01\x81\x01\x00\x024\x02Are you sure you wo" +
- "uld like to delete %[1]d tunnel?\x005\x02Are you sure you would like to " +
- "delete %[1]d tunnels?\x02Delete tunnel ‘%[1]s’\x02Are you sure you would" +
- " like to delete tunnel ‘%[1]s’?\x02%[1]s You cannot undo this action." +
- "\x02Unable to delete tunnel\x02A tunnel was unable to be removed: %[1]s" +
- "\x02Unable to delete tunnels\x14\x01\x81\x01\x00\x02'\x02%[1]d tunnel wa" +
- "s unable to be removed.\x00)\x02%[1]d tunnels were unable to be removed." +
- "\x02Configuration Files (*.zip, *.conf)|*.zip;*.conf|All Files (*.*)|*.*" +
- "\x02Import tunnel(s) from file\x02Configuration ZIP Files (*.zip)|*.zip" +
- "\x02Export tunnels to zip\x02%[1]s (unsigned build, no updates)\x02Error" +
- " Exiting WireGuard\x02Unable to exit service due to: %[1]v. You may want" +
- " to stop WireGuard from the service manager.\x02An update to WireGuard i" +
- "s available. It is highly advisable to update without delay.\x02Status: " +
- "Waiting for user\x02Update Now\x02Status: Waiting for updater service" +
- "\x02Error: %[1]v. Please try again.\x02Status: Complete!\x02http2: Frame" +
- "r %[1]p: failed to decode just-written frame\x02http2: Framer %[1]p: wro" +
- "te %[2]v\x02http2: Framer %[1]p: read %[2]v\x02http2: decoded hpack fiel" +
- "d %+[1]v\x02Config key is missing an equals separator"
+ "ine must occur in a section\x02Config key is missing an equals separator" +
+ "\x02Key must have a value\x02Invalid key for [Interface] section\x02Inva" +
+ "lid key for [Peer] section\x02An interface must have a private key\x02[n" +
+ "one specified]\x02All peers must have public keys\x02Error in getting co" +
+ "nfiguration\x02Invalid key for interface section\x02Protocol version mus" +
+ "t be 1\x02Invalid key for peer section\x02, \x02, \x02About WireGuard" +
+ "\x02WireGuard logo image\x02App version: %[1]s\x0aGo backend version: %[" +
+ "2]s\x0aGo version: %[3]s\x0aOperating system: %[4]s\x0aArchitecture: %[5" +
+ "]s\x02Close\x02♥ &Donate!\x02Status:\x02&Deactivate\x02&Activate\x02Publ" +
+ "ic key:\x02Listen port:\x02MTU:\x02Addresses:\x02DNS servers:\x02Preshar" +
+ "ed key:\x02Allowed IPs:\x02Endpoint:\x02Persistent keepalive:\x02Latest " +
+ "handshake:\x02Transfer:\x02enabled\x02%[1]s received, %[2]s sent\x02Fail" +
+ "ed to determine tunnel state\x02Failed to activate tunnel\x02Failed to d" +
+ "eactivate tunnel\x02Interface: %[1]s\x02Peer\x02Create new tunnel\x02Edi" +
+ "t tunnel\x02&Name:\x02&Public key:\x02(unknown)\x02&Block untunneled tra" +
+ "ffic (kill-switch)\x02When a configuration has exactly one peer, and tha" +
+ "t peer has an allowed IPs containing at least one of 0.0.0.0/0 or ::/0, " +
+ "then the tunnel service engages a firewall ruleset to block all traffic " +
+ "that is neither to nor from the tunnel interface, with special exception" +
+ "s for DHCP and NDP.\x02&Save\x02Cancel\x02&Configuration:\x02Invalid nam" +
+ "e\x02A name is required.\x02Tunnel name ‘%[1]s’ is invalid.\x02Unable to" +
+ " list existing tunnels\x02Tunnel already exists\x02Another tunnel alread" +
+ "y exists with the name ‘%[1]s’.\x02Unable to create new configuration" +
+ "\x02Writing file failed\x02File ‘%[1]s’ already exists.\x0a\x0aDo you wa" +
+ "nt to overwrite it?\x02Active\x02Activating\x02Inactive\x02Deactivating" +
+ "\x02Unknown state\x02Log\x02&Copy\x02Select &all\x02&Save to file…\x02Ti" +
+ "me\x02Log message\x02Text Files (*.txt)|*.txt|All Files (*.*)|*.*\x02Exp" +
+ "ort log to file\x02&About WireGuard…\x02Tunnel Error\x02%[1]s\x0a\x0aPle" +
+ "ase consult the log for more information.\x02%[1]s (out of date)\x02Wire" +
+ "Guard Detection Error\x02Unable to wait for WireGuard window to appear: " +
+ "%[1]v\x02WireGuard: Deactivated\x02Status: Unknown\x02Addresses: None" +
+ "\x02&Manage tunnels…\x02&Import tunnel(s) from file…\x02E&xit\x02WireGua" +
+ "rd Tunnel Error\x02WireGuard: %[1]s\x02Status: %[1]s\x02Addresses: %[1]s" +
+ "\x02WireGuard Activated\x02The %[1]s tunnel has been activated.\x02WireG" +
+ "uard Deactivated\x02The %[1]s tunnel has been deactivated.\x02An Update " +
+ "is Available!\x02WireGuard Update Available\x02An update to WireGuard is" +
+ " now available. You are advised to update as soon as possible.\x02Tunnel" +
+ "s\x02&Edit\x02Add &empty tunnel…\x02Add Tunnel\x02Remove selected tunnel" +
+ "(s)\x02Export all tunnels to zip\x02&Toggle\x02Export all tunnels to &zi" +
+ "p…\x02Edit &selected tunnel…\x02&Remove selected tunnel(s)\x02Could not " +
+ "import selected configuration: %[1]v\x02Could not enumerate existing tun" +
+ "nels: %[1]v\x02Another tunnel already exists with the name ‘%[1]s’\x02Un" +
+ "able to import configuration: %[1]v\x02Imported tunnels\x14\x01\x81\x01" +
+ "\x00\x02\x16\x02Imported %[1]d tunnel\x00\x17\x02Imported %[1]d tunnels" +
+ "\x14\x02\x80\x01\x02\x1f\x02Imported %[1]d of %[2]d tunnel\x00 \x02Impor" +
+ "ted %[1]d of %[2]d tunnels\x02Unable to create tunnel\x14\x01\x81\x01" +
+ "\x00\x02\x14\x02Delete %[1]d tunnel\x00\x15\x02Delete %[1]d tunnels\x14" +
+ "\x01\x81\x01\x00\x024\x02Are you sure you would like to delete %[1]d tun" +
+ "nel?\x005\x02Are you sure you would like to delete %[1]d tunnels?\x02Del" +
+ "ete tunnel ‘%[1]s’\x02Are you sure you would like to delete tunnel ‘%[1]" +
+ "s’?\x02%[1]s You cannot undo this action.\x02Unable to delete tunnel\x02" +
+ "A tunnel was unable to be removed: %[1]s\x02Unable to delete tunnels\x14" +
+ "\x01\x81\x01\x00\x02'\x02%[1]d tunnel was unable to be removed.\x00)\x02" +
+ "%[1]d tunnels were unable to be removed.\x02Configuration Files (*.zip, " +
+ "*.conf)|*.zip;*.conf|All Files (*.*)|*.*\x02Import tunnel(s) from file" +
+ "\x02Configuration ZIP Files (*.zip)|*.zip\x02Export tunnels to zip\x02%[" +
+ "1]s (unsigned build, no updates)\x02Error Exiting WireGuard\x02Unable to" +
+ " exit service due to: %[1]v. You may want to stop WireGuard from the ser" +
+ "vice manager.\x02An update to WireGuard is available. It is highly advis" +
+ "able to update without delay.\x02Status: Waiting for user\x02Update Now" +
+ "\x02Status: Waiting for updater service\x02Error: %[1]v. Please try agai" +
+ "n.\x02Status: Complete!\x02http2: Framer %[1]p: failed to decode just-wr" +
+ "itten frame\x02http2: Framer %[1]p: wrote %[2]v\x02http2: Framer %[1]p: " +
+ "read %[2]v\x02http2: decoded hpack field %+[1]v"
+
+var faIndex = []uint32{ // 177 elements
+ // Entry 0 - 1F
+ 0x00000000, 0x00000007, 0x00000007, 0x00000007,
+ 0x0000002b, 0x0000002b, 0x00000093, 0x00000093,
+ 0x00000093, 0x00000093, 0x00000093, 0x000000a3,
+ 0x000000a3, 0x000000c6, 0x000000e9, 0x00000110,
+ 0x0000013b, 0x00000166, 0x00000173, 0x00000183,
+ 0x00000183, 0x00000183, 0x00000183, 0x00000183,
+ 0x00000183, 0x000001b0, 0x000001b0, 0x000001b0,
+ 0x000001b0, 0x000001b0, 0x000001ca, 0x000001e2,
+ // Entry 20 - 3F
+ 0x000001e2, 0x000001e2, 0x000001e2, 0x000001e2,
+ 0x000001e2, 0x000001e2, 0x000001e2, 0x000001e2,
+ 0x00000218, 0x00000218, 0x00000218, 0x00000218,
+ 0x0000022c, 0x0000027c, 0x000002a6, 0x000002a6,
+ 0x000002a6, 0x000002a6, 0x000002aa, 0x000002ae,
+ 0x000002c5, 0x000002c5, 0x000002c5, 0x000002ce,
+ 0x000002e5, 0x000002f1, 0x0000030c, 0x00000321,
+ 0x00000336, 0x00000349, 0x0000034e, 0x00000361,
+ // Entry 40 - 5F
+ 0x00000375, 0x0000039d, 0x000003b0, 0x000003c5,
+ 0x000003f0, 0x000003f0, 0x000003fe, 0x0000040e,
+ 0x0000040e, 0x0000040e, 0x0000040e, 0x0000040e,
+ 0x0000041e, 0x00000427, 0x00000444, 0x0000045a,
+ 0x00000463, 0x00000479, 0x0000048c, 0x0000048c,
+ 0x0000048c, 0x00000498, 0x0000049f, 0x000004b2,
+ 0x000004c8, 0x000004e9, 0x000004e9, 0x0000052f,
+ 0x0000055c, 0x0000055c, 0x0000055c, 0x0000055c,
+ // Entry 60 - 7F
+ 0x0000055c, 0x00000565, 0x00000585, 0x00000594,
+ 0x000005ba, 0x000005d6, 0x000005ec, 0x000005fa,
+ 0x000005fa, 0x0000061b, 0x00000624, 0x00000645,
+ 0x00000645, 0x00000681, 0x0000069c, 0x000006b0,
+ 0x000006b0, 0x000006b0, 0x000006b0, 0x000006b0,
+ 0x000006b0, 0x000006cd, 0x000006e7, 0x00000708,
+ 0x00000708, 0x00000708, 0x00000724, 0x00000724,
+ 0x00000736, 0x0000074f, 0x00000769, 0x0000078b,
+ // Entry 80 - 9F
+ 0x000007a9, 0x000007a9, 0x000007de, 0x00000817,
+ 0x00000817, 0x00000827, 0x00000835, 0x00000863,
+ 0x00000879, 0x0000089e, 0x000008d3, 0x000008d3,
+ 0x0000090c, 0x0000090c, 0x0000090c, 0x0000090c,
+ 0x0000090c, 0x0000090c, 0x0000090c, 0x0000092e,
+ 0x00000971, 0x000009c9, 0x000009f6, 0x00000a2b,
+ 0x00000a2b, 0x00000a47, 0x00000a47, 0x00000a47,
+ 0x00000a79, 0x00000a79, 0x00000aae, 0x00000aae,
+ // Entry A0 - BF
+ 0x00000aae, 0x00000ae1, 0x00000b1d, 0x00000b4b,
+ 0x00000b4b, 0x00000b81, 0x00000b81, 0x00000b81,
+ 0x00000bb2, 0x00000bdb, 0x00000c24, 0x00000c5c,
+ 0x00000c77, 0x00000c77, 0x00000c77, 0x00000c77,
+ 0x00000c77,
+} // Size: 732 bytes
+
+const faData string = "" + // Size: 3191 bytes
+ "\x02خطا\x02گزینه\u200cهای خط فرمان\x02شما باید نگارش ۶۴-بیت WireGuard را" +
+ " در این رایانه استفاده کنید.\x02هم اکنون\x14\x01\x81\x01\x00\x02\x0d\x02" +
+ "%[1]d سال\x00\x0d\x02%[1]d سال\x14\x01\x81\x01\x00\x02\x0d\x02%[1]d روز" +
+ "\x00\x0d\x02%[1]d روز\x14\x01\x81\x01\x00\x02\x0f\x02%[1]d ساعت\x00\x0f" +
+ "\x02%[1]d ساعت\x14\x01\x81\x01\x00\x02\x11\x02%[1]d دقیقه\x00\x11\x02%[1" +
+ "]d دقیقه\x14\x01\x81\x01\x00\x02\x11\x02%[1]d ثانیه\x00\x11\x02%[1]d ثان" +
+ "یه\x02%[1]s پیش\x02%[1]d\u00a0بایت\x02نشانی آی\u200cپی نامعتبر است\x02M" +
+ "TU نامعتبر است\x02پورت نامعتبر\x02کلید باید یک مقدار داشته باشد\x02[مشخص" +
+ " نشده]\x02همه همتاها باید کلید\u200cهای عمومی داشته باشند\x02خطا در دریا" +
+ "فت پیکربندی\x02، \x02، \x02درباره WireGuard\x02بستن\x02♥&کمک\u200cمالی!" +
+ "\x02وضعیت:\x02&غیرفعال\u200cسازی\x02&فعال\u200cسازی\x02کلید عمومی:\x02پو" +
+ "رت شنود:\x02MTU:\x02نشانی\u200cها:\x02سرورهای DNS:\x02کلید از پیش تقسیم" +
+ " شده:\x02IPهای مجاز:\x02نقطه پایان:\x02زنده نگه\u200cداشتن پیوسته:\x02ان" +
+ "تقال:\x02فعال شده\x02رابط: %[1]s\x02همتا\x02ایجاد تونل جدید\x02ویرایش ت" +
+ "ونل\x02&نام:\x02&کلید عمومی:\x02(ناشناخته)\x02&ذخیره\x02لغو\x02&پیکربند" +
+ "ی:\x02نام نامعتبر\x02یک نام الزامی است.\x02نمی\u200cتوان تونل\u200cهای " +
+ "موجود را فهرست کرد\x02تونل هم\u200cاکنون موجود است\x02فعال\x02در حال فع" +
+ "ال\u200cسازی\x02غیرفعال\x02در حال غیرفعال\u200cسازی\x02وضعیت ناشناخته" +
+ "\x02گزارش وقایع\x02&روگرفت\x02&ذخیره در پرونده…\x02زمان\x02پیام گزارش رو" +
+ "یداد\x02برون\u200cبرد گزارش رویداد به پرونده\x02&درباره WireGuard…\x02خ" +
+ "طالی تونل\x02وضعیت: ناشناخته\x02نشانی\u200cها: هیچ\x02&مدیریت تونل" +
+ "\u200cها…\x02خطای تونل WireGuard\x02وضعیت: %[1]s\x02نشانی\u200cها: %[1]s" +
+ "\x02WireGuard فعال\u200cشد\x02تونل %[1]s فعال\u200cشده.\x02WireGuard غیر" +
+ "فعال شد\x02یک به\u200cروزرسانی در دسترس است!\x02به\u200cروزرسانی WireGu" +
+ "ard در دسترس است\x02تونل\u200cها\x02&ویرایش\x02افزودن &خالی\u200cکردن تو" +
+ "نل…\x02افزودن تونل\x02حذف تونل(ها) انتخابی\x02برون\u200cبری همه تونل" +
+ "\u200cها به زیپ\x02برون\u200cبری همه تونل\u200cها به &زیپ…\x02تونل\u200c" +
+ "های وارد شده\x14\x01\x81\x01\x00\x02\x1d\x02%[1]d تونل وارد شد\x00\x1d" +
+ "\x02%[1]d تونل وارد شد\x14\x02\x80\x01\x02(\x02%[1]d از %[2]d تونل وارد " +
+ "شد\x00(\x02%[1]d از %[2]d تونل وارد شد\x02نمی\u200cتوان تونل ایجاد کرد" +
+ "\x14\x01\x81\x01\x00\x02\x16\x02حذف %[1]d تونل\x00\x16\x02حذف %[1]d تونل" +
+ "\x02حذف تونل ‘%[1]s’\x02حذف تونل\u200c امکان\u200cپذیر نیست\x02نمی\u200c" +
+ "توان تونل\u200cها را حذف کرد\x02وارد کردن تونل(ها) از پرونده\x02پرونده" +
+ "\u200cهای پیکربندی زیپ (*.zip)|*.zip\x02برون\u200cبری تونل\u200cها به زی" +
+ "پ\x02خطا در هنگام خارج شدن از WireGuard\x02وضعیت: درانتظار برای کاربر" +
+ "\x02اکنون به\u200cروز رسانی کن\x02وضعیت: درانتظار برای سرویس به\u200cروز" +
+ "رسانی\x02خطا: %[1]v. لطفا دوباره تلاش کنید.\x02وضعیت: کامل شد!"
var frIndex = []uint32{ // 177 elements
// Entry 0 - 1F
@@ -528,49 +628,49 @@ var frIndex = []uint32{ // 177 elements
0x00000433, 0x00000465, 0x00000474, 0x00000484,
// Entry 20 - 3F
0x000004bb, 0x000004d3, 0x00000500, 0x0000053b,
- 0x00000557, 0x00000570, 0x0000059c, 0x000005b7,
- 0x000005e3, 0x0000060a, 0x00000632, 0x0000064a,
- 0x00000682, 0x000006a9, 0x000006d5, 0x000006f7,
- 0x00000723, 0x00000726, 0x00000728, 0x0000073f,
- 0x0000075a, 0x000007e0, 0x000007e7, 0x000007fb,
- 0x00000803, 0x00000810, 0x00000819, 0x00000829,
- 0x0000083a, 0x00000840, 0x0000084b, 0x0000085a,
+ 0x00000557, 0x00000570, 0x0000059c, 0x000005d7,
+ 0x000005f2, 0x0000061e, 0x00000645, 0x0000066d,
+ 0x00000685, 0x000006bd, 0x000006e4, 0x00000710,
+ 0x00000732, 0x0000075e, 0x00000761, 0x00000763,
+ 0x0000077a, 0x00000795, 0x0000081b, 0x00000822,
+ 0x00000836, 0x0000083e, 0x0000084b, 0x00000854,
+ 0x00000864, 0x00000875, 0x0000087b, 0x00000886,
// Entry 40 - 5F
- 0x00000870, 0x0000088a, 0x000008a1, 0x000008cf,
- 0x000008f6, 0x00000902, 0x0000090d, 0x0000092e,
- 0x0000095a, 0x00000979, 0x0000099d, 0x000009af,
- 0x000009b9, 0x000009d2, 0x000009e5, 0x000009ec,
- 0x000009fd, 0x00000a0a, 0x00000a3d, 0x00000b98,
- 0x00000ba5, 0x00000bad, 0x00000bbe, 0x00000bcd,
- 0x00000be5, 0x00000c0f, 0x00000c44, 0x00000c5a,
- 0x00000c8e, 0x00000cbe, 0x00000cdc, 0x00000d1b,
+ 0x00000895, 0x000008ab, 0x000008c5, 0x000008dc,
+ 0x0000090a, 0x00000931, 0x0000093d, 0x00000948,
+ 0x00000969, 0x00000995, 0x000009b4, 0x000009d8,
+ 0x000009ea, 0x000009f4, 0x00000a0d, 0x00000a20,
+ 0x00000a27, 0x00000a38, 0x00000a45, 0x00000a78,
+ 0x00000bd3, 0x00000be0, 0x00000be8, 0x00000bf9,
+ 0x00000c08, 0x00000c20, 0x00000c4a, 0x00000c7f,
+ 0x00000c95, 0x00000cc9, 0x00000cf9, 0x00000d17,
// Entry 60 - 7F
- 0x00000d26, 0x00000d3a, 0x00000d47, 0x00000d5f,
- 0x00000d6d, 0x00000d75, 0x00000d7d, 0x00000d91,
- 0x00000db1, 0x00000db7, 0x00000dca, 0x00000e03,
- 0x00000e27, 0x00000e3f, 0x00000e50, 0x00000e9a,
- 0x00000eac, 0x00000ece, 0x00000f10, 0x00000f27,
- 0x00000f37, 0x00000f49, 0x00000f61, 0x00000f93,
- 0x00000f9c, 0x00000fb7, 0x00000fc9, 0x00000fd7,
- 0x00000fe8, 0x00000ffa, 0x00001018, 0x0000102e,
+ 0x00000d56, 0x00000d61, 0x00000d75, 0x00000d82,
+ 0x00000d9a, 0x00000da8, 0x00000db0, 0x00000db8,
+ 0x00000dcc, 0x00000dec, 0x00000df2, 0x00000e05,
+ 0x00000e3e, 0x00000e62, 0x00000e7a, 0x00000e8b,
+ 0x00000ed5, 0x00000ee7, 0x00000f09, 0x00000f4b,
+ 0x00000f62, 0x00000f72, 0x00000f84, 0x00000f9c,
+ 0x00000fce, 0x00000fd7, 0x00000ff2, 0x00001004,
+ 0x00001012, 0x00001023, 0x00001035, 0x00001053,
// Entry 80 - 9F
- 0x00001050, 0x00001069, 0x0000108f, 0x00001104,
- 0x0000110c, 0x00001116, 0x00001131, 0x00001143,
- 0x0000116e, 0x00001191, 0x0000119b, 0x000011c2,
- 0x000011e7, 0x00001213, 0x00001251, 0x00001288,
- 0x000012b4, 0x000012e3, 0x000012f5, 0x0000132c,
- 0x00001375, 0x00001394, 0x000013cc, 0x00001430,
- 0x00001450, 0x00001486, 0x000014b5, 0x000014d7,
- 0x0000150c, 0x00001530, 0x0000159c, 0x000015ef,
+ 0x00001069, 0x0000108b, 0x000010a4, 0x000010ca,
+ 0x0000113f, 0x00001147, 0x00001151, 0x0000116c,
+ 0x0000117e, 0x000011a9, 0x000011cc, 0x000011d6,
+ 0x000011fd, 0x00001222, 0x0000124e, 0x0000128c,
+ 0x000012c3, 0x000012ef, 0x0000131e, 0x00001330,
+ 0x00001367, 0x000013b0, 0x000013cf, 0x00001407,
+ 0x0000146b, 0x0000148b, 0x000014c1, 0x000014f0,
+ 0x00001512, 0x00001547, 0x0000156b, 0x000015d7,
// Entry A0 - BF
- 0x0000161d, 0x00001649, 0x00001667, 0x00001698,
- 0x000016b6, 0x00001731, 0x000017aa, 0x000017cf,
- 0x000017e9, 0x00001818, 0x0000183d, 0x0000184e,
- 0x00001893, 0x000018b8, 0x000018da, 0x000018fe,
- 0x000018fe,
+ 0x0000162a, 0x00001658, 0x00001684, 0x000016a2,
+ 0x000016d3, 0x000016f1, 0x0000176c, 0x000017e5,
+ 0x0000180a, 0x00001824, 0x00001853, 0x00001878,
+ 0x00001889, 0x000018ce, 0x000018f3, 0x00001915,
+ 0x00001939,
} // Size: 732 bytes
-const frData string = "" + // Size: 6398 bytes
+const frData string = "" + // Size: 6457 bytes
"\x02Erreur\x02(sans argument) : élever et installer service du gestionna" +
"ire\x02Utilisation : %[1]s [\x0a%[2]s]\x02Options de la ligne de command" +
"e\x02Impossible de détecter si le processus s’exécute sous WOW64 : %[1]v" +
@@ -594,82 +694,177 @@ const frData string = "" + // Size: 6398 bytes
"ctive permanente non valide\x02Clé non valide : %[1]v\x02Clés doivent êt" +
"re décodées sur 32 octets\x02Le numéro doit être un numéro entre 0 et 2^" +
"64-1 : %[1]v\x02Deux virgules consécutives\x02Nom du tunnel non valide" +
- "\x02Une ligne doit apparaître dans une section\x02Clé doit avoir une val" +
- "eur\x02Clé non valide pour la section [Interface]\x02Clé non valide pour" +
- " la section [Peer]\x02L'interface doit avoir une clé privée\x02[aucune s" +
- "pécification]\x02Tous les homologues doivent avoirs les clés publiques." +
- "\x02Erreur d'obtention de la configuration\x02Clé non valide pour la sec" +
- "tion d'interface\x02Version du protocole doit être 1\x02Clé non valide p" +
- "our la section d'homologue\x02, \x02 \x02À propos du WireGuard\x02Image " +
- "du logo du WireGuard\x02Version de l'application : %[1]s\x0aVersion wire" +
- "guard-go : %[2]s\x0aVersion Go : %[3]s\x0aSystème d'exploitation : %[4]s" +
- "\x0aArchitecture : %[5]s\x02Fermer\x02♥ &Faites un don!\x02État :\x02&Dé" +
- "sactiver\x02&Activer\x02Clé publique :\x02Port d'écoute :\x02MTU :\x02Ad" +
- "resses :\x02Serveurs DNS :\x02Clé pré-partagée :\x02Adresses IP autorisé" +
- "es :\x02Point de terminaison :\x02Conservation de connexion active perma" +
- "nente :\x02Dernier établissement d'une liaison :\x02Transfert :\x02activ" +
- "é(e)\x02%[1]s reçu(e), %[2]s envoyé(e)\x02Impossible de déterminer l'ét" +
- "at du tunnel\x02Impossible d'activer le tunnel\x02Impossible de désactiv" +
- "er le tunnel\x02Interface : %[1]s\x02Homologue\x02Créer un nouveau tunne" +
- "l\x02Modifier le tunnel\x02&Nom :\x02&Clé publique :\x02(inconnu(e))\x02" +
- "&Bloquer tous le trafic hors tunnel (interrupteur)\x02Si la configuratio" +
- "n a exactement un homologue et si cet homologue a une addresse IP approv" +
- "ée contenant au moins un de 0.0.0.0/0\u00a0ou\u00a0::/0, le service de " +
- "tunnelisation utilise l'ensemble de règles du pare-feu afin de blocquer " +
- "tout le traffic, sauf le traffic vers ou dépuis l'interface de tunnel et" +
- " l'exceptions speciales liées à DHCP et NDP.\x02&Enregistrer\x02Annuler" +
- "\x02&Configuration :\x02Nom non valide\x02Le nom est obligatoire.\x02Nom" +
- " de tunnel « %[1]s » est non valide.\x02Impossible de créer une liste de" +
- "s tunnels existants\x02Tunnel existe déjà.\x02Nom « %[1]s » est déjà uti" +
- "lisé pour un tunnel.\x02Impossible de créer une configuration nouvelle" +
- "\x02Échec d'écriture du fichier\x02Fichier « %[1]s » existe déjà.\x0a" +
- "\x0aVoulez-vous le remplacer ?\x02Activé(e)\x02Activation en cours\x02In" +
- "activé(e)\x02Désactivation en cours\x02État inconnu\x02Journal\x02&Copie" +
- "r\x02Sélectionner &tout\x02&Enregistrer dans le fichier…\x02Temps\x02Mes" +
- "sage du journal\x02Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|" +
- "*.*\x02Exporter le journal vers le fichier\x02&À propos WireGuard…\x02Er" +
- "reur du tunnel\x02%[1]s\x0a\x0aConsultez le journal pour plus d’informat" +
- "ions, s'il vous plaît.\x02%[1]s (obsolète)\x02Erreur de détection du Wir" +
- "eGuard\x02Impossible d’attendre l'affichage du fenêtre WireGuard : %[1]v" +
- "\x02WireGuard: Désactivé\x02État : Inconnu\x02Adresses : Aucune\x02&Gest" +
- "ion des tunnels…\x02&Importer le(s) tunnel(s) à partir du fichier…\x02Q&" +
- "uitter\x02Erreur du tunnel WireGuard\x02WireGuard : %[1]s\x02État : %[1]" +
- "s\x02Adresses : %[1]s\x02WireGuard activé\x02Tunnel %[1]s a été activé." +
- "\x02WireGuard désactivé\x02Tunnel %[1]s a été désactivé.\x02Mise à jour " +
- "disponible!\x02WireGuard mise à jour est disponible\x02Une mise à jour d" +
- "u WireGuard est disponible. Il est conseillé de mettre votre WireGuard à" +
- " jour dès que possible.\x02Tunnels\x02&Modifier\x02Ajouter un &tunnel vi" +
- "de…\x02Ajouter le tunnel\x02Supprimer le(s) tunnel(s) sélectionné(s)\x02" +
- "Exporter tous les tunnels vers zip\x02&Basculer\x02Exporter tous les tun" +
- "nels vers &zip…\x02Modifier &le tunnel sélectionné…\x02&Supprimer le(s) " +
- "tunnel(s) sélectionné(s)\x02Impossible d'importer la configuration sélec" +
- "tionnée : %[1]v\x02Impossible d'énumérer les tunnels existantes : %[1]v" +
- "\x02Un tunnel nommé « %[1]s » existe déjà.\x02Impossible d'importer la c" +
- "onfiguration : %[1]v\x02Tunnels importés\x14\x01\x81\x01\x00\x02\x16\x02" +
- "%[1]d tunnel importé\x00\x18\x02%[1]d tunnels importés\x14\x02\x80\x01" +
- "\x02 \x02%[1]d de %[2]d tunnels importé\x00!\x02%[1]d de %[2]d tunnels i" +
- "mportés\x02Impossible de créer le tunnel\x14\x01\x81\x01\x00\x02\x17\x02" +
- "Supprimer %[1]d tunnel\x00\x18\x02Supprimer %[1]d tunnels\x14\x01\x81" +
- "\x01\x00\x02-\x02Voulez-vous vraiment supprimer %[1]d tunnel?\x00.\x02Vo" +
- "ulez-vous vraiment supprimer %[1]d tunnels?\x02Supprimer le tunnel ‘%[1]" +
- "s’\x02Voulez-vous vraiment supprimer le tunnel « %[1]s »?\x02%[1]s Vous " +
- "ne pouvez pas annuler cette action.\x02Impossible de supprimer le tunnel" +
- "\x02Il a été impossible de supprimer un tunnel : %[1]s\x02Impossible de " +
- "supprimer les tunnels\x14\x01\x81\x01\x00\x021\x02Il a été impossible de" +
- " supprimer %[1]d tunnel.\x002\x02Il a été impossible de supprimer %[1]d " +
- "tunnels.\x02Fichiers de configuration (*.zip, *.conf)|*.zip;*.conf|Tous " +
- "les fichiers (*.*)|*.*\x02Importer le(s) tunnel(s) à partir du fichier" +
- "\x02Fichiers de configuration ZIP (*.zip)|*.zip\x02Exporter les tunnels " +
- "vers zip\x02%[1]s (version non signée, aucune mise à jour)\x02Erreur de " +
- "sortie du WireGuard\x02Impossible de quitter le service en raison de : %" +
- "[1]v. Essayez d'arrêter WireGuard à partir du gestionnair des services." +
- "\x02Une mise à jour du WireGuard est disponible. Il est fortement consei" +
- "llé de metter votre WireGuard à jour sans délai.\x02État: En attente de " +
- "l’utilisateur\x02Mettre à jour maintenant\x02État: En attente du program" +
- "me de mise à jour\x02Erreur : %[1]v. Veuillez réessayer.\x02État: Termin" +
- "é!\x02http2: Trameur %[1]p : impossible de décoder la trame just écrite" +
- ".\x02http2: Trameur %[1]p: a écrit %[2]v\x02http2: Trameur %[1]p : a lu " +
- "%[2]v\x02http2 : champ hpack %+[1]v décodé"
+ "\x02Une ligne doit apparaître dans une section\x02Il manque le séparateu" +
+ "r égal à la clé de configuration\x02Clé doit avoir une valeur\x02Clé non" +
+ " valide pour la section [Interface]\x02Clé non valide pour la section [P" +
+ "eer]\x02L'interface doit avoir une clé privée\x02[aucune spécification]" +
+ "\x02Tous les homologues doivent avoirs les clés publiques.\x02Erreur d'o" +
+ "btention de la configuration\x02Clé non valide pour la section d'interfa" +
+ "ce\x02Version du protocole doit être 1\x02Clé non valide pour la section" +
+ " d'homologue\x02, \x02 \x02À propos du WireGuard\x02Image du logo du Wir" +
+ "eGuard\x02Version de l'application : %[1]s\x0aVersion wireguard-go : %[2" +
+ "]s\x0aVersion Go : %[3]s\x0aSystème d'exploitation : %[4]s\x0aArchitectu" +
+ "re : %[5]s\x02Fermer\x02♥ &Faites un don!\x02État :\x02&Désactiver\x02&A" +
+ "ctiver\x02Clé publique :\x02Port d'écoute :\x02MTU :\x02Adresses :\x02Se" +
+ "rveurs DNS :\x02Clé pré-partagée :\x02Adresses IP autorisées :\x02Point " +
+ "de terminaison :\x02Conservation de connexion active permanente :\x02Der" +
+ "nier établissement d'une liaison :\x02Transfert :\x02activé(e)\x02%[1]s " +
+ "reçu(e), %[2]s envoyé(e)\x02Impossible de déterminer l'état du tunnel" +
+ "\x02Impossible d'activer le tunnel\x02Impossible de désactiver le tunnel" +
+ "\x02Interface : %[1]s\x02Homologue\x02Créer un nouveau tunnel\x02Modifie" +
+ "r le tunnel\x02&Nom :\x02&Clé publique :\x02(inconnu(e))\x02&Bloquer tou" +
+ "s le trafic hors tunnel (interrupteur)\x02Si la configuration a exacteme" +
+ "nt un homologue et si cet homologue a une addresse IP approvée contenant" +
+ " au moins un de 0.0.0.0/0\u00a0ou\u00a0::/0, le service de tunnelisation" +
+ " utilise l'ensemble de règles du pare-feu afin de blocquer tout le traff" +
+ "ic, sauf le traffic vers ou dépuis l'interface de tunnel et l'exceptions" +
+ " speciales liées à DHCP et NDP.\x02&Enregistrer\x02Annuler\x02&Configura" +
+ "tion :\x02Nom non valide\x02Le nom est obligatoire.\x02Nom de tunnel « %" +
+ "[1]s » est non valide.\x02Impossible de créer une liste des tunnels exis" +
+ "tants\x02Tunnel existe déjà.\x02Nom « %[1]s » est déjà utilisé pour un t" +
+ "unnel.\x02Impossible de créer une configuration nouvelle\x02Échec d'écri" +
+ "ture du fichier\x02Fichier « %[1]s » existe déjà.\x0a\x0aVoulez-vous le " +
+ "remplacer ?\x02Activé(e)\x02Activation en cours\x02Inactivé(e)\x02Désact" +
+ "ivation en cours\x02État inconnu\x02Journal\x02&Copier\x02Sélectionner &" +
+ "tout\x02&Enregistrer dans le fichier…\x02Temps\x02Message du journal\x02" +
+ "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*\x02Exporter le " +
+ "journal vers le fichier\x02&À propos WireGuard…\x02Erreur du tunnel\x02%" +
+ "[1]s\x0a\x0aConsultez le journal pour plus d’informations, s'il vous pla" +
+ "ît.\x02%[1]s (obsolète)\x02Erreur de détection du WireGuard\x02Impossib" +
+ "le d’attendre l'affichage du fenêtre WireGuard : %[1]v\x02WireGuard: Dés" +
+ "activé\x02État : Inconnu\x02Adresses : Aucune\x02&Gestion des tunnels…" +
+ "\x02&Importer le(s) tunnel(s) à partir du fichier…\x02Q&uitter\x02Erreur" +
+ " du tunnel WireGuard\x02WireGuard : %[1]s\x02État : %[1]s\x02Adresses : " +
+ "%[1]s\x02WireGuard activé\x02Tunnel %[1]s a été activé.\x02WireGuard dés" +
+ "activé\x02Tunnel %[1]s a été désactivé.\x02Mise à jour disponible!\x02Wi" +
+ "reGuard mise à jour est disponible\x02Une mise à jour du WireGuard est d" +
+ "isponible. Il est conseillé de mettre votre WireGuard à jour dès que pos" +
+ "sible.\x02Tunnels\x02&Modifier\x02Ajouter un &tunnel vide…\x02Ajouter le" +
+ " tunnel\x02Supprimer le(s) tunnel(s) sélectionné(s)\x02Exporter tous les" +
+ " tunnels vers zip\x02&Basculer\x02Exporter tous les tunnels vers &zip…" +
+ "\x02Modifier &le tunnel sélectionné…\x02&Supprimer le(s) tunnel(s) sélec" +
+ "tionné(s)\x02Impossible d'importer la configuration sélectionnée : %[1]v" +
+ "\x02Impossible d'énumérer les tunnels existantes : %[1]v\x02Un tunnel no" +
+ "mmé « %[1]s » existe déjà.\x02Impossible d'importer la configuration : %" +
+ "[1]v\x02Tunnels importés\x14\x01\x81\x01\x00\x02\x16\x02%[1]d tunnel imp" +
+ "orté\x00\x18\x02%[1]d tunnels importés\x14\x02\x80\x01\x02 \x02%[1]d de " +
+ "%[2]d tunnels importé\x00!\x02%[1]d de %[2]d tunnels importés\x02Impossi" +
+ "ble de créer le tunnel\x14\x01\x81\x01\x00\x02\x17\x02Supprimer %[1]d tu" +
+ "nnel\x00\x18\x02Supprimer %[1]d tunnels\x14\x01\x81\x01\x00\x02-\x02Voul" +
+ "ez-vous vraiment supprimer %[1]d tunnel?\x00.\x02Voulez-vous vraiment su" +
+ "pprimer %[1]d tunnels?\x02Supprimer le tunnel ‘%[1]s’\x02Voulez-vous vra" +
+ "iment supprimer le tunnel « %[1]s »?\x02%[1]s Vous ne pouvez pas annuler" +
+ " cette action.\x02Impossible de supprimer le tunnel\x02Il a été impossib" +
+ "le de supprimer un tunnel : %[1]s\x02Impossible de supprimer les tunnels" +
+ "\x14\x01\x81\x01\x00\x021\x02Il a été impossible de supprimer %[1]d tunn" +
+ "el.\x002\x02Il a été impossible de supprimer %[1]d tunnels.\x02Fichiers " +
+ "de configuration (*.zip, *.conf)|*.zip;*.conf|Tous les fichiers (*.*)|*." +
+ "*\x02Importer le(s) tunnel(s) à partir du fichier\x02Fichiers de configu" +
+ "ration ZIP (*.zip)|*.zip\x02Exporter les tunnels vers zip\x02%[1]s (vers" +
+ "ion non signée, aucune mise à jour)\x02Erreur de sortie du WireGuard\x02" +
+ "Impossible de quitter le service en raison de : %[1]v. Essayez d'arrêter" +
+ " WireGuard à partir du gestionnair des services.\x02Une mise à jour du W" +
+ "ireGuard est disponible. Il est fortement conseillé de metter votre Wire" +
+ "Guard à jour sans délai.\x02État: En attente de l’utilisateur\x02Mettre " +
+ "à jour maintenant\x02État: En attente du programme de mise à jour\x02Er" +
+ "reur : %[1]v. Veuillez réessayer.\x02État: Terminé!\x02http2: Trameur %[" +
+ "1]p : impossible de décoder la trame just écrite.\x02http2: Trameur %[1]" +
+ "p: a écrit %[2]v\x02http2: Trameur %[1]p : a lu %[2]v\x02http2 : champ h" +
+ "pack %+[1]v décodé"
+
+var idIndex = []uint32{ // 177 elements
+ // Entry 0 - 1F
+ 0x00000000, 0x0000000a, 0x00000047, 0x00000062,
+ 0x00000074, 0x000000bf, 0x000000fe, 0x0000012f,
+ 0x00000187, 0x000001e0, 0x00000215, 0x0000021e,
+ 0x00000231, 0x00000250, 0x00000262, 0x00000273,
+ 0x00000286, 0x00000299, 0x000002a9, 0x000002b1,
+ 0x000002bd, 0x000002c9, 0x000002d5, 0x000002e1,
+ 0x000002ee, 0x00000304, 0x0000031f, 0x0000033f,
+ 0x00000359, 0x0000037f, 0x0000038f, 0x000003a0,
+ // Entry 20 - 3F
+ 0x000003c1, 0x000003d7, 0x000003ff, 0x00000431,
+ 0x0000044b, 0x00000463, 0x00000480, 0x00000480,
+ 0x0000049b, 0x000004c5, 0x000004ea, 0x0000050f,
+ 0x00000520, 0x00000548, 0x0000056c, 0x00000596,
+ 0x000005ad, 0x000005d2, 0x000005d5, 0x000005d5,
+ 0x000005e7, 0x000005e7, 0x0000064e, 0x00000654,
+ 0x00000661, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ // Entry 40 - 5F
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ 0x00000669, 0x00000669, 0x00000669, 0x00000669,
+ // Entry 60 - 7F
+ 0x00000669, 0x0000066f, 0x0000067c, 0x00000685,
+ 0x00000693, 0x000006aa, 0x000006b2, 0x000006b8,
+ 0x000006c4, 0x000006e1, 0x000006e7, 0x000006f1,
+ 0x00000721, 0x00000739, 0x0000074f, 0x0000075b,
+ 0x00000791, 0x000007a4, 0x000007bb, 0x000007f0,
+ 0x00000809, 0x00000821, 0x00000830, 0x00000843,
+ 0x0000085e, 0x00000866, 0x0000087c, 0x0000088d,
+ 0x0000089b, 0x0000089b, 0x0000089b, 0x0000089b,
+ // Entry 80 - 9F
+ 0x0000089b, 0x0000089b, 0x0000089b, 0x0000089b,
+ 0x0000089b, 0x0000089b, 0x0000089b, 0x0000089b,
+ 0x0000089b, 0x0000089b, 0x0000089b, 0x0000089b,
+ 0x000008ba, 0x000008d3, 0x000008ea, 0x00000920,
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ // Entry A0 - BF
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ 0x00000920, 0x00000920, 0x00000920, 0x00000920,
+ 0x00000920,
+} // Size: 732 bytes
+
+const idData string = "" + // Size: 2336 bytes
+ "\x02Kesalahan\x02(tidak ada argumen): naikkan akses dan instal servis ma" +
+ "najer\x02Penggunaan: %[1]s [\x0a%[2]s]\x02Opsi Command Line\x02Tidak dap" +
+ "at menentukan apakah proses sedang berjalan di bawah WOW64: %[1]v\x02And" +
+ "a harus menggunakan WireGuard versi 64-bit di komputer ini.\x02Tidak dap" +
+ "at membuka token proses saat ini: %[1]v\x02WireGuard hanya dapat digunak" +
+ "an oleh pengguna yang merupakan anggota grup Bawaan %[1]s.\x02WireGuard " +
+ "sedang berjalan, tetapi UI hanya dapat diakses dari desktop grup Bawaan " +
+ "%[1]s.\x02Ikon sistem WireGuard tidak muncul setelah 30 detik.\x02Sekara" +
+ "ng\x02Jam sistem mundur!\x14\x01\x81\x01\x00\x00\x18\x02%[1]d tahun\x0a%" +
+ "[1]d tahun\x14\x01\x81\x01\x00\x00\x0b\x02%[1]d Hari\x14\x01\x81\x01\x00" +
+ "\x00\x0a\x02%[1]d jam\x14\x01\x81\x01\x00\x00\x0c\x02%[1]d menit\x14\x01" +
+ "\x81\x01\x00\x00\x0c\x02%[1]d detik\x02%[1]s yang lalu\x02%[1]d B\x02%.2" +
+ "[1]f KiB\x02%.2[1]f MiB\x02%.2[1]f GiB\x02%.2[1]f TiB\x02%[1]s: %[2]q" +
+ "\x02Alamat IP tidak valid\x02Network prefix tidak valid\x02Port belum te" +
+ "risi dari endpoint\x02Host endpoint tidak valid\x02Dalam Kurung harus be" +
+ "risi alamat IPv6\x02MTU tidak valid\x02Port tidak valid\x02Persistent ke" +
+ "epalive tidak valid\x02Kunci tidak sah:%[1]v\x02Kunci harus diterjemahka" +
+ "n tepat 32 byte\x02Nomor harus diantara 0 sampai dengan 2^64-1:%[1]v\x02" +
+ "Dua koma dalam satu baris\x02Nama Tunnel tidak valid\x02Garis harus munc" +
+ "ul perbagian\x02Kunci harus memiliki value\x02Kunci tidak valid pada bag" +
+ "ian [Interface]\x02Kunci tidak valid pada bagian [Peer]\x02Interface har" +
+ "us memiliki Private Key\x02Tidak Ditetapkan\x02Semua peers harus memilik" +
+ "i kunci publik\x02Eror ketika mendapatkan konfigurasi\x02Kunci tidak val" +
+ "id pada bagian [Interface]\x02Versi protokol harus 1\x02Kunci tidak vali" +
+ "d pada bagian [Peer]\x02, \x02Tentang WireGuard\x02Versi Aplikasi: %[1]s" +
+ "\x0aVersi back-end Go: %[2]s\x0aVersi Go: %[3]s\x0aSistem Operasi: %[4]s" +
+ "\x0aArsitektur: %[5]s\x02Tutup\x02♥ &Donasi!\x02Status:\x02Aktif\x02Meng" +
+ "aktifkan\x02Nonaktif\x02Menonaktifkan\x02Status tidak diketahui\x02Catat" +
+ "an\x02Salin\x02Pilih semua\x02Menyimpan ke dalam berkas…\x02Waktu\x02Pes" +
+ "an log\x02Berkas Txt (*.Txt)|*.Txt|Semua berkas (*.*)|*.*\x02Ekspor log " +
+ "kedalam file\x02&Tentang WireGuard…\x02Tunnel eror\x02%[1]s\x0a\x0aSilak" +
+ "an baca log untuk informasi lebih lanjut.\x02%[1]s (kadaluarsa)\x02Detek" +
+ "si eror WireGuard\x02Tidak dapat menunggu jendela WireGuard muncul: %[1]" +
+ "v\x02WireGuard: Dinonaktifkan\x02Status: Tidak diketahui\x02Alamat: Koso" +
+ "ng\x02&Manajer Tunnel…\x02&Impor tunnel dari file…\x02&Keluar\x02Wiregua" +
+ "rd Tunnel Eror\x02WireGuard: %[1]s\x02Status: %[1]s\x02Ekspor semua tunn" +
+ "el ke &zip…\x02Ubah tunnel &terpilih…\x02&Hapus tunnel terpilih\x02Tidak" +
+ " dapat mengimpor konfigurasi yang dipilih: %[1]v"
var itIndex = []uint32{ // 177 elements
// Entry 0 - 1F
@@ -683,45 +878,45 @@ var itIndex = []uint32{ // 177 elements
0x000003fa, 0x0000042a, 0x00000439, 0x0000044a,
// Entry 20 - 3F
0x0000046a, 0x00000483, 0x000004b5, 0x000004f4,
- 0x0000050c, 0x0000052d, 0x0000055a, 0x00000579,
- 0x000005a6, 0x000005ce, 0x000005fb, 0x0000060d,
- 0x0000063b, 0x0000066b, 0x0000069d, 0x000006c6,
- 0x000006ec, 0x000006ef, 0x000006f1, 0x0000070b,
- 0x0000072a, 0x000007a2, 0x000007a9, 0x000007c1,
- 0x000007c8, 0x000007d3, 0x000007db, 0x000007ec,
- 0x000007fe, 0x00000803, 0x0000080e, 0x0000081a,
+ 0x0000050c, 0x0000052d, 0x0000055a, 0x0000055a,
+ 0x00000579, 0x000005a6, 0x000005ce, 0x000005fb,
+ 0x0000060d, 0x0000063b, 0x0000066b, 0x0000069d,
+ 0x000006c6, 0x000006ec, 0x000006ef, 0x000006f1,
+ 0x0000070b, 0x0000072a, 0x000007a2, 0x000007a9,
+ 0x000007c1, 0x000007c8, 0x000007d3, 0x000007db,
+ 0x000007ec, 0x000007fe, 0x00000803, 0x0000080e,
// Entry 40 - 5F
- 0x00000830, 0x0000083f, 0x00000849, 0x0000085f,
- 0x00000874, 0x00000883, 0x0000088d, 0x000008ab,
- 0x000008de, 0x00000902, 0x00000929, 0x0000093c,
- 0x00000941, 0x0000094d, 0x0000095d, 0x00000964,
- 0x00000976, 0x00000984, 0x000009b4, 0x00000add,
- 0x00000ae4, 0x00000aec, 0x00000afd, 0x00000b0d,
- 0x00000b23, 0x00000b51, 0x00000b79, 0x00000b8f,
- 0x00000bc4, 0x00000bef, 0x00000c0f, 0x00000c46,
+ 0x0000081a, 0x00000830, 0x0000083f, 0x00000849,
+ 0x0000085f, 0x00000874, 0x00000883, 0x0000088d,
+ 0x000008ab, 0x000008de, 0x00000902, 0x00000929,
+ 0x0000093c, 0x00000941, 0x0000094d, 0x0000095d,
+ 0x00000964, 0x00000976, 0x00000984, 0x000009b4,
+ 0x00000add, 0x00000ae4, 0x00000aec, 0x00000afd,
+ 0x00000b0d, 0x00000b23, 0x00000b51, 0x00000b79,
+ 0x00000b8f, 0x00000bc4, 0x00000bef, 0x00000c0f,
// Entry 60 - 7F
- 0x00000c4d, 0x00000c59, 0x00000c62, 0x00000c71,
- 0x00000c83, 0x00000c87, 0x00000c8e, 0x00000c9f,
- 0x00000cb1, 0x00000cb7, 0x00000cc8, 0x00000cfb,
- 0x00000d0f, 0x00000d2d, 0x00000d3f, 0x00000d72,
- 0x00000d83, 0x00000da6, 0x00000deb, 0x00000e02,
- 0x00000e15, 0x00000e28, 0x00000e3e, 0x00000e59,
- 0x00000e5f, 0x00000e7a, 0x00000e8b, 0x00000e98,
- 0x00000ea9, 0x00000ebc, 0x00000edf, 0x00000ef5,
+ 0x00000c46, 0x00000c4d, 0x00000c59, 0x00000c62,
+ 0x00000c71, 0x00000c83, 0x00000c87, 0x00000c8e,
+ 0x00000c9f, 0x00000cb1, 0x00000cb7, 0x00000cc8,
+ 0x00000cfb, 0x00000d0f, 0x00000d2d, 0x00000d3f,
+ 0x00000d72, 0x00000d83, 0x00000da6, 0x00000deb,
+ 0x00000e02, 0x00000e15, 0x00000e28, 0x00000e3e,
+ 0x00000e59, 0x00000e5f, 0x00000e7a, 0x00000e8b,
+ 0x00000e98, 0x00000ea9, 0x00000ebc, 0x00000edf,
// Entry 80 - 9F
- 0x00000f1b, 0x00000f3c, 0x00000f63, 0x00000fc2,
- 0x00000fc9, 0x00000fd3, 0x00000fea, 0x00000ffa,
- 0x00001015, 0x00001033, 0x0000103c, 0x0000105b,
- 0x0000107e, 0x0000109c, 0x000010d7, 0x00001107,
- 0x0000113b, 0x0000116a, 0x0000117b, 0x000011b2,
- 0x000011fa, 0x00001217, 0x0000124a, 0x000012ab,
- 0x000012c6, 0x000012fb, 0x0000132b, 0x0000134b,
- 0x0000137d, 0x0000139c, 0x00001403, 0x0000144e,
+ 0x00000ef5, 0x00000f1b, 0x00000f3c, 0x00000f63,
+ 0x00000fc2, 0x00000fc9, 0x00000fd3, 0x00000fea,
+ 0x00000ffa, 0x00001015, 0x00001033, 0x0000103c,
+ 0x0000105b, 0x0000107e, 0x0000109c, 0x000010d7,
+ 0x00001107, 0x0000113b, 0x0000116a, 0x0000117b,
+ 0x000011b2, 0x000011fa, 0x00001217, 0x0000124a,
+ 0x000012ab, 0x000012c6, 0x000012fb, 0x0000132b,
+ 0x0000134b, 0x0000137d, 0x0000139c, 0x00001403,
// Entry A0 - BF
- 0x00001465, 0x0000148e, 0x000014a4, 0x000014d7,
- 0x000014ff, 0x00001571, 0x000015d6, 0x000015f3,
- 0x00001600, 0x0000162f, 0x0000164c, 0x0000165d,
- 0x000016a3, 0x000016c9, 0x000016ed, 0x00001714,
+ 0x0000144e, 0x00001465, 0x0000148e, 0x000014a4,
+ 0x000014d7, 0x000014ff, 0x00001571, 0x000015d6,
+ 0x000015f3, 0x00001600, 0x0000162f, 0x0000164c,
+ 0x0000165d, 0x000016a3, 0x000016c9, 0x000016ed,
0x00001714,
} // Size: 732 bytes
@@ -833,49 +1028,49 @@ var jaIndex = []uint32{ // 177 elements
0x00000424, 0x00000455, 0x00000463, 0x0000047c,
// Entry 20 - 3F
0x000004a7, 0x000004bb, 0x000004ed, 0x00000540,
- 0x00000564, 0x00000583, 0x000005ae, 0x000005df,
- 0x00000614, 0x00000644, 0x0000067b, 0x0000068a,
- 0x000006bb, 0x000006ef, 0x00000722, 0x00000765,
- 0x00000793, 0x00000796, 0x00000798, 0x000007af,
- 0x000007c6, 0x00000831, 0x0000083b, 0x00000857,
- 0x0000085f, 0x0000086d, 0x0000087b, 0x00000886,
- 0x0000089d, 0x000008a2, 0x000008b0, 0x000008bf,
+ 0x00000564, 0x00000583, 0x000005ae, 0x000005e5,
+ 0x00000616, 0x0000064b, 0x0000067b, 0x000006b2,
+ 0x000006c1, 0x000006f2, 0x00000726, 0x00000759,
+ 0x0000079c, 0x000007ca, 0x000007cd, 0x000007cf,
+ 0x000007e6, 0x000007fd, 0x00000868, 0x00000872,
+ 0x0000088e, 0x00000896, 0x000008a4, 0x000008b2,
+ 0x000008bd, 0x000008d4, 0x000008d9, 0x000008e7,
// Entry 40 - 5F
- 0x000008d0, 0x000008dd, 0x000008f4, 0x00000914,
- 0x00000934, 0x0000093c, 0x00000943, 0x0000096b,
- 0x0000099c, 0x000009ca, 0x000009f8, 0x00000a18,
- 0x00000a1f, 0x00000a3b, 0x00000a51, 0x00000a5d,
- 0x00000a6c, 0x00000a75, 0x00000ace, 0x00000c02,
- 0x00000c0d, 0x00000c1d, 0x00000c29, 0x00000c39,
- 0x00000c52, 0x00000c81, 0x00000caf, 0x00000cd7,
- 0x00000d26, 0x00000d57, 0x00000d7c, 0x00000dce,
+ 0x000008f6, 0x00000907, 0x00000914, 0x0000092b,
+ 0x0000094b, 0x0000096b, 0x00000973, 0x0000097a,
+ 0x000009a2, 0x000009d3, 0x00000a01, 0x00000a2f,
+ 0x00000a4f, 0x00000a56, 0x00000a72, 0x00000a88,
+ 0x00000a94, 0x00000aa3, 0x00000aac, 0x00000b05,
+ 0x00000c39, 0x00000c44, 0x00000c54, 0x00000c60,
+ 0x00000c70, 0x00000c89, 0x00000cb8, 0x00000ce6,
+ 0x00000d0e, 0x00000d5d, 0x00000d8e, 0x00000db3,
// Entry 60 - 7F
- 0x00000dd5, 0x00000de2, 0x00000de9, 0x00000df6,
- 0x00000e06, 0x00000e0d, 0x00000e1b, 0x00000e2f,
- 0x00000e4c, 0x00000e53, 0x00000e6a, 0x00000eb4,
- 0x00000edf, 0x00000efc, 0x00000f12, 0x00000f47,
- 0x00000f5c, 0x00000f76, 0x00000fb8, 0x00000fd3,
- 0x00000fe2, 0x00000ff7, 0x00001014, 0x0000104c,
- 0x00001057, 0x00001077, 0x00001088, 0x00001096,
- 0x000010aa, 0x000010c4, 0x000010f6, 0x00001110,
+ 0x00000e05, 0x00000e0c, 0x00000e19, 0x00000e20,
+ 0x00000e2d, 0x00000e3d, 0x00000e44, 0x00000e52,
+ 0x00000e66, 0x00000e83, 0x00000e8a, 0x00000ea1,
+ 0x00000eeb, 0x00000f16, 0x00000f33, 0x00000f49,
+ 0x00000f7e, 0x00000f93, 0x00000fad, 0x00000fef,
+ 0x0000100a, 0x00001019, 0x0000102e, 0x0000104b,
+ 0x00001083, 0x0000108e, 0x000010ae, 0x000010bf,
+ 0x000010cd, 0x000010e1, 0x000010fb, 0x0000112d,
// Entry 80 - 9F
- 0x00001142, 0x00001161, 0x0000118a, 0x000011f2,
- 0x000011ff, 0x0000120a, 0x0000122d, 0x00001243,
- 0x00001265, 0x00001299, 0x000012aa, 0x000012e5,
- 0x0000130e, 0x00001334, 0x00001381, 0x000013bf,
- 0x0000140b, 0x00001443, 0x00001468, 0x000014a0,
- 0x000014e4, 0x00001509, 0x0000152c, 0x00001568,
- 0x0000158b, 0x000015c6, 0x000015f7, 0x0000161c,
- 0x00001651, 0x00001676, 0x000016b1, 0x00001704,
+ 0x00001147, 0x00001179, 0x00001198, 0x000011c1,
+ 0x00001229, 0x00001236, 0x00001241, 0x00001264,
+ 0x0000127a, 0x0000129c, 0x000012d0, 0x000012e1,
+ 0x0000131c, 0x00001345, 0x0000136b, 0x000013b8,
+ 0x000013f6, 0x00001442, 0x0000147a, 0x0000149f,
+ 0x000014d7, 0x0000151b, 0x00001540, 0x00001563,
+ 0x0000159f, 0x000015c2, 0x000015fd, 0x0000162e,
+ 0x00001653, 0x00001688, 0x000016ad, 0x000016e8,
// Entry A0 - BF
- 0x00001735, 0x0000175f, 0x00001787, 0x000017bd,
- 0x000017d7, 0x0000185b, 0x000018c0, 0x000018ea,
- 0x000018fa, 0x0000192d, 0x00001962, 0x00001974,
- 0x000019ba, 0x000019ee, 0x00001a22, 0x00001a62,
- 0x00001a62,
+ 0x0000173b, 0x0000176c, 0x00001796, 0x000017be,
+ 0x000017f4, 0x0000180e, 0x00001892, 0x000018f7,
+ 0x00001921, 0x00001931, 0x00001964, 0x00001999,
+ 0x000019ab, 0x000019f1, 0x00001a25, 0x00001a59,
+ 0x00001a99,
} // Size: 732 bytes
-const jaData string = "" + // Size: 6754 bytes
+const jaData string = "" + // Size: 6809 bytes
"\x02エラー\x02(引数なし): 管理者権限でmanagerサービスをインストールする\x02使い方: %[1]s [\x0a%[2]s]" +
"\x02コマンドラインオプション\x02プロセスがWOW64下で動作しているか確認できません: %[1]v\x02このコンピュータでは64ビット" +
"版の WireGuard を使ってください。\x02現在のプロセスのトークンを開けません: %[1]v\x02WireGuard は組み込み" +
@@ -889,49 +1084,264 @@ const jaData string = "" + // Size: 6754 bytes
"ス長\x02エンドポイントのポート指定なし\x02無効なエンドポイントホスト\x02カッコ内は IPv6 アドレスが入ります\x02無効な " +
"MTU\x02無効なポート番号\x02無効な持続的キープアライブ値\x02不正な鍵: %[1]v\x02鍵は 32 バイトでなければなりません" +
"\x02数値は0から2の64乗-1の範囲内の値でなければなりません: %[1]v\x021行にカンマが2つあります\x02トンネル名が不正です" +
- "\x02行がセクション内にありません\x02キー項目に対応する値がありません\x02無効な [Interface] セクションのキー項目\x02" +
- "無効な [Peer] セクションのキー項目\x02インターフェースには秘密鍵が必須です\x02[指定なし]\x02すべてのピアには公開鍵が必" +
- "須です\x02設定の読込中にエラーが発生しました\x02無効な Interface セクションのキー項目\x02プロトコルバージョンは 1 " +
- "でなければなりません\x02無効な Peer セクションのキー項目\x02, \x02 \x02WireGuard について\x02Wire" +
- "Guard ロゴ画像\x02App version: %[1]s\x0aGo backend version: %[2]s\x0aGo vers" +
- "ion: %[3]s\x0aOperating system: %[4]s\x0aArchitecture: %[5]s\x02閉じる\x02♥" +
- " 寄付のお願い!(&D)\x02状態:\x02無効化(&D)\x02有効化(&A)\x02公開鍵:\x02待受ポート番号:\x02MTU:" +
- "\x02アドレス:\x02DNS サーバ:\x02事前共有鍵:\x02Allowed IPs:\x02エンドポイント:\x02持続的キープアライ" +
- "ブ:\x02直近のハンドシェイク:\x02転送:\x02有効\x02%[1]s 受信済み、%[2]s 送信済み\x02トンネルの状態取得に失" +
- "敗しました\x02トンネルの有効化に失敗しました\x02トンネルの無効化に失敗しました\x02インターフェース: %[1]s\x02ピア" +
- "\x02トンネルの新規作成\x02トンネルの編集\x02名前(&N):\x02公開鍵(&P):\x02(不明)\x02トンネルを通らないトラフィ" +
- "ックのブロック(キルスイッチ)(&B)\x02ピアが1つだけ設定されていて、さらに Allowed IPs に 0.0.0.0/0 または " +
- "::/0 が含まれている場合、トンネルサービスはトンネルインターフェースを通らないすべてのトラフィックをブロックするファイアウォールルールを追加" +
- "します。\x02保存(&S)\x02キャンセル\x02設定(&C):\x02無効な名前\x02名前は必須です。\x02トンネル名 ‘%[1]" +
- "s’ は不正です。\x02既存のトンネルを表示できません\x02トンネルはすでに存在します\x02‘%[1]s’ という名前の別のトンネルがすで" +
- "に存在します。\x02新しい設定を作成できませんでした\x02ファイルの書き込みに失敗\x02ファイル ‘%[1]s’ はすでに存在します。" +
- "\x0a\x0a上書きしますか?\x02有効\x02有効化中\x02無効\x02無効化中\x02不明な状態\x02ログ\x02コピー(&C)" +
- "\x02すべて選択(&A)\x02ファイルに保存…(&S)\x02時刻\x02ログ メッセージ\x02テキストファイル (*.txt)|*.tx" +
- "t|すべてのファイル (*.*)|*.*\x02ログをファイルにエクスポート\x02WireGuardについて…(&A)\x02トンネルエラー" +
- "\x02%[1]s\x0a\x0a詳細はログを参照してください。\x02%[1]s (更新あり)\x02WireGuard 検出エラー\x02W" +
- "ireGuard ウィンドウが表示できませんでした: %[1]v\x02WireGuard: 無効化済み\x02状態: 不明\x02アドレス: " +
- "なし\x02トンネルの管理…(&M)\x02トンネルをファイルからインポート…(&I)\x02終了(&X)\x02WireGuard トンネ" +
- "ルエラー\x02WireGuard: %[1]s\x02状態: %[1]s\x02アドレス: %[1]s\x02WireGuard 有効化済" +
- "み\x02トンネル %[1]s は有効になりました。\x02WireGuard 無効化済み\x02トンネル %[1]s は無効になりました。" +
- "\x02更新が利用できます!\x02WireGuard の更新が利用可能です\x02WireGuard の更新が利用可能になりました。できるだけ" +
- "早く更新してください。\x02トンネル\x02編集(&E)\x02空のトンネルを追加…(&E)\x02トンネルの追加\x02選択したトンネル" +
- "の削除\x02すべてのトンネルをzipにエクスポート\x02切り替え(&T)\x02すべてのトンネルをzipにエクスポート…(&Z)\x02" +
- "選択したトンネルの編集…(&S)\x02選択したトンネルの削除(&R)\x02選択したファイルからインポートできませんでした: %[1]v" +
- "\x02既存のトンネルを表示できませんでした: %[1]v\x02‘%[1]s’ という名前の別のトンネルがすでに存在します\x02設定をインポ" +
- "ートできませんでした: %[1]v\x02トンネルのインポート結果\x14\x01\x81\x01\x00\x001\x02%[1]d トン" +
- "ネルをインポートしました\x14\x02\x80\x01\x00>\x02%[2]d 中の %[1]d トンネルをインポートしました\x02" +
- "トンネルを作成できません\x14\x01\x81\x01\x00\x00\x1c\x02%[1]d トンネルを削除\x14\x01\x81" +
- "\x01\x00\x005\x02本当に %[1]d トンネルを削除しますか?\x02トンネル ‘%[1]s’ を削除\x02本当にトンネル ‘" +
- "%[1]s’ を削除しますか?\x02%[1]s この操作はもとに戻せません。\x02トンネルを削除できません\x02トンネルを削除できませんで" +
- "した: %[1]s\x02トンネルを削除できません\x14\x01\x81\x01\x00\x004\x02%[1]d トンネルを削除できま" +
- "せんでした\x02設定ファイル (*.zip, *.conf)|*.zip;*.conf|すべてのファイル (*.*)|*.*\x02ファイ" +
- "ルからトンネルをインポート\x02ZIP形式設定ファイル (*.zip)|*.zip\x02トンネルをZIPにエクスポート\x02%[1]s" +
- " (未署名のビルド、更新の提供なし)\x02WireGuard 終了エラー\x02%[1]v のためサービスを終了できませんでした。サービスマネ" +
- "ージャから WireGuard を停止できます。\x02WireGuard の更新が利用可能です。速やかに更新することを強く推奨します。" +
- "\x02状態: ユーザーからの応答待ち\x02今すぐ更新\x02状態: アップデータサービスを待機中\x02エラー: %[1]v。再度実行してく" +
- "ださい。\x02状態: 完了!\x02http2: Framer %[1]p: just-writtenフレームのデコードに失敗\x02ht" +
- "tp2: Framer %[1]p: %[2]v を書き込みました\x02http2: Framer %[1]p: %[2]v を読み込みました" +
- "\x02http2: hpack フィールド %+[1]v をデコードしました"
+ "\x02行がセクション内にありません\x02設定項目にイコール(=)セパレータがない\x02キー項目に対応する値がありません\x02無効な [I" +
+ "nterface] セクションのキー項目\x02無効な [Peer] セクションのキー項目\x02インターフェースには秘密鍵が必須です\x02[" +
+ "指定なし]\x02すべてのピアには公開鍵が必須です\x02設定の読込中にエラーが発生しました\x02無効な Interface セクションの" +
+ "キー項目\x02プロトコルバージョンは 1 でなければなりません\x02無効な Peer セクションのキー項目\x02, \x02 \x02" +
+ "WireGuard について\x02WireGuard ロゴ画像\x02App version: %[1]s\x0aGo backend ver" +
+ "sion: %[2]s\x0aGo version: %[3]s\x0aOperating system: %[4]s\x0aArchitect" +
+ "ure: %[5]s\x02閉じる\x02♥ 寄付のお願い!(&D)\x02状態:\x02無効化(&D)\x02有効化(&A)\x02公開鍵:" +
+ "\x02待受ポート番号:\x02MTU:\x02アドレス:\x02DNS サーバ:\x02事前共有鍵:\x02Allowed IPs:\x02エ" +
+ "ンドポイント:\x02持続的キープアライブ:\x02直近のハンドシェイク:\x02転送:\x02有効\x02%[1]s 受信済み、%[2]s" +
+ " 送信済み\x02トンネルの状態取得に失敗しました\x02トンネルの有効化に失敗しました\x02トンネルの無効化に失敗しました\x02インターフ" +
+ "ェース: %[1]s\x02ピア\x02トンネルの新規作成\x02トンネルの編集\x02名前(&N):\x02公開鍵(&P):\x02(不明" +
+ ")\x02トンネルを通らないトラフィックのブロック(キルスイッチ)(&B)\x02ピアが1つだけ設定されていて、さらに Allowed IPs " +
+ "に 0.0.0.0/0 または ::/0 が含まれている場合、トンネルサービスはトンネルインターフェースを通らないすべてのトラフィックをブロ" +
+ "ックするファイアウォールルールを追加します。\x02保存(&S)\x02キャンセル\x02設定(&C):\x02無効な名前\x02名前は必須" +
+ "です。\x02トンネル名 ‘%[1]s’ は不正です。\x02既存のトンネルを表示できません\x02トンネルはすでに存在します\x02‘%[" +
+ "1]s’ という名前の別のトンネルがすでに存在します。\x02新しい設定を作成できませんでした\x02ファイルの書き込みに失敗\x02ファイル " +
+ "‘%[1]s’ はすでに存在します。\x0a\x0a上書きしますか?\x02有効\x02有効化中\x02無効\x02無効化中\x02不明な状" +
+ "態\x02ログ\x02コピー(&C)\x02すべて選択(&A)\x02ファイルに保存…(&S)\x02時刻\x02ログ メッセージ\x02テ" +
+ "キストファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*\x02ログをファイルにエクスポート\x02WireGuar" +
+ "dについて…(&A)\x02トンネルエラー\x02%[1]s\x0a\x0a詳細はログを参照してください。\x02%[1]s (更新あり)" +
+ "\x02WireGuard 検出エラー\x02WireGuard ウィンドウが表示できませんでした: %[1]v\x02WireGuard: 無" +
+ "効化済み\x02状態: 不明\x02アドレス: なし\x02トンネルの管理…(&M)\x02トンネルをファイルからインポート…(&I)" +
+ "\x02終了(&X)\x02WireGuard トンネルエラー\x02WireGuard: %[1]s\x02状態: %[1]s\x02アドレス" +
+ ": %[1]s\x02WireGuard 有効化済み\x02トンネル %[1]s は有効になりました。\x02WireGuard 無効化済み" +
+ "\x02トンネル %[1]s は無効になりました。\x02更新が利用できます!\x02WireGuard の更新が利用可能です\x02WireG" +
+ "uard の更新が利用可能になりました。できるだけ早く更新してください。\x02トンネル\x02編集(&E)\x02空のトンネルを追加…(&E)" +
+ "\x02トンネルの追加\x02選択したトンネルの削除\x02すべてのトンネルをzipにエクスポート\x02切り替え(&T)\x02すべてのトンネ" +
+ "ルをzipにエクスポート…(&Z)\x02選択したトンネルの編集…(&S)\x02選択したトンネルの削除(&R)\x02選択したファイルから" +
+ "インポートできませんでした: %[1]v\x02既存のトンネルを表示できませんでした: %[1]v\x02‘%[1]s’ という名前の別のト" +
+ "ンネルがすでに存在します\x02設定をインポートできませんでした: %[1]v\x02トンネルのインポート結果\x14\x01\x81" +
+ "\x01\x00\x001\x02%[1]d トンネルをインポートしました\x14\x02\x80\x01\x00>\x02%[2]d 中の %" +
+ "[1]d トンネルをインポートしました\x02トンネルを作成できません\x14\x01\x81\x01\x00\x00\x1c\x02%[1]d" +
+ " トンネルを削除\x14\x01\x81\x01\x00\x005\x02本当に %[1]d トンネルを削除しますか?\x02トンネル ‘%[1" +
+ "]s’ を削除\x02本当にトンネル ‘%[1]s’ を削除しますか?\x02%[1]s この操作はもとに戻せません。\x02トンネルを削除でき" +
+ "ません\x02トンネルを削除できませんでした: %[1]s\x02トンネルを削除できません\x14\x01\x81\x01\x00\x004" +
+ "\x02%[1]d トンネルを削除できませんでした\x02設定ファイル (*.zip, *.conf)|*.zip;*.conf|すべてのファイ" +
+ "ル (*.*)|*.*\x02ファイルからトンネルをインポート\x02ZIP形式設定ファイル (*.zip)|*.zip\x02トンネルをZ" +
+ "IPにエクスポート\x02%[1]s (未署名のビルド、更新の提供なし)\x02WireGuard 終了エラー\x02%[1]v のためサービス" +
+ "を終了できませんでした。サービスマネージャから WireGuard を停止できます。\x02WireGuard の更新が利用可能です。速やか" +
+ "に更新することを強く推奨します。\x02状態: ユーザーからの応答待ち\x02今すぐ更新\x02状態: アップデータサービスを待機中\x02" +
+ "エラー: %[1]v。再度実行してください。\x02状態: 完了!\x02http2: Framer %[1]p: just-written" +
+ "フレームのデコードに失敗\x02http2: Framer %[1]p: %[2]v を書き込みました\x02http2: Framer %" +
+ "[1]p: %[2]v を読み込みました\x02http2: hpack フィールド %+[1]v をデコードしました"
+
+var plIndex = []uint32{ // 177 elements
+ // Entry 0 - 1F
+ 0x00000000, 0x00000007, 0x00000007, 0x00000007,
+ 0x0000001e, 0x0000001e, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ // Entry 20 - 3F
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ // Entry 40 - 5F
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ // Entry 60 - 7F
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ // Entry 80 - 9F
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ // Entry A0 - BF
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b,
+ 0x0000005b,
+} // Size: 732 bytes
+
+const plData string = "" + // Size: 91 bytes
+ "\x02Błąd\x02Opcje wiersza poleceń\x02Musisz użyć 64-bitowej wersji WireG" +
+ "uard na tym komputerze."
+
+var roIndex = []uint32{ // 177 elements
+ // Entry 0 - 1F
+ 0x00000000, 0x00000007, 0x0000005d, 0x00000077,
+ 0x00000092, 0x000000d1, 0x0000011e, 0x00000152,
+ 0x000001b6, 0x00000232, 0x0000027c, 0x00000281,
+ 0x000002a8, 0x000002d3, 0x00000300, 0x0000032d,
+ 0x00000361, 0x0000039a, 0x000003a5, 0x000003ae,
+ 0x000003bb, 0x000003c8, 0x000003d5, 0x000003e2,
+ 0x000003ef, 0x00000404, 0x00000431, 0x00000456,
+ 0x00000479, 0x000004aa, 0x000004b8, 0x000004c5,
+ // Entry 20 - 3F
+ 0x000004e8, 0x000004ff, 0x00000544, 0x00000580,
+ 0x000005a2, 0x000005c1, 0x000005ec, 0x00000633,
+ 0x00000659, 0x00000687, 0x000006b0, 0x000006e1,
+ 0x000006f8, 0x00000727, 0x0000074b, 0x00000779,
+ 0x000007a1, 0x000007cc, 0x000007cf, 0x000007d2,
+ 0x000007e3, 0x000007fc, 0x00000885, 0x00000890,
+ 0x0000089f, 0x000008a6, 0x000008b3, 0x000008bd,
+ 0x000008cd, 0x000008e0, 0x000008e5, 0x000008ed,
+ // Entry 40 - 5F
+ 0x000008fa, 0x00000911, 0x00000921, 0x0000092e,
+ 0x0000094a, 0x00000967, 0x00000974, 0x0000097e,
+ 0x00000999, 0x000009c5, 0x000009e3, 0x00000a04,
+ 0x00000a17, 0x00000a1f, 0x00000a30, 0x00000a3e,
+ 0x00000a45, 0x00000a56, 0x00000a65, 0x00000ab2,
+ 0x00000c4e, 0x00000c57, 0x00000c5f, 0x00000c6f,
+ 0x00000c7c, 0x00000c92, 0x00000cbd, 0x00000ce4,
+ 0x00000cf9, 0x00000d2a, 0x00000d4f, 0x00000d6d,
+ // Entry 60 - 7F
+ 0x00000db3, 0x00000db9, 0x00000dc7, 0x00000dcf,
+ 0x00000de0, 0x00000df3, 0x00000dfa, 0x00000e03,
+ 0x00000e16, 0x00000e2e, 0x00000e33, 0x00000e43,
+ 0x00000e7a, 0x00000e97, 0x00000eac, 0x00000ebc,
+ 0x00000ef4, 0x00000f09, 0x00000f27, 0x00000f65,
+ 0x00000f7b, 0x00000f8f, 0x00000f9f, 0x00000fb7,
+ 0x00000fdc, 0x00000fe5, 0x00000fff, 0x00001010,
+ 0x0000101d, 0x0000102b, 0x0000103d, 0x0000105b,
+ // Entry 80 - 9F
+ 0x00001070, 0x00001091, 0x000010b2, 0x000010dc,
+ 0x00001152, 0x0000115b, 0x00001164, 0x0000117c,
+ 0x0000118c, 0x000011ad, 0x000011cf, 0x000011d9,
+ 0x000011ff, 0x0000121a, 0x0000123c, 0x00001275,
+ 0x000012aa, 0x000012da, 0x00001306, 0x00001319,
+ 0x0000136c, 0x000013dc, 0x000013f6, 0x0000144c,
+ 0x000014f6, 0x00001512, 0x0000154c, 0x0000157a,
+ 0x00001595, 0x000015bc, 0x000015d9, 0x0000165d,
+ // Entry A0 - BF
+ 0x000016ad, 0x000016ce, 0x000016f8, 0x00001713,
+ 0x00001744, 0x00001765, 0x000017c6, 0x00001823,
+ 0x00001845, 0x00001856, 0x00001884, 0x000018a7,
+ 0x000018bb, 0x000018fd, 0x00001920, 0x00001943,
+ 0x00001969,
+} // Size: 732 bytes
+
+const roData string = "" + // Size: 6505 bytes
+ "\x02Eroare\x02(fără argument): obținere drept administrativ și instalare" +
+ " serviciu de gestionare\x02Utilizare: %[1]s [\x0a%[2]s]\x02Opțiuni linie" +
+ " de comandă\x02Nu se poate determina dacă procesul rulează sub WOW64: %[" +
+ "1]v\x02Trebuie să utilizezi versiunea de 64 biți a WireGuard pe acest ca" +
+ "lculator.\x02Nu poate fi deschis tokenul actual de proces: %[1]v\x02Wire" +
+ "Guard poate fi utilizat doar de către utilizatorii care sunt membri ai g" +
+ "rupului Builtin %[1]s.\x02WireGuard rulează, dar interfața cu utilizator" +
+ "ul este accesibilă doar din spațiile de lucru ale grupului Builtin %[1]s" +
+ ".\x02Pictograma WireGuard din bara de sistem nu a apărut după 30 de secu" +
+ "nde.\x02Acum\x02Ceasul de sistem a fost dat în spate!\x14\x01\x81\x01" +
+ "\x00\x04\x0a\x02%[1]d ani\x02\x09\x02%[1]d an\x00\x0d\x02%[1]d de ani" +
+ "\x14\x01\x81\x01\x00\x04\x0b\x02%[1]d zile\x02\x09\x02%[1]d zi\x00\x0e" +
+ "\x02%[1]d de zile\x14\x01\x81\x01\x00\x04\x0a\x02%[1]d ore\x02\x0b\x02%[" +
+ "1]d oră\x00\x0d\x02%[1]d de ore\x14\x01\x81\x01\x00\x04\x0d\x02%[1]d min" +
+ "ute\x02\x0c\x02%[1]d minut\x00\x10\x02%[1]d de minute\x14\x01\x81\x01" +
+ "\x00\x04\x0e\x02%[1]d secunde\x02\x0f\x02%[1]d secundă\x00\x11\x02%[1]d " +
+ "de secunde\x02acum %[1]s\x02%[1]d\u00a0B\x02%.2[1]f\u00a0KiB\x02%.2[1]f" +
+ "\u00a0MiB\x02%.2[1]f\u00a0GiB\x02%.2[1]f\u00a0TiB\x02%[1]s: %[2]q\x02Adr" +
+ "esă IP invalidă\x02Lungimea prefixului de rețea este invalidă\x02Lipseșt" +
+ "e portul de la punctul final\x02Gazdă invalidă a punctului final\x02Para" +
+ "ntezele trebuie să conțină o adresă IPv6\x02MTU invalidă\x02Port invalid" +
+ "\x02Mesaj keepalive persistent invalid\x02Cheie invalidă: %[1]v\x02Rezul" +
+ "tatul decodificat de chei trebuie să aibă exact 32 de octeți\x02Numărul " +
+ "trebuie să fie cuprins între 0 și 2^64-1: %[1]v\x02Două virgule una după" +
+ " cealaltă\x02Numele tunelului nu este valid\x02Linia trebuie să apară în" +
+ "tr-o secțiune\x02Cheii de configurare îi lipsește un separator de forma " +
+ "semnului egal\x02Cheia trebuie să conțină o valoare\x02Cheie invalidă pe" +
+ "ntru secțiunea [Interface]\x02Cheie invalidă pentru secțiunea [Peer]\x02" +
+ "O interfață trebuie să aibă o cheie privată\x02[niciuna specificată]\x02" +
+ "Toate perechile trebuie să aibă chei publice\x02Eroare la obținerea conf" +
+ "igurației\x02Cheie invalidă pentru secțiunea interfeței\x02Versiunea de " +
+ "protocol trebuie să fie 1\x02Cheie invalidă pentru secțiunea perechii" +
+ "\x02, \x02, \x02Despre WireGuard\x02Imagine siglă WireGuard\x02Versiunea" +
+ " aplicației: %[1]s\x0aVersiunea bibliotecii subiacente Go: %[2]s\x0aVers" +
+ "iunea Go: %[3]s\x0aSistem de operare: %[4]s\x0aArhitectură: %[5]s\x02Înc" +
+ "hidere\x02♥ &Donează!\x02Stare:\x02&Dezactivare\x02&Activare\x02Cheie pu" +
+ "blică:\x02Port de ascultare:\x02MTU:\x02Adrese:\x02Servere DNS:\x02Cheie" +
+ " predistribuită:\x02IP-uri permise:\x02Punct final:\x02Mesaj keepalive p" +
+ "ersistent:\x02Ultimul acord de interogare:\x02Transferare:\x02activată" +
+ "\x02%[1]s primit, %[2]s trimis\x02Nu a putut fi determinată starea tunel" +
+ "ului\x02Tunelul nu a putut fi activat\x02Tunelul nu a putut fi dezactiva" +
+ "t\x02Interfață: %[1]s\x02Pereche\x02Creare tunel nou\x02Editare tunel" +
+ "\x02&Nume:\x02Cheie &publică:\x02(necunoscută)\x02&Blochează traficul ca" +
+ "re nu trece prin tunel (întrerupător de activitate)\x02Când o configuraț" +
+ "ie conține exact o pereche, iar acea pereche are IP-uri permise care con" +
+ "țin cel puțin o variantă dintre 0.0.0.0/0 sau ::/0, atunci serviciul tu" +
+ "nelului activează un set de reguli al paravanului de protecție pentru a " +
+ "bloca întregul trafic care nu provine de la interfața tunelului, precum " +
+ "și întregul trafic direcționat spre aceasta, existând excepții speciale" +
+ " pentru DHCP și NDP.\x02&Salvare\x02Anulare\x02&Configurație:\x02Nume in" +
+ "valid\x02Este necesar un nume.\x02Numele tunelului „%[1]s” este invalid." +
+ "\x02Tunelurile existente nu pot fi listate\x02Tunelul există deja\x02Exi" +
+ "stă deja un alt tunel cu numele „%[1]s”.\x02Nu se poate crea configurați" +
+ "a nouă\x02Scrierea fișierului a eșuat\x02Fișierul „%[1]s” există deja." +
+ "\x0a\x0aDorești suprascrierea acestuia?\x02Activ\x02Se activează\x02Inac" +
+ "tiv\x02Se dezactivează\x02Stare necunoscută\x02Jurnal\x02&Copiere\x02Sel" +
+ "ectare &totală\x02&Salvare în fișier…\x02Timp\x02Mesaj de jurnal\x02Fiși" +
+ "ere text (*.txt)|*.txt|Toate fișierele (*.*)|*.*\x02Exportare jurnal în " +
+ "fișier\x02&Despre WireGuard…\x02Eroare de tunel\x02%[1]s\x0a\x0aConsultă" +
+ " jurnalul pentru mai multe informații.\x02%[1]s (neactualizat)\x02Eroare" +
+ " de detectare WireGuard\x02Nu se poate aștepta ca fereastra WireGuard să" +
+ " apară: %[1]v\x02WireGuard: dezactivat\x02Stare: necunoscută\x02Adrese: " +
+ "niciuna\x02&Gestionare tuneluri…\x02&Importare tunel(uri) din fișier…" +
+ "\x02Ie&șire\x02Eroare de tunel WireGuard\x02WireGuard: %[1]s\x02Stare: %" +
+ "[1]s\x02Adrese: %[1]s\x02WireGuard activat\x02Tunelul %[1]s a fost activ" +
+ "at.\x02WireGuard dezactivat\x02Tunelul %[1]s a fost dezactivat.\x02Este " +
+ "disponibilă o actualizare!\x02Actualizare disponibilă pentru WireGuard" +
+ "\x02O actualizare pentru WireGuard este acum disponibilă. Se recomandă e" +
+ "fectuarea actualizării cât mai rapid posibil.\x02Tuneluri\x02%Editare" +
+ "\x02Adăugare tunel &gol…\x02Adăugare tunel\x02Eliminare tunel(uri) selec" +
+ "tat(e)\x02Exportă toate tunelurile în zip\x02&Comutare\x02Exportă toate " +
+ "tunelurile în &zip…\x02Editare tunel &selectat…\x02&Eliminare tunel(uri)" +
+ " selectat(e)\x02Configurația selectată nu a putut fi importată: %[1]v" +
+ "\x02Tunelurile existente nu au putut fi enumerate: %[1]v\x02Există deja " +
+ "un alt tunel cu numele „%[1]s”\x02Configurația nu poate fi importată: %[" +
+ "1]v\x02Tuneluri importate\x14\x01\x81\x01\x00\x04\x18\x02Importat %[1]d " +
+ "tuneluri\x02\x15\x02Importat %[1]d tunel\x00\x1b\x02Importat %[1]d de tu" +
+ "neluri\x14\x02\x80\x01\x04\x22\x02Importat %[1]d din %[2]d tuneluri\x02" +
+ "\x1f\x02Importat %[1]d din %[2]d tunel\x00%\x02Importat %[1]d din %[2]d " +
+ "de tuneluri\x02Tunelul nu poate fi creat\x14\x01\x81\x01\x00\x04\x19\x02" +
+ "Ștergere %[1]d tuneluri\x02\x16\x02Ștergere %[1]d tunel\x00\x1c\x02Șter" +
+ "gere %[1]d de tuneluri\x14\x01\x81\x01\x00\x045\x02Ești sigur că dorești" +
+ " să ștergi %[1]d tuneluri?\x022\x02Ești sigur că dorești să ștergi %[1]d" +
+ " tunel?\x008\x02Ești sigur că dorești să ștergi %[1]d de tuneluri?\x02Șt" +
+ "ergere tunel „%[1]s”\x02Ești sigur că dorești să ștergi tunelul „%[1]s”?" +
+ "\x02%[1]s Această acțiune nu poate fi anulată.\x02Tunelul nu poate fi șt" +
+ "ers\x02Un tunel nu a putut fi eliminat: %[1]s\x02Nu se pot șterge tunelu" +
+ "rile\x14\x01\x81\x01\x00\x04)\x02%[1]d tuneluri nu au putut fi eliminate" +
+ ".\x02$\x02%[1]d tunel nu a putut fi eliminat.\x00,\x02%[1]d de tuneluri " +
+ "nu au putut fi eliminate.\x02Fișiere de configurare (*.zip, *.conf)|*.zi" +
+ "p;*.conf|Toate fișierele (*.*)|*.*\x02Importare tunel(uri) din fișier" +
+ "\x02Fișiere ZIP de configurare (*.zip)|*.zip\x02Exportare tuneluri în zi" +
+ "p\x02%[1]s (versiune nesemnată, fără actualizări)\x02Eroare la ieșirea d" +
+ "in WireGuard\x02Nu se poate ieși din serviciu din cauza: %[1]v. Poți opr" +
+ "i WireGuard din managerul de servicii.\x02Este disponibilă o actualizare" +
+ " pentru WireGuard. Se recomandă ferm actualizarea imediată.\x02Stare: se" +
+ " așteaptă utilizatorul\x02Actualizare acum\x02Stare: se așteaptă servici" +
+ "ul de actualizare\x02Eroare: %[1]v. Încearcă din nou.\x02Stare: finaliza" +
+ "tă!\x02http2: Framer %[1]p: decodificarea cadrului recent scris a eșuat" +
+ "\x02http2: Framer %[1]p: a scris %[2]v\x02http2: Framer %[1]p: a citit %" +
+ "[2]v\x02http2: câmp hpack decodificat %+[1]v"
var ruIndex = []uint32{ // 177 elements
// Entry 0 - 1F
@@ -945,49 +1355,49 @@ var ruIndex = []uint32{ // 177 elements
0x0000062a, 0x00000662, 0x0000067f, 0x000006a1,
// Entry 20 - 3F
0x000006f7, 0x00000720, 0x00000775, 0x000007b4,
- 0x000007d7, 0x00000806, 0x00000839, 0x0000086b,
- 0x000008a5, 0x000008da, 0x00000924, 0x0000093a,
- 0x0000097e, 0x000009be, 0x00000a01, 0x00000a39,
- 0x00000a70, 0x00000a73, 0x00000a76, 0x00000a83,
- 0x00000a9c, 0x00000b5a, 0x00000b69, 0x00000b88,
- 0x00000b96, 0x00000ba8, 0x00000bbc, 0x00000bd9,
- 0x00000be3, 0x00000be8, 0x00000bf9, 0x00000c0d,
+ 0x000007d7, 0x00000806, 0x00000839, 0x00000839,
+ 0x0000086b, 0x000008a5, 0x000008da, 0x00000924,
+ 0x0000093a, 0x0000097e, 0x000009be, 0x00000a01,
+ 0x00000a39, 0x00000a70, 0x00000a73, 0x00000a76,
+ 0x00000a83, 0x00000a9c, 0x00000b5a, 0x00000b69,
+ 0x00000b88, 0x00000b96, 0x00000baa, 0x00000bc0,
+ 0x00000bdd, 0x00000be7, 0x00000bec, 0x00000bfd,
// Entry 40 - 5F
- 0x00000c22, 0x00000c4a, 0x00000c68, 0x00000c99,
- 0x00000cc4, 0x00000cd6, 0x00000ce7, 0x00000d1a,
- 0x00000d65, 0x00000d9d, 0x00000dd3, 0x00000ded,
- 0x00000df4, 0x00000e12, 0x00000e3c, 0x00000e45,
- 0x00000e63, 0x00000e7a, 0x00000eb8, 0x00001096,
- 0x000010aa, 0x000010b7, 0x000010d2, 0x000010f2,
- 0x0000110d, 0x00001147, 0x0000117f, 0x000011aa,
- 0x000011f2, 0x00001239, 0x0000125e, 0x000012c0,
+ 0x00000c11, 0x00000c26, 0x00000c4e, 0x00000c6c,
+ 0x00000c9d, 0x00000cc8, 0x00000cda, 0x00000ceb,
+ 0x00000d1e, 0x00000d69, 0x00000da1, 0x00000dd7,
+ 0x00000df1, 0x00000df8, 0x00000e16, 0x00000e40,
+ 0x00000e49, 0x00000e67, 0x00000e7e, 0x00000ebc,
+ 0x0000109a, 0x000010ae, 0x000010bb, 0x000010d6,
+ 0x000010f6, 0x00001111, 0x0000114b, 0x00001183,
+ 0x000011ae, 0x000011f6, 0x0000123d, 0x00001262,
// Entry 60 - 7F
- 0x000012d3, 0x000012ea, 0x000012fb, 0x00001310,
- 0x0000133a, 0x00001347, 0x0000135d, 0x00001374,
- 0x00001397, 0x000013a2, 0x000013c4, 0x0000140c,
- 0x00001436, 0x00001447, 0x00001463, 0x000014de,
- 0x000014f5, 0x00001523, 0x00001577, 0x0000159d,
- 0x000015c0, 0x000015d5, 0x00001601, 0x00001633,
- 0x0000163f, 0x00001665, 0x00001676, 0x0000168a,
- 0x0000169e, 0x000016b7, 0x000016e0, 0x000016fb,
+ 0x000012c4, 0x000012d7, 0x000012ee, 0x000012ff,
+ 0x00001314, 0x0000133e, 0x0000134b, 0x00001361,
+ 0x00001378, 0x0000139b, 0x000013a6, 0x000013c8,
+ 0x00001410, 0x0000143a, 0x0000144b, 0x00001467,
+ 0x000014e2, 0x000014f9, 0x00001527, 0x0000157b,
+ 0x000015a1, 0x000015c4, 0x000015d9, 0x00001605,
+ 0x00001637, 0x00001643, 0x00001669, 0x0000167a,
+ 0x0000168e, 0x000016a2, 0x000016bb, 0x000016e4,
// Entry 80 - 9F
- 0x00001722, 0x00001749, 0x00001779, 0x00001804,
- 0x00001813, 0x0000182f, 0x00001860, 0x00001880,
- 0x000018b1, 0x000018ec, 0x00001904, 0x00001943,
- 0x00001984, 0x000019b6, 0x00001a06, 0x00001a60,
- 0x00001aa7, 0x00001af7, 0x00001b25, 0x00001bf9,
- 0x00001cf5, 0x00001d27, 0x00001dc7, 0x00001f0f,
- 0x00001f39, 0x00001f89, 0x00001fd4, 0x00002006,
- 0x00002040, 0x00002072, 0x00002169, 0x000021c6,
+ 0x000016ff, 0x00001726, 0x0000174d, 0x0000177d,
+ 0x00001808, 0x00001817, 0x00001833, 0x00001864,
+ 0x00001884, 0x000018b5, 0x000018f0, 0x00001908,
+ 0x00001947, 0x00001988, 0x000019ba, 0x00001a0a,
+ 0x00001a64, 0x00001aab, 0x00001afb, 0x00001b29,
+ 0x00001bfd, 0x00001cf9, 0x00001d2b, 0x00001dcb,
+ 0x00001f13, 0x00001f3d, 0x00001f8d, 0x00001fd8,
+ 0x0000200a, 0x00002044, 0x00002076, 0x0000216d,
// Entry A0 - BF
- 0x000021f4, 0x0000222c, 0x0000225e, 0x000022ab,
- 0x000022d4, 0x0000236e, 0x000023f6, 0x0000242e,
- 0x0000244c, 0x0000246f, 0x000024a8, 0x000024ca,
- 0x0000253e, 0x00002568, 0x00002596, 0x000025ca,
- 0x000025ca,
+ 0x000021ca, 0x000021f8, 0x00002230, 0x00002262,
+ 0x000022af, 0x000022d8, 0x00002372, 0x000023fa,
+ 0x00002432, 0x00002450, 0x00002473, 0x000024ac,
+ 0x000024ce, 0x00002542, 0x0000256c, 0x0000259a,
+ 0x000025ce,
} // Size: 732 bytes
-const ruData string = "" + // Size: 9674 bytes
+const ruData string = "" + // Size: 9678 bytes
"\x02Ошибка\x02(нет аргумента): получить права администратора и установит" +
"ь административную службу\x02Использование: %[1]s [\x0a%[2]s]\x02Параме" +
"тры командной строки\x02Ошибка определения или процесс работает как WOW" +
@@ -1019,7 +1429,7 @@ const ruData string = "" + // Size: 9674 bytes
"для секции Пира\x02, \x02, \x02О WireGuard\x02Логотип WireGuard\x02Верс" +
"ия приложения: %[1]s\x0aВерсия бэкэнда: %[2]s\x0aВерсия перехода: %[3]s" +
"\x0aОперационная система: %[4]s\x0aАрхитектура: %[5]s\x02Закрыть\x02♥ &П" +
- "ожертвовать!\x02Статус:\x02&Отключен\x02&Подключен\x02Публичный ключ:" +
+ "ожертвовать!\x02Статус:\x02&Отключить\x02&Подключить\x02Публичный ключ:" +
"\x02Порт:\x02MTU:\x02IP-адреса:\x02DNS-серверы:\x02Общий ключ:\x02Разреш" +
"енные IP-адреса:\x02IP-адрес сервера:\x02Поддерживание соединения:\x02П" +
"оследнее рукопожатие:\x02Передача:\x02включено\x02Получено %[1]s, отпра" +
@@ -1084,6 +1494,95 @@ const ruData string = "" + // Size: 9674 bytes
"ый кадр\x02http2: Framer %[1]p: написал %[2]v\x02http2: Framer %[1]p: п" +
"рочитать %[2]v\x02http2: декодирован hpack поле %+[1]v"
+var skIndex = []uint32{ // 177 elements
+ // Entry 0 - 1F
+ 0x00000000, 0x00000006, 0x0000005e, 0x00000078,
+ 0x00000097, 0x000000d1, 0x00000124, 0x0000015c,
+ 0x0000019e, 0x00000208, 0x00000252, 0x00000258,
+ 0x00000280, 0x00000280, 0x000002b8, 0x000002f9,
+ 0x0000033c, 0x00000381, 0x0000038c, 0x00000395,
+ 0x000003a2, 0x000003af, 0x000003bc, 0x000003c9,
+ 0x000003d6, 0x000003ea, 0x00000410, 0x00000435,
+ 0x00000459, 0x00000482, 0x00000490, 0x0000049f,
+ // Entry 20 - 3F
+ 0x000004c1, 0x000004da, 0x0000050f, 0x00000542,
+ 0x00000558, 0x00000575, 0x00000594, 0x000005d6,
+ 0x000005f7, 0x0000061c, 0x0000063c, 0x0000066f,
+ 0x00000683, 0x000006b8, 0x000006dc, 0x000006ff,
+ 0x0000071d, 0x0000073b, 0x0000073e, 0x00000740,
+ 0x0000074c, 0x00000764, 0x000007d7, 0x000007e1,
+ 0x000007f0, 0x000007f6, 0x00000805, 0x00000812,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ // Entry 40 - 5F
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ // Entry 60 - 7F
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ // Entry 80 - 9F
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ // Entry A0 - BF
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824, 0x00000824, 0x00000824, 0x00000824,
+ 0x00000824,
+} // Size: 732 bytes
+
+const skData string = "" + // Size: 2084 bytes
+ "\x02Chyba\x02(bez argumentu): získať administrátorské práva a nainštalov" +
+ "ať službu manažéra\x02Použitie: %[1]s [\x0a%[2]s]\x02Možnosti príkazovéh" +
+ "o riadku\x02Nepodarilo sa zistiť, či proces beží pod WOW64: %[1]v\x02Na " +
+ "tomto počítači je potrebné použiť 64 bitovú verziu aplikácie WireGuard." +
+ "\x02Nepodarilo sa otvoriť token aktuálneho procesu: %[1]v\x02WireGuard m" +
+ "ôžu používať iba členovia Builtin skupiny %[1]s.\x02WireGuard je spuste" +
+ "ný, ale používateľské rozhranie je prístupné iba členom Builtin skupiny " +
+ "%[1]s.\x02WireGuard ikona sa ani po 30 sekundách neobjavila na systémove" +
+ "j lište.\x02Teraz\x02Systémové hodiny sa vrátili v čase!\x14\x01\x81\x01" +
+ "\x00\x04\x0a\x02%[1]d dni\x05\x0b\x02%[1]d dní\x02\x0b\x02%[1]d deň\x00" +
+ "\x0b\x02%[1]d dní\x14\x01\x81\x01\x00\x04\x0d\x02%[1]d hodiny\x05\x0d" +
+ "\x02%[1]d hodín\x02\x0d\x02%[1]d hodina\x00\x0d\x02%[1]d hodín\x14\x01" +
+ "\x81\x01\x00\x04\x0e\x02%[1]d minúty\x05\x0d\x02%[1]d minút\x02\x0e\x02%" +
+ "[1]d minúta\x00\x0d\x02%[1]d minút\x14\x01\x81\x01\x00\x04\x0e\x02%[1]d " +
+ "sekundy\x05\x0e\x02%[1]d sekúnd\x02\x0e\x02%[1]d sekunda\x00\x0e\x02%[1]" +
+ "d sekúnd\x02Pred %[1]s\x02%[1]d\u00a0B\x02%.2[1]f\u00a0KiB\x02%.2[1]f" +
+ "\u00a0MiB\x02%.2[1]f\u00a0GiB\x02%.2[1]f\u00a0TiB\x02%[1]s: %[2]q\x02Nep" +
+ "latná adresa IP\x02Neplatná dĺžka sieťového prefixu\x02Koncovému bodu ch" +
+ "ýba číslo portu\x02Neplatný hostiteľ koncového bodu\x02Medzi zátvorkami" +
+ " musí byť IPv6 adresa\x02Neplatné MTU\x02Neplatný port\x02Neplatný perzi" +
+ "stentný keepalive\x02Neplatný kľúč: %[1]v\x02Dekódované kľúče musia mať " +
+ "veľkosť 32 bajtov\x02Číslo musí mať hodnotu medzi 0 a 2^64-1: %[1]v\x02D" +
+ "ve čiarky v poradí\x02Názov tunela nie je platný\x02Sekcia musí obsahova" +
+ "ť čiaru\x02Konfiguračný kľúč neobsahuje separátor (znamienko rovnosti)" +
+ "\x02Kľúč musí obsahovať hodnotu\x02Neplatný kľúč sekcie [Interface]\x02N" +
+ "eplatný kľúč sekcie [Peer]\x02Rozhranie musí mať priradený súkromný kľúč" +
+ "\x02[nešpecifikované]\x02Všetci peeri musia mať priradený verejný kľúč" +
+ "\x02Chyba pri získavaní konfigurácie\x02Neplatný kľúč sekcie rozhrania" +
+ "\x02Verzia protokolu musí byť 1\x02Neplatný kľúč peer sekcie\x02, \x02 " +
+ "\x02O WireGuard\x02Obrázok WireGuard loga\x02Verzia aplikácie: %[1]s\x0a" +
+ "Verzia Go backendu: %[2]s\x0aVerzia Go: %[3]s\x0aOperačný systém: %[4]s" +
+ "\x0aArchitektúra: %[5]s\x02Zatvoriť\x02♥ a Darovat!\x02Stav:\x02a Deakti" +
+ "vovať\x02a Aktivovať\x02Verejný kľúč:"
+
var slIndex = []uint32{ // 177 elements
// Entry 0 - 1F
0x00000000, 0x00000007, 0x00000058, 0x00000070,
@@ -1096,45 +1595,45 @@ var slIndex = []uint32{ // 177 elements
0x0000045d, 0x00000483, 0x00000490, 0x0000049f,
// Entry 20 - 3F
0x000004c3, 0x000004da, 0x0000050b, 0x0000053f,
- 0x00000554, 0x0000056b, 0x00000586, 0x000005a1,
- 0x000005c6, 0x000005e6, 0x00000608, 0x00000616,
- 0x0000063d, 0x0000065d, 0x0000067f, 0x0000069d,
- 0x000006bf, 0x000006c2, 0x000006c4, 0x000006d1,
- 0x000006ef, 0x00000764, 0x0000076a, 0x00000778,
- 0x00000780, 0x0000078d, 0x00000798, 0x000007a6,
- 0x000007b9, 0x000007be, 0x000007c7, 0x000007d7,
+ 0x00000554, 0x0000056b, 0x00000586, 0x00000586,
+ 0x000005a1, 0x000005c6, 0x000005e6, 0x00000608,
+ 0x00000616, 0x0000063d, 0x0000065d, 0x0000067f,
+ 0x0000069d, 0x000006bf, 0x000006c2, 0x000006c4,
+ 0x000006d1, 0x000006ef, 0x00000764, 0x0000076a,
+ 0x00000778, 0x00000780, 0x0000078d, 0x00000798,
+ 0x000007a6, 0x000007b9, 0x000007be, 0x000007c7,
// Entry 40 - 5F
- 0x000007ed, 0x000007fe, 0x0000080e, 0x0000082a,
- 0x0000083c, 0x00000844, 0x0000084f, 0x0000086c,
- 0x00000890, 0x000008ae, 0x000008ce, 0x000008dd,
- 0x000008e5, 0x000008f7, 0x00000903, 0x00000909,
- 0x00000918, 0x00000922, 0x0000094c, 0x00000a6d,
- 0x00000a75, 0x00000a7f, 0x00000a8f, 0x00000a9c,
- 0x00000aac, 0x00000ace, 0x00000afe, 0x00000b10,
- 0x00000b3b, 0x00000b62, 0x00000b80, 0x00000bbb,
+ 0x000007d7, 0x000007ed, 0x000007fe, 0x0000080e,
+ 0x0000082a, 0x0000083c, 0x00000844, 0x0000084f,
+ 0x0000086c, 0x00000890, 0x000008ae, 0x000008ce,
+ 0x000008dd, 0x000008e5, 0x000008f7, 0x00000903,
+ 0x00000909, 0x00000918, 0x00000922, 0x0000094c,
+ 0x00000a6d, 0x00000a75, 0x00000a7f, 0x00000a8f,
+ 0x00000a9c, 0x00000aac, 0x00000ace, 0x00000afe,
+ 0x00000b10, 0x00000b3b, 0x00000b62, 0x00000b80,
// Entry 60 - 7F
- 0x00000bc3, 0x00000bcf, 0x00000bd9, 0x00000be7,
- 0x00000bf6, 0x00000bfe, 0x00000c07, 0x00000c13,
- 0x00000c2b, 0x00000c30, 0x00000c46, 0x00000c7e,
- 0x00000c98, 0x00000cab, 0x00000cb9, 0x00000ce8,
- 0x00000cfe, 0x00000d1b, 0x00000d56, 0x00000d6d,
- 0x00000d7c, 0x00000d8a, 0x00000da1, 0x00000dc0,
- 0x00000dc7, 0x00000ddf, 0x00000df0, 0x00000dfe,
- 0x00000e0d, 0x00000e21, 0x00000e3f, 0x00000e55,
+ 0x00000bbb, 0x00000bc3, 0x00000bcf, 0x00000bd9,
+ 0x00000be7, 0x00000bf6, 0x00000bfe, 0x00000c07,
+ 0x00000c13, 0x00000c2b, 0x00000c30, 0x00000c46,
+ 0x00000c7e, 0x00000c98, 0x00000cab, 0x00000cb9,
+ 0x00000ce8, 0x00000cfe, 0x00000d1b, 0x00000d56,
+ 0x00000d6d, 0x00000d7c, 0x00000d8a, 0x00000da1,
+ 0x00000dc0, 0x00000dc7, 0x00000ddf, 0x00000df0,
+ 0x00000dfe, 0x00000e0d, 0x00000e21, 0x00000e3f,
// Entry 80 - 9F
- 0x00000e75, 0x00000e8e, 0x00000eb1, 0x00000ef6,
- 0x00000efd, 0x00000f04, 0x00000f1d, 0x00000f29,
- 0x00000f41, 0x00000f59, 0x00000f63, 0x00000f81,
- 0x00000f9a, 0x00000fb3, 0x00000fe1, 0x00001014,
- 0x00001039, 0x0000105f, 0x0000106f, 0x000010d3,
- 0x0000115e, 0x0000117f, 0x000011e4, 0x000012d1,
- 0x000012ec, 0x00001327, 0x00001352, 0x0000136c,
- 0x00001394, 0x000013af, 0x00001463, 0x000014b0,
+ 0x00000e55, 0x00000e75, 0x00000e8e, 0x00000eb1,
+ 0x00000ef6, 0x00000efd, 0x00000f04, 0x00000f1d,
+ 0x00000f29, 0x00000f41, 0x00000f59, 0x00000f63,
+ 0x00000f81, 0x00000f9a, 0x00000fb3, 0x00000fe1,
+ 0x00001014, 0x00001039, 0x0000105f, 0x0000106f,
+ 0x000010d3, 0x0000115e, 0x0000117f, 0x000011e4,
+ 0x000012d1, 0x000012ec, 0x00001327, 0x00001352,
+ 0x0000136c, 0x00001394, 0x000013af, 0x00001463,
// Entry A0 - BF
- 0x000014c9, 0x000014f4, 0x00001511, 0x00001542,
- 0x00001562, 0x000015cf, 0x00001622, 0x0000163e,
- 0x0000164c, 0x00001673, 0x00001695, 0x000016a7,
- 0x000016ef, 0x00001713, 0x00001737, 0x0000175c,
+ 0x000014b0, 0x000014c9, 0x000014f4, 0x00001511,
+ 0x00001542, 0x00001562, 0x000015cf, 0x00001622,
+ 0x0000163e, 0x0000164c, 0x00001673, 0x00001695,
+ 0x000016a7, 0x000016ef, 0x00001713, 0x00001737,
0x0000175c,
} // Size: 732 bytes
@@ -1237,104 +1736,277 @@ const slData string = "" + // Size: 5980 bytes
" %[2]v\x02http2: Framer %[1]p: prebrano %[2]v\x02http2: dekodirano polje" +
" hpack %+[1]v"
+var viIndex = []uint32{ // 177 elements
+ // Entry 0 - 1F
+ 0x00000000, 0x00000006, 0x00000006, 0x00000006,
+ 0x00000006, 0x00000006, 0x00000006, 0x00000006,
+ 0x00000006, 0x00000006, 0x00000006, 0x00000011,
+ 0x00000011, 0x00000023, 0x00000036, 0x00000049,
+ 0x0000005c, 0x0000006f, 0x0000007e, 0x0000007e,
+ 0x0000007e, 0x0000007e, 0x0000007e, 0x0000007e,
+ 0x0000007e, 0x000000a0, 0x000000a0, 0x000000a0,
+ 0x000000a0, 0x000000a0, 0x000000a0, 0x000000c0,
+ // Entry 20 - 3F
+ 0x000000c0, 0x000000c0, 0x000000c0, 0x000000c0,
+ 0x000000c0, 0x000000db, 0x000000db, 0x000000db,
+ 0x000000db, 0x000000db, 0x000000db, 0x000000db,
+ 0x000000db, 0x000000db, 0x000000db, 0x000000db,
+ 0x000000db, 0x000000db, 0x000000db, 0x000000db,
+ 0x000000f5, 0x00000104, 0x0000019b, 0x000001a2,
+ 0x000001a2, 0x000001b1, 0x000001b1, 0x000001b1,
+ 0x000001b1, 0x000001b1, 0x000001b1, 0x000001b1,
+ // Entry 40 - 5F
+ 0x000001b1, 0x000001b1, 0x000001b1, 0x000001c0,
+ 0x000001c0, 0x000001c0, 0x000001c0, 0x000001d2,
+ 0x000001ec, 0x00000218, 0x00000236, 0x00000257,
+ 0x00000257, 0x0000026a, 0x00000274, 0x00000286,
+ 0x00000286, 0x00000286, 0x00000286, 0x00000286,
+ 0x00000286, 0x00000286, 0x0000028c, 0x0000028c,
+ 0x000002a3, 0x000002bb, 0x000002e1, 0x00000302,
+ 0x00000317, 0x00000344, 0x00000344, 0x00000344,
+ // Entry 60 - 7F
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ // Entry 80 - 9F
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ // Entry A0 - BF
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344, 0x00000344, 0x00000344, 0x00000344,
+ 0x00000344,
+} // Size: 732 bytes
+
+const viData string = "" + // Size: 836 bytes
+ "\x02Lỗi\x02Vừa xong\x14\x01\x81\x01\x00\x00\x0b\x02%[1]d năm\x14\x01\x81" +
+ "\x01\x00\x00\x0c\x02%[1]d ngày\x14\x01\x81\x01\x00\x00\x0c\x02%[1]d giờ" +
+ "\x14\x01\x81\x01\x00\x00\x0c\x02%[1]d phút\x14\x01\x81\x01\x00\x00\x0c" +
+ "\x02%[1]d giây\x02%[1]s trước\x02Địa chỉ IP không hợp lệ\x02Cổng (port) " +
+ "không hợp lệ\x02Tên VPN không hợp lệ\x02Thông tin về WireGuard\x02Logo W" +
+ "ireGuard\x02Phiên bản ứng dụng: %[1]s\x0aPhiên bản Golang của WG: %[2]s" +
+ "\x0aPhiên bản Golang: %[3]s\x0aHệ điều hành: %[4]s\x0aKiến trúc xử lý: %" +
+ "[5]s\x02Đóng\x02Trạng thái:\x02Đầu cuối:\x02đã kích hoạt\x02Nhận %[1]s, " +
+ "gứi %[2]s\x02Không thể xác định tình trạng VPN\x02Không thể kích hoạt VP" +
+ "N\x02Không thể vô hiệu hóa VPN\x02Mạng ngang hàng\x02Tạo VPN\x02Chỉnh sử" +
+ "a VPN\x02Huỷ\x02Tên không hợp lệ\x02Yêu cầu nhập tên.\x02Tên VPN ‘%[1]s'" +
+ " không hợp lệ.\x02Không thể liệt kê các VPN\x02VPN đã tồn tại\x02Đã tồn " +
+ "tại VPN với tên ‘%[1]s’."
+
var zh_CNIndex = []uint32{ // 177 elements
// Entry 0 - 1F
- 0x00000000, 0x00000007, 0x00000031, 0x00000048,
- 0x00000058, 0x0000008e, 0x000000cc, 0x000000f2,
- 0x00000137, 0x00000191, 0x000001c8, 0x000001cf,
- 0x000001e5, 0x000001f6, 0x00000207, 0x0000021b,
- 0x0000022f, 0x00000240, 0x0000024a, 0x00000252,
- 0x0000025f, 0x0000026c, 0x00000279, 0x00000286,
- 0x00000293, 0x000002a2, 0x000002bb, 0x000002d1,
- 0x000002e4, 0x00000306, 0x00000311, 0x0000031e,
+ 0x00000000, 0x00000007, 0x00000030, 0x00000047,
+ 0x00000057, 0x0000008b, 0x000000c8, 0x000000ee,
+ 0x00000133, 0x0000018d, 0x000001c4, 0x000001cb,
+ 0x000001e4, 0x000001f5, 0x00000206, 0x0000021a,
+ 0x0000022e, 0x0000023f, 0x00000249, 0x00000251,
+ 0x0000025e, 0x0000026b, 0x00000278, 0x00000285,
+ 0x00000292, 0x000002a1, 0x000002ba, 0x000002dc,
+ 0x00000303, 0x0000032b, 0x00000336, 0x00000343,
// Entry 20 - 3F
- 0x00000337, 0x0000034f, 0x00000373, 0x000003b1,
- 0x000003ca, 0x000003dd, 0x000003f9, 0x0000040f,
- 0x0000042e, 0x00000448, 0x00000464, 0x00000474,
- 0x00000496, 0x000004ac, 0x000004c5, 0x000004dd,
- 0x000004f6, 0x000004f9, 0x000004fc, 0x0000050d,
- 0x00000524, 0x0000058c, 0x00000593, 0x000005a0,
- 0x000005aa, 0x000005b2, 0x000005ba, 0x000005c2,
- 0x000005d0, 0x000005d5, 0x000005df, 0x000005ee,
+ 0x0000035c, 0x00000374, 0x0000039e, 0x000003cc,
+ 0x000003e5, 0x000003f8, 0x00000414, 0x00000439,
+ 0x0000044c, 0x0000046b, 0x00000485, 0x000004a1,
+ 0x000004ad, 0x000004cf, 0x000004e5, 0x000004fe,
+ 0x00000516, 0x0000052f, 0x00000533, 0x00000535,
+ 0x00000546, 0x0000055c, 0x000005c4, 0x000005cb,
+ 0x000005dc, 0x000005e4, 0x000005f0, 0x000005fc,
+ 0x00000604, 0x00000612, 0x00000617, 0x0000061f,
// Entry 40 - 5F
- 0x00000601, 0x00000611, 0x0000061b, 0x0000062f,
- 0x00000640, 0x00000648, 0x00000652, 0x00000673,
- 0x0000068c, 0x0000069f, 0x000006b2, 0x000006c1,
- 0x000006c8, 0x000006d8, 0x000006e5, 0x000006ee,
- 0x000006f7, 0x00000704, 0x0000072f, 0x00000814,
- 0x0000081c, 0x00000823, 0x0000082e, 0x0000083b,
- 0x00000851, 0x00000871, 0x0000088a, 0x0000089a,
- 0x000008c8, 0x000008e1, 0x000008f4, 0x00000930,
+ 0x0000062e, 0x0000063f, 0x0000064d, 0x00000655,
+ 0x00000669, 0x0000067d, 0x00000685, 0x0000068f,
+ 0x000006aa, 0x000006c3, 0x000006d6, 0x000006ef,
+ 0x000006fd, 0x00000704, 0x00000714, 0x00000721,
+ 0x0000072e, 0x0000073b, 0x00000744, 0x00000773,
+ 0x0000081d, 0x00000829, 0x00000830, 0x0000083d,
+ 0x0000084a, 0x00000860, 0x0000087e, 0x00000897,
+ 0x000008a7, 0x000008c8, 0x000008e1, 0x000008f4,
// Entry 60 - 7F
- 0x00000937, 0x00000941, 0x0000094b, 0x00000955,
- 0x00000962, 0x00000969, 0x00000971, 0x00000980,
- 0x00000994, 0x0000099b, 0x000009a8, 0x000009d7,
- 0x000009ed, 0x00000a02, 0x00000a0f, 0x00000a32,
- 0x00000a48, 0x00000a5f, 0x00000a8a, 0x00000aa1,
- 0x00000ab1, 0x00000abe, 0x00000acf, 0x00000ae9,
- 0x00000af1, 0x00000b08, 0x00000b19, 0x00000b29,
- 0x00000b39, 0x00000b50, 0x00000b73, 0x00000b8a,
+ 0x0000092f, 0x00000939, 0x00000946, 0x00000950,
+ 0x0000095d, 0x00000964, 0x0000096b, 0x00000977,
+ 0x00000983, 0x00000992, 0x00000999, 0x000009a6,
+ 0x000009d8, 0x000009e5, 0x000009fe, 0x00000a0b,
+ 0x00000a31, 0x00000a43, 0x00000a5a, 0x00000a85,
+ 0x00000a9a, 0x00000aa9, 0x00000ab5, 0x00000aca,
+ 0x00000ae8, 0x00000af4, 0x00000b0b, 0x00000b1c,
+ 0x00000b2a, 0x00000b38, 0x00000b4c, 0x00000b6a,
// Entry 80 - 9F
- 0x00000ba4, 0x00000bbd, 0x00000bda, 0x00000c1f,
- 0x00000c26, 0x00000c2e, 0x00000c42, 0x00000c4f,
- 0x00000c65, 0x00000c7e, 0x00000c86, 0x00000ca3,
- 0x00000cbe, 0x00000cd5, 0x00000cf9, 0x00000d1c,
- 0x00000d47, 0x00000d62, 0x00000d6f, 0x00000d8d,
- 0x00000dc3, 0x00000dd6, 0x00000df4, 0x00000e24,
- 0x00000e3d, 0x00000e65, 0x00000e87, 0x00000e9a,
- 0x00000eb6, 0x00000ec9, 0x00000eef, 0x00000f2d,
+ 0x00000b7e, 0x00000ba2, 0x00000bb2, 0x00000bc3,
+ 0x00000c05, 0x00000c0c, 0x00000c18, 0x00000c30,
+ 0x00000c3d, 0x00000c50, 0x00000c73, 0x00000c8b,
+ 0x00000cb6, 0x00000cd1, 0x00000ce9, 0x00000d03,
+ 0x00000d23, 0x00000d50, 0x00000d6a, 0x00000d77,
+ 0x00000d98, 0x00000dce, 0x00000de1, 0x00000dff,
+ 0x00000e32, 0x00000e4a, 0x00000e74, 0x00000e92,
+ 0x00000ea5, 0x00000ebf, 0x00000ed2, 0x00000ef9,
// Entry A0 - BF
- 0x00000f43, 0x00000f63, 0x00000f76, 0x00000f9a,
- 0x00000fb5, 0x00001011, 0x00001056, 0x0000106c,
- 0x00001079, 0x00001095, 0x000010b3, 0x000010c6,
- 0x000010fa, 0x00001122, 0x0000114a, 0x0000116f,
- 0x0000116f,
+ 0x00000f3a, 0x00000f50, 0x00000f6b, 0x00000f8e,
+ 0x00000fbb, 0x00000fd6, 0x00001037, 0x0000106f,
+ 0x00001084, 0x00001091, 0x000010ac, 0x000010c9,
+ 0x000010db, 0x0000110f, 0x00001137, 0x0000115f,
+ 0x00001184,
} // Size: 732 bytes
-const zh_CNData string = "" + // Size: 4463 bytes
- "\x02错误\x02(无参数):提升并安装管理服务\x02用法: %[1]s [\x0a%[2]s]\x02命令行选项\x02无法确定该进程是否" +
- "在WOW64下运行: %[1]v\x02您必须在此计算机上使用64位版本的 WireGuard 。\x02无法打开当前进程令牌: %[1]v" +
+const zh_CNData string = "" + // Size: 4484 bytes
+ "\x02错误\x02(无参数): 提升并安装管理服务\x02用法: %[1]s [\x0a%[2]s]\x02命令行选项\x02无法确定该进程是" +
+ "否在WOW64下运行: %[1]v\x02您必须在此计算机上使用64位版本的 WireGuard。\x02无法打开当前进程令牌: %[1]v" +
"\x02WireGuard 可能只能被内建的 %[1]s 小组中的成员使用。\x02WireGuard 正在运行,但用户界面只能从内建的 %[1" +
- "]s 小组的桌面访问。\x02WireGuard 系统托盘图标在30秒后没有出现。\x02刚刚\x02系统时钟倒转!\x14\x01\x81" +
+ "]s 小组的桌面访问。\x02WireGuard 系统托盘图标在30秒后没有出现。\x02刚刚\x02系统时间倒退了!\x14\x01\x81" +
"\x01\x00\x00\x0a\x02%[1]d 年\x14\x01\x81\x01\x00\x00\x0a\x02%[1]d 天\x14" +
"\x01\x81\x01\x00\x00\x0d\x02%[1]d 小时\x14\x01\x81\x01\x00\x00\x0d\x02%[1]" +
"d 分钟\x14\x01\x81\x01\x00\x00\x0a\x02%[1]d 秒\x02%[1]s 前\x02%[1]d B\x02%.2" +
"[1]f\u00a0KiB\x02%.2[1]f\u00a0MiB\x02%.2[1]f\u00a0GiB\x02%.2[1]f\u00a0Ti" +
- "B\x02%[1]s: %[2]q\x02IP地址无效\x02网络前缀长度无效\x02端点中缺少端口\x02端点主机无效\x02括号应包含一个 " +
- "IPv6 地址\x02MTU 无效\x02端口无效\x02连接保活间隔无效\x02无效的密钥:%[1]v\x02密钥必须解码为正好32字节" +
- "\x02数必须是一个介于 0 至 2^64-1 之间的数字:%[1]v\x02一行中有两个逗号\x02隧道名称无效\x02行必须出现在段落中" +
- "\x02键必须有一个值\x02[Interface] 段落的键无效\x02[Peer] 段落的键无效\x02接口必须有一个私钥\x02【未指定】" +
- "\x02所有节点必须拥有公钥。\x02获取配置时出错\x02接口段落的键无效\x02协议版本必须为 1\x02节点段落的键无效\x02, " +
- "\x02, \x02关于 WireGuard\x02WireGuard 标志图片\x02应用版本: %[1]s\x0aGo 后端版本: %[2]" +
- "s\x0aGo 版本: %[3]s\x0a操作系统: %[4]s\x0a架构: %[5]s\x02关闭\x02♥ &捐助!\x02状态:\x02" +
- "&停用\x02&启动\x02公钥:\x02监听端口:\x02MTU:\x02地址:\x02DNS 服务器:\x02预分享密钥:\x02允许的 I" +
- "P:\x02端点:\x02连接保活间隔:\x02最新的握手:\x02流量:\x02已启用\x02%[1]s 已收到, %[2]s 已发送\x02" +
- "判断隧道状态失败\x02启动隧道失败\x02停用隧道失败\x02接口:%[1]s\x02节点\x02创建新隧道\x02编辑隧道\x02&名称" +
- ":\x02&公钥:\x02(未知)\x02&拦截未经隧道的流量(禁用交换)\x02当配置只有一个节点,且该节点的允许 IP 列表至少包含 0.0" +
- ".0.0/0 或 ::/0 的其中一个 IP 时,隧道服务会使用防火墙规则集来拦截所有进出隧道接口的流量,但 DHCP 和 NDP 除外。" +
- "\x02&保存\x02取消\x02&配置:\x02名称无效\x02名称是必需的。\x02隧道名称 ”%[1]s“ 无效\x02无法列出现有隧道" +
- "\x02隧道已存在\x02另一个同名的隧道 \x22%[1]s\x22 已存在。\x02无法创建新的配置\x02写入文件失败\x02文件”%[1" +
- "]s“ 已存在。\x0a\x0a您确定要覆盖它吗?\x02激活\x02启动中\x02未激活\x02停用中\x02未知状态\x02日志\x02&复" +
- "制\x02选择 &所有\x02&保存到文件…\x02时间\x02记录消息\x02文本文件 (*.txt)|*.txt|All Files (" +
- "*.*)|*.*\x02导出日志到文件\x02&关于 WireGuard…\x02隧道错误\x02%[1]s\x0a\x0a更多信息请查看日志" +
- "\x02%[1]s (已过时)\x02WireGuard 检测错误\x02无法等待 WireGuard 窗口出现: %[1]v\x02WireG" +
- "uard :已停用\x02状态:未知\x02地址:无\x02&管理隧道…\x02&从文件导入隧道…\x02退&出\x02WireGuard 隧道" +
- "错误\x02WireGuard: %[1]s\x02状态: %[1]s\x02地址: %[1]s\x02WireGuard :已启动\x02" +
- "隧道 ”%[1]s“ 已被启动。\x02WireGuard :未启动\x02隧道 %[1]s 已停用。\x02有一项可用更新!\x02Wir" +
- "eGuard 有可用的更新\x02发现一个可用的 WireGuard 更新。强烈建议尽快安装。\x02隧道\x02&编辑\x02添加&空隧道…" +
- "\x02添加隧道\x02移除选择的隧道\x02导出所有隧道到zip\x02&切换\x02导出所有隧道到&zip…\x02编辑 &选择的隧道…" +
- "\x02&移除选择的隧道\x02无法导入选择的配置:%[1]v\x02无法列出现有的隧道: %[1]v\x02另一个同名的隧道 \x22%[1]" +
- "s\x22 已存在\x02无法导入配置:%[1]v\x02导入隧道\x14\x01\x81\x01\x00\x00\x17\x02导入了 %[1" +
- "]d 隧道\x14\x02\x80\x01\x000\x02导入了 %[2]d 个隧道中的 %[1]d 个隧道\x02无法创建隧道\x14" +
- "\x01\x81\x01\x00\x00\x17\x02删除 %[1]d 个隧道\x14\x01\x81\x01\x00\x00)\x02您确定" +
- "要删除 %[1]d 个隧道吗?\x02删除隧道 ”%[1]s“\x02您确定要删除隧道 \x22%[1]s\x22 吗?\x02%[1]s " +
- "您无法撤销此操作。\x02无法删除隧道\x02无法移除隧道: %[1]s\x02无法删除隧道\x14\x01\x81\x01\x00\x00" +
- "\x1f\x02%[1]d 隧道无法被移除。\x02配置文件 (*.zip, *.conf)|*.zip;*.conf|All Files (*" +
- ".*)|*.*\x02从文件导入隧道\x02配置 ZIP 文件 (*.zip)|*.zip\x02导出隧道为Zip\x02%[1]s (未签名构" +
- "建,无更新)\x02退出 WireGuard 时出错\x02因为: %[1]v 无法退出服务。您可能想要从服务管理器中停止 WireGuar" +
- "d 。\x02发现一个可用的 WireGuard 更新。强烈建议尽快安装。\x02状态:等待用户\x02立即更新\x02状态:等待更新服务" +
- "\x02错误:%[1]v。请重试。\x02状态:完成!\x02http2: 成帧器 %[1]p: 解码刚写入的帧失败\x02http2: 成帧器" +
- " %[1]p: 写入了 %[2]v\x02http2: 成帧器 %[1]p: 读取了 %[2]v\x02http2: 解码的 hpack 字段 " +
- "%+[1]v"
+ "B\x02%[1]s: %[2]q\x02IP地址无效\x02网络前缀长度无效\x02对端 (endpoint) 中缺少端口\x02对端主机名 " +
+ "(endpoint host) 无效\x02方括号中应包含一个 IPv6 地址\x02MTU 无效\x02端口无效\x02连接保活间隔无效" +
+ "\x02无效的密钥:%[1]v\x02解码后的密钥长度必须为32字节\x02数值必须介于 0 至 2^64-1 之间: %[1]v\x02一行中" +
+ "有两个逗号\x02隧道名称无效\x02行必须出现在段落中\x02配置项必须要有一个等于号\x02必须有一个值\x02[Interface] " +
+ "段落的键无效\x02[Peer] 段落的键无效\x02接口必须有一个私钥\x02[未指定]\x02所有节点必须拥有公钥。\x02获取配置时出" +
+ "错\x02接口段落的键无效\x02协议版本必须为 1\x02节点段落的键无效\x02、\x02 \x02关于 WireGuard\x02Wi" +
+ "reGuard logo 图片\x02应用版本: %[1]s\x0aGo 后端版本: %[2]s\x0aGo 版本: %[3]s\x0a操作系统" +
+ ": %[4]s\x0a架构: %[5]s\x02关闭\x02♥ 捐助! (&D)\x02状态:\x02断开 (&D)\x02连接 (&A)" +
+ "\x02公钥:\x02监听端口:\x02MTU:\x02地址:\x02DNS 服务器:\x02预共享密钥:\x02允许的 IP:\x02对端:" +
+ "\x02连接保活间隔:\x02上次握手时间:\x02流量:\x02已启用\x02接收 %[1]s, 发送 %[2]s\x02无法确认隧道状态" +
+ "\x02无法连接隧道\x02无法断开隧道连接\x02接口: %[1]s\x02节点\x02创建新隧道\x02编辑隧道\x02名称 (&N):" +
+ "\x02公钥 (&P):\x02(未知)\x02拦截未经隧道的流量 (kill-switch) (&B)\x02只有一个节点,且该节点允许的 I" +
+ "P 中包含 0.0.0.0/0 或 ::/0 时,使用防火墙规则拦截所有未通过隧道的流量 (DHCP 和 NDP 流量除外)。\x02保存 (&" +
+ "S)\x02取消\x02配置 (&C):\x02名称无效\x02必须输入名称。\x02隧道名「%[1]s」无效。\x02无法列出现有隧道\x02" +
+ "隧道已存在\x02隧道名「%[1]s」已存在。\x02无法创建新的配置\x02写入文件失败\x02文件「%[1]s」已存在。\x0a\x0a" +
+ "您确定要覆盖它吗?\x02已连接\x02正在连接\x02已断开\x02正在断开\x02未知\x02日志\x02复制 (&C)\x02全选 (" +
+ "&A)\x02导出… (&S)\x02时间\x02日志消息\x02文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*\x02导出" +
+ "日志\x02关于 WireGuard… (&A)\x02隧道错误\x02%[1]s\x0a\x0a更多信息请查看日志。\x02%[1]s (" +
+ "已过时)\x02WireGuard 检测错误\x02无法等待 WireGuard 窗口出现: %[1]v\x02WireGuard: 已断开" +
+ "\x02状态: 未知\x02地址: 无\x02管理隧道… (&M)\x02从文件导入隧道… (&I)\x02退出 (&E)\x02WireGua" +
+ "rd 隧道错误\x02WireGuard: %[1]s\x02状态: %[1]s\x02地址: %[1]s\x02WireGuard 已连接" +
+ "\x02隧道「%[1]s」已连接。\x02WireGuard 已断开\x02隧道「%[1]s」已断开连接。\x02发现更新!\x02WireGu" +
+ "ard 更新\x02新的 WireGuard 版本发布了。强烈建议您现在安装。\x02隧道\x02编辑 (&E)\x02新建空隧道… (&E)" +
+ "\x02新建隧道\x02删除所选隧道\x02导出所有隧道 (ZIP 压缩包)\x02切换连接状态 (&T)\x02导出所有隧道 (ZIP 压缩包" +
+ ")… (&Z)\x02编辑所选隧道… (&E)\x02删除所选隧道 (&R)\x02无法导入配置: %[1]v\x02无法列出现有隧道: %[1" +
+ "]v\x02另一个同名的隧道「%[1]s」已存在\x02无法导入配置: %[1]v\x02导入隧道\x14\x01\x81\x01\x00" +
+ "\x00\x1a\x02导入了 %[1]d 个隧道\x14\x02\x80\x01\x000\x02导入了 %[2]d 个隧道中的 %[1]d " +
+ "个隧道\x02无法创建隧道\x14\x01\x81\x01\x00\x00\x17\x02删除 %[1]d 个隧道\x14\x01\x81" +
+ "\x01\x00\x00,\x02您确定要删除这 %[1]d 个隧道吗?\x02删除隧道「%[1]s」\x02您确定要删除隧道「%[1]s」吗?" +
+ "\x02%[1]s此操作无法撤销。\x02无法删除隧道\x02无法删除隧道: %[1]s\x02无法删除隧道\x14\x01\x81\x01" +
+ "\x00\x00 \x02无法删除 %[1]d 个隧道。\x02配置文件 (*.zip, *.conf)|*.zip;*.conf|所有文件 (" +
+ "*.*)|*.*\x02从文件导入隧道\x02配置文件 (*.zip)|*.zip\x02导出配置文件 (ZIP 压缩包)\x02%[1]s (" +
+ "未签名版本,禁用自动更新)\x02退出 WireGuard 时出错\x02无法停止服务: %[1]v。您可能需要在服务管理器中手动停止 Wi" +
+ "reGuard 服务。\x02发现新版 WireGuard。强烈建议您现在安装。\x02状态: 等待用户\x02立即更新\x02状态: 等待更新" +
+ "服务\x02错误: %[1]v。请重试。\x02状态: 完成!\x02http2: 成帧器 %[1]p: 解码刚写入的帧失败\x02http" +
+ "2: 成帧器 %[1]p: 写入了 %[2]v\x02http2: 成帧器 %[1]p: 读取了 %[2]v\x02http2: 解码的 hpa" +
+ "ck 字段 %+[1]v"
+
+var zh_TWIndex = []uint32{ // 177 elements
+ // Entry 0 - 1F
+ 0x00000000, 0x00000007, 0x00000037, 0x00000056,
+ 0x00000066, 0x000000a4, 0x000000e3, 0x00000114,
+ 0x00000157, 0x000001bc, 0x000001f8, 0x00000205,
+ 0x0000021e, 0x0000022f, 0x00000240, 0x00000254,
+ 0x00000268, 0x00000279, 0x00000283, 0x0000028c,
+ 0x00000299, 0x000002a6, 0x000002b3, 0x000002c0,
+ 0x000002cf, 0x000002e3, 0x00000305, 0x00000324,
+ 0x0000033e, 0x00000366, 0x00000374, 0x00000384,
+ // Entry 20 - 3F
+ 0x000003aa, 0x000003c3, 0x000003e2, 0x0000040b,
+ 0x00000424, 0x00000437, 0x00000453, 0x0000047b,
+ 0x00000491, 0x000004b0, 0x000004ca, 0x000004f0,
+ 0x000004fc, 0x0000051e, 0x0000053a, 0x00000557,
+ 0x0000056f, 0x00000587, 0x0000058b, 0x0000058d,
+ 0x0000059e, 0x000005b4, 0x00000634, 0x0000063b,
+ 0x0000064e, 0x00000655, 0x00000667, 0x00000673,
+ 0x0000067a, 0x00000684, 0x00000688, 0x0000068f,
+ // Entry 40 - 5F
+ 0x0000069d, 0x000006ad, 0x000006bd, 0x000006c7,
+ 0x000006d8, 0x000006eb, 0x000006f2, 0x000006fc,
+ 0x0000071e, 0x00000737, 0x0000074a, 0x00000763,
+ 0x00000772, 0x00000779, 0x00000789, 0x0000079c,
+ 0x000007a8, 0x000007b4, 0x000007bd, 0x000007f2,
+ 0x00000893, 0x0000089f, 0x000008a6, 0x000008b2,
+ 0x000008c2, 0x000008d8, 0x000008fc, 0x00000915,
+ 0x00000925, 0x00000946, 0x00000965, 0x00000978,
+ // Entry 60 - 7F
+ 0x000009ab, 0x000009b5, 0x000009c5, 0x000009d5,
+ 0x000009e5, 0x000009ec, 0x000009f3, 0x000009ff,
+ 0x00000a0b, 0x00000a1a, 0x00000a21, 0x00000a2e,
+ 0x00000a5d, 0x00000a6d, 0x00000a83, 0x00000a90,
+ 0x00000abf, 0x00000ad4, 0x00000aec, 0x00000b19,
+ 0x00000b2f, 0x00000b3f, 0x00000b4c, 0x00000b5e,
+ 0x00000b76, 0x00000b82, 0x00000b99, 0x00000bab,
+ 0x00000bba, 0x00000bc9, 0x00000bdd, 0x00000bf8,
+ // Entry 80 - 9F
+ 0x00000c12, 0x00000c36, 0x00000c3d, 0x00000c4e,
+ 0x00000ca7, 0x00000cae, 0x00000cba, 0x00000cd2,
+ 0x00000cdf, 0x00000cf2, 0x00000d15, 0x00000d2d,
+ 0x00000d52, 0x00000d6a, 0x00000d85, 0x00000da1,
+ 0x00000dbd, 0x00000de7, 0x00000e03, 0x00000e13,
+ 0x00000e34, 0x00000e67, 0x00000e7a, 0x00000e98,
+ 0x00000ec8, 0x00000edd, 0x00000f07, 0x00000f2d,
+ 0x00000f40, 0x00000f5c, 0x00000f6f, 0x00000f93,
+ // Entry A0 - BF
+ 0x00000fd7, 0x00000ff3, 0x00001011, 0x0000102a,
+ 0x00001060, 0x00001078, 0x000010d9, 0x0000112e,
+ 0x00001147, 0x00001154, 0x00001170, 0x00001195,
+ 0x000011ab, 0x000011e4, 0x00001205, 0x00001225,
+ 0x00001247,
+} // Size: 732 bytes
+
+const zh_TWData string = "" + // Size: 4679 bytes
+ "\x02錯誤\x02(無參數):提升權限並安裝管理服務\x02使用方法: %[1]s [\x0a%[2]s]\x02命令列選項\x02無法確定該" +
+ "處理程序是否在 WOW64 下執行: %[1]v\x02您必須在此電腦上執行 64 位元版本的 WireGuard。\x02無法開啓目前處理" +
+ "程序的權杖: %[1]v\x02WireGuard 可能只能被內建的「%[1]s」群組成員使用。\x02WireGuard 正在執行,但 U" +
+ "I 只能從內建的內建的「%[1]s」群組成員的桌面存取。\x02WireGuard 的工作列圖示在 30 秒後並沒有顯示。\x02就是現在" +
+ "\x02系統時鐘倒退了!\x14\x01\x81\x01\x00\x00\x0a\x02%[1]d 年\x14\x01\x81\x01\x00" +
+ "\x00\x0a\x02%[1]d 天\x14\x01\x81\x01\x00\x00\x0d\x02%[1]d 小時\x14\x01\x81" +
+ "\x01\x00\x00\x0d\x02%[1]d 分鐘\x14\x01\x81\x01\x00\x00\x0a\x02%[1]d 秒\x02%" +
+ "[1]s 前\x02%[1]d\u00a0B\x02%.2[1]f\u00a0KiB\x02%.2[1]f\u00a0MiB\x02%.2[1]" +
+ "f\u00a0GiB\x02%.2[1]f\u00a0TiB\x02%[1]s: %[2]q\x02無效的 IP 位址\x02無效的網路位址首碼" +
+ "長度\x02Endpoint 中沒有指定埠號\x02無效的 Endpoint 位址\x02括號中必須包含一個 IPv6 位址\x02無效的 " +
+ "MTU\x02無效的埠號\x02無效的 Persistent Keepalive 設定\x02無效的金鑰: %[1]v\x02金鑰必須剛好長 3" +
+ "2 bytes\x02數值必須介於 0 到 2^64-1: %[1]v\x02一行中有兩個逗號\x02隧道名稱無效\x02行必須出現在段落中" +
+ "\x02設定的項目必須要有一個等號\x02必須要有一個值\x02[Interface] 中有無效選項\x02[Peer] 中有無效選項\x02I" +
+ "nterface 中必須要有一把私鑰\x02[未指定]\x02每個 Peer 都必須要有公鑰\x02讀取設定時發生錯誤\x02Interface" +
+ " 中的金鑰無效\x02協定版本必須為 1\x02Peer 中的金鑰無效\x02、\x02 \x02關於 WireGuard\x02WireGua" +
+ "rd logo 圖片\x02應用程式版本: %[1]s\x0a後端程式(Go 實作)版本: %[2]s\x0aGo 版本: %[3]s\x0a作" +
+ "業系統: %[4]s\x0a架構: %[5]s\x02關閉\x02♥ 捐贈! (&D)\x02狀態\x02中斷連線 (&D)\x02連線 (" +
+ "&A)\x02公鑰\x02監聽埠\x02MTU\x02位址\x02DNS 伺服器\x02預交換金鑰\x02允許的位址\x02連接點\x02Kee" +
+ "palive 間隔\x02最後交握時間\x02流量\x02已啓用\x02已收到 %[1]s;已傳送 %[2]s\x02無法確認隧道狀態\x02無" +
+ "法連接隧道\x02無法斷開隧道連線\x02[隧道] %[1]s\x02節點\x02建立新隧道\x02編輯隧道設定\x02名稱 (&N)" +
+ "\x02公鑰 (&P)\x02(未知)\x02阻斷未經過隧道的流量(kill-switch) (&B)\x02只有一個節點且該節點允許位址包含 " +
+ "0.0.0.0/0 或 ::/0 時,使用防火牆攔截所有非通過隧道的流量。\x0a(DHCP 及 NDP 流量除外)\x02儲存 (&S)" +
+ "\x02取消\x02設定 (&C)\x02無效的名稱\x02必須填寫名稱。\x02無效的隧道名稱「%[1]s」。\x02無法列出現有隧道\x02" +
+ "隧道已存在\x02已有同名隧道「%[1]s」。\x02無法建立新的隧道設定\x02檔案寫入失敗\x02檔案已存在: %[1]s\x0a" +
+ "\x0a您確定要覆蓋嗎?\x02已連線\x02正在連線…\x02已中斷連線\x02正在中斷…\x02未知\x02日誌\x02複製 (&C)" +
+ "\x02全選 (&A)\x02匯出… (&S)\x02時間\x02日誌訊息\x02純文字 (*.txt)|*.txt|所有檔案 (*.*)|*." +
+ "*\x02匯出日誌…\x02關於 WireGuard (&A)\x02隧道錯誤\x02%[1]s\x0a\x0a如需更多資訊,請查看日誌。" +
+ "\x02%[1]s(已過時)\x02偵測 WireGuard 錯誤\x02無法等待 WireGuard 視窗開啓: %[1]v\x02WireG" +
+ "uard - 未連線\x02[狀態] 未知\x02[位址] 無\x02管理隧道 (&M)\x02從檔案匯入… (&I)\x02離開 (&X)" +
+ "\x02WireGuard 隧道錯誤\x02WireGuard - %[1]s\x02[狀態] %[1]s\x02[位址] %[1]s\x02W" +
+ "ireGuard 已連線\x02已連線至隧道 - %[1]s\x02WireGuard 已中斷連線\x02已中斷與隧道的連線 - %[1]s" +
+ "\x02更新\x02WireGuard 更新\x02更新的 WireGuard 已經為您準備好了。\x0a強烈建議您立即更新 WireGuard" +
+ "。\x02隧道\x02編輯 (&E)\x02新增隧道精靈 (&E)\x02新增隧道\x02刪除選取隧道\x02匯出所有隧道(ZIP 格式)" +
+ "\x02切換連線狀態 (&T)\x02匯出所有隧道至 &ZIP 壓縮檔\x02編輯選取隧道 (&S)\x02刪除已選取隧道 (&R)\x02無法" +
+ "匯入設定: %[1]v\x02無法列出隧道: %[1]v\x02已有另一個同名的隧道「%[1]s」\x02無法匯入設定: %[1]v\x02" +
+ "已匯入隧道\x14\x01\x81\x01\x00\x00\x1a\x02已匯入 %[1]d 個隧道\x14\x02\x80\x01\x00" +
+ "-\x02已匯入 %[1]d 個隧道(共 %[2]d 個)\x02無法建立隧道\x14\x01\x81\x01\x00\x00\x17\x02刪" +
+ "除 %[1]d 個隧道\x14\x01\x81\x01\x00\x00)\x02您確定要刪除 %[1]d 個隧道嗎?\x02刪除隧道 - %" +
+ "[1]s\x02您確定要刪除隧道「%[1]s」嗎?\x02%[1]s\x0a\x0a您將無法復原此操作。\x02無法刪除隧道\x02無法刪除隧道" +
+ ": %[1]s\x02無法刪除隧道\x14\x01\x81\x01\x00\x00\x1d\x02無法刪除 %[1]d 個隧道\x02隧道設" +
+ "定檔 (*.zip, *.conf)|*.zip;*.conf|所有檔案 (*.*)|*.*\x02從檔案中匯入隧道…\x02隧道設定檔 (" +
+ "*.zip)|*.zip\x02匯出隧道設定至…\x02%[1]s(未簽署發行版本,無法自動更新)\x02離開 WireGuard 失敗\x02" +
+ "無法結束服務: %[1]v。\x0a您可能需要手動從服務管理中結束 WireGuard 服務。\x02更新的 WireGuard 已經為您準" +
+ "備好了。\x0a強烈建議您立即進行更新。\x02狀態:等待使用者\x02立即更新\x02狀態:等待更新服務\x02錯誤: %[1]v。請稍後" +
+ "再試。\x02狀態:已完成!\x02http2: Framer %[1]p: failed to decode just-written f" +
+ "rame\x02http2: Framer %[1]p: wrote %[2]v\x02http2: Framer %[1]p: read %[" +
+ "2]v\x02http2: decoded hpack field %+[1]v"
- // Total table size 56355 bytes (55KiB); checksum: 712539F7
+ // Total table size 81399 bytes (79KiB); checksum: A775CCDC