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")