~fkooman/vpn-user-portal

cc7a7559a37e6add662e841d993ccd520d268952 — François Kooman 8 months ago e9d3470 + 1f878f1 wg
Merge branch 'v2' into wg
M CHANGES.md => CHANGES.md +2 -2
@@ 1,7 1,7 @@
# Changelog

## 2.3.8 (...)
- show portal version in footer when user is admin
## 2.3.8 (2021-03-15)
- show portal version on "Info" page
- implement support for optional LDAP bind with credentials for initial search

## 2.3.7 (2021-02-23)

M CONFIG_CHANGES.md => CONFIG_CHANGES.md +8 -0
@@ 8,6 8,14 @@ This will help upgrades to a future 3.x release. Configuration changes during
the 2.x life cycle are NOT required. Any existing configuration file will keep
working!

## 2.3.8

The `FormLdapAuthentication` section also takes `searchBindDn` and 
`searchBindPass` options now to allow binding to an LDAP server with an 
account before performing the user's DN search. See 
[LDAP](https://github.com/eduvpn/documentation/blob/v2/LDAP.md) on how to use
it.

## 2.3.7

The `authMethod`, `supportedLanguages` and `sessionExpiry` now have defaults 

M VERSION => VERSION +1 -1
@@ 1,1 1,1 @@
2.3.7
2.3.8

M composer.lock => composer.lock +18 -13
@@ 109,11 109,11 @@
        },
        {
            "name": "fkooman/secookie",
            "version": "5.0.1",
            "version": "5.0.2",
            "source": {
                "type": "git",
                "url": "https://git.sr.ht/~fkooman/php-secookie",
                "reference": "3b560a231daf11828b7a0c7ef9bbff4f0d5a52ab"
                "reference": "f288021ca829cd96f8660162dd35cbc74e6bd2c2"
            },
            "require": {
                "ext-date": "*",


@@ 148,9 148,9 @@
            "description": "Modern HTTP cookie and session library",
            "support": {
                "email": "fkooman@tuxed.net",
                "source": "https://git.tuxed.net/fkooman/php-secookie"
                "source": "https://git.sr.ht/~fkooman/php-secookie"
            },
            "time": "2020-08-09T09:35:11+00:00"
            "time": "2021-02-23T20:46:21+00:00"
        },
        {
            "name": "fkooman/sqlite-migrate",


@@ 2320,30 2320,35 @@
        },
        {
            "name": "webmozart/assert",
            "version": "1.9.1",
            "version": "1.10.0",
            "source": {
                "type": "git",
                "url": "https://github.com/webmozarts/assert.git",
                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
                "shasum": ""
            },
            "require": {
                "php": "^5.3.3 || ^7.0 || ^8.0",
                "php": "^7.2 || ^8.0",
                "symfony/polyfill-ctype": "^1.8"
            },
            "conflict": {
                "phpstan/phpstan": "<0.12.20",
                "vimeo/psalm": "<3.9.1"
                "vimeo/psalm": "<4.6.1 || 4.6.2"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
                "phpunit/phpunit": "^8.5.13"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.10-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Webmozart\\Assert\\": "src/"


@@ 2367,9 2372,9 @@
            ],
            "support": {
                "issues": "https://github.com/webmozarts/assert/issues",
                "source": "https://github.com/webmozarts/assert/tree/1.9.1"
                "source": "https://github.com/webmozarts/assert/tree/1.10.0"
            },
            "time": "2020-07-08T17:02:28+00:00"
            "time": "2021-03-09T10:59:23+00:00"
        }
    ],
    "aliases": [],

M locale/ar_MA.php => locale/ar_MA.php +26 -1
@@ 9,6 9,7 @@

return [
    '#Active Connections' => 'الاتصالات النشطة',
    //'ACL Permission List' => '',
    'Account' => 'حساب',
    'Active' => 'نشط',
    'An application attempts to establish a VPN connection.' => 'يحاول تطبيق الاتصال مع الشبكة الخاصة الافتراضية.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'الموافقة على التطبيق',
    'Authorized' => 'مسموح',
    'Authorized Applications' => 'التطبيقات المسموحة',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'الشهادات',
    'Change Password' => 'تغيير كلمة المرور',
    'Client Lost' => 'زبون مفقود',
    //'Client-to-client' => '',
    'Configurations' => 'اعدادات',
    'Confirm' => 'مصادقة',
    'Connected' => 'متصل',


@@ 31,8 35,13 @@ return [
    'Created' => 'منشأ',
    'Current Password' => 'كلمة المرور الحالية',
    'Current Password not correct!' => 'كلمة المرور الحالية غير صحيحة!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'التاريخ',
    'Date/Time' => 'التاريخ/الوقت',
    //'Default Gateway' => '',
    'Delete' => 'حذف',
    'Delete TOTP Secret' => 'حذف سر كلمة المرور وحيدة الاستخدام المؤقتة',
    'Details...' => 'تفاصيل',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'غير متصل',
    'Distribution of unique users over the VPN applications.' => 'توزيع المستخدمين الفريدين على تطبيقات الشبكة الخاصة الافتراضية.',
    'Documentation' => 'دليل الاستخدام',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'تفعيل المستخدم',
    'Enroll' => 'تسجيل',
    'Error' => 'خطأ',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'جد هوية المستخدم الذي استعمل عنوانا ما من نظام الشبكات من الجيل الرابع او السادس عند نقطة في الزمن.',
    'Here you can change the password for your account.' => 'يمكنك هنا تغيير كلمة مرور حسابك.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'يمكنك هنا التسجيل من اجل توثيق ذو عاملين باستخدام كلمة المرور وحيدة الاستخدام المؤقتة.',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'اعلى (اقصى) # الاتصالات المتزامنة',
    'Home' => 'الصفحة الرئيسية',
    //'Hostname' => '',
    'IP Address' => 'عنوان نظام الشبكات',
    'IPs' => 'عناوين نظام الشبكات',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'من اجل المواصلة، يجب عليك اولا ان تتسجل من اجل توثيق ذو عاملين!',
    'Info' => 'معلومات',
    //'Key Type' => '',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'سجل',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'إدارة المستخدم <code>%userId%</code>.',
    'Manual Configuration Download' => 'تنزيل الاعدادات اليدوية',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'أنشأ ملف اعداد OpenVPN يدويا وحمله للاستعمال مع تطبيق OpenVPN.',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'لا حساب مستخدم للعرض.',
    'Number of unique users of the VPN service over the last month.' => 'عدد المستخدمين الفرادى للشبكة الخاصة الافتراضية خلال الشهر المنصرم.',
    'OTP' => 'كلمة المرور وحيدة الاستخدام',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'وافق فقط عندما تحاول الاتصال بالشبكة الخاصة الافتراضية عبر هذا التطبيق!',
    'Password' => 'كلمة المرور',
    'Permission(s)' => 'صلاحية/صلاحيات',
    'Please provide your TOTP.' => 'أدخل من فضلك كلمة المرور وحيدة الاستخدام المؤقتة.',
    'Please sign in with your username and password.' => 'سجل دخولك من فضلك باستعمال اسم المستخدم وكلمة المرور.',
    'Profile' => 'مظهر',
    //'Profile Number' => '',
    'Profile Usage' => 'استخدام المظهر',
    'Profiles' => 'مظاهر',
    //'Protocols/Ports' => '',
    'QR' => 'الاستجابة السريعة',
    'Results' => 'نتائج',
    'Revoke' => 'سحب',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'افحص رمز الاستجابة السريعة باستعمال تطبيق التوثيق ذو عاملين، او استورد السر يدويا. أكد الاعداد الناجح بادخال 6 ارقام المرور وحيدة الاستخدام المولدة من طرف التطبيق الموالي.',
    'Search' => 'ابحث',
    'Secret' => 'سر',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'انظر الى </a>دليل الاستخدام<a href="documentation#2fa"> للمزيد من معلومات حول التوثيق ذو عاملين و لائحة من التطبيقات للاستعمال.',
    'Select a profile and choose a name, e.g. "Phone".' => 'اختر مظهرا و إسما، مثال "الهاتف".',
    //'Server' => '',
    'Set' => 'ثبت',
    'Sign In' => 'سجل الدخول',
    'Sign Out' => 'سجل الخروج',
    'Stats' => 'احصائيات',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'كلمة المرور وحيدة الاستخدام المؤقتة',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'يقبل حقل </em>التاريخ/الوقت<em> التواريخ على شكل <code>Y-m-d H:i:s</code> ، مثلا <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'لا يتطابق مفتاح كلمة المرور وحيدة الاستخدام الذي أدخلته مع القيمة المتوقعة لسر كلمة المرور وحيدة الاستخدام هذه.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'بوابة الشبكة الخاصة الافتراضية',
    'VPN traffic over the last month.' => 'حركة المرور عبر الشبكة الخاصة الافتراضية خلال الشهر المنصرم.',
    'Verify' => 'تحقق',
    //'Version' => '',
    'Welcome to this VPN service!' => 'مرحبا بك على خدمة الشبكة الخاصة الافتراضية هذه!',
    'Why is this necessary?' => 'لماذا هذا ضروري؟',
    'Yes' => 'نعم',


@@ 129,5 155,4 @@ return [
    'You cannot manage your own user account.' => 'لا يمكنك إدارة حساب المستخدم الخاص بك.',
    'Your ID is <code>%_two_factor_user_id%</code>.' => 'هويتك هي <code>%_two_factor_user_id%</code>.',
    'Your new configuration will expire on %expiryDate%. Come back here to obtain a new configuration after expiry!' => 'تنتهي صلاحية الاعداد الجديد عند %expiryDate%. عد هنا للحصول على اعداد جديد بعد انتهاء الصلاحية!',
    // [DELETED] 'IP address' => 'عنوان نظام الشبكات',
];

M locale/da_DK.php => locale/da_DK.php +26 -0
@@ 9,6 9,7 @@

return [
    '#Active Connections' => 'Aktive forbindelser',
    //'ACL Permission List' => '',
    'Account' => 'Konto',
    'Active' => 'Aktiv',
    'An application attempts to establish a VPN connection.' => 'En applikation prøver at oprette en VPN-forbindelse',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Godkend applikation',
    'Authorized' => 'Autoriseret',
    'Authorized Applications' => 'Autoriserede applikationer',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Certifikater',
    'Change Password' => 'Skift adgangskode',
    'Client Lost' => 'Mistet klient',
    //'Client-to-client' => '',
    'Configurations' => 'Konfigurationer',
    'Confirm' => 'Bekræft',
    'Connected' => 'Forbundet',


@@ 31,8 35,13 @@ return [
    'Created' => 'Oprettet',
    'Current Password' => 'Nuværende adgangskode',
    'Current Password not correct!' => 'Nuværende adgangskode er ikke korrekt!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Dato',
    'Date/Time' => 'Dato/klokkeslæt',
    //'Default Gateway' => '',
    'Delete' => 'Slet',
    'Delete TOTP Secret' => 'Slet TOTP-hemmelighed',
    'Details...' => 'Detaljer',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Ikke forbundet',
    'Distribution of unique users over the VPN applications.' => 'Fordeling af unikke brugere per VPN-applikation.',
    'Documentation' => 'Dokumentation',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Aktiver bruger',
    'Enroll' => 'Tilmeld',
    'Error' => 'Fejl',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Find ID for brugeren som brugte en IPv4- eller IPv6-adresse på et bestemt tidspunkt',
    'Here you can change the password for your account.' => 'Her kan du ændre adgangskoden til din konto.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Her kan du tilmelde dig tofaktor-autentifikation (2FA) med et Time-based One-time Password (TOTP).',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'Største antal (maks.) samtidige brugere',
    'Home' => 'Hjem',
    //'Hostname' => '',
    'IP Address' => 'IP-adresse',
    'IPs' => 'IP\'er',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'Du skal først slå tofaktor-autentifikation til!',
    'Info' => 'Oplysninger',
    //'Key Type' => '',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Log',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Administration af <code>%userId%</code>.',
    'Manual Configuration Download' => 'Download manuel konfiguration',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'Opret manuelt og download en OpenVPN-konfigurationsfil som skal bruges i din OpenVPN-klient',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'Ingen brugerkonto(i) at vise.',
    'Number of unique users of the VPN service over the last month.' => 'Antal unikke brugere af VPN-tjenesten over den sidste måned',
    'OTP' => 'OTP',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'Dette skal du kun godkende hvis du prøver at oprette en VPN-forbindelse med denne applikation!',
    'Password' => 'Adgangskode',
    'Permission(s)' => 'Tilladelse(r)',
    'Please provide your TOTP.' => 'Indtast venligst dit TOTP.',
    'Please sign in with your username and password.' => 'Log ind med dit brugernavn og adgangskode.',
    'Profile' => 'Profil',
    //'Profile Number' => '',
    'Profile Usage' => 'Profilens forbrug',
    'Profiles' => 'Profiler',
    //'Protocols/Ports' => '',
    'QR' => 'QR',
    'Results' => 'Resultater',
    'Revoke' => 'Ophæv',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Scan QR-koden ved hjælp af din 2FA-applikation eller importer hemmeligheden manuelt. Bekræft den vellykkede konfiguration ved at indtaste et sekscifret engangspassword genereret af applikationen nedenfor.',
    'Search' => 'Søg',
    'Secret' => 'Hemmelighed',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Se <a href="documentation#2fa">dokumentationen</a> for mere information om 2FA og en liste over applikationer som kan bruges.',
    'Select a profile and choose a name, e.g. "Phone".' => 'Vælg en profil og tilføj et navn, f.eks. "Telefon".',
    //'Server' => '',
    'Set' => 'Sæt',
    'Sign In' => 'Log ind',
    'Sign Out' => 'Log ud',
    'Stats' => 'Statistik',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => '<em>Dato/Tid</em> felt accepterer datoer i formatet <code>Y-m-d H:i:s</code>, f.eks. <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'Det indtastede YubiKey-engangspassword passer ikke med denne OTP-hemmelighed.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'VPN-portal',
    'VPN traffic over the last month.' => 'VPN-trafik i løbet af den sidste måned',
    'Verify' => 'Bekræft',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Velkommen til denne VPN tjeneste!',
    'Why is this necessary?' => 'Hvorfor er det her nødvendigt?',
    'Yes' => 'Ja',

M locale/de_DE.php => locale/de_DE.php +26 -0
@@ 9,6 9,7 @@

return [
    '#Active Connections' => 'Aktive Verbindungen',
    //'ACL Permission List' => '',
    'Account' => 'Benutzerkonto',
    'Active' => 'Aktiv',
    'An application attempts to establish a VPN connection.' => 'Eine Anwendung versucht eine VPN-Verbindung aufzubauen.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Genehmige Anwendung',
    'Authorized' => 'Autorisiert',
    'Authorized Applications' => 'Autorsierte Anwendungen',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Zertifikate',
    'Change Password' => 'Passwort ändern',
    'Client Lost' => 'Verbindung abgebrochen',
    //'Client-to-client' => '',
    'Configurations' => 'Einstellungen',
    'Confirm' => 'Bestätigen',
    'Connected' => 'Verbunden',


@@ 31,8 35,13 @@ return [
    'Created' => 'Erstellt',
    'Current Password' => 'Derzeitiges Passwort',
    'Current Password not correct!' => 'Derzeitiges Passwort ist nicht korrekt!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Datum',
    'Date/Time' => 'Datum/Zeit',
    //'Default Gateway' => '',
    'Delete' => 'Löschen',
    'Delete TOTP Secret' => 'Lösche TOTP-Geheimnis',
    'Details...' => 'Details...',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Getrennt',
    'Distribution of unique users over the VPN applications.' => 'Verteilung eindeutiger Benutzer über die VPN-Anwendungen.',
    'Documentation' => 'Dokumentation',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Aktiviere Benutzer',
    'Enroll' => 'Aktivieren',
    'Error' => 'Fehler',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Suche die Benutzerkennung, die zu einem bestimmten Zeitpunkt eine IPv4- oder IPv6-Adresse verwendet hat.',
    'Here you can change the password for your account.' => 'Hier kannst Du dein Passwort ändern.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Hier kannst Du dich für die Zwei-Faktor-Authentifizierung (2FA) mit einem zeitbasiertem Einmalpasswort (Time-based One-time Password; TOTP) registrieren.',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'Höchste (Maximale) Anzahl gleichzeitiger Verbindungen',
    'Home' => 'Home',
    //'Hostname' => '',
    'IP Address' => 'IP-Adresse',
    'IPs' => 'IPs',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'Um fortzufahren, musst Du dich zuerst die Zwei-Faktor-Authentifizierung aktivieren.',
    'Info' => 'Info',
    //'Key Type' => '',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Log',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Verwalte Benutzer <code>%userId%</code>.',
    'Manual Configuration Download' => 'Manuelle Konfiguration herunterladen',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'OpenVPN-Konfigurationsdatei manuell erstellen und für einen alternativen OpenVPN-Client herunterladen.',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'Kein/e Benutzerkonto/-konten anzuzeigen.',
    'Number of unique users of the VPN service over the last month.' => 'Anzahl eindeutiger VPN-Benutzer seit letztem Monat.',
    'OTP' => 'OTP',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'Erlaube dies nur, wenn Du versuchst eine VPN-Verbindung mit dieser Anwendung herzustellen.',
    'Password' => 'Passwort',
    'Permission(s)' => 'Berechtigung(en)',
    'Please provide your TOTP.' => 'Bitte gib dein TOTP an.',
    'Please sign in with your username and password.' => 'Bitte melde dich mit Benutzername und Passwort an.',
    'Profile' => 'Profil',
    //'Profile Number' => '',
    'Profile Usage' => 'Profilbenutzung',
    'Profiles' => 'Profile',
    //'Protocols/Ports' => '',
    'QR' => 'QR',
    'Results' => 'Ergebnisse',
    'Revoke' => 'Wiederrufen',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Scanne den QR-Code mit deiner 2FA-Anwendung oder importiere das Geheimnis manuell. Bestätige die erfolgreiche Konfiguration mit dem generiertem 6-stelligen OTP der Anwendung.',
    'Search' => 'Suchen',
    'Secret' => 'Geheimnis',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Schau dir die <a href="documentation#2fa">Dokumentation</a> für weitere Informationen über 2FA und einer Liste passender Anwendungen an.',
    'Select a profile and choose a name, e.g. "Phone".' => 'Wähle ein Profil und gib ihm einen Namen, z. B. "Handy"',
    //'Server' => '',
    'Set' => 'Setze',
    'Sign In' => 'Anmelden',
    'Sign Out' => 'Abmelden',
    'Stats' => 'Statistiken',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'Das <em>Datum/Zeit</em>-Feld erlaubt nur folgendes Format: <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'Der eingegebene OTP-Schlüssel entspricht nicht dem erwarteten Wert.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'VPN-Portal',
    'VPN traffic over the last month.' => 'VPN-Netzwerkverkehr seit letztem Monat.',
    'Verify' => 'Überprüfen',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Willkommen zu diesem VPN-Dienst!',
    'Why is this necessary?' => 'Warum ist das nötig?',
    'Yes' => 'Ja',

M locale/empty.php => locale/empty.php +26 -0
@@ 9,6 9,7 @@

return [
    '#Active Connections' => '',
    'ACL Permission List' => '',
    'Account' => '',
    'Active' => '',
    'An application attempts to establish a VPN connection.' => '',


@@ 18,9 19,12 @@ return [
    'Approve Application' => '',
    'Authorized' => '',
    'Authorized Applications' => '',
    'Block LAN' => '',
    'CA' => '',
    'Certificates' => '',
    'Change Password' => '',
    'Client Lost' => '',
    'Client-to-client' => '',
    'Configurations' => '',
    'Confirm' => '',
    'Connected' => '',


@@ 31,8 35,13 @@ return [
    'Created' => '',
    'Current Password' => '',
    'Current Password not correct!' => '',
    'DNS Domain' => '',
    'DNS Search Domain(s)' => '',
    'DNS Server(s)' => '',
    'DNS Suffix' => '',
    'Date' => '',
    'Date/Time' => '',
    'Default Gateway' => '',
    'Delete' => '',
    'Delete TOTP Secret' => '',
    'Details...' => '',


@@ 41,6 50,8 @@ return [
    'Disconnected' => '',
    'Distribution of unique users over the VPN applications.' => '',
    'Documentation' => '',
    'Enable ACL' => '',
    'Enable Log' => '',
    'Enable User' => '',
    'Enroll' => '',
    'Error' => '',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => '',
    'Here you can change the password for your account.' => '',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => '',
    'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => '',
    'Home' => '',
    'Hostname' => '',
    'IP Address' => '',
    'IPs' => '',
    'IPv4 Prefix' => '',
    'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => '',
    'Info' => '',
    'Key Type' => '',
    'Legacy' => '',
    'Listen IP' => '',
    'Log' => '',
    'Management IP' => '',
    'Managing user <code>%userId%</code>.' => '',
    'Manual Configuration Download' => '',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => '',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => '',
    'Number of unique users of the VPN service over the last month.' => '',
    'OTP' => '',
    'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => '',
    'Password' => '',
    'Permission(s)' => '',
    'Please provide your TOTP.' => '',
    'Please sign in with your username and password.' => '',
    'Profile' => '',
    'Profile Number' => '',
    'Profile Usage' => '',
    'Profiles' => '',
    'Protocols/Ports' => '',
    'QR' => '',
    'Results' => '',
    'Revoke' => '',
    'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => '',
    'Search' => '',
    'Secret' => '',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => '',
    'Select a profile and choose a name, e.g. "Phone".' => '',
    'Server' => '',
    'Set' => '',
    'Sign In' => '',
    'Sign Out' => '',
    'Stats' => '',
    'Summary' => '',
    'TLS >= 1.3' => '',
    'TOTP' => '',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => '',
    'The OTP key you entered does not match the expected value for this OTP secret.' => '',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => '',
    'VPN traffic over the last month.' => '',
    'Verify' => '',
    'Version' => '',
    'Welcome to this VPN service!' => '',
    'Why is this necessary?' => '',
    'Yes' => '',

M locale/et_EE.php => locale/et_EE.php +26 -1
@@ 9,6 9,7 @@

return [
    //'#Active Connections' => '',
    //'ACL Permission List' => '',
    'Account' => 'Konto',
    'Active' => 'Aktiivne',
    'An application attempts to establish a VPN connection.' => 'Rakendus proovib luua VPN ühendust.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Rakenduse heakskiitmine',
    'Authorized' => 'Volitatud',
    'Authorized Applications' => 'Lubatud rakendused',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Sertifikaadid',
    'Change Password' => 'Muuda parooli',
    'Client Lost' => 'Klient kadunud',
    //'Client-to-client' => '',
    'Configurations' => 'Seadistused',
    'Confirm' => 'Kinnita',
    'Connected' => 'Ühendatud',


@@ 31,8 35,13 @@ return [
    //'Created' => '',
    'Current Password' => 'Praegune salasõna',
    'Current Password not correct!' => 'See salasõna ei ole õige!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Kuupäev',
    'Date/Time' => 'Kuupäev/kellaaeg',
    //'Default Gateway' => '',
    'Delete' => 'Kustuta',
    'Delete TOTP Secret' => 'Kustuta ajapõhise ühekordse parooli (TOTP) saladus',
    //'Details...' => '',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Lahti ühendatud',
    //'Distribution of unique users over the VPN applications.' => '',
    'Documentation' => 'Dokumentatsioon',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Aktiveeri kasutaja',
    'Enroll' => 'Registreeri',
    'Error' => 'Viga',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Leia kasutajaidentifikaator, millega kasutati konkreetsel ajahetkel IPv4 või IPv6 aadressi.',
    'Here you can change the password for your account.' => 'Siin saad oma konto parooli muuta.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Siin saad registreerida kahefaktoriliseks autentimiseks (2FA), kasutades ajapõhist ühekordset parooli (TOTP - Time-based One-time Password).',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'Samaaegsete ühenduste maksimumarv',
    'Home' => 'Avaleht',
    //'Hostname' => '',
    'IP Address' => 'IP-aadress',
    'IPs' => 'IP-d',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'Jätkamiseks pead esmalt registreerima kahefaktorilise autentimise!',
    'Info' => 'Info',
    //'Key Type' => '',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Logi',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Kasutaja <code>%userId%</code> haldamine.',
    //'Manual Configuration Download' => '',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'Loo käsitsi ja lae alla OpenVPN seadistusfail oma OpenVPN kliendis kasutamiseks.',


@@ 78,26 96,33 @@ return [
    //'No user account(s) to show.' => '',
    'Number of unique users of the VPN service over the last month.' => 'VPN-teenuse unikaalsete kasutajate arv viimase kuu jooksul.',
    'OTP' => 'Ühekordne parool (OTP)',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'Kiida rakendus heaks ainult juhul, kui püüad sellega VPN-ühendust luua!',
    'Password' => 'Parool',
    'Permission(s)' => 'Õigus(ed)',
    'Please provide your TOTP.' => 'Palun sisesta oma ajapõhine ühekordne parool (TOTP).',
    'Please sign in with your username and password.' => 'Palun logi oma kasutajanime ja parooliga sisse.',
    'Profile' => 'Profiil',
    //'Profile Number' => '',
    //'Profile Usage' => '',
    //'Profiles' => '',
    //'Protocols/Ports' => '',
    'QR' => 'QR',
    'Results' => 'Tulemused',
    'Revoke' => 'Tühista',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Skaneeri QR-kood oma 2FA rakendusega, või impordi saladus käsitsi. Kinnita seadistus rakenduse poolt genereeritud 6-numbrilise ühekordse parooli (OTP) sisestamisega allpool.',
    'Search' => 'Otsi',
    'Secret' => 'Saladus',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Rohkem teavet 2FA kohta ja kasutatavate rakenduste nimekiri: <a href="documentation#2fa">dokumentatsioon</a>',
    'Select a profile and choose a name, e.g. "Phone".' => 'Vali profiil ja pane sellele nimi, näiteks “Telefon”.',
    //'Server' => '',
    'Set' => 'Seadista',
    'Sign In' => 'Logi sisse',
    'Sign Out' => 'Logi välja',
    'Stats' => 'Statistika',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'Ajapõhine ühekordne parool (TOTP)',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'Välja <em>Kuupäev/kellaaeg</em> vorming: <code>aasta-kuu-päev tund:minut:sekund</code>, näiteks <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'Sisestatud ühekordse parooli (OTP) võti ei klapi selle OTP saladusega.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'VPN-portaal',
    'VPN traffic over the last month.' => 'VPN liiklus viimasel kuul.',
    'Verify' => 'Kontrolli',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Tere tulemast VPN teenusesse!',
    'Why is this necessary?' => 'Miks seda vaja on?',
    'Yes' => 'Jah',


@@ 129,5 155,4 @@ return [
    'You cannot manage your own user account.' => 'Sa ei saa ise enda kasutajakontot hallata.',
    'Your ID is <code>%_two_factor_user_id%</code>.' => 'Su ID on <code>%_two_factor_user_id%</code>.',
    'Your new configuration will expire on %expiryDate%. Come back here to obtain a new configuration after expiry!' => 'Su uue seadistuse aegumiskuupäev on %expiryDate%. Pärast aegumist tule palun tagasi uut seadistust saama.',
    // [DELETED] 'IP address' => 'IP-aadress',
];

M locale/fr_FR.php => locale/fr_FR.php +26 -1
@@ 9,6 9,7 @@

return [
    '#Active Connections' => 'Nombre de connexions actives',
    //'ACL Permission List' => '',
    'Account' => 'Compte',
    'Active' => 'Active',
    'An application attempts to establish a VPN connection.' => 'Une application essaie d\'établir une connexion VPN.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Approuver l\'application',
    'Authorized' => 'Autorisée',
    'Authorized Applications' => 'Applications autorisées',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Certificats',
    'Change Password' => 'Modifier le mot de passe',
    'Client Lost' => 'Perte du client',
    //'Client-to-client' => '',
    'Configurations' => 'Configurations',
    'Confirm' => 'Confirmer',
    'Connected' => 'Connecté',


@@ 31,8 35,13 @@ return [
    'Created' => 'Créer',
    'Current Password' => 'Mot de passe actuel',
    'Current Password not correct!' => 'Le mot de passe actuel saisi n\'est pas correct !',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Date',
    'Date/Time' => 'Date/Heure',
    //'Default Gateway' => '',
    'Delete' => 'Supprimer',
    'Delete TOTP Secret' => 'Supprimer le secret TOTP',
    'Details...' => 'Détails…',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Déconnecté',
    'Distribution of unique users over the VPN applications.' => 'Répartition des utilisateurs uniques sur les applications VPN.',
    'Documentation' => 'Documentation',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Activer l\'utilisateur',
    'Enroll' => 'S\'inscrire',
    'Error' => 'Erreur',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Trouver l\'identifiant utilisateur ayant utilisé une adresse IPv4 ou IPv6 à une heure spécifique',
    'Here you can change the password for your account.' => 'Sur cette page vous pouvez modifier le mot de passe associé à votre compte.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Ici, vous pouvez vous inscrire à l\'authentification à deux facteurs (2FA) à l\'aide d\'un mot de passe unique basé sur le temps (TOTP).',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'Nombre maximal de connexions concurrentes',
    'Home' => 'Accueil',
    //'Hostname' => '',
    'IP Address' => 'Adresse IP',
    'IPs' => 'IP',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'Pour continuer, vous devez vous inscrire à l\'authentification à deux facteurs.',
    'Info' => 'Informations',
    //'Key Type' => '',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Journaux',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Gestion de l\'utilisateur <code>%userId%</code>',
    'Manual Configuration Download' => 'Téléchargement de la configuration manuelle',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'Créer manuellement et télécharger un fichier de configuration OpenVPN à utiliser dans votre client OpenVPN',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'Aucun compte utilisateur à afficher.',
    'Number of unique users of the VPN service over the last month.' => 'Nombre d\'utilisateurs uniques du service VPN au cours du dernier mois',
    'OTP' => 'OTP',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'N\'approuvez ceci que lorsque vous essayez d\'établir une connexion VPN avec cette application',
    'Password' => 'Mot de passe',
    'Permission(s)' => 'Permission(s)',
    'Please provide your TOTP.' => 'Veuillez saisir votre TOTP.',
    'Please sign in with your username and password.' => 'Veuillez saisir votre identifiant et votre mot de passe.',
    'Profile' => 'Profil',
    //'Profile Number' => '',
    'Profile Usage' => 'Utilisation du profil',
    'Profiles' => 'Profils',
    //'Protocols/Ports' => '',
    'QR' => 'QR',
    'Results' => 'Résultats',
    'Revoke' => 'Révoquer',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Scannez le code QR à l\'aide de votre application 2FA, ou importez le secret manuellement. Vérifiez la configuration en saisissant un mot de passe à usage unique (OTP) à 6 chiffres généré par l\'application ci-dessous.',
    'Search' => 'Rechercher',
    'Secret' => 'Secret',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Consulter <a href="documentation#2fa">documentation</a> pour plus d\'informations sur l\'authentification à deux facteurs et une liste d\'applications à utiliser',
    'Select a profile and choose a name, e.g. "Phone".' => 'Sélectionner un profil et choisir un libellé, par exemple : « Téléphone »',
    //'Server' => '',
    'Set' => 'Définir',
    'Sign In' => 'Se connecter',
    'Sign Out' => 'Déconnexion',
    'Stats' => 'Statistiques',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'Le champ <em>Date/Heure</em> accepte les dates au format <code>Y-m-d H:i:s</code>, par exemple <code>2019-01-01 08:00:00</code>',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'La clé OTP que vous avez saisie ne correspond pas à la valeur attendue pour ce secret OTP.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'Portail VPN',
    'VPN traffic over the last month.' => 'Trafic VPN au cours du dernier mois',
    'Verify' => 'Vérifier',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Bienvenue sur ce service VPN !',
    'Why is this necessary?' => 'Pourquoi est-ce nécessaire ?',
    'Yes' => 'Oui',


@@ 129,5 155,4 @@ return [
    'You cannot manage your own user account.' => 'Vous ne pouvez pas gérer votre propre compte utilisateur.',
    'Your ID is <code>%_two_factor_user_id%</code>.' => 'Votre identifiant est <code>%_two_factor_user_id%</code>.',
    'Your new configuration will expire on %expiryDate%. Come back here to obtain a new configuration after expiry!' => 'Votre nouvelle configuration expirera le  %expiryDate%. revenez ici pour obtenir une nouvelle configuration après expiration.',
    // [DELETED] 'IP address' => 'Adresse IP',
];

M locale/nb_NO.php => locale/nb_NO.php +26 -0
@@ 9,6 9,7 @@

return [
    '#Active Connections' => '#Aktive tilkoblinger',
    //'ACL Permission List' => '',
    'Account' => 'Konto',
    'Active' => 'Aktiv',
    'An application attempts to establish a VPN connection.' => 'En applikasjon prøver å koble til VPN.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Tillat applikasjon',
    'Authorized' => 'Autorisert',
    'Authorized Applications' => 'Autoriserte applikasjoner',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Sertifikater',
    'Change Password' => 'Passord',
    'Client Lost' => 'Klient forsvant',
    //'Client-to-client' => '',
    'Configurations' => 'Konfigurasjon',
    'Confirm' => 'Bekreft',
    'Connected' => 'Tilkoblet',


@@ 31,8 35,13 @@ return [
    'Created' => 'Opprettet',
    'Current Password' => 'Nåværende passord',
    'Current Password not correct!' => 'Nåværende passord stemmer ikke!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Dato',
    'Date/Time' => 'Dato/Tid',
    //'Default Gateway' => '',
    'Delete' => 'Slett',
    'Delete TOTP Secret' => 'Slett TOTP Hemmelighet',
    'Details...' => 'Detaljer…',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Frakoblet',
    'Distribution of unique users over the VPN applications.' => 'Distribusjon av unike brukere per VPN-applikasjon.',
    'Documentation' => 'Dokumentasjon',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Tillat bruker',
    'Enroll' => 'Ta i bruk',
    'Error' => 'Feil',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Finn brukeridentifikator knyttet til IPv4- eller IPv6-adressen på et bestemt tidspunkt.',
    'Here you can change the password for your account.' => 'Her kan du endre passordet til kontoen din.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Her kan du registrere deg for to-factor autentisering (2FA) med TOTP.',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'Høyest (Maksimum) # Antall Samtidige Tilkoblinger',
    'Home' => 'Hjem',
    //'Hostname' => '',
    'IP Address' => 'IP-adresse',
    'IPs' => 'IPer',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'For å fortsette må du først skru på tofaktor-autentisering!',
    'Info' => 'Informasjon',
    'Key Type' => 'Nøkkeltype',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Logg',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Styrer bruker <code>%userId%</code>.',
    'Manual Configuration Download' => 'Manuell konfigurasjon nedlasting',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'Generér en OpenVPN-konfigurasjonsfil for manuelt bruk i din OpenVPN-klient.',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'Ingen brukerkonto å vise.',
    'Number of unique users of the VPN service over the last month.' => 'Antall VPN-brukere i den siste måneden.',
    'OTP' => 'Engangspassord',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'Kun tillat dette dersom du ønsker å koble til VPN med denne applikasjonen!',
    'Password' => 'Passord',
    'Permission(s)' => 'Tillatelse(r)',
    'Please provide your TOTP.' => 'Fyll ut TOTP-koden din.',
    'Please sign in with your username and password.' => 'Logg inn med ditt brukernavn og passord.',
    'Profile' => 'Profil',
    //'Profile Number' => '',
    'Profile Usage' => 'Profilbruk',
    'Profiles' => 'Profiler',
    //'Protocols/Ports' => '',
    'QR' => 'QR',
    'Results' => 'Resultater',
    'Revoke' => 'Tilbakekall',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Scan QR-koden med en 2FA-applikasjon, eller importer nøkkelen for hand. Bekreft konfigurasjonen med den 6-sifrete koden som er generert av 2FA-applikasjonen.',
    'Search' => 'Søk',
    'Secret' => 'Nøkkel',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Les <a href="documentation#2fa">dokumentasjonen</a> for mer informasjon om 2FA og ei liste over applikasjoner du kan bruke.',
    'Select a profile and choose a name, e.g. "Phone".' => 'Velg et profil og velg et navn, f.eks "Telefon".',
    //'Server' => '',
    'Set' => 'Ta i bruk',
    'Sign In' => 'Logg inn',
    'Sign Out' => 'Logg ut',
    'Stats' => 'Statistikk',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => '<em>Dato/Tid</em>-feltet tar datoformat <code>Y-m-d H:i:s</code>, f.eks. <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'OTP-koden du brukte stemmer ikke overens med OTP-hemmeligheten.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'VPN-Portal',
    'VPN traffic over the last month.' => 'VPN-trafikk i den siste måneden.',
    'Verify' => 'Verifiser',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Velkommen til VPN-tjenesten!',
    'Why is this necessary?' => 'Hvor er dette nødvendig?',
    'Yes' => 'Ja',

M locale/nl_NL.php => locale/nl_NL.php +3 -1
@@ 20,6 20,7 @@ return [
    'Authorized' => 'Geautoriseerd',
    'Authorized Applications' => 'Geautoriseerde applicaties',
    'Block LAN' => 'Blokkeer LAN',
    'CA' => 'CA',
    'Certificates' => 'Certificaten',
    'Change Password' => 'Wijzig wachtwoord',
    'Client Lost' => 'Client kwijtgeraakt',


@@ 115,13 116,13 @@ return [
    'Secret' => 'Sleutel',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Zie de <a href="documentation#2fa">documentation</a> voor meer informatie over 2FA en een lijst met applicaties die gebruikt kunnen worden.',
    'Select a profile and choose a name, e.g. "Phone".' => 'Selecteer een profiel en kies een naam, bijvoorbeeld "Telefoon"',
    'Server' => 'Server',
    'Set' => 'Instellen',
    'Sign In' => 'Inloggen',
    'Sign Out' => 'Uitloggen',
    'Stats' => 'Statistieken',
    'Summary' => 'Samenvatting',
    'TLS >= 1.3' => 'TLS >= 1.3',
    'TLS Protection' => 'TLS-bescherming',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'Het <em>Datum/tijd</em> veld accepteert datums in het formaat <code>Y-m-d H:i:s</code>, bijvoorbeeld <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'De OTP-code die je invoerde komt niet overeen met de verwachtte waarde voor deze OTP-sleutel.',


@@ 146,6 147,7 @@ return [
    'VPN Portal' => 'VPN Portal',
    'VPN traffic over the last month.' => 'VPN-verkeer in de laatste maand.',
    'Verify' => 'Verifiëren',
    'Version' => 'Versie',
    'Welcome to this VPN service!' => 'Welkom bij deze VPN-dienst!',
    'Why is this necessary?' => 'Waarom is dit nodig?',
    'Yes' => 'Ja',

M locale/pl_PL.php => locale/pl_PL.php +26 -0
@@ 9,6 9,7 @@

return [
    '#Active Connections' => 'Liczba aktywnych połączeń',
    //'ACL Permission List' => '',
    'Account' => 'Konto',
    'Active' => 'Aktywny',
    'An application attempts to establish a VPN connection.' => 'Aplikacja próbuje zestawić połączenie VPN.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Zaakceptuj aplikację',
    'Authorized' => 'Zautoryzowano',
    'Authorized Applications' => 'Zautoryzowane aplikacje',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Certyfikaty',
    'Change Password' => 'Zmień hasło',
    'Client Lost' => 'Klient utracił połączenie',
    //'Client-to-client' => '',
    'Configurations' => 'Konfiguracje',
    'Confirm' => 'Potwierdź',
    'Connected' => 'Połączony',


@@ 31,8 35,13 @@ return [
    'Created' => 'Utworzony',
    'Current Password' => 'Aktualne hasło',
    'Current Password not correct!' => 'Aktualne hasło jest nieprawidłowe!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Data',
    'Date/Time' => 'Data/Czas',
    //'Default Gateway' => '',
    'Delete' => 'Skasuj',
    'Delete TOTP Secret' => 'Skasuj sekrety TOTP',
    'Details...' => 'Szczegóły...',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Rozłączono',
    'Distribution of unique users over the VPN applications.' => 'Rozkład statystyczny aplikacji używanych przez użytkowników',
    'Documentation' => 'Dokumentacja',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Odblokuj konto',
    'Enroll' => 'Aktywuj',
    'Error' => 'Błąd',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Wyszukiwanie użytkownika, który używał adresu IPv4 lub IPv6 w danym momencie.',
    'Here you can change the password for your account.' => 'Poniższy formularz umożliwia zmianę hasła.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Poniżej możesz aktywować uwierzytelnianie dwuskładnikowe (2FA) na bazie haseł jednorazowych TOTP',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'Maksymalna liczba jednoczesnych połączeń',
    'Home' => 'Strona główna',
    //'Hostname' => '',
    'IP Address' => 'Adres IP',
    'IPs' => 'IP',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'Aby kontynuować trzeba najpierw aktywować uwierzytelnianie dwuskładnikowe (2FA)!',
    'Info' => 'Informacje',
    //'Key Type' => '',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Log',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Zarządzanie użytkownikiem <code>%userId%</code>.',
    'Manual Configuration Download' => 'Ręcznie pobierane konfiguracje',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'Ręcznie stwórz i pobierz plik konfiguracyjny klienta OpenVPN.',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'Brak użytkowników.',
    'Number of unique users of the VPN service over the last month.' => 'Liczba unikalnych użytkowników usługi VPN w ciągu ostatniego miesiąca.',
    'OTP' => 'OTP',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'Zaakceptuj tylko wtedy, gdy jesteś pewien, że zestawiasz połączenie VPN za pomocą tej aplikacji!',
    'Password' => 'Hasło',
    'Permission(s)' => 'Uprawnienia',
    'Please provide your TOTP.' => 'Proszę podać kod TOTP.',
    'Please sign in with your username and password.' => 'Proszę zalogować się za pomocą nazwy użytkownika i hasła.',
    'Profile' => 'Profil',
    //'Profile Number' => '',
    'Profile Usage' => 'Statystyka użycia profili',
    'Profiles' => 'Profile',
    //'Protocols/Ports' => '',
    'QR' => 'Kod QR',
    'Results' => 'Wyniki',
    'Revoke' => 'Unieważnij',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Zeskanuj kod QR za pomocą aplikacji do uwierzytelniania 2FA lub wprowadź sekret ręcznie. Potwierdź prawidłowość konfiguracji przez wprowadzenie 6 cyfr hasła jednorazowego wygenerowanego przez aplikację.',
    'Search' => 'Szukaj',
    'Secret' => 'Sekret',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Więcej informacji o uwierzytelnianiu dwuskładnikowym i listę aplikacji do wykorzystania można znaleźć w <a href="documentation#2fa">dokumentacji</a>.',
    'Select a profile and choose a name, e.g. "Phone".' => 'Wybierz profil i ustal nazwę, np. "Telefon".',
    //'Server' => '',
    'Set' => 'Ustaw',
    'Sign In' => 'Logowanie',
    'Sign Out' => 'Wyloguj',
    'Stats' => 'Statystyki',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'Pole daty akceptuje daty w formacie <code>Y-m-d H:i:s</code>, np. <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'Podany kod OTP nie pasuje do zdefiniowanego sekretu.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'Portal VPN',
    'VPN traffic over the last month.' => 'Ruch sieciowy w ostatnim miesiącu.',
    'Verify' => 'Zweryfikuj',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Witamy w usłudze VPN!',
    'Why is this necessary?' => 'Dlaczego jest to konieczne?',
    'Yes' => 'Tak',

M locale/pt_PT.php => locale/pt_PT.php +26 -0
@@ 9,6 9,7 @@

return [
    '#Active Connections' => '# Ligações ativas',
    //'ACL Permission List' => '',
    'Account' => 'Conta',
    'Active' => 'Ativo',
    'An application attempts to establish a VPN connection.' => 'Uma aplicação está a tentar estabelecer uma ligação VPN.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Aprovar aplicação',
    'Authorized' => 'Autorizada',
    'Authorized Applications' => 'Aplicações autorizadas',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Certificados',
    'Change Password' => 'Alterar palavra-passe',
    'Client Lost' => 'Cliente perdido',
    //'Client-to-client' => '',
    'Configurations' => 'Configurações',
    'Confirm' => 'Confirme',
    'Connected' => 'Ligado',


@@ 31,8 35,13 @@ return [
    'Created' => 'Criado',
    'Current Password' => 'Palavra-passe atual',
    'Current Password not correct!' => 'Palavra-passe atual incorreta!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Data',
    'Date/Time' => 'Data/Hora',
    //'Default Gateway' => '',
    'Delete' => 'Apagar',
    'Delete TOTP Secret' => 'Apagar o segredo TOTP',
    'Details...' => 'Detalhes...',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Desligado',
    'Distribution of unique users over the VPN applications.' => 'Distribuição de utilizadores únicos pelas aplicações VPN',
    'Documentation' => 'Documentação',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Ativar utilizador',
    'Enroll' => 'Registar',
    'Error' => 'Erro',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Encontrar o identificador do utilizador que usou um endereço IPv4 ou IPv6 num determinado momento.',
    'Here you can change the password for your account.' => 'Aqui pode mudar a palavra-passe da sua conta',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Aqui pode registar-se para autenticação de dois fatores (2FA) usando uma palavra-passe de uso único baseada no tempo (TOTP)',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => '# Máximo de ligações simultâneas',
    'Home' => 'Início',
    //'Hostname' => '',
    'IP Address' => 'Endereço IP',
    'IPs' => 'IP',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'Para continuar, primeiro tem de ativar a autenticação de dois fatores!',
    'Info' => 'Informações',
    'Key Type' => 'Tipo de chave',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Log',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Gestão do utilizador <code>%userId%</code>.',
    'Manual Configuration Download' => 'Descarregar configuração manual',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'Crie e descarregue manualmente um ficheiro de configuração para usar no seu cliente OpenVPN.',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'Não existe(m) conta(s) de utilizador',
    'Number of unique users of the VPN service over the last month.' => 'Número de utilizadores únicos do serviço VPN no último mês.',
    'OTP' => 'OTP',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'Aprovar apenas se estiver a tentar estabelecer uma ligação VPN com esta aplicação.',
    'Password' => 'Palavra-passe',
    'Permission(s)' => 'Autorizações',
    'Please provide your TOTP.' => 'Por favor forneça seu TOTP',
    'Please sign in with your username and password.' => 'Por favor autentique-se com o seu nome de utilizador e palavra-passe.',
    'Profile' => 'Perfil',
    //'Profile Number' => '',
    'Profile Usage' => 'Utilização de perfis',
    'Profiles' => 'Perfis',
    //'Protocols/Ports' => '',
    'QR' => 'QR',
    'Results' => 'Resultados',
    'Revoke' => 'Revogar',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Digitalize o código QR usando a aplicação 2FA ou importe o segredo manualmente. Confirme a configuração bem-sucedida inserindo um OTP de 6 dígitos gerado pela aplicação abaixo.',
    'Search' => 'Procurar',
    'Secret' => 'Segredo',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Consulte a <a href="documentation#2fa">documentação</a> para obter mais informações sobre 2FA e uma lista de aplicações compatíveis.',
    'Select a profile and choose a name, e.g. "Phone".' => 'Selecione um perfil e escolha um nome, como por exemplo "Telemóvel".',
    //'Server' => '',
    'Set' => 'Gravar',
    'Sign In' => 'Entrar',
    'Sign Out' => 'Saír',
    'Stats' => 'Estatísticas',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'O campo <em>Data/Hora</em> aceita datas com o formato <code>Y-m-d H:m:s</code>, p.ex. <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'A chave OTP introduzida não corresponde a este segredo OTP',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'Portal VPN',
    'VPN traffic over the last month.' => 'Tráfego VPN do último mês',
    'Verify' => 'Verifique',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Bem-vindo a este serviço VPN!',
    'Why is this necessary?' => 'Porque é isto necessário?',
    'Yes' => 'Sim',

M locale/uk_UA.php => locale/uk_UA.php +26 -1
@@ 9,6 9,7 @@

return [
    '#Active Connections' => 'Активні з’єднання.',
    //'ACL Permission List' => '',
    'Account' => 'Акаунт',
    'Active' => 'Активний',
    'An application attempts to establish a VPN connection.' => 'Програма намагається встановити VPN-з’єднання.',


@@ 18,9 19,12 @@ return [
    'Approve Application' => 'Підтвердити додаток',
    'Authorized' => 'Авторизовати',
    'Authorized Applications' => 'Авторизовати додаток',
    //'Block LAN' => '',
    //'CA' => '',
    'Certificates' => 'Сертифікати',
    'Change Password' => 'Змінити пароль',
    'Client Lost' => 'Втрачено клієнта',
    //'Client-to-client' => '',
    'Configurations' => 'Конфігурації',
    'Confirm' => 'Підтвердити',
    'Connected' => 'Підключено',


@@ 31,8 35,13 @@ return [
    'Created' => 'Створено',
    'Current Password' => 'Актуальний пароль',
    'Current Password not correct!' => 'Актуальний пароль не коректний!',
    //'DNS Domain' => '',
    //'DNS Search Domain(s)' => '',
    //'DNS Server(s)' => '',
    //'DNS Suffix' => '',
    'Date' => 'Дата',
    'Date/Time' => 'Дата/Час',
    //'Default Gateway' => '',
    'Delete' => 'Видалити',
    'Delete TOTP Secret' => 'Видалити секретний TOTP',
    'Details...' => 'Деталі...',


@@ 41,6 50,8 @@ return [
    'Disconnected' => 'Роз’єднано',
    'Distribution of unique users over the VPN applications.' => 'Розподіл унікальних користувачів через додатки VPN',
    'Documentation' => 'Документація',
    //'Enable ACL' => '',
    //'Enable Log' => '',
    'Enable User' => 'Активувати користувача',
    'Enroll' => 'Активувати',
    'Error' => 'Помилка',


@@ 50,14 61,21 @@ return [
    'Find the user identifier that used an IPv4 or IPv6 address at a particular point in time.' => 'Знайти ідентифікатор користувача який використовує IPv4 або IPv6 адресу в конкретний проміжок часу.',
    'Here you can change the password for your account.' => 'Тут ви можете змінити пароль для вашого акаунта.',
    'Here you can enroll for two-factor authentication (2FA) using a Time-based One-time Password (TOTP).' => 'Тут ви можете актививати двофакторну автентификацію (2FA) використовуючи одноразовий пароль TOTP',
    //'Hide Profile' => '',
    'Highest (Maximum) # Concurrent Connections' => 'Максимальна кількість # одночасних з’єднань',
    'Home' => 'Додому',
    //'Hostname' => '',
    'IP Address' => 'IP Адреса',
    'IPs' => 'IP',
    //'IPv4 Prefix' => '',
    //'IPv6 Prefix' => '',
    'In order to continue, you must first enroll for Two-factor authentication!' => 'Щоб продовжити, спершу потрібно активувати двофакторну автентифікацію!',
    'Info' => 'Інформація',
    //'Key Type' => '',
    //'Legacy' => '',
    //'Listen IP' => '',
    'Log' => 'Лог',
    //'Management IP' => '',
    'Managing user <code>%userId%</code>.' => 'Керування користувачем',
    'Manual Configuration Download' => 'Завантажити конфігурацію вручну',
    'Manually create and download an OpenVPN configuration file for use in your OpenVPN client.' => 'Створіть та завантажте файл конфігурації OpenVPN вручну для використання у вашому клієнті OpenVPN.',


@@ 78,26 96,33 @@ return [
    'No user account(s) to show.' => 'Немає облікових записів користувачів для показу',
    'Number of unique users of the VPN service over the last month.' => 'Кількість унікальних користувачів послуги VPN за останній місяць.',
    'OTP' => 'OTP',
    //'Offered Protocols/Ports' => '',
    'Only approve this when you are trying to establish a VPN connection with this application!' => 'Підтвердьте це лише тоді, коли ви намагаєтесь встановити VPN-з’єднання за допомогою цієї програмою!',
    'Password' => 'Пароль',
    'Permission(s)' => 'Дозволи',
    'Please provide your TOTP.' => 'Будь ласка, надайте свій TOTP.',
    'Please sign in with your username and password.' => 'Будь ласка, увійдіть, використовуючи своє ім’я користувача та пароль.',
    'Profile' => 'Профайл',
    //'Profile Number' => '',
    'Profile Usage' => 'Використання профайлу',
    'Profiles' => 'Профайли',
    //'Protocols/Ports' => '',
    'QR' => 'Код QR',
    'Results' => 'Результат',
    'Revoke' => 'Відкликати',
    //'Route(s)' => '',
    'Scan the QR code using your 2FA application, or import the secret manually. Confirm the successful configuration by entering a 6 digit OTP generated by the application below.' => 'Відскануйте QR-код за допомогою додатка 2FA або імпортуйте секретний код вручну. Підтвердьте успішну конфігурацію, ввівши 6-значний OTP, створений додатком нижче.',
    'Search' => 'Пошук',
    'Secret' => 'Секретний код',
    'See the <a href="documentation#2fa">documentation</a> for more information on 2FA and a list of applications to use.' => 'Більше інформації про двофакторну автентифікацію та перелік програм, які потрібно використовувати, можна знайти в <a href="documentation#2fa">документації</a>.',
    'Select a profile and choose a name, e.g. "Phone".' => 'Виберіть профіль і оберіть ім’я, напр. "Телефон".',
    //'Server' => '',
    'Set' => 'Установки',
    'Sign In' => 'Увійти',
    'Sign Out' => 'Вийти',
    'Stats' => 'Ститистика',
    //'Summary' => '',
    //'TLS >= 1.3' => '',
    'TOTP' => 'TOTP',
    'The <em>Date/Time</em> field accepts dates of the format <code>Y-m-d H:i:s</code>, e.g. <code>2019-01-01 08:00:00</code>.' => 'Поле <em>Дата/Час</em> приймає дані у форматі <code>Рік-місяць-день г:хв:сек</code>, e.g. <code>2019-01-01 08:00:00</code>.',
    'The OTP key you entered does not match the expected value for this OTP secret.' => 'Введений вами ключ OTP не відповідає очікуваному значенню для цього коду OTP.',


@@ 122,6 147,7 @@ return [
    'VPN Portal' => 'VPN портал',
    'VPN traffic over the last month.' => 'VPN трафік за останній місяць.',
    'Verify' => 'Перевірити',
    //'Version' => '',
    'Welcome to this VPN service!' => 'Ласкаво просимо до нашої послуги VPN!',
    'Why is this necessary?' => 'Чому це потрібно?',
    'Yes' => 'Так',


@@ 129,5 155,4 @@ return [
    'You cannot manage your own user account.' => 'Ви не можете керувати власним обліковим записом користувача.',
    'Your ID is <code>%_two_factor_user_id%</code>.' => 'Ваш ідентифікатор <code>%_two_factor_user_id%</code>.',
    'Your new configuration will expire on %expiryDate%. Come back here to obtain a new configuration after expiry!' => 'Срок дії вашої нової конфігурації сплине %expiryDate%. Поверніться сюди, щоб отримати нову конфігурацію після закінчення терміну дії!',
    // [DELETED] 'IP address' => 'IP адреса',
];

M views/base.php => views/base.php +0 -3
@@ 27,9 27,6 @@
<?php if ($this->exists('customFooter')) : ?>
    <?=$this->insert('customFooter'); ?>
<?php endif; ?>
<?php if ($isAdmin): ?>
    <p>v<?=$this->e($portalVersion); ?></p>
<?php endif; ?>
    </footer>
</body>
</html>

M views/vpnAdminInfo.php => views/vpnAdminInfo.php +18 -4
@@ 1,11 1,25 @@
<?php $this->layout('base', ['activeItem' => 'info', 'pageTitle' => $this->t('Info')]); ?>
<?php $this->start('content'); ?>
    <h2>CA</h2>
    <h2><?=$this->t('Server');?></h2>
    <table class="tbl">
        <tbody>
            <tr><th><?=$this->t('Created'); ?> (<?=$this->e(date('T')); ?>)</th><td><?=$this->d($caInfo['valid_from']); ?></td></tr>
            <tr><th><?=$this->t('Expires'); ?> (<?=$this->e(date('T')); ?>)</th><td><?=$this->d($caInfo['valid_to']); ?></td></tr>
            <tr><th><?=$this->t('Key Type'); ?></th><td><?=$this->e($caInfo['ca_key_type']); ?></td></tr>
            <tr>
                <th><?=$this->t('Version');?></th>
                <td>v<?=$this->e($portalVersion); ?></td>
            </tr>
            <tr>
                <th><?=$this->t('CA');?></th>
                <td>
                    <dl>
                        <dt><?=$this->t('Created'); ?> (<?=$this->e(date('T')); ?>)</dt><dd><?=$this->d($caInfo['valid_from']); ?></dd>
                        <dt><?=$this->t('Expires'); ?> (<?=$this->e(date('T')); ?>)</dt><dd><?=$this->d($caInfo['valid_to']); ?></dd>
                    </dl>
                </td>
            </tr>
            <tr>
                <th><?=$this->t('Key Type'); ?></th>
                <td><?=$this->e($caInfo['ca_key_type']); ?></td>
            </tr>
        </tbody>
    </table>
    <h2><?=$this->t('Profiles'); ?></h2>

M web/css/screen.css => web/css/screen.css +11 -0
@@ 247,6 247,7 @@ ul li, ol li {

table.tbl th {
  text-align: start;
  vertical-align: top;
}

table.tbl td.text-right {


@@ 261,6 262,16 @@ table.tbl ul {
  padding: 0 0 0 1em;
}

table.tbl dl, table.tbl dt {
    margin: 0;
    padding: 0;
}

table.tbl dd {
    margin-top: 0.5em;
    margin-bottom: 0.5em;
}

table.tbl form.frm {
  margin: 0;
}