Merge branch 'master' into dev

Conflicts:
	src/QvGUIConfigObjects.h
	src/w_PrefrencesWindow.ui

Signed-off-by: Leroy.H.Y <lhy20010403@hotmail.com>
This commit is contained in:
Leroy.H.Y 2019-07-23 22:44:49 +08:00
commit 1e82b99d6d
No known key found for this signature in database
GPG Key ID: 6AC1673B587DC37D
12 changed files with 678 additions and 235 deletions

View File

@ -23,7 +23,7 @@ make
```batch
REM 首先把 %QTROOT%/bin 和 你的 MinGW/bin 文件夹添加到 PATH 里面
REM 附上本人配置:
REM 示例配置:
REM SET PATH=%PATH%;D:\Qt\5.12.3\mingw73_32\bin\;D:\Qt\Tools\mingw730_32\bin\
SET PATH=%PATH%;Qt安装目录\Qt版本号\编译器类型\bin;Qt安装目录\Tools\编译器类型\bin

View File

@ -0,0 +1,33 @@
# Version 1.0 CHANGELOG
**CURRENT VERSION: ** *[v1.0.1](https://github.com/lhy0403/Qv2ray/releases/tag/v1.0.1)*
-------
**2019-07-14**: *v1.0.1* 修复一个拼写错误,该错误源自 [`0e9b90f`](https://github.com/lhy0403/Qv2ray/commit/0e9b90fb116b790156314a21a6ef1abc8d60fa63#diff-c3f4a6d32c4ab34067ba5fa647341c6aR12) 提交
**2019-07-11**: *v1.0.0* 发布第一个 RC 修改 MacOS 默认文件位置
**2019-07-09**: *v0.9.9b* 发布第一个公开测试版本 [v0.9.9b](https://github.com/lhy0403/Qv2ray/releases/tag/v0.9.9b)
**2019-07-08**: dev 分支的 [`v0.9.2a`](https://github.com/lhy0403/Qv2ray/releases/tag/v0.9.2a) 版本现在可以使用 GUI 修改配置并做到动态重载配置包括入站设置日志Mux选项此版本完成了所有翻译工作添加了双击配置列表即可启动对应配置的功能
**2019-07-07**: [Commit: [9b02ff](https://github.com/lhy0403/Qv2ray/commit/9b02ff9da8f96325bafa08958ba12c0dff66e715) ] 现在可以启动导入的配置文件 (包括导入现有文件和 `vmess://` 协议),手动添加配置尚未实现,入站设置现在只能通过编辑配置文件完成 (Linux: `~/.qv2ray/Qv2ray.conf`, MacOS & Windows: 程序当前文件夹),此版本部分翻译不完整
**2019-07-04**: 我们终于摆脱了对于 Python 的依赖,现在 Qv2ray 可以自行解析 `vmess://` 协议 [WIP]
**2019-07-03**: 主配置文件序列化/反序列化工作完成,并添加更多协议配置
**2019-07-02**: 等待上游依赖完成更新 [JSON 序列化 std::list](https://github.com/xyz347/x2struct/issues/11#issuecomment-507671091)
**2019-07-01**: 休息了几天,主要是去关注别的项目了。现在开始重构 v2ray 交互部分。
**2019-06-24**: Mac OS 测试构建完成,合并到开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev)
**2019-06-24**: 新建分支 MacOS-Build 开始测试 MacOS 构建,当前状态:![Build Status](https://travis-ci.com/lhy0403/Qv2ray.svg?branch=MacOS-Build)
**2019-06-23**: UI 结构已经固定,新建分支 translations 进行翻译 UI
**2019-06-23**: 基本 UI 完成,切换到 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) 分支进行代码实现
**2019-06-22**: 当前开发分支[ui-implementation](https://github.com/lhy0403/Qv2ray/tree/ui-implementation) - 用于实现基本 UI

View File

@ -10,57 +10,50 @@ Appveyor (Windows): https://ci.appveyor.com/project/lhy0403/qv2ray
Travis per machine badge provided by: https://github.com/exogen/badge-matrix ( @exogen )
| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) |
| ------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| Linux | ![Build Status Linux in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-dev&branch=dev) |
| MacOS | ![Build Status MacOS in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-dev&branch=dev) |
| Windows | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/master?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/dev?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/dev) |
| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) | 版本分支 [v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) |
| ------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| Linux | ![Build Status Linux in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-dev&branch=dev) | ![Build Status Linux in v1.0.0](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-v1&branch=version-v1) |
| MacOS | ![Build Status MacOS in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-dev&branch=dev) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-v1&branch=version-v1) |
| Windows | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/master?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/dev?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/dev) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/version-v1?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/version-v1) |
## 项目依赖包
## 1. 依赖
- 运行依赖:
- ArchLinux
- 在 `v2ray` 包的基础上 额外需要 `v2ray-domain-list-community``v2ray-geoip` 进行分流代理
Issue: https://github.com/lhy0403/Qv2ray/issues/23#issuecomment-511384858
- 编译依赖
- Qt >= 5.12
- gcc >=8 (Linux 需要 c++11 支持) 或 MinGW (Windows) 或 clang (MacOS)
- QtCreator (推荐)
## 最近更新内容
## 2. 编译方法
详见 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) 或 [Release](https://github.com/lhy0403/Qv2ray/releases)
- 详见 [BUILD.md](BUILD.md)
### 最新
## 3. 最近更新内容
**2019-07-11**: 发布第一个 RC
### a. 最新
### 历史
**2019-07-23**: v1.1 版本添加了自动启动功能
**2019-07-09**: 发布第一个公开测试版本 [v0.9.9b](https://github.com/lhy0403/Qv2ray/releases/tag/v0.9.9b)
**2019-07-11**: 准备 dev 分支开始 v2.0 版本
**2019-07-08**: dev 分支的 [`v0.9.2a`](https://github.com/lhy0403/Qv2ray/releases/tag/v0.9.2a) 版本现在可以使用 GUI 修改配置并做到动态重载配置包括入站设置日志Mux选项此版本完成了所有翻译工作添加了双击配置列表即可启动对应配置的功能
### b. 历史
**2019-07-07**: [Commit: [9b02ff](https://github.com/lhy0403/Qv2ray/commit/9b02ff9da8f96325bafa08958ba12c0dff66e715) ] 现在可以启动导入的配置文件 (包括导入现有文件和 `vmess://` 协议),手动添加配置尚未实现,入站设置现在只能通过编辑配置文件完成 (Linux: `~/.qv2ray/Qv2ray.conf`, MacOS & Windows: 程序当前文件夹),此版本部分翻译不完整
**v1.0 更新日志请见 [ChangeLog-v1](./ChangeLogs/CHANGELOG-v1.0.md)**
**2019-07-04**: 我们终于摆脱了对于 Python 的依赖,现在 Qv2ray 可以自行解析 `vmess://` 协议 [WIP]
### c. 更多内容
**2019-07-03**: 主配置文件序列化/反序列化工作完成,并添加更多协议配置
**2019-07-02**: 等待上游依赖完成更新 [JSON 序列化 std::list](https://github.com/xyz347/x2struct/issues/11#issuecomment-507671091)
**2019-07-01**: 休息了几天,主要是去关注别的项目了。现在开始重构 v2ray 交互部分。
**2019-06-24**: Mac OS 测试构建完成,合并到开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev)
**2019-06-24**: 新建分支 MacOS-Build 开始测试 MacOS 构建,当前状态:![Build Status](https://travis-ci.com/lhy0403/Qv2ray.svg?branch=MacOS-Build)
**2019-06-23**: UI 结构已经固定,新建分支 translations 进行翻译 UI
**2019-06-23**: 基本 UI 完成,切换到 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) 分支进行代码实现
**2019-06-22**: 当前开发分支[ui-implementation](https://github.com/lhy0403/Qv2ray/tree/ui-implementation) - 用于实现基本 UI
- 详见 [dev 开发分支](https://github.com/lhy0403/Qv2ray/tree/dev) 或 [Release 发布版](https://github.com/lhy0403/Qv2ray/releases)
----------------------
## 编译
- 详见 [BUILD.md](BUILD.md)
## License
## 4. License
[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)

View File

@ -5,15 +5,14 @@
#include <iostream>
#include "QvCoreConfigObjects.h"
//
using namespace std;
#define LOG(arg) cout << arg << endl;
// Global Qv2ray Macros
#define QV2RAY_VERSION 1
#define QV2RAY_VERSION_STRING "v1.1.0"
#define QV2RAY_CONFIG_PATH (Qv2ray::Utils::GetConfigDirPath() + "/")
#define QV2RAY_MAIN_CONFIG_FILE_PATH (QV2RAY_CONFIG_PATH + "Qv2ray.conf")
#define QV2RAY_GENERATED_CONFIG_DIRPATH (QV2RAY_CONFIG_PATH + "genrerated/")
#define QV2RAY_GENERATED_CONFIG_DIRPATH (QV2RAY_CONFIG_PATH + "generated/")
#define QV2RAY_GENERATED_CONFIG_FILE_PATH (QV2RAY_GENERATED_CONFIG_DIRPATH + "config.gen.json")
#define QV2RAY_VCORE_LOG_DIRNAME "logs/"
@ -33,6 +32,13 @@ using namespace std;
p.setColor(QPalette::Text, Qt::black); \
ui->obj->setPalette(p);
#ifdef __WIN32
#define NEWLINE "\r\n"
#else
#define NEWLINE "\r"
#endif
namespace Qv2ray
{
namespace QvConfigModels
@ -61,13 +67,14 @@ namespace Qv2ray
};
struct Qv2Config_v1 {
string v = "1";
string v = "1.1";
bool runAsRoot;
int logLevel;
//
string language;
string v2CorePath;
string v2AssetsPath;
string autoStartConfig;
//
bool proxyDefault;
bool proxyCN;
@ -81,6 +88,7 @@ namespace Qv2ray
Qv2Config_v1(): runAsRoot(false), logLevel(), proxyDefault(), proxyCN(), withLocalDNS(), inBoundSettings(), configs(), subscribes(), mux() { }
Qv2Config_v1(string lang, string exePath, string assetsPath, int log, QvBasicInboundSetting _inBoundSettings): Qv2Config_v1()
{
autoStartConfig = "";
language = lang;
v2CorePath = exePath;
v2AssetsPath = assetsPath;
@ -95,7 +103,7 @@ namespace Qv2ray
proxyDefault = true;
withLocalDNS = true;
}
XTOSTRUCT(O(v, runAsRoot, logLevel, language, v2CorePath, v2AssetsPath, proxyDefault, proxyCN, withLocalDNS, dnsList, inBoundSettings, mux, configs, subscribes))
XTOSTRUCT(O(v, runAsRoot, logLevel, language, autoStartConfig, v2CorePath, v2AssetsPath, proxyDefault, proxyCN, withLocalDNS, dnsList, inBoundSettings, mux, configs, subscribes))
};
}
}
@ -107,4 +115,4 @@ using namespace Qv2ray;
using namespace Qv2ray::V2ConfigModels;
using namespace Qv2ray::QvConfigModels;
#endif // HCONFIGOBJECTS_H
#endif // QCONFIGOBJECTS_H

View File

@ -116,6 +116,5 @@ int main(int argc, char *argv[])
// Show MainWindow
MainWindow w;
w.show();
return _qApp.exec();
}

View File

@ -48,15 +48,33 @@ MainWindow::MainWindow(QWidget *parent)
hTray->setContextMenu(trayMenu);
hTray->show();
LoadConnections();
//
if (!vinstance->ValidateV2rayCoreExe()) {
on_prefrencesBtn_clicked();
}
auto conf = GetGlobalConfig();
if (conf.autoStartConfig != "" && QList<string>::fromStdList(conf.configs).contains(conf.autoStartConfig)) {
CurrentConnectionName = QString::fromStdString(conf.autoStartConfig);
auto item = ui->connectionListWidget->findItems(QString::fromStdString(conf.autoStartConfig), Qt::MatchExactly).front();
item->setSelected(true);
ui->connectionListWidget->setCurrentItem(item);
on_connectionListWidget_itemClicked(item);
on_startButton_clicked();
ToggleVisibility();
this->hide();
trayMenu->actions()[0]->setText(tr("#Show"));
} else {
this->show();
}
}
void MainWindow::LoadConnections()
{
connections = GetConnections(GetGlobalConfig().configs);
auto conf = GetGlobalConfig();
connections = GetConnections(conf.configs);
ui->connectionListWidget->clear();
for (int i = 0; i < connections.count(); i++) {
@ -65,6 +83,7 @@ void MainWindow::LoadConnections()
}
void MainWindow::reload_config()
{
ui->retranslateUi(this);
bool isRunning = vinstance->Status == STARTED;
SaveGlobalConfig();
@ -101,6 +120,7 @@ void MainWindow::on_startButton_clicked()
bool startFlag = this->vinstance->Start();
if (startFlag) {
this->hTray->showMessage(tr("Qv2ray"), tr("#ConnectedToServer ") + CurrentConnectionName);
ui->statusLabel->setText(tr("#Started") + ": " + CurrentConnectionName);
}
@ -168,6 +188,12 @@ void MainWindow::on_activatedTray(QSystemTrayIcon::ActivationReason reason)
break;
case QSystemTrayIcon::DoubleClick:
#ifdef __APPLE__
ToggleVisibility();
#endif
break;
default:
break;
}

View File

@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>607</width>
<height>457</height>
<width>644</width>
<height>522</height>
</rect>
</property>
<property name="sizePolicy">

View File

@ -12,6 +12,7 @@ PrefrencesWindow::PrefrencesWindow(QWidget *parent) : QDialog(parent),
ui(new Ui::PrefrencesWindow)
{
ui->setupUi(this);
ui->qvVersion->setText(QV2RAY_VERSION_STRING);
CurrentConfig = GetGlobalConfig();
//
ui->languageComboBox->setCurrentText(QString::fromStdString(CurrentConfig.language));
@ -63,9 +64,18 @@ PrefrencesWindow::PrefrencesWindow(QWidget *parent) : QDialog(parent),
ui->DNSListTxt->clear();
foreach (auto dnsStr, CurrentConfig.dnsList) {
ui->DNSListTxt->appendPlainText(QString::fromStdString(dnsStr) + "\r\n");
auto str = QString::fromStdString(dnsStr).trimmed();
if (!str.isEmpty()) {
ui->DNSListTxt->appendPlainText(str);
}
}
foreach (auto connection, CurrentConfig.configs) {
ui->autoStartCombo->addItem(QString::fromStdString(connection));
}
ui->autoStartCombo->setCurrentText(QString::fromStdString(CurrentConfig.autoStartConfig));
finishedLoading = true;
}
@ -124,8 +134,7 @@ void PrefrencesWindow::on_httpAuthCB_stateChanged(int checked)
void PrefrencesWindow::on_runAsRootCheckBox_stateChanged(int arg1)
{
#ifdef __linux
// Set UID and GID in *nix
// The file is actually not here
// Set UID and GID for linux
QString vCorePath = QString::fromStdString(CurrentConfig.v2CorePath);
QFileInfo v2rayCoreExeFile(vCorePath);
@ -146,6 +155,7 @@ void PrefrencesWindow::on_runAsRootCheckBox_stateChanged(int arg1)
#else
Q_UNUSED(arg1)
ui->runAsRootCheckBox->setChecked(false);
// No such uid gid thing on Windows and MacOS is in TODO ....
QvMessageBox(this, tr("Prefrences"), tr("RunAsRootNotOnWindows"));
#endif
@ -161,6 +171,13 @@ void PrefrencesWindow::on_socksAuthCB_stateChanged(int checked)
void PrefrencesWindow::on_languageComboBox_currentTextChanged(const QString &arg1)
{
CurrentConfig.language = arg1.toStdString();
if (QApplication::installTranslator(getTranslator(QString::fromStdString(arg1.toStdString())))) {
LOG("Loaded translations " + arg1.toStdString())
ui->retranslateUi(this);
} else {
//QvMessageBox(this, tr("#Prefrences"), tr("#SwitchTranslationError"));
}
}
void PrefrencesWindow::on_logLevelComboBox_currentIndexChanged(int index)
@ -276,3 +293,13 @@ void PrefrencesWindow::on_vCoreAssetsPathTxt_textChanged(const QString &arg1)
{
CurrentConfig.v2AssetsPath = arg1.toStdString();
}
void PrefrencesWindow::on_autoStartCombo_currentTextChanged(const QString &arg1)
{
CurrentConfig.autoStartConfig = arg1.toStdString();
}
void PrefrencesWindow::on_aboutQt_clicked()
{
QApplication::aboutQt();
}

View File

@ -70,6 +70,10 @@ class PrefrencesWindow : public QDialog
void on_vCoreAssetsPathTxt_textChanged(const QString &arg1);
void on_autoStartCombo_currentTextChanged(const QString &arg1);
void on_aboutQt_clicked();
private:
bool finishedLoading = false;
Qv2ray::QvConfigModels::Qv2Config_v1 CurrentConfig;

View File

@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
<width>714</width>
<height>375</height>
<width>700</width>
<height>370</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>663</width>
<height>325</height>
<width>700</width>
<height>370</height>
</size>
</property>
<property name="windowTitle">
@ -122,14 +122,14 @@
</item>
</widget>
</item>
<item row="3" column="0">
<item row="4" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>#VCoreExePath</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLineEdit" name="vCoreExePathTxt"/>
@ -143,14 +143,14 @@
</item>
</layout>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>#VCoreAssetsPath</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLineEdit" name="vCoreAssetsPathTxt"/>
@ -164,6 +164,22 @@
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>#AutoStartEntry</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="autoStartCombo">
<item>
<property name="text">
<string/>
</property>
</item>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
@ -451,6 +467,229 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string>#About</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
<item>
<widget class="QFrame" name="img">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>256</width>
<height>256</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-image: url(:/icons/Qv2ray.ico);background-repeat: no-repeat;</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="formFrame">
<layout class="QFormLayout" name="formLayout_6">
<property name="rowWrapPolicy">
<enum>QFormLayout::WrapAllRows</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_20">
<property name="font">
<font>
<pointsize>17</pointsize>
</font>
</property>
<property name="text">
<string>Qv2ray</string>
</property>
</widget>
</item>
<item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_24">
<property name="text">
<string>#Version:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="qvVersion">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>#QvVersion</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_27">
<property name="text">
<string>#OfficialRepo:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_28">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/lhy0403/Qv2ray&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;https://github.com/lhy0403/Qv2ray&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_29">
<property name="text">
<string>#License:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_30">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.txt&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer1">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="1">
<widget class="QPushButton" name="aboutQt">
<property name="minimumSize">
<size>
<width>206</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>#AboutQt</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>

View File

@ -211,14 +211,14 @@
<translation>Key</translation>
</message>
<message>
<location filename="../src/w_ConnectionEditWindow.cpp" line="303"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="314"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="306"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="317"/>
<source>#JsonPrettify</source>
<translation>Prettify JSON</translation>
</message>
<message>
<location filename="../src/w_ConnectionEditWindow.cpp" line="303"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="314"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="306"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="317"/>
<source>#JsonContainsError</source>
<translation>JSON is in a bad syntax</translation>
</message>
@ -316,126 +316,127 @@
<name>MainWindow</name>
<message>
<location filename="../src/w_MainWindow.ui" line="29"/>
<location filename="../src/w_MainWindow.cpp" line="123"/>
<source>Qv2ray</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="47"/>
<location filename="../src/w_MainWindow.ui" line="309"/>
<location filename="../src/w_MainWindow.ui" line="315"/>
<location filename="../src/w_MainWindow.cpp" line="28"/>
<source>#Start</source>
<translation>Start</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="54"/>
<location filename="../src/w_MainWindow.ui" line="314"/>
<location filename="../src/w_MainWindow.cpp" line="29"/>
<location filename="../src/w_MainWindow.ui" line="57"/>
<location filename="../src/w_MainWindow.ui" line="320"/>
<location filename="../src/w_MainWindow.cpp" line="30"/>
<source>#Stop</source>
<translation>Stop</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="61"/>
<location filename="../src/w_MainWindow.ui" line="319"/>
<location filename="../src/w_MainWindow.cpp" line="30"/>
<location filename="../src/w_MainWindow.ui" line="67"/>
<location filename="../src/w_MainWindow.ui" line="325"/>
<location filename="../src/w_MainWindow.cpp" line="29"/>
<source>#Restart</source>
<translation>Restart</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="71"/>
<location filename="../src/w_MainWindow.ui" line="77"/>
<source>#ClearLog</source>
<translation>Clear Log</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="101"/>
<location filename="../src/w_MainWindow.ui" line="107"/>
<source>#Status</source>
<translation>Status</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="108"/>
<location filename="../src/w_MainWindow.cpp" line="109"/>
<location filename="../src/w_MainWindow.ui" line="114"/>
<location filename="../src/w_MainWindow.cpp" line="141"/>
<source>#Stopped</source>
<translation>Stopped</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="117"/>
<location filename="../src/w_MainWindow.ui" line="123"/>
<source>#HostList</source>
<translation>Host List</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="252"/>
<location filename="../src/w_MainWindow.ui" line="258"/>
<source>#ImportConfig</source>
<translation>Import Config</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="259"/>
<location filename="../src/w_MainWindow.ui" line="265"/>
<source>#AddConfig</source>
<translation>Add Config</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="266"/>
<location filename="../src/w_MainWindow.ui" line="272"/>
<source>#RemoveConfig</source>
<translation>Remove Config</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="124"/>
<location filename="../src/w_MainWindow.ui" line="130"/>
<source>#ConfigDetail</source>
<translation>Detailed Config Info</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="136"/>
<location filename="../src/w_MainWindow.ui" line="142"/>
<source>#Host</source>
<translation>Host</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="150"/>
<location filename="../src/w_MainWindow.ui" line="156"/>
<source>#Port</source>
<translation>Port</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="164"/>
<location filename="../src/w_MainWindow.ui" line="170"/>
<source>#UUID</source>
<translation>UUID</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="178"/>
<location filename="../src/w_MainWindow.ui" line="184"/>
<source>#Transport</source>
<translation>Transport Settings</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="192"/>
<location filename="../src/w_MainWindow.ui" line="205"/>
<location filename="../src/w_MainWindow.ui" line="198"/>
<location filename="../src/w_MainWindow.ui" line="211"/>
<source>#ConnectionSettings</source>
<translation>Connection Settings</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="273"/>
<location filename="../src/w_MainWindow.ui" line="279"/>
<source>#Log</source>
<translation>Log</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="289"/>
<location filename="../src/w_MainWindow.ui" line="295"/>
<source>#ManuallyCreateConnection</source>
<translation>Manually Create Connection</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="294"/>
<location filename="../src/w_MainWindow.ui" line="300"/>
<source>#ImportConnection</source>
<translation>Import Config File</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="299"/>
<location filename="../src/w_MainWindow.ui" line="305"/>
<source>#Exit</source>
<translation>Exit</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="78"/>
<location filename="../src/w_MainWindow.ui" line="304"/>
<location filename="../src/w_MainWindow.ui" line="84"/>
<location filename="../src/w_MainWindow.ui" line="310"/>
<source>#Preferences</source>
<translation>Preferences</translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="26"/>
<location filename="../src/w_MainWindow.cpp" line="164"/>
<location filename="../src/w_MainWindow.cpp" line="206"/>
<source>#Hide</source>
<translation>Hide</translation>
</message>
@ -445,23 +446,29 @@
<translation>Quit</translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="89"/>
<location filename="../src/w_MainWindow.cpp" line="112"/>
<source>#NoConfigSelected</source>
<translation>No Config Selected</translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="89"/>
<location filename="../src/w_MainWindow.cpp" line="112"/>
<source>#PleaseSelectAConfig</source>
<translation>Please select a config from the list</translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="98"/>
<location filename="../src/w_MainWindow.cpp" line="123"/>
<source>#ConnectedToServer </source>
<translation>Connected to server </translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="124"/>
<source>#Started</source>
<translation>Started</translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="130"/>
<location filename="../src/w_MainWindow.cpp" line="167"/>
<location filename="../src/w_MainWindow.cpp" line="68"/>
<location filename="../src/w_MainWindow.cpp" line="166"/>
<location filename="../src/w_MainWindow.cpp" line="209"/>
<source>#Show</source>
<translation>Show</translation>
</message>
@ -470,101 +477,151 @@
<name>PrefrencesWindow</name>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="20"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="94"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="161"/>
<source>Prefrences</source>
<translation>Preferences</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="30"/>
<location filename="../src/w_PrefrencesWindow.ui" line="33"/>
<source>#General</source>
<translation>General</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="36"/>
<location filename="../src/w_PrefrencesWindow.ui" line="39"/>
<source>#Language</source>
<translation>Language</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="50"/>
<location filename="../src/w_PrefrencesWindow.ui" line="53"/>
<source>zh-CN</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="55"/>
<location filename="../src/w_PrefrencesWindow.ui" line="58"/>
<source>en-US</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="63"/>
<location filename="../src/w_PrefrencesWindow.ui" line="66"/>
<source>#RunAsRoot</source>
<translation>Run v2ray as root</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="70"/>
<location filename="../src/w_PrefrencesWindow.ui" line="174"/>
<location filename="../src/w_PrefrencesWindow.ui" line="181"/>
<location filename="../src/w_PrefrencesWindow.ui" line="251"/>
<location filename="../src/w_PrefrencesWindow.ui" line="258"/>
<location filename="../src/w_PrefrencesWindow.ui" line="324"/>
<location filename="../src/w_PrefrencesWindow.ui" line="338"/>
<location filename="../src/w_PrefrencesWindow.ui" line="386"/>
<location filename="../src/w_PrefrencesWindow.ui" line="407"/>
<location filename="../src/w_PrefrencesWindow.ui" line="414"/>
<location filename="../src/w_PrefrencesWindow.ui" line="73"/>
<location filename="../src/w_PrefrencesWindow.ui" line="193"/>
<location filename="../src/w_PrefrencesWindow.ui" line="200"/>
<location filename="../src/w_PrefrencesWindow.ui" line="270"/>
<location filename="../src/w_PrefrencesWindow.ui" line="277"/>
<location filename="../src/w_PrefrencesWindow.ui" line="343"/>
<location filename="../src/w_PrefrencesWindow.ui" line="357"/>
<location filename="../src/w_PrefrencesWindow.ui" line="405"/>
<location filename="../src/w_PrefrencesWindow.ui" line="426"/>
<location filename="../src/w_PrefrencesWindow.ui" line="433"/>
<source>#Enabled</source>
<translation>Enabled</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="77"/>
<location filename="../src/w_PrefrencesWindow.ui" line="80"/>
<source>#LogLevel</source>
<translation>Log Level</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="102"/>
<location filename="../src/w_PrefrencesWindow.ui" line="105"/>
<source>debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="107"/>
<location filename="../src/w_PrefrencesWindow.ui" line="110"/>
<source>info</source>
<translation>Info</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="112"/>
<location filename="../src/w_PrefrencesWindow.ui" line="115"/>
<source>warning</source>
<translation>Warning</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="117"/>
<location filename="../src/w_PrefrencesWindow.ui" line="120"/>
<source>error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="137"/>
<location filename="../src/w_PrefrencesWindow.ui" line="158"/>
<location filename="../src/w_PrefrencesWindow.ui" line="140"/>
<location filename="../src/w_PrefrencesWindow.ui" line="161"/>
<source>#Select</source>
<translation>Select</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="379"/>
<location filename="../src/w_PrefrencesWindow.ui" line="170"/>
<source>#AutoStartEntry</source>
<translation>Auto Connect To</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="398"/>
<source>#ProxyGlobal</source>
<translation>Use Proxy as Default</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="393"/>
<location filename="../src/w_PrefrencesWindow.ui" line="412"/>
<source>#ProxyCN</source>
<translation>Use Proxy for China Mainland</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="400"/>
<location filename="../src/w_PrefrencesWindow.ui" line="419"/>
<source>#WithLocalDNS</source>
<translation>Use localhost DNS</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="426"/>
<location filename="../src/w_PrefrencesWindow.ui" line="445"/>
<source>#DNSList</source>
<translation>DNS Address List</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="459"/>
<source>#About</source>
<translation>About</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="504"/>
<source>Qv2ray</source>
<translation>Qv2ray</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="526"/>
<source>#Version:</source>
<translation>Version:</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="538"/>
<source>#QvVersion</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="562"/>
<source>#OfficialRepo:</source>
<translation>Official Repo:</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="613"/>
<source>#License:</source>
<translation>License:</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="631"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.txt&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="668"/>
<source>#AboutQt</source>
<translation>About Qt</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="580"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/lhy0403/Qv2ray&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;https://github.com/lhy0403/Qv2ray&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<source>Add</source>
<translation type="vanished">Add</translation>
@ -578,96 +635,96 @@
<translation type="vanished">Clear</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="97"/>
<location filename="../src/w_PrefrencesWindow.ui" line="100"/>
<source>none</source>
<translation>Do not use</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="125"/>
<location filename="../src/w_PrefrencesWindow.ui" line="128"/>
<source>#VCoreExePath</source>
<translation>V2ray Kernal Path</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="146"/>
<location filename="../src/w_PrefrencesWindow.ui" line="149"/>
<source>#VCoreAssetsPath</source>
<translation>V2ray Assets Path</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="168"/>
<location filename="../src/w_PrefrencesWindow.ui" line="187"/>
<source>#MuxSettings</source>
<translation>Mux Settings</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="209"/>
<location filename="../src/w_PrefrencesWindow.ui" line="228"/>
<source>#InBoundSettings</source>
<translation>Inbound Settings</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="217"/>
<location filename="../src/w_PrefrencesWindow.ui" line="236"/>
<source>#ListenIP</source>
<translation>Listen IP</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="295"/>
<location filename="../src/w_PrefrencesWindow.ui" line="314"/>
<source>#HTTPInBoundSettings</source>
<translation>HTTP Inbound Settings</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="231"/>
<location filename="../src/w_PrefrencesWindow.ui" line="250"/>
<source>#SOCKSBoundSettings</source>
<translation>SOCKS Inbound Settings</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="371"/>
<location filename="../src/w_PrefrencesWindow.ui" line="390"/>
<source>#RouteSettings</source>
<translation>Route Settings</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="188"/>
<location filename="../src/w_PrefrencesWindow.ui" line="207"/>
<source>#Concurrency</source>
<translation>Maximum Connections</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="237"/>
<location filename="../src/w_PrefrencesWindow.ui" line="301"/>
<location filename="../src/w_PrefrencesWindow.ui" line="256"/>
<location filename="../src/w_PrefrencesWindow.ui" line="320"/>
<source>#Port</source>
<translation>Port</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="275"/>
<location filename="../src/w_PrefrencesWindow.ui" line="345"/>
<location filename="../src/w_PrefrencesWindow.ui" line="294"/>
<location filename="../src/w_PrefrencesWindow.ui" line="364"/>
<source>#Username</source>
<translation>Username</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="265"/>
<location filename="../src/w_PrefrencesWindow.ui" line="331"/>
<location filename="../src/w_PrefrencesWindow.ui" line="284"/>
<location filename="../src/w_PrefrencesWindow.ui" line="350"/>
<source>#Auth</source>
<translation>Authentication</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="282"/>
<location filename="../src/w_PrefrencesWindow.ui" line="355"/>
<location filename="../src/w_PrefrencesWindow.ui" line="301"/>
<location filename="../src/w_PrefrencesWindow.ui" line="374"/>
<source>#Password</source>
<translation>Password</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="94"/>
<source>PortNumbersCannotBeSame</source>
<translation>Port numbers cannot be the same</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="161"/>
<source>RunAsRootNotOnWindows</source>
<translation>Run as root is not avaliable on Windows Platform</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="231"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="261"/>
<source>#OpenVCoreFile</source>
<translation>Open v2rat-core file</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="238"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="268"/>
<source>OpenVAssetsDir</source>
<translation>Open v2ray assets folder</translation>
</message>
@ -675,12 +732,12 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="86"/>
<location filename="../src/main.cpp" line="92"/>
<source>AnotherInstanceRunning</source>
<translation>Another instance is already running</translation>
</message>
<message>
<location filename="../src/main.cpp" line="86"/>
<location filename="../src/main.cpp" line="92"/>
<source>Qv2ray</source>
<translation></translation>
</message>

View File

@ -211,14 +211,14 @@
<translation></translation>
</message>
<message>
<location filename="../src/w_ConnectionEditWindow.cpp" line="303"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="314"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="306"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="317"/>
<source>#JsonPrettify</source>
<translation> JSON</translation>
</message>
<message>
<location filename="../src/w_ConnectionEditWindow.cpp" line="303"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="314"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="306"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="317"/>
<source>#JsonContainsError</source>
<translation>JSON </translation>
</message>
@ -316,126 +316,127 @@
<name>MainWindow</name>
<message>
<location filename="../src/w_MainWindow.ui" line="29"/>
<location filename="../src/w_MainWindow.cpp" line="123"/>
<source>Qv2ray</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="47"/>
<location filename="../src/w_MainWindow.ui" line="309"/>
<location filename="../src/w_MainWindow.ui" line="315"/>
<location filename="../src/w_MainWindow.cpp" line="28"/>
<source>#Start</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="54"/>
<location filename="../src/w_MainWindow.ui" line="314"/>
<location filename="../src/w_MainWindow.cpp" line="29"/>
<location filename="../src/w_MainWindow.ui" line="57"/>
<location filename="../src/w_MainWindow.ui" line="320"/>
<location filename="../src/w_MainWindow.cpp" line="30"/>
<source>#Stop</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="61"/>
<location filename="../src/w_MainWindow.ui" line="319"/>
<location filename="../src/w_MainWindow.cpp" line="30"/>
<location filename="../src/w_MainWindow.ui" line="67"/>
<location filename="../src/w_MainWindow.ui" line="325"/>
<location filename="../src/w_MainWindow.cpp" line="29"/>
<source>#Restart</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="71"/>
<location filename="../src/w_MainWindow.ui" line="77"/>
<source>#ClearLog</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="101"/>
<location filename="../src/w_MainWindow.ui" line="107"/>
<source>#Status</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="108"/>
<location filename="../src/w_MainWindow.cpp" line="109"/>
<location filename="../src/w_MainWindow.ui" line="114"/>
<location filename="../src/w_MainWindow.cpp" line="141"/>
<source>#Stopped</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="117"/>
<location filename="../src/w_MainWindow.ui" line="123"/>
<source>#HostList</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="252"/>
<location filename="../src/w_MainWindow.ui" line="258"/>
<source>#ImportConfig</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="259"/>
<location filename="../src/w_MainWindow.ui" line="265"/>
<source>#AddConfig</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="266"/>
<location filename="../src/w_MainWindow.ui" line="272"/>
<source>#RemoveConfig</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="124"/>
<location filename="../src/w_MainWindow.ui" line="130"/>
<source>#ConfigDetail</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="136"/>
<location filename="../src/w_MainWindow.ui" line="142"/>
<source>#Host</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="150"/>
<location filename="../src/w_MainWindow.ui" line="156"/>
<source>#Port</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="164"/>
<location filename="../src/w_MainWindow.ui" line="170"/>
<source>#UUID</source>
<translation>UUID</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="178"/>
<location filename="../src/w_MainWindow.ui" line="184"/>
<source>#Transport</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="192"/>
<location filename="../src/w_MainWindow.ui" line="205"/>
<location filename="../src/w_MainWindow.ui" line="198"/>
<location filename="../src/w_MainWindow.ui" line="211"/>
<source>#ConnectionSettings</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="273"/>
<location filename="../src/w_MainWindow.ui" line="279"/>
<source>#Log</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="289"/>
<location filename="../src/w_MainWindow.ui" line="295"/>
<source>#ManuallyCreateConnection</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="294"/>
<location filename="../src/w_MainWindow.ui" line="300"/>
<source>#ImportConnection</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="299"/>
<location filename="../src/w_MainWindow.ui" line="305"/>
<source>#Exit</source>
<translation>退</translation>
</message>
<message>
<location filename="../src/w_MainWindow.ui" line="78"/>
<location filename="../src/w_MainWindow.ui" line="304"/>
<location filename="../src/w_MainWindow.ui" line="84"/>
<location filename="../src/w_MainWindow.ui" line="310"/>
<source>#Preferences</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="26"/>
<location filename="../src/w_MainWindow.cpp" line="164"/>
<location filename="../src/w_MainWindow.cpp" line="206"/>
<source>#Hide</source>
<translation></translation>
</message>
@ -445,23 +446,29 @@
<translation>退</translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="89"/>
<location filename="../src/w_MainWindow.cpp" line="112"/>
<source>#NoConfigSelected</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="89"/>
<location filename="../src/w_MainWindow.cpp" line="112"/>
<source>#PleaseSelectAConfig</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="98"/>
<location filename="../src/w_MainWindow.cpp" line="123"/>
<source>#ConnectedToServer </source>
<translation> </translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="124"/>
<source>#Started</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_MainWindow.cpp" line="130"/>
<location filename="../src/w_MainWindow.cpp" line="167"/>
<location filename="../src/w_MainWindow.cpp" line="68"/>
<location filename="../src/w_MainWindow.cpp" line="166"/>
<location filename="../src/w_MainWindow.cpp" line="209"/>
<source>#Show</source>
<translation></translation>
</message>
@ -470,101 +477,151 @@
<name>PrefrencesWindow</name>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="20"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="94"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="161"/>
<source>Prefrences</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="30"/>
<location filename="../src/w_PrefrencesWindow.ui" line="33"/>
<source>#General</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="36"/>
<location filename="../src/w_PrefrencesWindow.ui" line="39"/>
<source>#Language</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="50"/>
<location filename="../src/w_PrefrencesWindow.ui" line="53"/>
<source>zh-CN</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="55"/>
<location filename="../src/w_PrefrencesWindow.ui" line="58"/>
<source>en-US</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="63"/>
<location filename="../src/w_PrefrencesWindow.ui" line="66"/>
<source>#RunAsRoot</source>
<translation>使 root </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="70"/>
<location filename="../src/w_PrefrencesWindow.ui" line="174"/>
<location filename="../src/w_PrefrencesWindow.ui" line="181"/>
<location filename="../src/w_PrefrencesWindow.ui" line="251"/>
<location filename="../src/w_PrefrencesWindow.ui" line="258"/>
<location filename="../src/w_PrefrencesWindow.ui" line="324"/>
<location filename="../src/w_PrefrencesWindow.ui" line="338"/>
<location filename="../src/w_PrefrencesWindow.ui" line="386"/>
<location filename="../src/w_PrefrencesWindow.ui" line="407"/>
<location filename="../src/w_PrefrencesWindow.ui" line="414"/>
<location filename="../src/w_PrefrencesWindow.ui" line="73"/>
<location filename="../src/w_PrefrencesWindow.ui" line="193"/>
<location filename="../src/w_PrefrencesWindow.ui" line="200"/>
<location filename="../src/w_PrefrencesWindow.ui" line="270"/>
<location filename="../src/w_PrefrencesWindow.ui" line="277"/>
<location filename="../src/w_PrefrencesWindow.ui" line="343"/>
<location filename="../src/w_PrefrencesWindow.ui" line="357"/>
<location filename="../src/w_PrefrencesWindow.ui" line="405"/>
<location filename="../src/w_PrefrencesWindow.ui" line="426"/>
<location filename="../src/w_PrefrencesWindow.ui" line="433"/>
<source>#Enabled</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="77"/>
<location filename="../src/w_PrefrencesWindow.ui" line="80"/>
<source>#LogLevel</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="102"/>
<location filename="../src/w_PrefrencesWindow.ui" line="105"/>
<source>debug</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="107"/>
<location filename="../src/w_PrefrencesWindow.ui" line="110"/>
<source>info</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="112"/>
<location filename="../src/w_PrefrencesWindow.ui" line="115"/>
<source>warning</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="117"/>
<location filename="../src/w_PrefrencesWindow.ui" line="120"/>
<source>error</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="137"/>
<location filename="../src/w_PrefrencesWindow.ui" line="158"/>
<location filename="../src/w_PrefrencesWindow.ui" line="140"/>
<location filename="../src/w_PrefrencesWindow.ui" line="161"/>
<source>#Select</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="379"/>
<location filename="../src/w_PrefrencesWindow.ui" line="170"/>
<source>#AutoStartEntry</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="398"/>
<source>#ProxyGlobal</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="393"/>
<location filename="../src/w_PrefrencesWindow.ui" line="412"/>
<source>#ProxyCN</source>
<translation>使</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="400"/>
<location filename="../src/w_PrefrencesWindow.ui" line="419"/>
<source>#WithLocalDNS</source>
<translation>使 DNS</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="426"/>
<location filename="../src/w_PrefrencesWindow.ui" line="445"/>
<source>#DNSList</source>
<translation>DNS </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="459"/>
<source>#About</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="504"/>
<source>Qv2ray</source>
<translation>Qv2ray</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="526"/>
<source>#Version:</source>
<translation>:</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="538"/>
<source>#QvVersion</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="562"/>
<source>#OfficialRepo:</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="613"/>
<source>#License:</source>
<translation>:</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="631"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.txt&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="668"/>
<source>#AboutQt</source>
<translation> Qt</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="580"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/lhy0403/Qv2ray&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;https://github.com/lhy0403/Qv2ray&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<source>Add</source>
<translation type="vanished"></translation>
@ -578,96 +635,96 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="97"/>
<location filename="../src/w_PrefrencesWindow.ui" line="100"/>
<source>none</source>
<translation>使</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="125"/>
<location filename="../src/w_PrefrencesWindow.ui" line="128"/>
<source>#VCoreExePath</source>
<translation>v2ray </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="146"/>
<location filename="../src/w_PrefrencesWindow.ui" line="149"/>
<source>#VCoreAssetsPath</source>
<translation>v2ray </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="168"/>
<location filename="../src/w_PrefrencesWindow.ui" line="187"/>
<source>#MuxSettings</source>
<translation>Mux </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="209"/>
<location filename="../src/w_PrefrencesWindow.ui" line="228"/>
<source>#InBoundSettings</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="217"/>
<location filename="../src/w_PrefrencesWindow.ui" line="236"/>
<source>#ListenIP</source>
<translation> IP</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="295"/>
<location filename="../src/w_PrefrencesWindow.ui" line="314"/>
<source>#HTTPInBoundSettings</source>
<translation>HTTP </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="231"/>
<location filename="../src/w_PrefrencesWindow.ui" line="250"/>
<source>#SOCKSBoundSettings</source>
<translation>SOCKS </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="371"/>
<location filename="../src/w_PrefrencesWindow.ui" line="390"/>
<source>#RouteSettings</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="188"/>
<location filename="../src/w_PrefrencesWindow.ui" line="207"/>
<source>#Concurrency</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="237"/>
<location filename="../src/w_PrefrencesWindow.ui" line="301"/>
<location filename="../src/w_PrefrencesWindow.ui" line="256"/>
<location filename="../src/w_PrefrencesWindow.ui" line="320"/>
<source>#Port</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="275"/>
<location filename="../src/w_PrefrencesWindow.ui" line="345"/>
<location filename="../src/w_PrefrencesWindow.ui" line="294"/>
<location filename="../src/w_PrefrencesWindow.ui" line="364"/>
<source>#Username</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="265"/>
<location filename="../src/w_PrefrencesWindow.ui" line="331"/>
<location filename="../src/w_PrefrencesWindow.ui" line="284"/>
<location filename="../src/w_PrefrencesWindow.ui" line="350"/>
<source>#Auth</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="282"/>
<location filename="../src/w_PrefrencesWindow.ui" line="355"/>
<location filename="../src/w_PrefrencesWindow.ui" line="301"/>
<location filename="../src/w_PrefrencesWindow.ui" line="374"/>
<source>#Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="94"/>
<source>PortNumbersCannotBeSame</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="161"/>
<source>RunAsRootNotOnWindows</source>
<translation>Windows </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="231"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="261"/>
<source>#OpenVCoreFile</source>
<translation> v2ray </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="238"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="268"/>
<source>OpenVAssetsDir</source>
<translation> v2ray </translation>
</message>
@ -675,12 +732,12 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="86"/>
<location filename="../src/main.cpp" line="92"/>
<source>AnotherInstanceRunning</source>
<translation></translation>
</message>
<message>
<location filename="../src/main.cpp" line="86"/>
<location filename="../src/main.cpp" line="92"/>
<source>Qv2ray</source>
<translation></translation>
</message>