From 68095700a2eb6b79cce6677df7a9d07085e3c02b Mon Sep 17 00:00:00 2001 From: ronoaer Date: Thu, 28 Sep 2023 23:21:13 +0800 Subject: [PATCH 01/15] added i18n for v4 --- client/CMakeLists.txt | 22 +- client/amnezia_application.cpp | 20 +- client/main.cpp | 2 +- client/translations/amneziavpn_ru.ts | 2969 ++++++++--------------- client/translations/amneziavpn_zh_CN.ts | 2666 ++++++++++++++++++++ client/ui/models/languageModel.cpp | 19 +- client/ui/models/languageModel.h | 5 +- 7 files changed, 3729 insertions(+), 1974 deletions(-) create mode 100644 client/translations/amneziavpn_zh_CN.ts diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 63810ed3..f149e204 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -50,10 +50,30 @@ endif() qt6_add_resources(QRC ${QRC} ${CMAKE_CURRENT_LIST_DIR}/resources.qrc) -qt6_add_translations(${PROJECT} TS_FILES +set(AMNEZIAVPN_TR_FILES ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ru.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_zh_CN.ts ) +file(GLOB_RECURSE AMNEZIAVPN_TR_SOURCES *.qrc *.cpp *.h *.ui) +if ( BUILD_TRANSLATIONS ) + qt_create_translation(AMNEZIAVPN_MESSAGES ${AMNEZIAVPN_TR_SOURCES} ${AMNEZIAVPN_TR_FILES}) + qt_add_translation(AMNEZIAVPN_QM_FILES ${AMNEZIAVPN_TR_FILES}) + add_custom_target(amnezia_messages DEPENDS ${AMNEZIAVPN_MESSAGES}) + add_custom_target(amnezia_translations DEPENDS ${AMNEZIAVPN_QM_FILES} amnezia_messages) + add_dependencies(${PROJECT} amnezia_translations) + + if (BUILD_TRANSLATIONS_AS_RESOURCES) + set(QM_FILE_LIST "") + foreach(FILE ${AMNEZIAVPN_QM_FILES}) + list(APPEND QM_FILE_LIST "${FILE}") + endforeach() + string(REPLACE ";" "" QM_FILE_LIST ${QM_FILE_LIST}) + configure_file(${CMAKE_CURRENT_LIST_DIR}/translations/translations.qrc ${CMAKE_CURRENT_LIST_DIR}/translations.qrc) + target_sources(${PROJECT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/translations.qrc) + endif() +endif( BUILD_TRANSLATIONS ) + if(IOS) #execute_process(COMMAND bash ${CMAKE_CURRENT_LIST_DIR}/scripts/run-build-cloak.sh) execute_process(COMMAND bash ${CMAKE_CURRENT_LIST_DIR}/ios/scripts/openvpn.sh args diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 23157468..d87f326e 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -221,27 +221,21 @@ void AmneziaApplication::loadTranslator() { auto locale = m_settings->getAppLanguage(); m_translator.reset(new QTranslator()); - if (locale != QLocale::English) { - if (m_translator->load(locale, QString("amneziavpn"), QLatin1String("_"), QLatin1String(":/i18n"))) { - if (QCoreApplication::installTranslator(m_translator.get())) { - m_settings->setAppLanguage(locale); - } - } - } + updateTranslator(locale); } + void AmneziaApplication::updateTranslator(const QLocale &locale) { QResource::registerResource(":/translations.qrc"); - if (!m_translator->isEmpty()) + if (!m_translator->isEmpty()) { QCoreApplication::removeTranslator(m_translator.get()); - - if (locale == QLocale::English) { - m_settings->setAppLanguage(locale); - m_engine->retranslate(); } - if (m_translator->load(locale, QString("amneziavpn"), QLatin1String("_"), QLatin1String(":/i18n"))) { + m_settings->setAppLanguage(locale); + + QString strFileName = QString("amneziavpn")+QLatin1String("_")+locale.name()+".qm"; + if (m_translator->load(strFileName, "../../../")) { if (QCoreApplication::installTranslator(m_translator.get())) { m_settings->setAppLanguage(locale); } diff --git a/client/main.cpp b/client/main.cpp index e78a74ff..53c3238f 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -53,13 +53,13 @@ int main(int argc, char *argv[]) app.setOrganizationName(ORGANIZATION_NAME); app.setApplicationDisplayName(APPLICATION_NAME); - app.loadTranslator(); app.loadFonts(); bool doExec = app.parseCommands(); if (doExec) { app.init(); + app.loadTranslator(); qInfo().noquote() << QString("Started %1 version %2").arg(APPLICATION_NAME, APP_VERSION); qInfo().noquote() << QString("%1 (%2)").arg(QSysInfo::prettyProductName(), QSysInfo::currentCpuArchitecture()); diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index f338216b..e6c60a33 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -2,138 +2,65 @@ - AdvancedServerSettingsLogic + AmneziaApplication - - - Clear server from Amnezia software - - - - - Service: - - - - - Uninstalling Amnezia software... - - - - - Error occurred while cleaning the server. - - - - - - Error message: - - - - - - See logs for details. - - - - - Amnezia server successfully uninstalled - - - - - Error occurred while scanning the server. - - - - - All containers installed on the server are added to the GUI - - - - - No installed containers found on the server + + Split tunneling for WireGuard is not implemented, the option was disabled - AppSettingsLogic + AndroidController - - Software version + + AmneziaVPN - - Save log - - - - - Open backup - - - - - Can't import config, file is corrupted. - - - - - ClientInfoLogic - - - Service: - - - - - ClientManagementLogic - - - Service: - - - - - An error occurred while getting the list of clients. + + VPN Connected + Refers to the app - which is currently running the background and waiting ConnectionController - + VPN Protocols is not installed. Please install VPN container at first - + Connection... - - Disconnect + + Connected - + + Settings updated successfully, Reconnnection... + + + + Reconnection... - - - - + + + + Connect - + Disconnection... @@ -157,24 +84,24 @@ - ContextMenu + ContextMenuType - + C&ut - + &Copy - + &Paste - + &SelectAll @@ -182,70 +109,106 @@ ExportController - + Access error! + + + HomeContainersListView - - Save AmneziaVPN config + + The selected protocol is not supported on the current platform + + + + + Reconnect via VPN Procotol: ImportController - - Open config file + + Scanned %1 of %2. InstallController - - + + installed successfully. - - + + is already installed on the server. - - + + Already installed containers were found on the server. All installed containers have been added to the application - + + Settings updated successfully + + + + Server ' - + ' was removed - + All containers from server ' - + has been removed from the server ' - + Please login as the user + + + Server added successfully + + + + + KeyChainClass + + + Read key failed: %1 + + + + + Write key failed: %1 + + + + + Delete key failed: %1 + + NotificationHandler @@ -276,742 +239,57 @@ Already installed containers were found on the server. All installed containers - - PageAbout - - - About Amnezia - - - - - AmneziaVPN is opensource software, it's free forever. Our goal is to make the best VPN client in the world. -<ul> -<li>Sources on <a href="https://github.com/amnezia-vpn/desktop-client">GitHub</a></li> -<li><a href="https://amnezia.org/">Web Site</a></li> -<li><a href="https://t.me/amnezia_vpn_en">Telegram group</a></li> -<li><a href="https://signal.group/#CjQKIB2gUf8QH_IXnOJMGQWMDjYz9cNfmRQipGWLFiIgc4MwEhAKBONrSiWHvoUFbbD0xwdh">Signal group</a></li> -</ul> - - - - - - Support - - - - - Have questions? You can get support by: -<ul> -<li><a href="https://t.me/amnezia_vpn_en">Telegram group</a> (preferred way)</li> -<li>Create issue on <a href="https://github.com/amnezia-vpn/desktop-client/issues">GitHub</a></li> -<li>Email to: <a href="support@amnezia.org">support@amnezia.org</a></li> -</ul> - - - - - Donate - - - - - Please support Amnezia project by donation, we really need it now more than ever. -<ul> -<li>By credit card on <a href="https://www.patreon.com/amneziavpn">Patreon</a> (starting from $1)</li> -<li>Send some coins to addresses listed <a href="https://github.com/amnezia-vpn/desktop-client/blob/master/README.md">on GitHub page</a></li> -</ul> - - - - - - PageAdvancedServerSettings - - - Advanced server settings - - - - - Clients Management - - - - - PageAppSetting - - - Application Settings - - - - - Auto connect - - - - - Auto start - - - - - Start minimized - - - - - Check for updates - - - - - Keep logs - - - - - Open logs folder - - - - - Export logs - - - - - Clear logs - - - - - Cleared - - - - - Backup and restore configuration - - - - - Backup app config - - - - - Restore app config - - - - - PageClientInfoOpenVPN - - - Client Info - - - - - Client name - - - - - Certificate id - - - - - Certificate - - - - - Revoke Certificate - - - - - PageClientInfoWireGuard - - - Client Info - - - - - Client name - - - - - Public Key - - - - - Revoke Key - - - - - PageClientManagement - - - Clients Management - - - PageDeinstalling - + Removing services from - + Usually it takes no more than 5 minutes - - PageGeneralSettings - - - App settings - - - - - Network settings - - - - - Server Settings - - - - - Share connection - - - - - Servers - - - - - Add server - - - - - Exit - - - PageHome - + VPN protocol - + Servers - - PageNetworkSetting - - - DNS Servers - - - - - Use AmneziaDNS service (recommended) - - - - - Use AmneziaDNS container on your server, when it installed. - -Your AmneziaDNS server available only when it installed and VPN connected, it has internal IP address 172.29.172.254 - -If AmneziaDNS service is not installed on the same server, or this option is unchecked, the following DNS servers will be used: - - - - - Primary DNS server - - - - - - Reset to default - - - - - Secondary DNS server - - - - - PageNewServer - - - Setup your server to use VPN - - - - - If you want easily configure your server just run Wizard - - - - - Run Setup Wizard - - - - - Press configure manually to choose VPN protocols you want to install - - - - - Configure - - - - - PageNewServerProtocols - - - Select VPN protocols - - - - - Setup server - - - - - Select protocol container - - - - - Port - - - - - Network Protocol - - - - - udp - - - - - tcp - - - - - PageProtoCloak - - - Cloak Settings - - - - - Cipher - - - - - chacha20-poly1305 - - - - - aes-256-gcm - - - - - aes-192-gcm - - - - - aes-128-gcm - - - - - Fake Web Site - - - - - Port - - - - - Save and restart VPN - - - - - Cancel - - - - - PageProtoOpenVPN - - - OpenVPN Settings - - - - - VPN Addresses Subnet - - - - - Network protocol - - - - - TCP - - - - - UDP - - - - - Port - - - - - Auto-negotiate encryption - - - - - Cipher - - - - - AES-256-GCM - - - - - AES-192-GCM - - - - - AES-128-GCM - - - - - AES-256-CBC - - - - - AES-192-CBC - - - - - AES-128-CBC - - - - - ChaCha20-Poly1305 - - - - - ARIA-256-CBC - - - - - CAMELLIA-256-CBC - - - - - none - - - - - Hash - - - - - SHA512 - - - - - SHA384 - - - - - SHA256 - - - - - SHA3-512 - - - - - SHA3-384 - - - - - SHA3-256 - - - - - whirlpool - - - - - BLAKE2b512 - - - - - BLAKE2s256 - - - - - SHA1 - - - - - Enable TLS auth - - - - - Block DNS requests outside of VPN - - - - - Additional client config commands → - - - - - Additional server config commands → - - - - - Save and restart VPN - - - - - Cancel - - - - - PageProtoSftp - - - SFTP settings - - - - - Port - - - - - User Name - - - - - Password - - - - - Restore drive when client starts - - - - - Mount drive - - - - - PageProtoShadowSocks - - - ShadowSocks Settings - - - - - Cipher - - - - - chacha20-ietf-poly1305 - - - - - xchacha20-ietf-poly1305 - - - - - aes-256-gcm - - - - - aes-192-gcm - - - - - aes-128-gcm - - - - - Port - - - - - Save and restart VPN - - - - - Cancel - - - - - PageProtoTorWebSite - - - Tor Web Site settings - - - - - Web site onion address - - - - - Notes:<ul> -<li>Use <a href="https://www.torproject.org/download/">Tor Browser</a> to open this url.</li> -<li>After installation it takes several minutes while your onion site will become available in the Tor Network.</li> -<li>When configuring WordPress set the domain as this onion address.</li> -</ul> - - - - - - PageProtoWireGuard - - - WireGuard Settings - - - PageProtocolCloakSettings - - Settings updated successfully - - - - + Cloak settings - + Disguised as traffic from - + Port + - Cipher - + Save and Restart Amnezia @@ -1019,195 +297,195 @@ If AmneziaDNS service is not installed on the same server, or this option is unc PageProtocolOpenVpnSettings - - Settings updated successfully - - - - + OpenVPN settings - + VPN Addresses Subnet - + Network protocol - + Port - + Auto-negotiate encryption - - + + Hash - + SHA512 - + SHA384 - + SHA256 - + SHA3-512 - + SHA3-384 - + SHA3-256 - + whirlpool - + BLAKE2b512 - + BLAKE2s256 - + SHA1 - - + + Cipher - + AES-256-GCM - + AES-192-GCM - + AES-128-GCM - + AES-256-CBC - + AES-192-CBC - + AES-128-CBC - + ChaCha20-Poly1305 - + ARIA-256-CBC - + CAMELLIA-256-CBC - + none - + TLS auth - + Block DNS requests outside of VPN - + Additional client configuration commands - - + + Commands: - + Additional server configuration commands - + Remove OpenVPN - + Remove OpenVpn from server? - + + All users with whom you shared a connection will no longer be able to connect to it + + + + Continue Продолжить - + Cancel - + Save and Restart Amnezia @@ -1242,11 +520,16 @@ If AmneziaDNS service is not installed on the same server, or this option is unc + All users with whom you shared a connection will no longer be able to connect to it + + + + Continue Продолжить - + Cancel @@ -1254,177 +537,96 @@ If AmneziaDNS service is not installed on the same server, or this option is unc PageProtocolShadowSocksSettings - - Settings updated successfully - - - - + ShadowSocks settings - + Port - - + + Cipher - + Save and Restart Amnezia - - PageQrDecoderIos - - - Import configuration - - - - - PageServerConfiguringProgress - - - Configuring... - - - - - Please wait. - - - - - Cancel - - - PageServerContainers - - - Install new service + Continue + Продолжить + + + + PageServiceDnsSettings + + + A DNS service is installed on your server, and it is only accessible via VPN. + - - Installed services + + The DNS address is the same as the address of your server. You can configure DNS in the settings, under the connections tab. - - Default + + + Remove - - Port + + from server? - - Network Protocol - - - - - udp - - - - - tcp - - - - - Cancel - - - - + Continue Продолжить - - Installed Protocols and Services - - - - - Remove container - - - - - This action will erase all data of this container on the server. - - - - - PageServerList - - - Servers - - - - - PageServerSettings - - - Server settings - - - - - Protocols and Services - - - - - Share Server (FULL ACCESS) - - - - - Advanced server settings - - - - - Forget this server + + Cancel PageServiceSftpSettings - + Settings updated successfully - + SFTP settings - + Host - + + + + + Copied + + + + Port @@ -1434,54 +636,54 @@ If AmneziaDNS service is not installed on the same server, or this option is unc - + Password - + Mount folder on device - + In order to mount remote SFTP folder as local drive, perform following steps: <br> - - + + <br>1. Install the latest version of - - + + <br>2. Install the latest version of - + Detailed instructions - + Remove SFTP and all data stored there - - Some description + + Remove SFTP and all data stored there? - + Continue Продолжить - + Cancel @@ -1489,52 +691,57 @@ If AmneziaDNS service is not installed on the same server, or this option is unc PageServiceTorWebsiteSettings - + Settings updated successfully - + Tor website settings - + Website address - + + Copied + + + + Use <a href="https://www.torproject.org/download/" style="color: #FBB26A;">Tor Browser</a> to open this url. - + After installation it takes several minutes while your onion site will become available in the Tor Network. - + When configuring WordPress set the domain as this onion address. - + Remove website - - Some description + + The site with all data will be removed from the tor network. - + Continue Продолжить - + Cancel @@ -1542,32 +749,32 @@ If AmneziaDNS service is not installed on the same server, or this option is unc PageSettings - + Settings - + Servers - + Connection - + Application - + Backup - + About AmneziaVPN @@ -1591,47 +798,67 @@ And if you don't like the app, all the more support it - the donation will - + + https://www.patreon.com/amneziavpn + + + + Show other methods on Github - + Contacts - + Telegram group - + To discuss features - - Mail + + https://t.me/amnezia_vpn_en + Mail + + + + For reviews and bug reports - + Github - + + https://github.com/amnezia-vpn/amnezia-client + + + + Website - + + https://amnezia.org + + + + Check for updates @@ -1644,47 +871,72 @@ And if you don't like the app, all the more support it - the donation will - + + Auto start + + + + + Launch the application every time + + + + + starts + + + + + Start minimized + + + + + Launch application minimized + + + + Language - + Logging - + Enabled - + Disabled - + Reset settings and remove all data from the application - + Reset settings and remove all data from the application? - + All settings will be reset to default. All installed AmneziaVPN services will still remain on the server. - + Continue Продолжить - + Cancel @@ -1692,35 +944,71 @@ And if you don't like the app, all the more support it - the donation will PageSettingsBackup - + Backup - + Settings restored from backup file - + Configuration backup - + It will help you instantly restore connection settings at the next installation - + Make a backup - + + Save backup file + + + + + + Backup files (*.backup) + + + + Restore from backup + + + Open backup file + + + + + Import settings from a backup file? + + + + + All current settings will be reset + + + + + Continue + Продолжить + + + + Cancel + + PageSettingsConnection @@ -1729,43 +1017,48 @@ And if you don't like the app, all the more support it - the donation will Connection + + + Auto connect + + + Connect to VPN on app start + + + + Use AmneziaDNS if installed on the server - - Internal IP address 172.29.172.254 - - - - + DNS servers - + If AmneziaDNS is not used or installed - + Split site tunneling - + Allows you to connect to some sites through a secure connection, and to others bypassing it - + Separate application tunneling - + Allows you to use the VPN only for certain applications @@ -1773,45 +1066,101 @@ And if you don't like the app, all the more support it - the donation will PageSettingsDns - + DNS servers - + If AmneziaDNS is not used or installed - + + Restore default + + + + + Restore default DNS settings? + + + + + Continue + Продолжить + + + + Cancel + + + + + Settings have been reset + + + + Save + + + Settings saved + + PageSettingsLogging - + Logging - + + Save logs - + Open folder with logs - + + Logs files (*.log) + + + + Save logs to file - + + Clear logs? + + + + + Continue + Продолжить + + + + Cancel + + + + + Logs have been cleaned up + + + + Clear logs @@ -1824,109 +1173,109 @@ And if you don't like the app, all the more support it - the donation will - - No installed containers found - - - - + Clear Amnezia cache - + May be needed when changing other settings - + Clear cached profiles? Очистить закешированные профили - - some description + + No new installed containers found - - - + + + + + + + + Continue Продолжить - - - + + + Cancel - + Check the server for previously installed Amnezia services - + Add them to the application if they were not displayed - + Remove server from application - + Remove server? - + All installed AmneziaVPN services will still remain on the server. - + Clear server from Amnezia software - + Clear server from Amnezia software? - - All containers will be deleted on the server. This means that configuration files, keys and certificates will be deleted. + + All containers will be deleted on the server. This means that configuration files, keys and certificates will be deleted. PageSettingsServerInfo - + Server name - + Save - + Protocols - + Services - + Data @@ -1939,23 +1288,28 @@ And if you don't like the app, all the more support it - the donation will - - + + Remove - + from server? - + + All users with whom you shared a connection will no longer be able to connect to it + + + + Continue Продолжить - + Cancel @@ -1969,85 +1323,137 @@ And if you don't like the app, all the more support it - the donation will - PageSetupWizard + PageSettingsSplitTunneling - - Setup your server to use VPN + + Only the addresses in the list must be opened via VPN - - High censorship level + + Addresses from the list should never be opened via VPN - - I'm living in a country with a high censorship level. Many of the foreign websites and VPNs are blocked by my government. I want to setup a reliable VPN, which can not be detected by my internet provider and my government. -OpenVPN and ShadowSocks over Cloak (VPN obfuscation) profiles will be installed. - + + Split site tunneling - - Medium censorship level + + Mode - - I'm living in a country with a medium censorship level. Some websites are blocked by my government, but VPNs are not blocked at all. I want to setup a flexible solution. -OpenVPN over ShadowSocks profile will be installed. - + + Remove - - Low censorship level + + Continue + Продолжить + + + + Cancel - - I want to improve my privacy on the internet. -OpenVPN profile will be installed. - + + Site or IP - - Next + + Import/Export Sites + + + + + Import + + + + + Save site list + + + + + Save sites + + + + + + + Sites files (*.json) + + + + + Import a list of sites + + + + + Replace site list + + + + + + Open sites file + + + + + Add imported sites to existing ones PageSetupWizardConfigSource - + Server connection - + Do not use connection code from public sources. It may have been created to intercept your data. -It's okay if a friend passed the code. +It's okay as long as it's from someone you trust. - + What do you have? - + File with connection settings - + + File with connection settings or backup + + + + + Open config file + + + + QR-code - + Key as text @@ -2070,43 +1476,37 @@ It's okay if a friend passed the code. - - - Insert - - - - + Password / SSH private key - + Continue Продолжить - + Enter the address in the format 255.255.255.255:88 - + Login to connect via SSH - + Ip address cannot be empty - + Login cannot be empty - + Password/private key cannot be empty @@ -2119,123 +1519,60 @@ It's okay if a friend passed the code. - + Set up a VPN yourself - + I want to choose a VPN protocol - + Continue Продолжить - - - PageSetupWizardHighLevel - - Setup Wizard - - - - - AmneziaVPN will install a VPN protocol which is not visible to your internet provider and government firewall. Your VPN connection will be seen by your internet provider as regular web traffic to a particular website. - -You SHOULD set this website address to some foreign website which is not blocked by your internet provider. In other words, you need to type some foreign website address which is accessible to you without a VPN. - - - - - Type another web site address for masking or keep it by default. Your internet provider will think you working on this web site when you connected to VPN. - - - - - OpenVPN and ShadowSocks over Cloak (VPN obfuscation) profiles will be installed. - -This protocol support exporting connection profiles to mobile devices by exporting ShadowSocks and Cloak configs (you should launch the 3rd party open source VPN client - ShadowSocks VPN and install Cloak plugin). - - - - - Next + + Set up later PageSetupWizardInstalling - + The server has already been added to the application - + + Amnesia has detected that your server is currently + + + + + busy installing other software. Amnesia installation + + + + + will pause until the server finishes installing other software + + + + Installing - + + Usually it takes no more than 5 minutes - - PageSetupWizardLowLevel - - - Setup Wizard - - - - - AmneziaVPN will install the OpenVPN protocol with public/private key pairs generated on both server and client sides. - -You can also configure the connection on your mobile device by copying the exported ".ovpn" file to your device, and setting up the official OpenVPN client. - -We recommend not to use messaging applications for sending the connection profile - it contains VPN private keys. - - - - - OpenVPN profile will be installed - - - - - Start configuring - - - - - PageSetupWizardMediumLevel - - - Setup Wizard - - - - - AmneziaVPN will install a VPN protocol which is difficult to detect by your internet provider and government firewall (but possible). In most cases, this is the most suitable protocol. This protocol is faster compared to the VPN protocols with "VPN masking". - -This protocol supports exporting connection profiles to mobile devices by using QR codes (you should launch the 3rd party open source VPN client - ShadowSocks VPN). - - - - - OpenVPN over ShadowSocks profile will be installed - - - - - Next - - - PageSetupWizardProtocolSettings @@ -2243,38 +1580,28 @@ This protocol supports exporting connection profiles to mobile devices by using Installing - - - protocol description - - More detailed - - detailed protocol description - - - - + Close - + Network protocol - + Port - + Install @@ -2295,30 +1622,35 @@ This protocol supports exporting connection profiles to mobile devices by using PageSetupWizardQrReader - - Point the camera at the QR code and hold for a couple of seconds. + + Point the camera at the QR code and hold for a couple of seconds. PageSetupWizardStart - + + Settings restored from backup file + + + + Free service for creating a personal VPN on your server. - + Helps you access blocked content without revealing your privacy, even to VPN providers. - + I have the data to connect - + I have nothing @@ -2351,33 +1683,6 @@ This protocol supports exporting connection profiles to mobile devices by using Продолжить - - PageSetupWizardVPNMode - - - Setup Wizard - - - - - Optional. - -You can enable VPN mode "For selected sites" and add blocked sites you need to visit manually. If you will choose this option, you will need add every blocked site you want to visit to the access list. You may switch between modes later. - -Please note, you should add addresses to the list after VPN connection established. You may add any domain, URL or IP address, it will be resolved to IP address. - - - - - Turn on mode "VPN for selected sites" - - - - - Start configuring - - - PageSetupWizardViewConfig @@ -2386,22 +1691,22 @@ Please note, you should add addresses to the list after VPN connection establish - + Do not use connection code from public sources. It could be created to intercept your data. - + Collapse content - + Show content - + Connect @@ -2409,76 +1714,91 @@ Please note, you should add addresses to the list after VPN connection establish PageShare - + OpenVpn native format - + WireGuard native format - + VPN Access - + Connection - + VPN access without the ability to manage the server - + Full access to server - - Server and service - - - - + Server - + Accessing - - Protocols and services - - - - + Connection to - - + + File with connection settings to - + + Save OpenVPN config + + + + + Save WireGuard config + + + + For the AmneziaVPN app - + Full access + + + Servers + + + + + Protocols + + + + + Protocol + + @@ -2486,454 +1806,11 @@ Please note, you should add addresses to the list after VPN connection establish - + Share - - PageShareConnection - - - Share protocol config - - - - - Share for Amnezia - - - - - Share for - - - - - PageShareProtoAmnezia - - - Share for Amnezia - - - - - Anyone who logs in with this code will have the same permissions to use VPN and YOUR SERVER as you. - -This code includes your server credentials! - -Provide this code only to TRUSTED users. - - - - - Anyone who logs in with this code will be able to connect to this VPN server. - -This code does not include server credentials. - -New encryption keys pair will be generated. - - - - - Share - - - - - Save to file - - - - - Save AmneziaVPN config - - - - - Scan QR code using AmneziaVPN mobile - - - - - PageShareProtoCloak - - - Share Cloak Settings - - - - - Note: Cloak protocol using same password for all connections - - - - - Share - - - - - Save to file - - - - - Save AmneziaVPN config - - - - - PageShareProtoIkev2 - - - Share IKEv2 Settings - - - - - - Export p12 certificate - - - - - - Export config for Apple - - - - - - Export config for StrongSwan - - - - - PageShareProtoOpenVPN - - - Share OpenVPN Settings - - - - - New encryption keys pair will be generated. - - - - - Share - - - - - Save to file - - - - - Save OpenVPN config - - - - - PageShareProtoSftp - - - Share SFTP settings - - - - - PageShareProtoShadowSocks - - - Share ShadowSocks Settings - - - - - Note: ShadowSocks protocol using same password for all connections - - - - - Copy config - - - - - Connection string - - - - - Copy string - - - - - PageShareProtoTorWebSite - - - Share Tor Web site - - - - - PageShareProtoWireGuard - - - Share WireGuard Settings - - - - - New encryption keys pair will be generated. - - - - - Share - - - - - Save to file - - - - - Save OpenVPN config - - - - - PageShareProtocolBase - - - Generate config - - - - - Generating config... - - - - - Show config - - - - - PageSites - - - Web site/Hostname/IP address/Subnet - - - - - yousite.com or IP address - - - - - Import IP addresses - - - - - Delete selected - - - - - Select all - - - - - Export all - - - - - PageStart - - - Setup your server to use VPN - - - - - Connect to the already created VPN server - - - - - - Set up your own server - - - - - Import connection - - - - - Connection code - - - - - Connect - - - - - Open file - - - - - Scan QR code - - - - - Restore app config - - - - - How to get own server? → - - - - - Server IP address [:port] - - - - - Login to connect via SSH - - - - - - Password - - - - - - Connect using SSH key - - - - - Private key - - - - - Connect using SSH password - - - - - PageVPN - - - Donate - - - - - Server - - - - - Profile - - - - - Proto - - - - - DNS - - - - - How to use VPN - - - - - For all connections - - - - - Except selected sites - - - - - For selected sites - - - - - + Add site - - - - - PageViewConfig - - - Check config - - - - - Attention! -The config above contains cached OpenVPN connection profile. -AmneziaVPN detected this profile may contain malicious scripts. Please, carefully review the config and import this config only if you completely trust it. - - - - - Suspicious string: - - - - - Cached connection profile: - - - - - Cancel - - - - - Import config - - - PopupType @@ -2942,6 +1819,241 @@ AmneziaVPN detected this profile may contain malicious scripts. Please, carefull + + QKeychain::DeletePasswordJobPrivate + + + Password entry not found + + + + + Could not decrypt data + + + + + + Unknown error + + + + + Could not open wallet: %1; %2 + + + + + Password not found + + + + + Could not open keystore + + + + + Could not remove private key from keystore + + + + + QKeychain::JobPrivate + + + Unknown error + + + + + Access to keychain denied + + + + + QKeychain::PlainTextStore + + + Could not store data in settings: access error + + + + + Could not store data in settings: format error + + + + + Could not delete data from settings: access error + + + + + Could not delete data from settings: format error + + + + + Entry not found + + + + + QKeychain::ReadPasswordJobPrivate + + + Password entry not found + + + + + + Could not decrypt data + + + + + D-Bus is not running + + + + + + Unknown error + + + + + No keychain service available + + + + + Could not open wallet: %1; %2 + + + + + Access to keychain denied + + + + + Could not determine data type: %1; %2 + + + + + + Entry not found + + + + + Unsupported entry type 'Map' + + + + + Unknown kwallet entry type '%1' + + + + + Password not found + + + + + Could not open keystore + + + + + Could not retrieve private key from keystore + + + + + Could not create decryption cipher + + + + + QKeychain::WritePasswordJobPrivate + + + Credential size exceeds maximum size of %1 + + + + + Credential key exceeds maximum size of %1 + + + + + Writing credentials failed: Win32 error code %1 + + + + + Encryption failed + + + + + D-Bus is not running + + + + + + Unknown error + + + + + Could not open wallet: %1; %2 + + + + + Password not found + + + + + Could not open keystore + + + + + Could not create private key generator + + + + + Could not generate new private key + + + + + Could not retrieve private key from keystore + + + + + Could not create encryption cipher + + + + + Could not encrypt data + + + QObject @@ -3155,13 +2267,7 @@ AmneziaVPN detected this profile may contain malicious scripts. Please, carefull - - - Web site in Tor network - - - - + DNS Service @@ -3170,62 +2276,150 @@ AmneziaVPN detected this profile may contain malicious scripts. Please, carefull Sftp file sharing service + + + + Website in Tor network + + Amnezia DNS - - - OpenVPN container - - - Container with OpenVpn and ShadowSocks + OpenVPN is the most popular VPN protocol, with flexible configuration options. It uses its own security protocol with SSL/TLS for key exchange. - - Container with OpenVpn and ShadowSocks protocols configured with traffic masking by Cloak plugin + + ShadowSocks - masks VPN traffic, making it similar to normal web traffic, but is recognised by analysis systems in some highly censored regions. - - WireGuard container - - - - - IPsec container + + OpenVPN over Cloak - OpenVPN with VPN masquerading as web traffic and protection against active-probbing detection. Ideal for bypassing blocking in regions with the highest levels of censorship. + WireGuard - New popular VPN protocol with high performance, high speed and low power consumption. Recommended for regions with low levels of censorship. + + + + + IKEv2 - Modern stable protocol, a bit faster than others, restores connection after signal loss. It has native support on the latest versions of Android and iOS. + + + + + Deploy a WordPress site on the Tor network in two clicks. + + + + + Replace the current DNS server with your own. This will increase your privacy level. + + + + + Creates a file vault on your server to securely store and transfer files. + + + + + OpenVPN container + + + + + Container with OpenVpn and ShadowSocks + + + + + Container with OpenVpn and ShadowSocks protocols configured with traffic masking by Cloak plugin + + + + + WireGuard container + + + + + IPsec container + + + + Sftp file sharing service - is secure FTP service - + Sftp service - - An error occurred while saving the list of clients. - - - - - SelectContainer - - - VPN containers + + Entry not found - - Other containers + + Access to keychain denied + + + + + No keyring daemon + + + + + Already unlocked + + + + + No such keyring + + + + + Bad arguments + + + + + I/O error + + + + + Cancelled + + + + + Keyring already exists + + + + + No match + + + + + Unknown error + + + + + error 0x%1: %2 @@ -3237,62 +2431,6 @@ AmneziaVPN detected this profile may contain malicious scripts. Please, carefull - - ServerConfiguringProgressLogic - - - - Please wait, configuring process may take up to 5 minutes - - - - - Configuring... - - - - - Operation finished - - - - - ServerContainersLogic - - - Error occurred while configuring server. - - - - - Error message: - - - - - See logs for details. - - - - - ServerSettingsLogic - - - - Clear client cached profile - - - - - Service: - - - - - Cache cleared - - - Settings @@ -3310,130 +2448,100 @@ AmneziaVPN detected this profile may contain malicious scripts. Please, carefull SettingsController - + Software version - - Save log + + All settings have been reset to default values - - Backup application config + + Cached profiles cleared - - Open backup - - - - - Backup file is empty - - - - + Backup file is corrupted - - ShareConnectionButtonCopyType - - - Copy - - - - - Copied - - - ShareConnectionDrawer - + + + Save AmneziaVPN config + + + + Share - + Copy - + + Copied + + + + Show content - - To read the QR code in the Amnezia app, select "Add Server" → "I have connection details" + + To read the QR code in the Amnezia app, select "Add server" → "I have data to connect" → "QR code, key or settings file" - ShareConnectionLogic + SitesController - - Error while generating connection profile + + Hostname not look like ip adress or domain name - - Error occurred while generating the config. + + New site added: - - Error message: + + Site removed: - - See logs for details. - - - - - SitesLogic - - - These sites will be opened using VPN + + Can't open file: - - These sites will be excepted from VPN - - - - - StartPageLogic - - - - Connect + + Failed to parse JSON data from file: - - - Please fill in all fields + + The JSON data is not an array in file: - - Connecting... + + Import completed - - Open config file + + Export completed @@ -3465,57 +2573,14 @@ AmneziaVPN detected this profile may contain malicious scripts. Please, carefull - - UiLogic - - - Error occurred while configuring server. - - - - - Error message: - - - - - See logs for details. - - - VpnConnection - + Mbps - - VpnLogic - - - - 0 Mbps - - - - - AmneziaVPN not supporting selected protocol on this device. Select another protocol. - - - - - VPN Protocols is not installed. - Please install VPN container at first - - - - - VPN Protocol not chosen - - - VpnProtocol @@ -3562,56 +2627,46 @@ AmneziaVPN detected this profile may contain malicious scripts. Please, carefull amnezia::ContainerProps - + Low - + High - + Medium - + Many foreign websites and VPN providers are blocked - + Some foreign sites are blocked, but VPN providers are not blocked - + I just want to increase the level of privacy - main + main2 - - It's public key. Private key required + + Private key passphrase - - Ssh log - - - - - App log - - - - - Wrap words + + Save diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts new file mode 100644 index 00000000..257a3378 --- /dev/null +++ b/client/translations/amneziavpn_zh_CN.ts @@ -0,0 +1,2666 @@ + + + + + AmneziaApplication + + + Split tunneling for WireGuard is not implemented, the option was disabled + + + + + AndroidController + + + AmneziaVPN + + + + + VPN Connected + Refers to the app - which is currently running the background and waiting + + + + + ConnectionController + + + + + + Connect + 连接 + + + + VPN Protocols is not installed. + Please install VPN container at first + 未安装VPN协议,请安装 + + + + Connection... + 连接中 + + + + Connected + 已连接 + + + + Reconnection... + 重连中 + + + + Disconnection... + 断开中 + + + + Settings updated successfully, Reconnnection... + 配置已更新,重连中 + + + + ConnectionTypeSelectionDrawer + + + Connection data + + + + + Server IP, login and password + + + + + QR code, key or configuration file + + + + + ContextMenuType + + + C&ut + + + + + &Copy + + + + + &Paste + + + + + &SelectAll + + + + + ExportController + + + Access error! + + + + + HomeContainersListView + + + The selected protocol is not supported on the current platform + + + + + Reconnect via VPN Procotol: + + + + + ImportController + + + Scanned %1 of %2. + + + + + InstallController + + + + installed successfully. + + + + + + is already installed on the server. + + + + + + +Already installed containers were found on the server. All installed containers have been added to the application + + + + + Settings updated successfully + + + + + Server ' + + + + + ' was removed + + + + + All containers from server ' + + + + + has been removed from the server ' + + + + + Please login as the user + + + + + Server added successfully + + + + + KeyChainClass + + + Read key failed: %1 + + + + + Write key failed: %1 + + + + + Delete key failed: %1 + + + + + NotificationHandler + + + + AmneziaVPN + + + + + VPN Connected + + + + + VPN Disconnected + + + + + AmneziaVPN notification + + + + + Unsecured network detected: + + + + + PageDeinstalling + + + Removing services from + + + + + Usually it takes no more than 5 minutes + + + + + PageHome + + + VPN protocol + + + + + Servers + + + + + PageProtocolCloakSettings + + + Cloak settings + + + + + Disguised as traffic from + + + + + Port + + + + + + Cipher + + + + + Save and Restart Amnezia + + + + + PageProtocolOpenVpnSettings + + + OpenVPN settings + + + + + VPN Addresses Subnet + + + + + Network protocol + + + + + Port + + + + + Auto-negotiate encryption + + + + + + Hash + + + + + SHA512 + + + + + SHA384 + + + + + SHA256 + + + + + SHA3-512 + + + + + SHA3-384 + + + + + SHA3-256 + + + + + whirlpool + + + + + BLAKE2b512 + + + + + BLAKE2s256 + + + + + SHA1 + + + + + + Cipher + + + + + AES-256-GCM + + + + + AES-192-GCM + + + + + AES-128-GCM + + + + + AES-256-CBC + + + + + AES-192-CBC + + + + + AES-128-CBC + + + + + ChaCha20-Poly1305 + + + + + ARIA-256-CBC + + + + + CAMELLIA-256-CBC + + + + + none + + + + + TLS auth + + + + + Block DNS requests outside of VPN + + + + + Additional client configuration commands + + + + + + Commands: + + + + + Additional server configuration commands + + + + + Remove OpenVPN + + + + + Remove OpenVpn from server? + + + + + All users with whom you shared a connection will no longer be able to connect to it + + + + + Continue + + + + + Cancel + + + + + Save and Restart Amnezia + + + + + PageProtocolRaw + + + settings + + + + + Show connection options + + + + + Connection options + + + + + + Remove + + + + + from server? + + + + + All users with whom you shared a connection will no longer be able to connect to it + + + + + Continue + + + + + Cancel + + + + + PageProtocolShadowSocksSettings + + + ShadowSocks settings + + + + + Port + + + + + + Cipher + + + + + Save and Restart Amnezia + + + + + PageServiceDnsSettings + + + A DNS service is installed on your server, and it is only accessible via VPN. + + + + + + The DNS address is the same as the address of your server. You can configure DNS in the settings, under the connections tab. + + + + + + Remove + + + + + from server? + + + + + Continue + + + + + Cancel + + + + + PageServiceSftpSettings + + + Settings updated successfully + + + + + SFTP settings + + + + + Host + + + + + + + + Copied + + + + + Port + + + + + Login + + + + + Password + + + + + Mount folder on device + + + + + In order to mount remote SFTP folder as local drive, perform following steps: <br> + + + + + + <br>1. Install the latest version of + + + + + + <br>2. Install the latest version of + + + + + Detailed instructions + + + + + Remove SFTP and all data stored there + + + + + Remove SFTP and all data stored there? + + + + + Continue + + + + + Cancel + + + + + PageServiceTorWebsiteSettings + + + Settings updated successfully + + + + + Tor website settings + + + + + Website address + + + + + Copied + + + + + Use <a href="https://www.torproject.org/download/" style="color: #FBB26A;">Tor Browser</a> to open this url. + + + + + After installation it takes several minutes while your onion site will become available in the Tor Network. + + + + + When configuring WordPress set the domain as this onion address. + + + + + Remove website + + + + + The site with all data will be removed from the tor network. + + + + + Continue + + + + + Cancel + + + + + PageSettings + + + Settings + + + + + Servers + + + + + Connection + + + + + Application + + + + + Backup + + + + + About AmneziaVPN + + + + + PageSettingsAbout + + + Support the project with a donation + + + + + This is a free and open source application. If you like it, support the developers with a donation. +And if you don't like the app, all the more support it - the donation will be used to improve the app. + + + + + Card on Patreon + + + + + https://www.patreon.com/amneziavpn + + + + + Show other methods on Github + + + + + Contacts + + + + + Telegram group + + + + + To discuss features + + + + + https://t.me/amnezia_vpn_en + + + + + Mail + + + + + For reviews and bug reports + + + + + Github + + + + + https://github.com/amnezia-vpn/amnezia-client + + + + + Website + + + + + https://amnezia.org + + + + + Check for updates + + + + + PageSettingsApplication + + + Application + + + + + Auto start + + + + + Launch the application every time + + + + + starts + + + + + Start minimized + + + + + Launch application minimized + + + + + Language + + + + + Logging + + + + + Enabled + + + + + Disabled + + + + + Reset settings and remove all data from the application + + + + + Reset settings and remove all data from the application? + + + + + All settings will be reset to default. All installed AmneziaVPN services will still remain on the server. + + + + + Continue + + + + + Cancel + + + + + PageSettingsBackup + + + Settings restored from backup file + + + + + Backup + + + + + Configuration backup + + + + + It will help you instantly restore connection settings at the next installation + + + + + Make a backup + + + + + Save backup file + + + + + + Backup files (*.backup) + + + + + Restore from backup + + + + + Open backup file + + + + + Import settings from a backup file? + + + + + All current settings will be reset + + + + + Continue + + + + + Cancel + + + + + PageSettingsConnection + + + Connection + + + + + Auto connect + + + + + Connect to VPN on app start + + + + + Use AmneziaDNS if installed on the server + + + + + DNS servers + + + + + If AmneziaDNS is not used or installed + + + + + Split site tunneling + + + + + Allows you to connect to some sites through a secure connection, and to others bypassing it + + + + + Separate application tunneling + + + + + Allows you to use the VPN only for certain applications + + + + + PageSettingsDns + + + DNS servers + + + + + If AmneziaDNS is not used or installed + + + + + Restore default + + + + + Restore default DNS settings? + + + + + Continue + + + + + Cancel + + + + + Settings have been reset + + + + + Save + + + + + Settings saved + + + + + PageSettingsLogging + + + Logging + + + + + + Save logs + + + + + Open folder with logs + + + + + Logs files (*.log) + + + + + Save logs to file + + + + + Clear logs? + + + + + Continue + + + + + Cancel + + + + + Logs have been cleaned up + + + + + Clear logs + + + + + PageSettingsServerData + + + All installed containers have been added to the application + + + + + No new installed containers found + + + + + Clear Amnezia cache + + + + + May be needed when changing other settings + + + + + Clear cached profiles? + + + + + + + + + + + + Continue + + + + + + + Cancel + + + + + Check the server for previously installed Amnezia services + + + + + Add them to the application if they were not displayed + + + + + Remove server from application + + + + + Remove server? + + + + + All installed AmneziaVPN services will still remain on the server. + + + + + Clear server from Amnezia software + + + + + Clear server from Amnezia software? + + + + + All containers will be deleted on the server. This means that configuration files, keys and certificates will be deleted. + + + + + PageSettingsServerInfo + + + Server name + + + + + Save + + + + + Protocols + + + + + Services + + + + + Data + + + + + PageSettingsServerProtocol + + + settings + + + + + + Remove + + + + + from server? + + + + + All users with whom you shared a connection will no longer be able to connect to it + + + + + Continue + + + + + Cancel + + + + + PageSettingsServersList + + + Servers + + + + + PageSettingsSplitTunneling + + + Only the addresses in the list must be opened via VPN + + + + + Addresses from the list should never be opened via VPN + + + + + Split site tunneling + + + + + Mode + + + + + Remove + + + + + Continue + + + + + Cancel + + + + + Site or IP + + + + + Import/Export Sites + + + + + Import + + + + + Save site list + + + + + Save sites + + + + + + + Sites files (*.json) + + + + + Import a list of sites + + + + + Replace site list + + + + + + Open sites file + + + + + Add imported sites to existing ones + + + + + PageSetupWizardConfigSource + + + Server connection + + + + + Do not use connection code from public sources. It may have been created to intercept your data. + +It's okay as long as it's from someone you trust. + + + + + What do you have? + + + + + File with connection settings or backup + + + + + File with connection settings + + + + + Open config file + + + + + QR-code + + + + + Key as text + + + + + PageSetupWizardCredentials + + + Server connection + + + + + Server IP address [:port] + + + + + 255.255.255.255:88 + + + + + Login to connect via SSH + + + + + Password / SSH private key + + + + + Continue + + + + + Ip address cannot be empty + + + + + Enter the address in the format 255.255.255.255:88 + + + + + Login cannot be empty + + + + + Password/private key cannot be empty + + + + + PageSetupWizardEasy + + + What is the level of internet control in your region? + + + + + Set up a VPN yourself + + + + + I want to choose a VPN protocol + + + + + Continue + + + + + Set up later + + + + + PageSetupWizardInstalling + + + + Usually it takes no more than 5 minutes + + + + + The server has already been added to the application + + + + + Amnesia has detected that your server is currently + + + + + busy installing other software. Amnesia installation + + + + + will pause until the server finishes installing other software + + + + + Installing + + + + + PageSetupWizardProtocolSettings + + + Installing + + + + + More detailed + + + + + Close + + + + + Network protocol + + + + + Port + + + + + Install + + + + + PageSetupWizardProtocols + + + VPN protocol + + + + + Choose the one with the highest priority for you. Later, you can install other protocols and additional services, such as DNS proxy and SFTP. + + + + + PageSetupWizardQrReader + + + Point the camera at the QR code and hold for a couple of seconds. + + + + + PageSetupWizardStart + + + Settings restored from backup file + + + + + Free service for creating a personal VPN on your server. + + + + + Helps you access blocked content without revealing your privacy, even to VPN providers. + + + + + I have the data to connect + + + + + I have nothing + + + + + PageSetupWizardTextKey + + + Connection key + + + + + A line that starts with vpn://... + + + + + Key + + + + + Insert + + + + + Continue + + + + + PageSetupWizardViewConfig + + + New connection + + + + + Do not use connection code from public sources. It could be created to intercept your data. + + + + + Collapse content + + + + + Show content + + + + + Connect + 连接 + + + + PageShare + + + Save OpenVPN config + + + + + Save WireGuard config + + + + + For the AmneziaVPN app + + + + + OpenVpn native format + + + + + WireGuard native format + + + + + VPN Access + + + + + Connection + + + + + Full access + + + + + VPN access without the ability to manage the server + + + + + Full access to server + + + + + Servers + + + + + Server + + + + + Accessing + + + + + + File with connection settings to + + + + + Protocols + + + + + Protocol + + + + + Connection to + + + + + + Connection format + + + + + Share + + + + + PopupType + + + Close + + + + + QKeychain::DeletePasswordJobPrivate + + + Password entry not found + + + + + Could not decrypt data + + + + + + Unknown error + + + + + Could not open wallet: %1; %2 + + + + + Password not found + + + + + Could not open keystore + + + + + Could not remove private key from keystore + + + + + QKeychain::JobPrivate + + + Unknown error + + + + + Access to keychain denied + + + + + QKeychain::PlainTextStore + + + Could not store data in settings: access error + + + + + Could not store data in settings: format error + + + + + Could not delete data from settings: access error + + + + + Could not delete data from settings: format error + + + + + Entry not found + + + + + QKeychain::ReadPasswordJobPrivate + + + Password entry not found + + + + + + Could not decrypt data + + + + + D-Bus is not running + + + + + + Unknown error + + + + + No keychain service available + + + + + Could not open wallet: %1; %2 + + + + + Access to keychain denied + + + + + Could not determine data type: %1; %2 + + + + + + Entry not found + + + + + Unsupported entry type 'Map' + + + + + Unknown kwallet entry type '%1' + + + + + Password not found + + + + + Could not open keystore + + + + + Could not retrieve private key from keystore + + + + + Could not create decryption cipher + + + + + QKeychain::WritePasswordJobPrivate + + + Credential size exceeds maximum size of %1 + + + + + Credential key exceeds maximum size of %1 + + + + + Writing credentials failed: Win32 error code %1 + + + + + Encryption failed + + + + + D-Bus is not running + + + + + + Unknown error + + + + + Could not open wallet: %1; %2 + + + + + Password not found + + + + + Could not open keystore + + + + + Could not create private key generator + + + + + Could not generate new private key + + + + + Could not retrieve private key from keystore + + + + + Could not create encryption cipher + + + + + Could not encrypt data + + + + + QObject + + + Sftp service + + + + + No error + + + + + Unknown Error + + + + + Function not implemented + + + + + Server check failed + + + + + Server port already used. Check for another software + + + + + Server error: Docker container missing + + + + + Server error: Docker failed + + + + + Installation canceled by user + + + + + The user does not have permission to use sudo + + + + + Ssh request was denied + + + + + Ssh request was interrupted + + + + + Ssh internal error + + + + + Invalid private key or invalid passphrase entered + + + + + The selected private key format is not supported, use openssh ED25519 key types or PEM key types + + + + + Timeout connecting to server + + + + + Sftp error: End-of-file encountered + + + + + Sftp error: File does not exist + + + + + Sftp error: Permission denied + + + + + Sftp error: Generic failure + + + + + Sftp error: Garbage received from server + + + + + Sftp error: No connection has been set up + + + + + Sftp error: There was a connection, but we lost it + + + + + Sftp error: Operation not supported by libssh yet + + + + + Sftp error: Invalid file handle + + + + + Sftp error: No such file or directory path exists + + + + + Sftp error: An attempt to create an already existing file or directory has been made + + + + + Sftp error: Write-protected filesystem + + + + + Sftp error: No media was in remote drive + + + + + Failed to save config to disk + + + + + OpenVPN config missing + + + + + OpenVPN management server error + + + + + OpenVPN executable missing + + + + + ShadowSocks (ss-local) executable missing + + + + + Cloak (ck-client) executable missing + + + + + Amnezia helper service error + + + + + OpenSSL failed + + + + + Can't connect: another VPN connection is active + + + + + Can't setup OpenVPN TAP network adapter + + + + + VPN pool error: no available addresses + + + + + The config does not contain any containers and credentiaks for connecting to the server + + + + + Internal error + + + + + IPsec + + + + + + Website in Tor network + + + + + Amnezia DNS + + + + + Sftp file sharing service + + + + + OpenVPN is the most popular VPN protocol, with flexible configuration options. It uses its own security protocol with SSL/TLS for key exchange. + + + + + ShadowSocks - masks VPN traffic, making it similar to normal web traffic, but is recognised by analysis systems in some highly censored regions. + + + + + OpenVPN over Cloak - OpenVPN with VPN masquerading as web traffic and protection against active-probbing detection. Ideal for bypassing blocking in regions with the highest levels of censorship. + + + + + WireGuard - New popular VPN protocol with high performance, high speed and low power consumption. Recommended for regions with low levels of censorship. + + + + + IKEv2 - Modern stable protocol, a bit faster than others, restores connection after signal loss. It has native support on the latest versions of Android and iOS. + + + + + Deploy a WordPress site on the Tor network in two clicks. + + + + + Replace the current DNS server with your own. This will increase your privacy level. + + + + + Creates a file vault on your server to securely store and transfer files. + + + + + OpenVPN container + + + + + Container with OpenVpn and ShadowSocks + + + + + Container with OpenVpn and ShadowSocks protocols configured with traffic masking by Cloak plugin + + + + + WireGuard container + + + + + IPsec container + + + + + DNS Service + + + + + Sftp file sharing service - is secure FTP service + + + + + Entry not found + + + + + Access to keychain denied + + + + + No keyring daemon + + + + + Already unlocked + + + + + No such keyring + + + + + Bad arguments + + + + + I/O error + + + + + Cancelled + + + + + Keyring already exists + + + + + No match + + + + + Unknown error + + + + + error 0x%1: %2 + + + + + SelectLanguageDrawer + + + Choose language + + + + + Settings + + + Server #1 + + + + + + Server + + + + + SettingsController + + + Software version + + + + + Backup file is corrupted + + + + + All settings have been reset to default values + + + + + Cached profiles cleared + + + + + ShareConnectionDrawer + + + + Save AmneziaVPN config + + + + + Share + + + + + Copy + + + + + Copied + + + + + Show content + + + + + To read the QR code in the Amnezia app, select "Add server" → "I have data to connect" → "QR code, key or settings file" + + + + + SitesController + + + Hostname not look like ip adress or domain name + + + + + New site added: + + + + + Site removed: + + + + + Can't open file: + + + + + Failed to parse JSON data from file: + + + + + The JSON data is not an array in file: + + + + + Import completed + + + + + Export completed + + + + + SystemTrayNotificationHandler + + + Show + + + + + Connect + 连接 + + + + Disconnect + + + + + Visit Website + + + + + Quit + + + + + VpnConnection + + + Mbps + + + + + VpnProtocol + + + Unknown + + + + + Disconnected + + + + + Preparing + + + + + Connecting... + + + + + Connected + 已连接 + + + + Disconnecting... + + + + + Reconnecting... + + + + + Error + + + + + amnezia::ContainerProps + + + Low + + + + + High + + + + + Medium + + + + + I just want to increase the level of privacy + + + + + Many foreign websites and VPN providers are blocked + + + + + Some foreign sites are blocked, but VPN providers are not blocked + + + + + main2 + + + Private key passphrase + + + + + Save + + + + diff --git a/client/ui/models/languageModel.cpp b/client/ui/models/languageModel.cpp index 5135f348..b860b9da 100644 --- a/client/ui/models/languageModel.cpp +++ b/client/ui/models/languageModel.cpp @@ -6,7 +6,8 @@ LanguageModel::LanguageModel(std::shared_ptr settings, QObject *parent QMetaEnum metaEnum = QMetaEnum::fromType(); for (int i = 0; i < metaEnum.keyCount(); i++) { m_availableLanguages.push_back( - LanguageModelData { metaEnum.valueToKey(i), static_cast(i) }); + LanguageModelData {getLocalLanguageName(static_cast(i)), + static_cast(i) }); } } @@ -36,11 +37,26 @@ QHash LanguageModel::roleNames() const return roles; } +QString LanguageModel::getLocalLanguageName(const LanguageSettings::AvailableLanguageEnum language) +{ + QString strLanguage(""); + switch (language) { + case LanguageSettings::AvailableLanguageEnum::English: strLanguage = "English"; break; + case LanguageSettings::AvailableLanguageEnum::Russian: strLanguage = "Русский"; break; + case LanguageSettings::AvailableLanguageEnum::China_cn: strLanguage = "\347\256\200\344\275\223\344\270\255\346\226\207"; break; + default: + break; + } + + return strLanguage; +} + void LanguageModel::changeLanguage(const LanguageSettings::AvailableLanguageEnum language) { switch (language) { case LanguageSettings::AvailableLanguageEnum::English: emit updateTranslations(QLocale::English); break; case LanguageSettings::AvailableLanguageEnum::Russian: emit updateTranslations(QLocale::Russian); break; + case LanguageSettings::AvailableLanguageEnum::China_cn: emit updateTranslations(QLocale::Chinese); break; default: emit updateTranslations(QLocale::English); break; } } @@ -51,6 +67,7 @@ int LanguageModel::getCurrentLanguageIndex() switch (locale.language()) { case QLocale::English: return static_cast(LanguageSettings::AvailableLanguageEnum::English); break; case QLocale::Russian: return static_cast(LanguageSettings::AvailableLanguageEnum::Russian); break; + case QLocale::Chinese: return static_cast(LanguageSettings::AvailableLanguageEnum::China_cn); break; default: return static_cast(LanguageSettings::AvailableLanguageEnum::English); break; } } diff --git a/client/ui/models/languageModel.h b/client/ui/models/languageModel.h index b64862dd..c8879a34 100644 --- a/client/ui/models/languageModel.h +++ b/client/ui/models/languageModel.h @@ -11,7 +11,8 @@ namespace LanguageSettings Q_NAMESPACE enum class AvailableLanguageEnum { English, - Russian + Russian, + China_cn }; Q_ENUM_NS(AvailableLanguageEnum) @@ -59,6 +60,8 @@ protected: QHash roleNames() const override; private: + QString getLocalLanguageName(const LanguageSettings::AvailableLanguageEnum language); + QVector m_availableLanguages; std::shared_ptr m_settings; From 5535b6a6e3cdd83db8cb993d34ab71485a500cb9 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Sat, 30 Sep 2023 17:36:06 +0800 Subject: [PATCH 02/15] embedded qm files into qrc file --- client/CMakeLists.txt | 40 +++++++++++++------------ client/amnezia_application.cpp | 7 +++-- client/translations/amneziavpn_ru.ts | 2 +- client/translations/amneziavpn_zh_CN.ts | 2 +- client/translations/translations.qrc.in | 5 ++++ 5 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 client/translations/translations.qrc.in diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index f149e204..21f4513e 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -50,29 +50,31 @@ endif() qt6_add_resources(QRC ${QRC} ${CMAKE_CURRENT_LIST_DIR}/resources.qrc) -set(AMNEZIAVPN_TR_FILES +# -- i18n begin +set(CMAKE_AUTORCC ON) + +set(AMNEZIAVPN_TS_FILES ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ru.ts ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_zh_CN.ts ) -file(GLOB_RECURSE AMNEZIAVPN_TR_SOURCES *.qrc *.cpp *.h *.ui) -if ( BUILD_TRANSLATIONS ) - qt_create_translation(AMNEZIAVPN_MESSAGES ${AMNEZIAVPN_TR_SOURCES} ${AMNEZIAVPN_TR_FILES}) - qt_add_translation(AMNEZIAVPN_QM_FILES ${AMNEZIAVPN_TR_FILES}) - add_custom_target(amnezia_messages DEPENDS ${AMNEZIAVPN_MESSAGES}) - add_custom_target(amnezia_translations DEPENDS ${AMNEZIAVPN_QM_FILES} amnezia_messages) - add_dependencies(${PROJECT} amnezia_translations) +file(GLOB_RECURSE AMNEZIAVPN_TS_SOURCES *.qrc *.cpp *.h *.ui) - if (BUILD_TRANSLATIONS_AS_RESOURCES) - set(QM_FILE_LIST "") - foreach(FILE ${AMNEZIAVPN_QM_FILES}) - list(APPEND QM_FILE_LIST "${FILE}") - endforeach() - string(REPLACE ";" "" QM_FILE_LIST ${QM_FILE_LIST}) - configure_file(${CMAKE_CURRENT_LIST_DIR}/translations/translations.qrc ${CMAKE_CURRENT_LIST_DIR}/translations.qrc) - target_sources(${PROJECT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/translations.qrc) - endif() -endif( BUILD_TRANSLATIONS ) +qt_create_translation(AMNEZIAVPN_QM_FILES ${AMNEZIAVPN_TS_SOURCES} ${AMNEZIAVPN_TS_FILES}) +#add_custom_target(amnezia_messages DEPENDS ${AMNEZIAVPN_MESSAGES}) +#add_custom_target(amnezia_translations DEPENDS ${AMNEZIAVPN_QM_FILES} amnezia_messages) +#add_dependencies(${PROJECT} amnezia_translations) + +set(QM_FILE_LIST "") +foreach(FILE ${AMNEZIAVPN_QM_FILES}) + get_filename_component(QM_FILE_NAME ${FILE} NAME) + list(APPEND QM_FILE_LIST "${QM_FILE_NAME}") +endforeach() +string(REPLACE ";" "" QM_FILE_LIST ${QM_FILE_LIST}) + +configure_file(${CMAKE_CURRENT_LIST_DIR}/translations/translations.qrc.in ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc) +qt6_add_resources(QRC ${I18NQRC} ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc) +# -- i18n end if(IOS) #execute_process(COMMAND bash ${CMAKE_CURRENT_LIST_DIR}/scripts/run-build-cloak.sh) @@ -342,5 +344,5 @@ if(NOT IOS AND NOT ANDROID) endif() -target_sources(${PROJECT} PRIVATE ${SOURCES} ${HEADERS} ${RESOURCES} ${QRC}) +target_sources(${PROJECT} PRIVATE ${SOURCES} ${HEADERS} ${RESOURCES} ${QRC} ${I18NQRC}) qt_finalize_target(${PROJECT}) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index d87f326e..6203e3af 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -227,15 +227,16 @@ void AmneziaApplication::loadTranslator() void AmneziaApplication::updateTranslator(const QLocale &locale) { - QResource::registerResource(":/translations.qrc"); if (!m_translator->isEmpty()) { QCoreApplication::removeTranslator(m_translator.get()); } m_settings->setAppLanguage(locale); - QString strFileName = QString("amneziavpn")+QLatin1String("_")+locale.name()+".qm"; - if (m_translator->load(strFileName, "../../../")) { + QString strFileName = QString(":/translations/amneziavpn")+QLatin1String("_")+locale.name()+".qm"; + + if (m_translator->load(strFileName)) { + qDebug() << "yyyyyyxxxxxxxx--------------" <setAppLanguage(locale); } diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index e6c60a33..82393e38 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -4,7 +4,7 @@ AmneziaApplication - + Split tunneling for WireGuard is not implemented, the option was disabled diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index 257a3378..c70b0f75 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -4,7 +4,7 @@ AmneziaApplication - + Split tunneling for WireGuard is not implemented, the option was disabled diff --git a/client/translations/translations.qrc.in b/client/translations/translations.qrc.in new file mode 100644 index 00000000..f49df661 --- /dev/null +++ b/client/translations/translations.qrc.in @@ -0,0 +1,5 @@ + + + @QM_FILE_LIST@ + + From 07d7fac49059d4630b0917a5dd1ea56b58a1f4da Mon Sep 17 00:00:00 2001 From: ronoaer Date: Sat, 30 Sep 2023 17:40:26 +0800 Subject: [PATCH 03/15] removed invalid code --- client/CMakeLists.txt | 3 --- client/amnezia_application.cpp | 2 -- 2 files changed, 5 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 21f4513e..cc192268 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -61,9 +61,6 @@ set(AMNEZIAVPN_TS_FILES file(GLOB_RECURSE AMNEZIAVPN_TS_SOURCES *.qrc *.cpp *.h *.ui) qt_create_translation(AMNEZIAVPN_QM_FILES ${AMNEZIAVPN_TS_SOURCES} ${AMNEZIAVPN_TS_FILES}) -#add_custom_target(amnezia_messages DEPENDS ${AMNEZIAVPN_MESSAGES}) -#add_custom_target(amnezia_translations DEPENDS ${AMNEZIAVPN_QM_FILES} amnezia_messages) -#add_dependencies(${PROJECT} amnezia_translations) set(QM_FILE_LIST "") foreach(FILE ${AMNEZIAVPN_QM_FILES}) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 6203e3af..41a541ac 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -234,9 +234,7 @@ void AmneziaApplication::updateTranslator(const QLocale &locale) m_settings->setAppLanguage(locale); QString strFileName = QString(":/translations/amneziavpn")+QLatin1String("_")+locale.name()+".qm"; - if (m_translator->load(strFileName)) { - qDebug() << "yyyyyyxxxxxxxx--------------" <setAppLanguage(locale); } From eaede032b4fe3ab940a22aad456aea0063a77584 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Sun, 1 Oct 2023 11:12:27 +0800 Subject: [PATCH 04/15] 1. updated memory text when language changed, 2. updated initialize index --- client/amnezia_application.cpp | 9 +++++---- client/main.cpp | 1 - client/ui/controllers/connectionController.cpp | 14 ++++++++++++++ client/ui/controllers/connectionController.h | 6 ++++++ client/ui/qml/Pages2/PageStart.qml | 2 ++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 41a541ac..01b37229 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -87,6 +87,7 @@ void AmneziaApplication::init() m_vpnConnectionThread.start(); initModels(); + loadTranslator(); initControllers(); #ifdef Q_OS_ANDROID @@ -231,17 +232,17 @@ void AmneziaApplication::updateTranslator(const QLocale &locale) QCoreApplication::removeTranslator(m_translator.get()); } - m_settings->setAppLanguage(locale); - QString strFileName = QString(":/translations/amneziavpn")+QLatin1String("_")+locale.name()+".qm"; if (m_translator->load(strFileName)) { if (QCoreApplication::installTranslator(m_translator.get())) { m_settings->setAppLanguage(locale); } - - m_engine->retranslate(); + } else { + m_settings->setAppLanguage(QLocale::English); } + m_engine->retranslate(); + emit translationsUpdated(); } diff --git a/client/main.cpp b/client/main.cpp index 53c3238f..396b7625 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -59,7 +59,6 @@ int main(int argc, char *argv[]) if (doExec) { app.init(); - app.loadTranslator(); qInfo().noquote() << QString("Started %1 version %2").arg(APPLICATION_NAME, APP_VERSION); qInfo().noquote() << QString("%1 (%2)").arg(QSysInfo::prettyProductName(), QSysInfo::currentCpuArchitecture()); diff --git a/client/ui/controllers/connectionController.cpp b/client/ui/controllers/connectionController.cpp index 77ca0f5f..8df62a94 100644 --- a/client/ui/controllers/connectionController.cpp +++ b/client/ui/controllers/connectionController.cpp @@ -19,6 +19,8 @@ ConnectionController::ConnectionController(const QSharedPointer &s Qt::QueuedConnection); connect(this, &ConnectionController::disconnectFromVpn, m_vpnConnection.get(), &VpnConnection::disconnectFromVpn, Qt::QueuedConnection); + + m_state = Vpn::ConnectionState::Disconnected; } ConnectionController::~ConnectionController() @@ -70,6 +72,8 @@ QString ConnectionController::getLastConnectionError() void ConnectionController::onConnectionStateChanged(Vpn::ConnectionState state) { + m_state = state; + m_isConnected = false; m_connectionStateText = tr("Connection..."); switch (state) { @@ -126,6 +130,16 @@ void ConnectionController::onCurrentContainerUpdated() } } +void ConnectionController::translateMemoryText() +{ + onConnectionStateChanged(getCurrentConnectionState()); +} + +Vpn::ConnectionState ConnectionController::getCurrentConnectionState() +{ + return m_state; +} + QString ConnectionController::connectionStateText() const { return m_connectionStateText; diff --git a/client/ui/controllers/connectionController.h b/client/ui/controllers/connectionController.h index 7bfe0fac..c1eaf38f 100644 --- a/client/ui/controllers/connectionController.h +++ b/client/ui/controllers/connectionController.h @@ -34,6 +34,8 @@ public slots: void onCurrentContainerUpdated(); + void translateMemoryText(); + signals: void connectToVpn(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig); @@ -44,6 +46,8 @@ signals: void reconnectWithUpdatedContainer(const QString &message); private: + Vpn::ConnectionState getCurrentConnectionState(); + QSharedPointer m_serversModel; QSharedPointer m_containersModel; @@ -52,6 +56,8 @@ private: bool m_isConnected = false; bool m_isConnectionInProgress = false; QString m_connectionStateText = tr("Connect"); + + Vpn::ConnectionState m_state; }; #endif // CONNECTIONCONTROLLER_H diff --git a/client/ui/qml/Pages2/PageStart.qml b/client/ui/qml/Pages2/PageStart.qml index 43366af7..f36aac41 100644 --- a/client/ui/qml/Pages2/PageStart.qml +++ b/client/ui/qml/Pages2/PageStart.qml @@ -171,6 +171,8 @@ PageType { onClicked: { tabBarStackView.goToTabBarPage(PageEnum.PageHome) ServersModel.currentlyProcessedIndex = ServersModel.defaultIndex + + ConnectionController.translateMemoryText() } } TabImageButtonType { From 27f770604bb4b48a879668bc89a68dc228dbb5b5 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Tue, 3 Oct 2023 15:59:53 +0800 Subject: [PATCH 05/15] tried to translate some pages, from English to Chinese --- client/translations/amneziavpn_ru.ts | 28 ++-- client/translations/amneziavpn_zh_CN.ts | 132 ++++++++++--------- client/ui/qml/Pages2/PageSettingsLogging.qml | 2 +- 3 files changed, 85 insertions(+), 77 deletions(-) diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index 82393e38..f108cbcd 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -4,7 +4,7 @@ AmneziaApplication - + Split tunneling for WireGuard is not implemented, the option was disabled @@ -26,41 +26,41 @@ ConnectionController - + VPN Protocols is not installed. Please install VPN container at first - + Connection... - + Connected - + Settings updated successfully, Reconnnection... - + Reconnection... - - - - + + + + Connect - + Disconnection... @@ -1120,7 +1120,6 @@ And if you don't like the app, all the more support it - the donation will - Save logs @@ -1129,6 +1128,11 @@ And if you don't like the app, all the more support it - the donation will Open folder with logs + + + Save + + Logs files (*.log) diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index c70b0f75..a1f4c4e9 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -4,7 +4,7 @@ AmneziaApplication - + Split tunneling for WireGuard is not implemented, the option was disabled @@ -26,41 +26,41 @@ ConnectionController - - - - + + + + Connect 连接 - + VPN Protocols is not installed. Please install VPN container at first 未安装VPN协议,请安装 - + Connection... 连接中 - + Connected 已连接 - + Reconnection... 重连中 - + Disconnection... 断开中 - + Settings updated successfully, Reconnnection... 配置已更新,重连中 @@ -477,12 +477,12 @@ Already installed containers were found on the server. All installed containers Continue - + 继续 Cancel - + 取消 @@ -526,12 +526,12 @@ Already installed containers were found on the server. All installed containers Continue - + 继续 Cancel - + 取消 @@ -585,12 +585,12 @@ Already installed containers were found on the server. All installed containers Continue - + 继续 Cancel - + 取消 @@ -673,12 +673,12 @@ Already installed containers were found on the server. All installed containers Continue - + 继续 Cancel - + 取消 @@ -731,12 +731,12 @@ Already installed containers were found on the server. All installed containers Continue - + 继续 Cancel - + 取消 @@ -759,7 +759,7 @@ Already installed containers were found on the server. All installed containers Application - + 应用 @@ -861,77 +861,77 @@ And if you don't like the app, all the more support it - the donation will Application - + 应用 Auto start - + 自动运行 Launch the application every time - + 当系统 starts - + 启动时应用自动运行 Start minimized - + 最小化启动 Launch application minimized - + 最小化启动应用程序 Language - + 语言 Logging - + 日志 Enabled - + 开启 Disabled - + 关闭 Reset settings and remove all data from the application - + 重置并清理应用的所有数据 Reset settings and remove all data from the application? - + 重置并清理应用的所有数据? All settings will be reset to default. All installed AmneziaVPN services will still remain on the server. - + 所有配置恢复为默认值。所有已安装的AmneziaVPN服务将保留服务器上。 Continue - + 继续 Cancel - + 取消 @@ -995,12 +995,12 @@ And if you don't like the app, all the more support it - the donation will Continue - + 继续 Cancel - + 取消 @@ -1081,12 +1081,12 @@ And if you don't like the app, all the more support it - the donation will Continue - + 继续 Cancel - + 取消 @@ -1096,7 +1096,7 @@ And if you don't like the app, all the more support it - the donation will Save - + 保存 @@ -1109,18 +1109,22 @@ And if you don't like the app, all the more support it - the donation will Logging - + 日志 - Save logs - + 记录日志 Open folder with logs - + 打开日志文件夹 + + + + Save + 保存 @@ -1130,32 +1134,32 @@ And if you don't like the app, all the more support it - the donation will Save logs to file - + 保存日志到文件 Clear logs? - + 清除日志? Continue - + 继续 Cancel - + 取消 Logs have been cleaned up - + 已清理日志 Clear logs - + 清理日志 @@ -1195,14 +1199,14 @@ And if you don't like the app, all the more support it - the donation will Continue - + 继续 Cancel - + 取消 @@ -1255,7 +1259,7 @@ And if you don't like the app, all the more support it - the donation will Save - + 保存 @@ -1299,12 +1303,12 @@ And if you don't like the app, all the more support it - the donation will Continue - + 继续 Cancel - + 取消 @@ -1345,12 +1349,12 @@ And if you don't like the app, all the more support it - the donation will Continue - + 继续 Cancel - + 取消 @@ -1481,7 +1485,7 @@ It's okay as long as it's from someone you trust. Continue - + 继续 @@ -1524,7 +1528,7 @@ It's okay as long as it's from someone you trust. Continue - + 继续 @@ -1673,7 +1677,7 @@ It's okay as long as it's from someone you trust. Continue - + 继续 @@ -2421,7 +2425,7 @@ It's okay as long as it's from someone you trust. Choose language - + 选择语言 @@ -2660,7 +2664,7 @@ It's okay as long as it's from someone you trust. Save - + 保存 diff --git a/client/ui/qml/Pages2/PageSettingsLogging.qml b/client/ui/qml/Pages2/PageSettingsLogging.qml index 42f33901..4141f51f 100644 --- a/client/ui/qml/Pages2/PageSettingsLogging.qml +++ b/client/ui/qml/Pages2/PageSettingsLogging.qml @@ -105,7 +105,7 @@ PageType { if (GC.isMobile()) { fileName = "AmneziaVPN.log" } else { - fileName = SystemController.getFileName(qsTr("Save logs"), + fileName = SystemController.getFileName(qsTr("Save"), qsTr("Logs files (*.log)"), StandardPaths.standardLocations(StandardPaths.DocumentsLocation) + "/AmneziaVPN", true, From 30709c66ef397d84342a050cc46f96eb4e215e85 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Wed, 4 Oct 2023 09:05:29 +0800 Subject: [PATCH 06/15] translated settings page --- client/translations/amneziavpn_zh_CN.ts | 44 ++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index a1f4c4e9..08e170b1 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -262,7 +262,7 @@ Already installed containers were found on the server. All installed containers Servers - + 服务器列表 @@ -744,17 +744,17 @@ Already installed containers were found on the server. All installed containers Settings - + 配置列表 Servers - + 服务器列表 Connection - + 连接 @@ -764,12 +764,12 @@ Already installed containers were found on the server. All installed containers Backup - + 备份 About AmneziaVPN - + 关于AmneziaVPN @@ -944,7 +944,7 @@ And if you don't like the app, all the more support it - the donation will Backup - + 备份 @@ -1008,32 +1008,32 @@ And if you don't like the app, all the more support it - the donation will Connection - + 连接 Auto connect - + 自动连接 Connect to VPN on app start - + 应用启动时连接到VPN Use AmneziaDNS if installed on the server - + 使用AmneziaDNS,如果服务器上已安装 DNS servers - + DNS服务器列表 If AmneziaDNS is not used or installed - + 如果AmneziaDNS未使用或安装 @@ -1061,22 +1061,22 @@ And if you don't like the app, all the more support it - the donation will DNS servers - + DNS服务器列表 If AmneziaDNS is not used or installed - + Amnezia DNS未使用或安装 Restore default - + 恢复为默认DNS配置 Restore default DNS settings? - + 是否恢复为默认DNS配置? @@ -1091,7 +1091,7 @@ And if you don't like the app, all the more support it - the donation will Settings have been reset - + 已重配置 @@ -1101,7 +1101,7 @@ And if you don't like the app, all the more support it - the donation will Settings saved - + 配置已保存 @@ -1316,7 +1316,7 @@ And if you don't like the app, all the more support it - the donation will Servers - + 服务器列表 @@ -1743,7 +1743,7 @@ It's okay as long as it's from someone you trust. Connection - + 连接 @@ -1763,7 +1763,7 @@ It's okay as long as it's from someone you trust. Servers - + 服务器列表 From 2353cc4f2c7513d6a9cc62deff68109e629ac1bb Mon Sep 17 00:00:00 2001 From: ronoaer Date: Wed, 4 Oct 2023 15:48:35 +0800 Subject: [PATCH 07/15] translated sub-page of Settings to Chinese --- client/translations/amneziavpn_ru.ts | 19 +-- client/translations/amneziavpn_zh_CN.ts | 118 ++++++++++-------- .../ui/qml/Pages2/PageSettingsConnection.qml | 3 +- 3 files changed, 78 insertions(+), 62 deletions(-) diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index f108cbcd..df1cdf47 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -1029,36 +1029,41 @@ And if you don't like the app, all the more support it - the donation will - Use AmneziaDNS if installed on the server + Use AmneziaDNS - - DNS servers + + If AmneziaDNS is installed on the server + DNS servers + + + + If AmneziaDNS is not used or installed - + Split site tunneling - + Allows you to connect to some sites through a secure connection, and to others bypassing it - + Separate application tunneling - + Allows you to use the VPN only for certain applications diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index 08e170b1..cd46676f 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -6,7 +6,7 @@ Split tunneling for WireGuard is not implemented, the option was disabled - + 禁用选项,还未实现基于WireGuard协议的VPN分流 @@ -37,7 +37,7 @@ VPN Protocols is not installed. Please install VPN container at first - 未安装VPN协议,请安装 + 不存在VPN协议,请先安装 @@ -262,7 +262,7 @@ Already installed containers were found on the server. All installed containers Servers - 服务器列表 + 服务器 @@ -744,12 +744,12 @@ Already installed containers were found on the server. All installed containers Settings - 配置列表 + 设置 Servers - 服务器列表 + 服务器 @@ -769,7 +769,7 @@ Already installed containers were found on the server. All installed containers About AmneziaVPN - 关于AmneziaVPN + 关于 @@ -777,13 +777,14 @@ Already installed containers were found on the server. All installed containers Support the project with a donation - + 捐赠项目 This is a free and open source application. If you like it, support the developers with a donation. And if you don't like the app, all the more support it - the donation will be used to improve the app. - + 这是一个免费且开源的应用程序。如果您喜欢,请捐款支持开发人员。 +如果您不喜欢该应用程序,请更加支持它 - 捐款将用于改进该应用程序。 @@ -803,17 +804,17 @@ And if you don't like the app, all the more support it - the donation will Contacts - + 联系方式 Telegram group - + 电报群 To discuss features - + 用于功能讨论 @@ -823,12 +824,12 @@ And if you don't like the app, all the more support it - the donation will Mail - + 邮件 For reviews and bug reports - + 用于评论和提交软件的缺陷 @@ -843,7 +844,7 @@ And if you don't like the app, all the more support it - the donation will Website - + 官网 @@ -853,7 +854,7 @@ And if you don't like the app, all the more support it - the donation will Check for updates - + 检查更新 @@ -871,22 +872,22 @@ And if you don't like the app, all the more support it - the donation will Launch the application every time - 当系统 + 总是在系统 starts - 启动时应用自动运行 + 启动时自动运行运用程序 Start minimized - 最小化启动 + 最小化 Launch application minimized - 最小化启动应用程序 + 开启应用程序时窗口最小化 @@ -921,7 +922,7 @@ And if you don't like the app, all the more support it - the donation will All settings will be reset to default. All installed AmneziaVPN services will still remain on the server. - 所有配置恢复为默认值。所有已安装的AmneziaVPN服务将保留服务器上。 + 所有配置恢复为默认值。在服务器上保留所有已安装的AmneziaVPN服务。 @@ -939,7 +940,7 @@ And if you don't like the app, all the more support it - the donation will Settings restored from backup file - + 从备份文件还原配置 @@ -949,22 +950,22 @@ And if you don't like the app, all the more support it - the donation will Configuration backup - + 配置备份 It will help you instantly restore connection settings at the next installation - + 帮助您在下次安装时立即恢复连接设置 Make a backup - + 进行备份 Save backup file - + 保存备份 @@ -975,22 +976,22 @@ And if you don't like the app, all the more support it - the donation will Restore from backup - + 从备份还原 Open backup file - + 打开备份文件 Import settings from a backup file? - + 从备份文件导入设置? All current settings will be reset - + 当前所有设置将重置 @@ -1018,42 +1019,51 @@ And if you don't like the app, all the more support it - the donation will Connect to VPN on app start - 应用启动时连接到VPN + 应用开启时连接VPN + + + Use AmneziaDNS if installed on the server + 使用AmneziaDNS,如其已安装在服务器上 - Use AmneziaDNS if installed on the server - 使用AmneziaDNS,如果服务器上已安装 + Use AmneziaDNS + 使用AmneziaDNS - + + If AmneziaDNS is installed on the server + 如其已安装至服务上 + + + DNS servers DNS服务器列表 - + If AmneziaDNS is not used or installed - 如果AmneziaDNS未使用或安装 - - - - Split site tunneling - + 如果未使用或未安装AmneziaDNS - Allows you to connect to some sites through a secure connection, and to others bypassing it - + Split site tunneling + 网站级VPN分流 - - Separate application tunneling - + + Allows you to connect to some sites through a secure connection, and to others bypassing it + 使用VPN访问指定网站,其他的则绕过 + Separate application tunneling + 应用级VPN分流 + + + Allows you to use the VPN only for certain applications - + 仅限指定应用使用VPN @@ -1061,22 +1071,22 @@ And if you don't like the app, all the more support it - the donation will DNS servers - DNS服务器列表 + DNS服务器 If AmneziaDNS is not used or installed - Amnezia DNS未使用或安装 + 如果未使用或未安装Amnezia DNS Restore default - 恢复为默认DNS配置 + 恢复默认配置 Restore default DNS settings? - 是否恢复为默认DNS配置? + 是否恢复默认DNS配置? @@ -1316,7 +1326,7 @@ And if you don't like the app, all the more support it - the donation will Servers - 服务器列表 + 服务器 @@ -1334,7 +1344,7 @@ And if you don't like the app, all the more support it - the donation will Split site tunneling - + 网站级VPN分流 @@ -1629,7 +1639,7 @@ It's okay as long as it's from someone you trust. Settings restored from backup file - + 从备份文件还原配置 @@ -1763,7 +1773,7 @@ It's okay as long as it's from someone you trust. Servers - 服务器列表 + 服务器 diff --git a/client/ui/qml/Pages2/PageSettingsConnection.qml b/client/ui/qml/Pages2/PageSettingsConnection.qml index 78d4a681..ae5fd7f4 100644 --- a/client/ui/qml/Pages2/PageSettingsConnection.qml +++ b/client/ui/qml/Pages2/PageSettingsConnection.qml @@ -66,7 +66,8 @@ PageType { Layout.fillWidth: true Layout.margins: 16 - text: qsTr("Use AmneziaDNS if installed on the server") + text: qsTr("Use AmneziaDNS") + descriptionText: qsTr("If AmneziaDNS is installed on the server") checked: SettingsController.isAmneziaDnsEnabled() onCheckedChanged: { From 79d371fb76f94b5ea11e0149b33332ac83abb178 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Thu, 5 Oct 2023 00:54:49 +0800 Subject: [PATCH 08/15] translated pages from english to chinese --- client/translations/amneziavpn_ru.ts | 20 + client/translations/amneziavpn_zh_CN.ts | 581 ++++++++++---------- client/ui/controllers/installController.cpp | 4 +- client/ui/qml/Pages2/PageSettingsDns.qml | 4 +- 4 files changed, 325 insertions(+), 284 deletions(-) diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index df1cdf47..4f397034 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -176,11 +176,21 @@ Already installed containers were found on the server. All installed containers All containers from server ' + + + ' have been removed + + has been removed from the server ' + + + ' + + Please login as the user @@ -1080,6 +1090,16 @@ And if you don't like the app, all the more support it - the donation will If AmneziaDNS is not used or installed + + + Primary DNS + + + + + Secondary DNS + + Restore default diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index cd46676f..a956c4e0 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -20,7 +20,7 @@ VPN Connected Refers to the app - which is currently running the background and waiting - + VPN已连接 @@ -70,17 +70,17 @@ Connection data - + 连接数据 Server IP, login and password - + 服务器IP,用户名和密码 QR code, key or configuration file - + 二维码,授权码或者配置文件 @@ -88,22 +88,22 @@ C&ut - + 剪切 &Copy - + 拷贝 &Paste - + 粘贴 &SelectAll - + 全选 @@ -111,7 +111,7 @@ Access error! - + 访问错误 @@ -119,12 +119,12 @@ The selected protocol is not supported on the current platform - + 当前平台不支持所选协议 Reconnect via VPN Procotol: - + 重连基于VPN协议: @@ -132,7 +132,7 @@ Scanned %1 of %2. - + 扫描 %1 of %2. @@ -141,55 +141,65 @@ installed successfully. - + 安装成功 is already installed on the server. - + 已安装在服务上 Already installed containers were found on the server. All installed containers have been added to the application - + 在服务上发现已经安装协议并添加到应用程序 Settings updated successfully - + 配置更新成功 Server ' - + 服务器 ' was removed - + 已经移除 All containers from server ' + + + ' have been removed + + has been removed from the server ' + 协议已从 + + + + ' Please login as the user - + 请以用户身份登录 Server added successfully - + 服务器添加成功 @@ -197,17 +207,17 @@ Already installed containers were found on the server. All installed containers Read key failed: %1 - + 获取授权码失败: %1 Write key failed: %1 - + 写入授权码失败: %1 Delete key failed: %1 - + 删除授权码失败: %1 @@ -221,22 +231,22 @@ Already installed containers were found on the server. All installed containers VPN Connected - + 已连接到VPN VPN Disconnected - + 已从VPN断开 AmneziaVPN notification - + AmneziaVPN 提示 Unsecured network detected: - + 发现不安全网络 @@ -249,7 +259,7 @@ Already installed containers were found on the server. All installed containers Usually it takes no more than 5 minutes - + 通常5分钟之内完成 @@ -257,7 +267,7 @@ Already installed containers were found on the server. All installed containers VPN protocol - + VPN协议 @@ -270,28 +280,28 @@ Already installed containers were found on the server. All installed containers Cloak settings - + Cloak 配置 Disguised as traffic from - + 伪装流量来自 Port - + 端口 Cipher - + 解码 Save and Restart Amnezia - + 保存并重启Amnezia @@ -299,27 +309,27 @@ Already installed containers were found on the server. All installed containers OpenVPN settings - + OpenVPN 配置 VPN Addresses Subnet - + VPN子网掩码 Network protocol - + 网络协议 Port - + 端口 Auto-negotiate encryption - + 自动协商加密 @@ -381,7 +391,7 @@ Already installed containers were found on the server. All installed containers Cipher - + 解码 @@ -436,43 +446,43 @@ Already installed containers were found on the server. All installed containers TLS auth - + TLS认证 Block DNS requests outside of VPN - + 阻止VPN外的DNS请求 Additional client configuration commands - + 附加客户端配置命令 Commands: - + 命令: Additional server configuration commands - + 附加服务器端配置命令 Remove OpenVPN - + 移除OpenVPN Remove OpenVpn from server? - + 从服务器移除OpenVPN吗? All users with whom you shared a connection will no longer be able to connect to it - + 与您共享连接的所有用户将无法再连接到此链接 @@ -487,7 +497,7 @@ Already installed containers were found on the server. All installed containers Save and Restart Amnezia - + 保存并重启Amnezia @@ -495,33 +505,33 @@ Already installed containers were found on the server. All installed containers settings - + 配置 Show connection options - + 展示连接选项 Connection options - + 连接选项 Remove - + 移除 from server? - + 从服务器 All users with whom you shared a connection will no longer be able to connect to it - + 与您共享连接的所有用户将无法再连接到此链接 @@ -539,23 +549,23 @@ Already installed containers were found on the server. All installed containers ShadowSocks settings - + ShadowSocks 配置 Port - + 端口 Cipher - + 解码 Save and Restart Amnezia - + 保存并重启Amnezia @@ -564,23 +574,23 @@ Already installed containers were found on the server. All installed containers A DNS service is installed on your server, and it is only accessible via VPN. - + 您的服务器上安装了DNS服务,并且只能通过VPN访问。 The DNS address is the same as the address of your server. You can configure DNS in the settings, under the connections tab. - + DNS地址与您的服务器地址相同。您可以在连接选项卡下的设置中配置 DNS Remove - + 移除 from server? - + 从服务器 @@ -598,17 +608,17 @@ Already installed containers were found on the server. All installed containers Settings updated successfully - + 配置更新成功 SFTP settings - + SFTP 配置 Host - + 主机 @@ -616,59 +626,59 @@ Already installed containers were found on the server. All installed containers Copied - + 拷贝 Port - + 端口 Login - + 用户 Password - + 密码 Mount folder on device - + 在设备上挂载文件夹 In order to mount remote SFTP folder as local drive, perform following steps: <br> - + 要将远程 SFTP 文件夹安装为本地驱动器,请执行以下步骤: <br> <br>1. Install the latest version of - + <br>1. 安装最新版的 <br>2. Install the latest version of - + <br>2. 安装最新版的 Detailed instructions - + 详细说明 Remove SFTP and all data stored there - + 删除SFTP和其存储在这里的所有数据 Remove SFTP and all data stored there? - + 删除SFTP和其存储在这里的所有数据? @@ -686,27 +696,27 @@ Already installed containers were found on the server. All installed containers Settings updated successfully - + 配置更新成功 Tor website settings - + Tor网站配置 Website address - + 网址 Copied - + 拷贝 Use <a href="https://www.torproject.org/download/" style="color: #FBB26A;">Tor Browser</a> to open this url. - + Use <a href="https://www.torproject.org/download/" style="color: #FBB26A;">Tor 浏览器</a> to open this url. @@ -721,7 +731,7 @@ Already installed containers were found on the server. All installed containers Remove website - + 移除网站 @@ -1033,7 +1043,7 @@ And if you don't like the app, all the more support it - the donation will If AmneziaDNS is installed on the server - 如其已安装至服务上 + 如其已安装至服务器上 @@ -1078,6 +1088,16 @@ And if you don't like the app, all the more support it - the donation will If AmneziaDNS is not used or installed 如果未使用或未安装Amnezia DNS + + + Primary DNS + 首选 DNS + + + + Secondary DNS + 备用 DNS + Restore default @@ -1101,7 +1121,7 @@ And if you don't like the app, all the more support it - the donation will Settings have been reset - 已重配置 + 已重置 @@ -1177,27 +1197,27 @@ And if you don't like the app, all the more support it - the donation will All installed containers have been added to the application - + 所有已安装的容器已添加到应用程序中 No new installed containers found - + 未找到新安装的容器 Clear Amnezia cache - + 清除 Amnezia 缓存 May be needed when changing other settings - + 更改其他设置时可能需要 Clear cached profiles? - + 清除缓存的配置文件? @@ -1221,42 +1241,42 @@ And if you don't like the app, all the more support it - the donation will Check the server for previously installed Amnezia services - + 检查服务器上是否有以前安装的 Amnezia 服务 Add them to the application if they were not displayed - + 如果未显示,请将它们添加到应用程序中 Remove server from application - + 从应用程序中移除服务器 Remove server? - + 移除服务器? All installed AmneziaVPN services will still remain on the server. - + 所有已安装的 AmneziaVPN 服务仍将保留在服务器上。 Clear server from Amnezia software - + 从Amnezia中清除服务器 Clear server from Amnezia software? - + 从Amnezia中清除服务器? All containers will be deleted on the server. This means that configuration files, keys and certificates will be deleted. - + 服务器上的所有容器都将被删除。这意味着配置文件、密钥和证书将被删除。 @@ -1264,7 +1284,7 @@ And if you don't like the app, all the more support it - the donation will Server name - + 服务器名称 @@ -1274,17 +1294,17 @@ And if you don't like the app, all the more support it - the donation will Protocols - + 协议 Services - + 服务 Data - + 数据 @@ -1292,23 +1312,23 @@ And if you don't like the app, all the more support it - the donation will settings - + 配置 Remove - + 移除 from server? - + 从服务器 All users with whom you shared a connection will no longer be able to connect to it - + 与您共享连接的所有用户将无法再连接到此链接 @@ -1334,12 +1354,12 @@ And if you don't like the app, all the more support it - the donation will Only the addresses in the list must be opened via VPN - + 仅列表中的地址须通过VPN访问 Addresses from the list should never be opened via VPN - + 勿通过VPN访问列表中的地址 @@ -1349,12 +1369,12 @@ And if you don't like the app, all the more support it - the donation will Mode - + 方式 Remove - + 移除 @@ -1369,27 +1389,27 @@ And if you don't like the app, all the more support it - the donation will Site or IP - + 网址或IP地址 Import/Export Sites - + 导入/导出网址 Import - + 导入 Save site list - + 保存网址 Save sites - + 保存网址 @@ -1401,23 +1421,23 @@ And if you don't like the app, all the more support it - the donation will Import a list of sites - + 导入网址列表 Replace site list - + 替换网址列表 Open sites file - + 打开网址文件 Add imported sites to existing ones - + 将导入的网址添加到现有网址中 @@ -1425,14 +1445,15 @@ And if you don't like the app, all the more support it - the donation will Server connection - + 服务器连接 Do not use connection code from public sources. It may have been created to intercept your data. It's okay as long as it's from someone you trust. - + 请勿使用公共来源的连接代码。它可能是为了拦截您的数据而创建的。 +最好是来源可信。 @@ -1442,27 +1463,27 @@ It's okay as long as it's from someone you trust. File with connection settings or backup - + 包含连接配置或备份的文件 File with connection settings - + 包含连接配置的文件 Open config file - + 打开配置文件 QR-code - + 二维码 Key as text - + 授权码文本 @@ -1470,12 +1491,12 @@ It's okay as long as it's from someone you trust. Server connection - + 服务器连接 Server IP address [:port] - + 服务器IP [:端口] @@ -1485,12 +1506,12 @@ It's okay as long as it's from someone you trust. Login to connect via SSH - + 用户名 Password / SSH private key - + 密码 或者 私钥 @@ -1500,22 +1521,22 @@ It's okay as long as it's from someone you trust. Ip address cannot be empty - + IP不能为空 Enter the address in the format 255.255.255.255:88 - + 按照这种格式输入 255.255.255.255:88 Login cannot be empty - + 用户名不能为空 Password/private key cannot be empty - + 密码或者私钥不能为空 @@ -1523,17 +1544,17 @@ It's okay as long as it's from someone you trust. What is the level of internet control in your region? - + 您所在地区的互联网控制力度如何? Set up a VPN yourself - + 自己架设VPN I want to choose a VPN protocol - + 我想选择VPN协议 @@ -1543,7 +1564,7 @@ It's okay as long as it's from someone you trust. Set up later - + 稍后设置 @@ -1552,32 +1573,32 @@ It's okay as long as it's from someone you trust. Usually it takes no more than 5 minutes - + 通常不超过5分钟 The server has already been added to the application - + 服务器已添加到应用程序中 Amnesia has detected that your server is currently - + Amnezia 检测到您的服务器当前处于 busy installing other software. Amnesia installation - + 正安装其他软件。Amnezia安装 will pause until the server finishes installing other software - + 将暂停,直到服务器完成安装其他软件。 Installing - + 安装中 @@ -1595,17 +1616,17 @@ It's okay as long as it's from someone you trust. Close - + 关闭 Network protocol - + 网络协议 Port - + 端口 @@ -1618,12 +1639,12 @@ It's okay as long as it's from someone you trust. VPN protocol - + VPN 协议 Choose the one with the highest priority for you. Later, you can install other protocols and additional services, such as DNS proxy and SFTP. - + 选择最适合您的一项。稍后,您可以安装其他协议和附加服务,例如 DNS 代理和 SFTP。 @@ -1631,7 +1652,7 @@ It's okay as long as it's from someone you trust. Point the camera at the QR code and hold for a couple of seconds. - + 将相机对准二维码并按住几秒钟 @@ -1667,22 +1688,22 @@ It's okay as long as it's from someone you trust. Connection key - + 连接授权码 A line that starts with vpn://... - + 以 vpn://... 开始的行 Key - + 授权码 Insert - + 插入 @@ -1695,12 +1716,12 @@ It's okay as long as it's from someone you trust. New connection - + 新连接 Do not use connection code from public sources. It could be created to intercept your data. - + 请勿使用公共来源的连接代码。它可以被创建来拦截您的数据。 @@ -1723,32 +1744,32 @@ It's okay as long as it's from someone you trust. Save OpenVPN config - + 保存OpenVPN配置 Save WireGuard config - + 保存WireGuard配置 For the AmneziaVPN app - + 来自应用AmneziaVPN OpenVpn native format - + OpenVPN原生格式 WireGuard native format - + WireGuard原生格式 VPN Access - + 访问VPN @@ -1758,17 +1779,17 @@ It's okay as long as it's from someone you trust. Full access - + 完全授权 VPN access without the ability to manage the server - + VPN 访问,不能管理服务器 Full access to server - + 完全授权方式访问服务器 @@ -1778,44 +1799,44 @@ It's okay as long as it's from someone you trust. Server - + 服务器 Accessing - + 访问 File with connection settings to - + 连接配置文件到 Protocols - + 协议 Protocol - + 协议 Connection to - + 连接到 Connection format - + 连接方式 Share - + 共享 @@ -1823,7 +1844,7 @@ It's okay as long as it's from someone you trust. Close - + 关闭 @@ -1831,38 +1852,38 @@ It's okay as long as it's from someone you trust. Password entry not found - + 没有密码输入 Could not decrypt data - + 不能加密数据 Unknown error - + 位置错误 Could not open wallet: %1; %2 - + 无法打开钱包: %1; %2 Password not found - + 未发现密码 Could not open keystore - + 无法打开密钥库 Could not remove private key from keystore - + 无法从密钥库中删除私钥 @@ -1870,12 +1891,12 @@ It's okay as long as it's from someone you trust. Unknown error - + 未知错误 Access to keychain denied - + 访问钥匙串被拒绝 @@ -1883,27 +1904,27 @@ It's okay as long as it's from someone you trust. Could not store data in settings: access error - + 无法在配置中存储数据:访问错误 Could not store data in settings: format error - + 无法在陪置中存储数据:格式错误 Could not delete data from settings: access error - + 无法在配置中删除数据:访问错误 Could not delete data from settings: format error - + 无法在配置中删除数据:格式错误 Entry not found - + 未找到条目 @@ -1911,13 +1932,13 @@ It's okay as long as it's from someone you trust. Password entry not found - + 没有密码输入 Could not decrypt data - + 不能加密数据 @@ -1938,12 +1959,12 @@ It's okay as long as it's from someone you trust. Could not open wallet: %1; %2 - + 无法打开钱包: %1; %2 Access to keychain denied - + 访问钥匙串被拒绝 @@ -1969,12 +1990,12 @@ It's okay as long as it's from someone you trust. Password not found - + 未发现密码 Could not open keystore - + 无法打开密钥库 @@ -2023,17 +2044,17 @@ It's okay as long as it's from someone you trust. Could not open wallet: %1; %2 - + 无法打开钱包: %1; %2 Password not found - + 未发现密码 Could not open keystore - + 无法打开密钥库 @@ -2066,107 +2087,107 @@ It's okay as long as it's from someone you trust. Sftp service - + Sftp 服务 No error - + 没有错误 Unknown Error - + 位置错误 Function not implemented - + 功能未实现 Server check failed - + 服务器检测失败 Server port already used. Check for another software - + 检测服务器该端口是否被其他软件被占用 Server error: Docker container missing - + Server error: Docker容器丢失 Server error: Docker failed - + Server error: Docker失败 Installation canceled by user - + 用户取消安装 The user does not have permission to use sudo - + 用户没有root权限 Ssh request was denied - + ssh请求被拒绝 Ssh request was interrupted - + ssh请求中断 Ssh internal error - + ssh内部错误 Invalid private key or invalid passphrase entered - + 输入的私钥或密码无效 The selected private key format is not supported, use openssh ED25519 key types or PEM key types - + 不支持所选私钥格式,请使用 openssh ED25519 密钥类型或 PEM 密钥类型 Timeout connecting to server - + 连接服务器超时 Sftp error: End-of-file encountered - + Sftp错误: 遇到文件结尾 Sftp error: File does not exist - + Sftp错误: 文件不存在 Sftp error: Permission denied - + Sftp错误: 权限受限 Sftp error: Generic failure - + Sftp错误: 一般失败 Sftp error: Garbage received from server - + Sftp错误: 从服务器收到垃圾信息 @@ -2211,67 +2232,67 @@ It's okay as long as it's from someone you trust. Failed to save config to disk - + 配置保存到磁盘失败 OpenVPN config missing - + OpenVPN配置丢失 OpenVPN management server error - + OpenVPN 管理服务器错误 OpenVPN executable missing - + OpenVPN 可执行文件丢失 ShadowSocks (ss-local) executable missing - + ShadowSocks (ss-local) 执行文件丢失 Cloak (ck-client) executable missing - + Cloak (ck-client) 执行文件丢失 Amnezia helper service error - + Amnezia 帮助服务错误 OpenSSL failed - + OpenSSL失败 Can't connect: another VPN connection is active - + 无法连接:另一个VPN连接处于活动状态 Can't setup OpenVPN TAP network adapter - + 无法设置 OpenVPN TAP 网络适配器 VPN pool error: no available addresses - + VPN 池错误:没有可用地址 The config does not contain any containers and credentiaks for connecting to the server - + 该配置不包含任何用于连接到服务器的容器和凭据。 Internal error - + 内部错误 @@ -2292,142 +2313,142 @@ It's okay as long as it's from someone you trust. Sftp file sharing service - + SFTP文件共享服务 OpenVPN is the most popular VPN protocol, with flexible configuration options. It uses its own security protocol with SSL/TLS for key exchange. - + OpenVPN 是最流行的 VPN 协议,具有灵活的配置选项。它使用自己的安全协议与 SSL/TLS 进行密钥交换。 ShadowSocks - masks VPN traffic, making it similar to normal web traffic, but is recognised by analysis systems in some highly censored regions. - + ShadowSocks - 混淆 VPN 流量,使其与正常的 Web 流量相似,但在一些审查力度高的地区可以被分析系统识别。 OpenVPN over Cloak - OpenVPN with VPN masquerading as web traffic and protection against active-probbing detection. Ideal for bypassing blocking in regions with the highest levels of censorship. - + OpenVPN over Cloak - OpenVPN,具有伪装成网络流量的 VPN 和针对主动探测检测的保护.非常适合绕过审查力度特别强的地区的封锁。 WireGuard - New popular VPN protocol with high performance, high speed and low power consumption. Recommended for regions with low levels of censorship. - + WireGuard - 新型流行的VPN协议,具有高性能、高速度和低功耗。建议用于审查力度较低的地区 IKEv2 - Modern stable protocol, a bit faster than others, restores connection after signal loss. It has native support on the latest versions of Android and iOS. - + IKEv2 - 现代稳定协议,比其他协议快一点,在信号丢失后恢复连接。Android 和 iOS最新版原生支持。 Deploy a WordPress site on the Tor network in two clicks. - + 只需点击两次即可在 Tor 网络上部署 WordPress 网站 Replace the current DNS server with your own. This will increase your privacy level. - + 将当前的 DNS 服务器替换为您自己的。这将提高您的隐私级别。 Creates a file vault on your server to securely store and transfer files. - + 在您的服务器上创建文件库以安全地存储和传输文件 OpenVPN container - + OpenVPN容器 Container with OpenVpn and ShadowSocks - + 带有 OpenVpn 和 ShadowSocks 的容器 Container with OpenVpn and ShadowSocks protocols configured with traffic masking by Cloak plugin - + 具有 OpenVpn 和 ShadowSocks 协议的容器,通过 Cloak 插件配置混淆流量 WireGuard container - + WireGuard 容器 IPsec container - + IPsec 容器 DNS Service - + DNS 服务 Sftp file sharing service - is secure FTP service - + Sftp 文件共享服务 - 安全的 FTP 服务 Entry not found - + 未找到记录 Access to keychain denied - + 访问钥匙串被拒绝 No keyring daemon - + 没有密钥环守护进程 Already unlocked - + 已经解锁 No such keyring - + 没有这样的密钥环 Bad arguments - + 错误参数 I/O error - + I/O错误 Cancelled - + 已取消 Keyring already exists - + 密匙环已经存在 No match - + 不匹配 Unknown error - + 未知错误 error 0x%1: %2 - + 错误 0x%1: %2 @@ -2449,7 +2470,7 @@ It's okay as long as it's from someone you trust. Server - + 服务器 @@ -2486,7 +2507,7 @@ It's okay as long as it's from someone you trust. Share - + 共享 @@ -2496,7 +2517,7 @@ It's okay as long as it's from someone you trust. Copied - + 拷贝 @@ -2557,7 +2578,7 @@ It's okay as long as it's from someone you trust. Show - + 显示界面 @@ -2567,17 +2588,17 @@ It's okay as long as it's from someone you trust. Disconnect - + 断开 Visit Website - + 访问官网 Quit - + 退出 @@ -2593,22 +2614,22 @@ It's okay as long as it's from someone you trust. Unknown - + 未知 Disconnected - + 断开连接 Preparing - + 准备中 Connecting... - + 连接中 @@ -2618,17 +2639,17 @@ It's okay as long as it's from someone you trust. Disconnecting... - + 断开中 Reconnecting... - + 重连中 Error - + 错误 @@ -2636,32 +2657,32 @@ It's okay as long as it's from someone you trust. Low - + High - + Medium - + I just want to increase the level of privacy - + 我只是想提高隐私级别 Many foreign websites and VPN providers are blocked - + 许多国外网站和VPN提供商被屏蔽 Some foreign sites are blocked, but VPN providers are not blocked - + 一些国外网站被屏蔽,但VPN提供商未被屏蔽 @@ -2669,7 +2690,7 @@ It's okay as long as it's from someone you trust. Private key passphrase - + 私钥密码 diff --git a/client/ui/controllers/installController.cpp b/client/ui/controllers/installController.cpp index 63510d1a..8b77252f 100644 --- a/client/ui/controllers/installController.cpp +++ b/client/ui/controllers/installController.cpp @@ -288,7 +288,7 @@ void InstallController::removeAllContainers() ErrorCode errorCode = m_containersModel->removeAllContainers(); if (errorCode == ErrorCode::NoError) { - emit removeAllContainersFinished(tr("All containers from server '") + serverName + ("' have been removed")); + emit removeAllContainersFinished(tr("All containers from server '") + serverName + tr("' have been removed")); return; } emit installationErrorOccurred(errorString(errorCode)); @@ -305,7 +305,7 @@ void InstallController::removeCurrentlyProcessedContainer() ErrorCode errorCode = m_containersModel->removeCurrentlyProcessedContainer(); if (errorCode == ErrorCode::NoError) { emit removeCurrentlyProcessedContainerFinished(containerName + tr(" has been removed from the server '") - + serverName + "'"); + + serverName + tr("'")); return; } emit installationErrorOccurred(errorString(errorCode)); diff --git a/client/ui/qml/Pages2/PageSettingsDns.qml b/client/ui/qml/Pages2/PageSettingsDns.qml index 0bc13eae..58ec0783 100644 --- a/client/ui/qml/Pages2/PageSettingsDns.qml +++ b/client/ui/qml/Pages2/PageSettingsDns.qml @@ -53,7 +53,7 @@ PageType { id: primaryDns Layout.fillWidth: true - headerText: "Primary DNS" + headerText: qsTr("Primary DNS") textFieldText: SettingsController.primaryDns textField.validator: RegularExpressionValidator { @@ -65,7 +65,7 @@ PageType { id: secondaryDns Layout.fillWidth: true - headerText: "Secondary DNS" + headerText: qsTr("Secondary DNS") textFieldText: SettingsController.secondaryDns textField.validator: RegularExpressionValidator { From 08defbbbd84f7e5f4fddbbb490841ca5b6a9d69f Mon Sep 17 00:00:00 2001 From: ronoaer Date: Thu, 5 Oct 2023 13:26:11 +0800 Subject: [PATCH 09/15] updated original string format, for adapting multi-language --- client/translations/amneziavpn_ru.ts | 66 +++---- client/translations/amneziavpn_zh_CN.ts | 183 ++++++++++-------- client/ui/controllers/installController.cpp | 18 +- client/ui/controllers/sitesController.cpp | 10 +- client/ui/qml/Pages2/PageDeinstalling.qml | 2 +- client/ui/qml/Pages2/PageProtocolRaw.qml | 2 +- .../ui/qml/Pages2/PageServiceDnsSettings.qml | 2 +- .../qml/Pages2/PageSettingsServerProtocol.qml | 2 +- 8 files changed, 140 insertions(+), 145 deletions(-) diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index 4f397034..000e0907 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -139,65 +139,50 @@ InstallController - - installed successfully. + + %1 installed successfully. - - - is already installed on the server. + + + %1 is already installed on the server. - - + + Already installed containers were found on the server. All installed containers have been added to the application - + Settings updated successfully - - Server ' + + Server '%1' was removed - - ' was removed + + All containers from server '%1' have been removed - - All containers from server ' + + 1% has been removed from the server '%2' - - ' have been removed - - - - - has been removed from the server ' - - - - - ' - - - - + Please login as the user - + Server added successfully @@ -253,7 +238,7 @@ Already installed containers were found on the server. All installed containers PageDeinstalling - Removing services from + Removing services from %1 @@ -519,13 +504,12 @@ Already installed containers were found on the server. All installed containers - Remove - from server? + Remove %1 from server? @@ -590,13 +574,12 @@ Already installed containers were found on the server. All installed containers - Remove - from server? + Remove %1 from server? @@ -1318,13 +1301,12 @@ And if you don't like the app, all the more support it - the donation will - Remove - from server? + Remove %1 from server? @@ -2540,22 +2522,22 @@ It's okay as long as it's from someone you trust. - New site added: + New site added: %1 - Site removed: + Site removed: %1 - Can't open file: + Can't open file: %1 - Failed to parse JSON data from file: + Failed to parse JSON data from file: %1 diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index a956c4e0..71e0169b 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -6,7 +6,7 @@ Split tunneling for WireGuard is not implemented, the option was disabled - 禁用选项,还未实现基于WireGuard协议的VPN分流 + 未启用选项,还未实现基于WireGuard协议的VPN分流 @@ -138,66 +138,72 @@ InstallController - - installed successfully. - 安装成功 + 安装成功 - - is already installed on the server. - 已安装在服务上 + 已安装在服务器上 - - + + + %1 installed successfully. + %1 安装成功。 + + + + + %1 is already installed on the server. + 服务器上已经安装 %1。 + + + + Already installed containers were found on the server. All installed containers have been added to the application - 在服务上发现已经安装协议并添加到应用程序 + +在服务上发现已经安装协议并添加到应用程序 - + Settings updated successfully 配置更新成功 - + + Server '%1' was removed + 已移除服务器 '%1' + + + + All containers from server '%1' have been removed + 服务器 '%1' 的所有容器已移除 + + + + 1% has been removed from the server '%2' + 容器 1% 已从服务器 '%2' 上移除 + + Server ' - 服务器 + 服务器 - ' was removed - 已经移除 + 已经移除 - - All containers from server ' - - - - - ' have been removed - - - - has been removed from the server ' - 协议已从 + 协议已从 - - ' - - - - + Please login as the user 请以用户身份登录 - + Server added successfully 服务器添加成功 @@ -253,8 +259,8 @@ Already installed containers were found on the server. All installed containers PageDeinstalling - Removing services from - + Removing services from %1 + 正从 %1 移除服务 @@ -519,14 +525,17 @@ Already installed containers were found on the server. All installed containers - Remove 移除 + Remove %1 from server? + 从服务器移除 %1 ? + + from server? - 从服务器 + 从服务器 @@ -583,14 +592,17 @@ Already installed containers were found on the server. All installed containers - Remove 移除 + Remove %1 from server? + 从服务器移除 %1 ? + + from server? - 从服务器 + 从服务器 @@ -673,12 +685,12 @@ Already installed containers were found on the server. All installed containers Remove SFTP and all data stored there - 删除SFTP和其存储在这里的所有数据 + 移除SFTP和其本地所有数据 Remove SFTP and all data stored there? - 删除SFTP和其存储在这里的所有数据? + 移除SFTP和其本地所有数据? @@ -864,7 +876,7 @@ And if you don't like the app, all the more support it - the donation will Check for updates - 检查更新 + 更新 @@ -917,7 +929,7 @@ And if you don't like the app, all the more support it - the donation will Disabled - 关闭 + 禁用 @@ -1241,22 +1253,22 @@ And if you don't like the app, all the more support it - the donation will Check the server for previously installed Amnezia services - 检查服务器上是否有以前安装的 Amnezia 服务 + 检查服务器上是否存在 Amnezia 服务 Add them to the application if they were not displayed - 如果未显示,请将它们添加到应用程序中 + 如果存在且未被显示,则添加到应用程序里 Remove server from application - 从应用程序中移除服务器 + 移除本地服务器信息 Remove server? - 移除服务器? + 移除本地服务器信息? @@ -1266,7 +1278,7 @@ And if you don't like the app, all the more support it - the donation will Clear server from Amnezia software - 从Amnezia中清除服务器 + 移除Amnezia中服务器信息 @@ -1316,14 +1328,17 @@ And if you don't like the app, all the more support it - the donation will - Remove 移除 - from server? - 从服务器 + 从服务器 + + + + Remove %1 from server? + 从服务器移除 %1 ? @@ -1374,7 +1389,7 @@ And if you don't like the app, all the more support it - the donation will Remove - 移除 + 移除 @@ -1583,7 +1598,7 @@ It's okay as long as it's from someone you trust. Amnesia has detected that your server is currently - Amnezia 检测到您的服务器当前处于 + Amnezia 检测到您的服务器当前 @@ -1731,7 +1746,7 @@ It's okay as long as it's from someone you trust. Show content - + 展示内容 @@ -1754,7 +1769,7 @@ It's okay as long as it's from someone you trust. For the AmneziaVPN app - 来自应用AmneziaVPN + AmneziaVPN 应用 @@ -1779,17 +1794,17 @@ It's okay as long as it's from someone you trust. Full access - 完全授权 + 完整授权 VPN access without the ability to manage the server - VPN 访问,不能管理服务器 + 无权控制服务器 Full access to server - 完全授权方式访问服务器 + 获得服务器完整授权 @@ -1810,7 +1825,7 @@ It's okay as long as it's from someone you trust. File with connection settings to - 连接配置文件到 + 连接配置文件的内容为: @@ -2000,12 +2015,12 @@ It's okay as long as it's from someone you trust. Could not retrieve private key from keystore - + 无法从密钥存储库中检索私钥 Could not create decryption cipher - + 无法创建解密密码 @@ -2059,27 +2074,27 @@ It's okay as long as it's from someone you trust. Could not create private key generator - + 无法创建私钥生成器 Could not generate new private key - + 无法生成新的私钥 Could not retrieve private key from keystore - + 无法从密钥库检索私钥 Could not create encryption cipher - + 无法创建加密密码 Could not encrypt data - + 无法加密数据 @@ -2328,7 +2343,7 @@ It's okay as long as it's from someone you trust. OpenVPN over Cloak - OpenVPN with VPN masquerading as web traffic and protection against active-probbing detection. Ideal for bypassing blocking in regions with the highest levels of censorship. - OpenVPN over Cloak - OpenVPN,具有伪装成网络流量的 VPN 和针对主动探测检测的保护.非常适合绕过审查力度特别强的地区的封锁。 + OpenVPN over Cloak - OpenVPN 与 VPN 具有伪装成网络流量和防止主动探测检测的保护。非常适合绕过审查力度特别强的地区的封锁。 @@ -2338,7 +2353,7 @@ It's okay as long as it's from someone you trust. IKEv2 - Modern stable protocol, a bit faster than others, restores connection after signal loss. It has native support on the latest versions of Android and iOS. - IKEv2 - 现代稳定协议,比其他协议快一点,在信号丢失后恢复连接。Android 和 iOS最新版原生支持。 + IKEv2 - 现代稳定协议,相比其他协议较快一些,在信号丢失后恢复连接。Android 和 iOS最新版原生支持。 @@ -2478,22 +2493,22 @@ It's okay as long as it's from someone you trust. Software version - + 软件版本 Backup file is corrupted - + 备份文件已损坏 All settings have been reset to default values - + 所配置恢复为默认值 Cached profiles cleared - + 缓存的配置文件已清除 @@ -2502,7 +2517,7 @@ It's okay as long as it's from someone you trust. Save AmneziaVPN config - + 保存配置 @@ -2512,22 +2527,22 @@ It's okay as long as it's from someone you trust. Copy - + 拷贝 Copied - 拷贝 + 已拷贝 Show content - + 展示内容 To read the QR code in the Amnezia app, select "Add server" → "I have data to connect" → "QR code, key or settings file" - + 要读取 Amnezia 应用程序中的二维码,请选择“添加服务器”→“我有数据要连接”→“二维码、密钥或配置文件” @@ -2539,22 +2554,22 @@ It's okay as long as it's from someone you trust. - New site added: + New site added: %1 - Site removed: + Site removed: %1 - Can't open file: + Can't open file: %1 - Failed to parse JSON data from file: + Failed to parse JSON data from file: %1 @@ -2593,7 +2608,7 @@ It's okay as long as it's from someone you trust. Visit Website - 访问官网 + 官网 @@ -2677,7 +2692,7 @@ It's okay as long as it's from someone you trust. Many foreign websites and VPN providers are blocked - 许多国外网站和VPN提供商被屏蔽 + 大多国外网站和VPN提供商被屏蔽 diff --git a/client/ui/controllers/installController.cpp b/client/ui/controllers/installController.cpp index 8b77252f..b03a45d8 100644 --- a/client/ui/controllers/installController.cpp +++ b/client/ui/controllers/installController.cpp @@ -107,10 +107,9 @@ void InstallController::installServer(DockerContainer container, QJsonObject &co if (!installedContainers.contains(container)) { errorCode = serverController.setupContainer(m_currentlyInstalledServerCredentials, container, config); installedContainers.insert(container, config); - finishMessage = ContainerProps::containerHumanNames().value(container) + tr(" installed successfully. "); + finishMessage = tr("%1 installed successfully. ").arg(ContainerProps::containerHumanNames().value(container)); } else { - finishMessage = - ContainerProps::containerHumanNames().value(container) + tr(" is already installed on the server. "); + finishMessage = tr("%1 is already installed on the server. ").arg(ContainerProps::containerHumanNames().value(container)); } if (installedContainers.size() > 1) { finishMessage += tr("\nAlready installed containers were found on the server. " @@ -160,10 +159,9 @@ void InstallController::installContainer(DockerContainer container, QJsonObject if (!installedContainers.contains(container)) { errorCode = serverController.setupContainer(serverCredentials, container, config); installedContainers.insert(container, config); - finishMessage = ContainerProps::containerHumanNames().value(container) + tr(" installed successfully. "); + finishMessage = tr("%1 installed successfully. ").arg(ContainerProps::containerHumanNames().value(container)); } else { - finishMessage = - ContainerProps::containerHumanNames().value(container) + tr(" is already installed on the server. "); + finishMessage = tr("%1 is already installed on the server. ").arg(ContainerProps::containerHumanNames().value(container)); } bool isInstalledContainerAddedToGui = false; @@ -278,7 +276,7 @@ void InstallController::removeCurrentlyProcessedServer() QString serverName = m_serversModel->data(serverIndex, ServersModel::Roles::NameRole).toString(); m_serversModel->removeServer(); - emit removeCurrentlyProcessedServerFinished(tr("Server '") + serverName + tr("' was removed")); + emit removeCurrentlyProcessedServerFinished(tr("Server '%1' was removed").arg(serverName)); } void InstallController::removeAllContainers() @@ -288,7 +286,7 @@ void InstallController::removeAllContainers() ErrorCode errorCode = m_containersModel->removeAllContainers(); if (errorCode == ErrorCode::NoError) { - emit removeAllContainersFinished(tr("All containers from server '") + serverName + tr("' have been removed")); + emit removeAllContainersFinished(tr("All containers from server '%1' have been removed").arg(serverName)); return; } emit installationErrorOccurred(errorString(errorCode)); @@ -304,8 +302,8 @@ void InstallController::removeCurrentlyProcessedContainer() ErrorCode errorCode = m_containersModel->removeCurrentlyProcessedContainer(); if (errorCode == ErrorCode::NoError) { - emit removeCurrentlyProcessedContainerFinished(containerName + tr(" has been removed from the server '") - + serverName + tr("'")); + + emit removeCurrentlyProcessedContainerFinished(tr("1% has been removed from the server '%2'").arg(containerName).arg(serverName)); return; } emit installationErrorOccurred(errorString(errorCode)); diff --git a/client/ui/controllers/sitesController.cpp b/client/ui/controllers/sitesController.cpp index a27e91d0..4d0391be 100644 --- a/client/ui/controllers/sitesController.cpp +++ b/client/ui/controllers/sitesController.cpp @@ -64,7 +64,7 @@ void SitesController::addSite(QString hostname) QHostInfo::lookupHost(hostname, this, resolveCallback); } - emit finished(tr("New site added: ") + hostname); + emit finished(tr("New site added: %1").arg(hostname)); } void SitesController::removeSite(int index) @@ -77,7 +77,7 @@ void SitesController::removeSite(int index) Q_ARG(QStringList, QStringList() << hostname)); QMetaObject::invokeMethod(m_vpnConnection.get(), "flushDns", Qt::QueuedConnection); - emit finished(tr("Site removed: ") + hostname); + emit finished(tr("Site removed: %1").arg(hostname)); } void SitesController::importSites(const QString &fileName, bool replaceExisting) @@ -85,19 +85,19 @@ void SitesController::importSites(const QString &fileName, bool replaceExisting) QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { - emit errorOccurred(tr("Can't open file: ") + fileName); + emit errorOccurred(tr("Can't open file: %1").arg(fileName)); return; } QByteArray jsonData = file.readAll(); QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonData); if (jsonDocument.isNull()) { - emit errorOccurred(tr("Failed to parse JSON data from file: ") + fileName); + emit errorOccurred(tr("Failed to parse JSON data from file: %1").arg(fileName)); return; } if (!jsonDocument.isArray()) { - emit errorOccurred(tr("The JSON data is not an array in file: ") + fileName); + emit errorOccurred(tr("The JSON data is not an array in file: ").arg(fileName)); return; } diff --git a/client/ui/qml/Pages2/PageDeinstalling.qml b/client/ui/qml/Pages2/PageDeinstalling.qml index 243b1205..8dffbbce 100644 --- a/client/ui/qml/Pages2/PageDeinstalling.qml +++ b/client/ui/qml/Pages2/PageDeinstalling.qml @@ -59,7 +59,7 @@ PageType { Layout.fillWidth: true Layout.topMargin: 20 - headerText: qsTr("Removing services from ") + name + headerText: qsTr("Removing services from %1").arg(name) } ProgressBarType { diff --git a/client/ui/qml/Pages2/PageProtocolRaw.qml b/client/ui/qml/Pages2/PageProtocolRaw.qml index 8bbfab14..34ca4055 100644 --- a/client/ui/qml/Pages2/PageProtocolRaw.qml +++ b/client/ui/qml/Pages2/PageProtocolRaw.qml @@ -173,7 +173,7 @@ PageType { textColor: "#EB5757" clickedFunction: function() { - questionDrawer.headerText = qsTr("Remove ") + ContainersModel.getCurrentlyProcessedContainerName() + qsTr(" from server?") + questionDrawer.headerText = qsTr("Remove %1 from server?").arg(ContainersModel.getCurrentlyProcessedContainerName()) questionDrawer.descriptionText = qsTr("All users with whom you shared a connection will no longer be able to connect to it") questionDrawer.yesButtonText = qsTr("Continue") questionDrawer.noButtonText = qsTr("Cancel") diff --git a/client/ui/qml/Pages2/PageServiceDnsSettings.qml b/client/ui/qml/Pages2/PageServiceDnsSettings.qml index 016a7c88..10fe6f56 100644 --- a/client/ui/qml/Pages2/PageServiceDnsSettings.qml +++ b/client/ui/qml/Pages2/PageServiceDnsSettings.qml @@ -63,7 +63,7 @@ PageType { textColor: "#EB5757" clickedFunction: function() { - questionDrawer.headerText = qsTr("Remove ") + ContainersModel.getCurrentlyProcessedContainerName() + qsTr(" from server?") + questionDrawer.headerText = qsTr("Remove %1 from server?").arg(ContainersModel.getCurrentlyProcessedContainerName()) questionDrawer.yesButtonText = qsTr("Continue") questionDrawer.noButtonText = qsTr("Cancel") diff --git a/client/ui/qml/Pages2/PageSettingsServerProtocol.qml b/client/ui/qml/Pages2/PageSettingsServerProtocol.qml index 14d34590..998948d1 100644 --- a/client/ui/qml/Pages2/PageSettingsServerProtocol.qml +++ b/client/ui/qml/Pages2/PageSettingsServerProtocol.qml @@ -113,7 +113,7 @@ PageType { textColor: "#EB5757" clickedFunction: function() { - questionDrawer.headerText = qsTr("Remove ") + ContainersModel.getCurrentlyProcessedContainerName() + qsTr(" from server?") + questionDrawer.headerText = qsTr("Remove %1 from server?").arg(ContainersModel.getCurrentlyProcessedContainerName()) questionDrawer.descriptionText = qsTr("All users with whom you shared a connection will no longer be able to connect to it") questionDrawer.yesButtonText = qsTr("Continue") questionDrawer.noButtonText = qsTr("Cancel") From 1eafa9a38a8c0c02d8f85e4c0afdda50d58012b7 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Thu, 5 Oct 2023 23:47:50 +0800 Subject: [PATCH 10/15] updated about and tor --- client/translations/amneziavpn_zh_CN.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index 71e0169b..e7171ce2 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -728,17 +728,17 @@ Already installed containers were found on the server. All installed containers Use <a href="https://www.torproject.org/download/" style="color: #FBB26A;">Tor Browser</a> to open this url. - Use <a href="https://www.torproject.org/download/" style="color: #FBB26A;">Tor 浏览器</a> to open this url. + 用 <a href="https://www.torproject.org/download/" style="color: #FBB26A;">Tor 浏览器</a> 打开上面网址 After installation it takes several minutes while your onion site will become available in the Tor Network. - + 安装几分钟后,洋葱站点才会在 Tor 网络中生效。 When configuring WordPress set the domain as this onion address. - + 配置 WordPress 时,将域设置为此洋葱地址。 @@ -748,7 +748,7 @@ Already installed containers were found on the server. All installed containers The site with all data will be removed from the tor network. - + 网站及其所有数据将从 Tor 网络中删除 @@ -805,13 +805,13 @@ Already installed containers were found on the server. All installed containers This is a free and open source application. If you like it, support the developers with a donation. And if you don't like the app, all the more support it - the donation will be used to improve the app. - 这是一个免费且开源的应用程序。如果您喜欢,请捐款支持开发人员。 -如果您不喜欢该应用程序,请更加支持它 - 捐款将用于改进该应用程序。 + 这是一个免费且开源的应用。如果您喜欢,请捐助支持我们。 +如果您不喜欢该应用,请更加支持它 - 捐款将用于改进该应用。 Card on Patreon - + 请在Patreon上支持我们 @@ -2358,7 +2358,7 @@ It's okay as long as it's from someone you trust. Deploy a WordPress site on the Tor network in two clicks. - 只需点击两次即可在 Tor 网络上部署 WordPress 网站 + 只需点两次即可架设 WordPress 网站到 Tor 网络 @@ -2593,7 +2593,7 @@ It's okay as long as it's from someone you trust. Show - 显示界面 + 界面 From 1357c4a3096f7c142d505cad48b01e31ef2c52e7 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Fri, 6 Oct 2023 13:43:32 +0800 Subject: [PATCH 11/15] applied translation-funcation to SystemTray --- client/amnezia_application.cpp | 1 + client/ui/notificationhandler.cpp | 4 ++++ client/ui/notificationhandler.h | 1 + client/ui/systemtray_notificationhandler.cpp | 17 ++++++++++++----- client/ui/systemtray_notificationhandler.h | 6 +++++- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 01b37229..801b90b4 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -139,6 +139,7 @@ void AmneziaApplication::init() &ConnectionController::openConnection); connect(m_notificationHandler.get(), &NotificationHandler::disconnectRequested, m_connectionController.get(), &ConnectionController::closeConnection); + connect(this, &AmneziaApplication::translationsUpdated, m_notificationHandler.get(), &NotificationHandler::onTranslationsUpdated); m_engine->load(url); m_systemController->setQmlRoot(m_engine->rootObjects().value(0)); diff --git a/client/ui/notificationhandler.cpp b/client/ui/notificationhandler.cpp index f932eb17..1f81c2c2 100644 --- a/client/ui/notificationhandler.cpp +++ b/client/ui/notificationhandler.cpp @@ -88,6 +88,10 @@ void NotificationHandler::setConnectionState(Vpn::ConnectionState state) } } +void NotificationHandler::onTranslationsUpdated() +{ +} + void NotificationHandler::unsecuredNetworkNotification(const QString& networkName) { qDebug() << "Unsecured network notification shown"; diff --git a/client/ui/notificationhandler.h b/client/ui/notificationhandler.h index 9a2182de..abdce27b 100644 --- a/client/ui/notificationhandler.h +++ b/client/ui/notificationhandler.h @@ -32,6 +32,7 @@ public: public slots: virtual void setConnectionState(Vpn::ConnectionState state); + virtual void onTranslationsUpdated(); signals: void notificationShown(const QString& title, const QString& message); diff --git a/client/ui/systemtray_notificationhandler.cpp b/client/ui/systemtray_notificationhandler.cpp index 6adc8818..2c7c695f 100644 --- a/client/ui/systemtray_notificationhandler.cpp +++ b/client/ui/systemtray_notificationhandler.cpp @@ -17,7 +17,6 @@ #include "version.h" - SystemTrayNotificationHandler::SystemTrayNotificationHandler(QObject* parent) : NotificationHandler(parent), m_systemTrayIcon(parent) @@ -26,8 +25,7 @@ SystemTrayNotificationHandler::SystemTrayNotificationHandler(QObject* parent) : m_systemTrayIcon.show(); connect(&m_systemTrayIcon, &QSystemTrayIcon::activated, this, &SystemTrayNotificationHandler::onTrayActivated); - - m_menu.addAction(QIcon(":/images/tray/application.png"), tr("Show") + " " + APPLICATION_NAME, this, [this](){ + m_trayActionShow = m_menu.addAction(QIcon(":/images/tray/application.png"), tr("Show") + " " + APPLICATION_NAME, this, [this](){ emit raiseRequested(); }); m_menu.addSeparator(); @@ -36,11 +34,11 @@ SystemTrayNotificationHandler::SystemTrayNotificationHandler(QObject* parent) : m_menu.addSeparator(); - m_menu.addAction(QIcon(":/images/tray/link.png"), tr("Visit Website"), [&](){ + m_trayActionVisitWebSite = m_menu.addAction(QIcon(":/images/tray/link.png"), tr("Visit Website"), [&](){ QDesktopServices::openUrl(QUrl("https://amnezia.org")); }); - m_menu.addAction(QIcon(":/images/tray/cancel.png"), tr("Quit") + " " + APPLICATION_NAME, this, [&](){ + m_trayActionQuit = m_menu.addAction(QIcon(":/images/tray/cancel.png"), tr("Quit") + " " + APPLICATION_NAME, this, [&](){ qApp->quit(); }); @@ -57,6 +55,15 @@ void SystemTrayNotificationHandler::setConnectionState(Vpn::ConnectionState stat NotificationHandler::setConnectionState(state); } +void SystemTrayNotificationHandler::onTranslationsUpdated() +{ + m_trayActionShow->setText(tr("Show") + " " + APPLICATION_NAME); + m_trayActionConnect->setText(tr("Connect")); + m_trayActionDisconnect->setText(tr("Disconnect")); + m_trayActionVisitWebSite->setText(tr("Visit Website")); + m_trayActionQuit->setText(tr("Quit")+ " " + APPLICATION_NAME); +} + void SystemTrayNotificationHandler::setTrayIcon(const QString &iconPath) { QIcon trayIconMask(QPixmap(iconPath).scaled(128,128)); diff --git a/client/ui/systemtray_notificationhandler.h b/client/ui/systemtray_notificationhandler.h index 96134f14..60bf0b35 100644 --- a/client/ui/systemtray_notificationhandler.h +++ b/client/ui/systemtray_notificationhandler.h @@ -19,6 +19,8 @@ public: void setConnectionState(Vpn::ConnectionState state) override; + void onTranslationsUpdated() override; + protected: virtual void notify(Message type, const QString& title, const QString& message, int timerMsec) override; @@ -35,9 +37,11 @@ private: QMenu m_menu; QSystemTrayIcon m_systemTrayIcon; + QAction* m_trayActionShow = nullptr; QAction* m_trayActionConnect = nullptr; QAction* m_trayActionDisconnect = nullptr; - QAction* m_preferencesAction = nullptr; + QAction* m_trayActionVisitWebSite = nullptr; + QAction* m_trayActionQuit = nullptr; QAction* m_statusLabel = nullptr; QAction* m_separator = nullptr; From 9377a0b545740cd0133c5a74b2d255caf6fc37a4 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Fri, 6 Oct 2023 14:37:10 +0800 Subject: [PATCH 12/15] updated translated-text to connectStatusText in ConnectionController --- client/amnezia_application.cpp | 2 ++ client/ui/controllers/connectionController.cpp | 3 ++- client/ui/controllers/connectionController.h | 2 +- client/ui/qml/Pages2/PageStart.qml | 2 -- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 801b90b4..d8039d9b 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -330,6 +330,8 @@ void AmneziaApplication::initControllers() m_connectionController.reset(new ConnectionController(m_serversModel, m_containersModel, m_vpnConnection)); m_engine->rootContext()->setContextProperty("ConnectionController", m_connectionController.get()); + connect(this, &AmneziaApplication::translationsUpdated, m_connectionController.get(), &ConnectionController::onTranslationsUpdated); + m_pageController.reset(new PageController(m_serversModel, m_settings)); m_engine->rootContext()->setContextProperty("PageController", m_pageController.get()); diff --git a/client/ui/controllers/connectionController.cpp b/client/ui/controllers/connectionController.cpp index 8df62a94..34ac1399 100644 --- a/client/ui/controllers/connectionController.cpp +++ b/client/ui/controllers/connectionController.cpp @@ -130,8 +130,9 @@ void ConnectionController::onCurrentContainerUpdated() } } -void ConnectionController::translateMemoryText() +void ConnectionController::onTranslationsUpdated() { + // get translated text of current state onConnectionStateChanged(getCurrentConnectionState()); } diff --git a/client/ui/controllers/connectionController.h b/client/ui/controllers/connectionController.h index c1eaf38f..9d3082a2 100644 --- a/client/ui/controllers/connectionController.h +++ b/client/ui/controllers/connectionController.h @@ -34,7 +34,7 @@ public slots: void onCurrentContainerUpdated(); - void translateMemoryText(); + void onTranslationsUpdated(); signals: void connectToVpn(int serverIndex, const ServerCredentials &credentials, DockerContainer container, diff --git a/client/ui/qml/Pages2/PageStart.qml b/client/ui/qml/Pages2/PageStart.qml index f36aac41..43366af7 100644 --- a/client/ui/qml/Pages2/PageStart.qml +++ b/client/ui/qml/Pages2/PageStart.qml @@ -171,8 +171,6 @@ PageType { onClicked: { tabBarStackView.goToTabBarPage(PageEnum.PageHome) ServersModel.currentlyProcessedIndex = ServersModel.defaultIndex - - ConnectionController.translateMemoryText() } } TabImageButtonType { From 079c9176ef9afef6dd489be5cdbb6d8cd706fae6 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Fri, 6 Oct 2023 15:29:15 +0800 Subject: [PATCH 13/15] fixed minor issues of translation --- client/translations/amneziavpn_ru.ts | 25 +++++++----- client/translations/amneziavpn_zh_CN.ts | 39 ++++++++++++------- client/ui/controllers/installController.cpp | 2 +- .../PageSetupWizardProtocolSettings.qml | 2 +- 4 files changed, 41 insertions(+), 27 deletions(-) diff --git a/client/translations/amneziavpn_ru.ts b/client/translations/amneziavpn_ru.ts index 000e0907..e0bab018 100644 --- a/client/translations/amneziavpn_ru.ts +++ b/client/translations/amneziavpn_ru.ts @@ -4,7 +4,7 @@ AmneziaApplication - + Split tunneling for WireGuard is not implemented, the option was disabled @@ -173,7 +173,7 @@ Already installed containers were found on the server. All installed containers - 1% has been removed from the server '%2' + %1 has been removed from the server '%2' @@ -224,12 +224,12 @@ Already installed containers were found on the server. All installed containers - + AmneziaVPN notification - + Unsecured network detected: @@ -1588,7 +1588,7 @@ It's okay as long as it's from someone you trust. PageSetupWizardProtocolSettings - Installing + Installing %1 @@ -2559,27 +2559,32 @@ It's okay as long as it's from someone you trust. SystemTrayNotificationHandler - + + Show - + + Connect - + + Disconnect - + + Visit Website - + + Quit diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index e7171ce2..b89674e5 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -4,7 +4,7 @@ AmneziaApplication - + Split tunneling for WireGuard is not implemented, the option was disabled 未启用选项,还未实现基于WireGuard协议的VPN分流 @@ -182,8 +182,12 @@ Already installed containers were found on the server. All installed containers + %1 has been removed from the server '%2' + %1 已从服务器 '%2' 上移除 + + 1% has been removed from the server '%2' - 容器 1% 已从服务器 '%2' 上移除 + %1 已从服务器 '%2' 上移除 Server ' @@ -245,12 +249,12 @@ Already installed containers were found on the server. All installed containers 已从VPN断开 - + AmneziaVPN notification AmneziaVPN 提示 - + Unsecured network detected: 发现不安全网络 @@ -1620,13 +1624,13 @@ It's okay as long as it's from someone you trust. PageSetupWizardProtocolSettings - Installing - + Installing %1 + 正在安装 %1 More detailed - + 更多细节 @@ -1646,7 +1650,7 @@ It's okay as long as it's from someone you trust. Install - + 安装 @@ -2318,7 +2322,7 @@ It's okay as long as it's from someone you trust. Website in Tor network - + 在 Tor 网络中架设网站 @@ -2358,7 +2362,7 @@ It's okay as long as it's from someone you trust. Deploy a WordPress site on the Tor network in two clicks. - 只需点两次即可架设 WordPress 网站到 Tor 网络 + 只需点击两次即可架设 WordPress 网站到 Tor 网络 @@ -2591,27 +2595,32 @@ It's okay as long as it's from someone you trust. SystemTrayNotificationHandler - + + Show 界面 - + + Connect 连接 - + + Disconnect 断开 - + + Visit Website 官网 - + + Quit 退出 diff --git a/client/ui/controllers/installController.cpp b/client/ui/controllers/installController.cpp index b03a45d8..c25a3129 100644 --- a/client/ui/controllers/installController.cpp +++ b/client/ui/controllers/installController.cpp @@ -303,7 +303,7 @@ void InstallController::removeCurrentlyProcessedContainer() ErrorCode errorCode = m_containersModel->removeCurrentlyProcessedContainer(); if (errorCode == ErrorCode::NoError) { - emit removeCurrentlyProcessedContainerFinished(tr("1% has been removed from the server '%2'").arg(containerName).arg(serverName)); + emit removeCurrentlyProcessedContainerFinished(tr("%1 has been removed from the server '%2'").arg(containerName).arg(serverName)); return; } emit installationErrorOccurred(errorString(errorCode)); diff --git a/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml b/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml index 07eef177..7535464a 100644 --- a/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml +++ b/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml @@ -72,7 +72,7 @@ PageType { Layout.fillWidth: true - headerText: qsTr("Installing ") + name + headerText: qsTr("Installing %1").arg(name) descriptionText: description } From 3fb97d16bbb6566c2a26e2c2c4afc4581a992c9d Mon Sep 17 00:00:00 2001 From: ronoaer Date: Fri, 6 Oct 2023 15:49:48 +0800 Subject: [PATCH 14/15] updated about page --- client/translations/amneziavpn_zh_CN.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index b89674e5..cd82e8f7 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -803,14 +803,14 @@ Already installed containers were found on the server. All installed containers Support the project with a donation - 捐赠项目 + 捐款 This is a free and open source application. If you like it, support the developers with a donation. And if you don't like the app, all the more support it - the donation will be used to improve the app. - 这是一个免费且开源的应用。如果您喜欢,请捐助支持我们。 -如果您不喜欢该应用,请更加支持它 - 捐款将用于改进该应用。 + 这是一个免费且开源的应用软件。如果您喜欢它,请捐助支持我们继续研发。 +如果您不喜欢,请捐助支持我们改进它。 From 673f28ed648677f92a46001ee774bbfce5260ba0 Mon Sep 17 00:00:00 2001 From: ronoaer Date: Fri, 6 Oct 2023 16:32:04 +0800 Subject: [PATCH 15/15] retanslate donation way --- client/translations/amneziavpn_zh_CN.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index cd82e8f7..37e27786 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -815,7 +815,7 @@ And if you don't like the app, all the more support it - the donation will Card on Patreon - 请在Patreon上支持我们 + Patreon订阅 @@ -825,7 +825,7 @@ And if you don't like the app, all the more support it - the donation will Show other methods on Github - + 其他捐款途径