[Linux Release] v0.9.9a

Former-commit-id: 7cc07dd680
This commit is contained in:
Leroy.H.Y 2019-07-09 20:07:14 +08:00
parent c51eef6dcc
commit 2fb44b3b33
13 changed files with 739 additions and 560 deletions

View File

@ -30,7 +30,7 @@ namespace Qv2ray
}; };
struct ApiObject { struct ApiObject {
string tag; string tag = "api";
list<string> services; list<string> services;
ApiObject() : tag(), services() {} ApiObject() : tag(), services() {}
XTOSTRUCT(O(tag, services)) XTOSTRUCT(O(tag, services))
@ -70,32 +70,32 @@ namespace Qv2ray
namespace TRANSFERObjectsInternal namespace TRANSFERObjectsInternal
{ {
struct HTTPRequestObject { struct HTTPRequestObject {
string version = "1.1"; string version ;
string method = "GET"; string method ;
list<string> path; list<string> path;
map<string, list<string>> headers; map<string, list<string>> headers;
HTTPRequestObject(): version(), method(), path(), headers() {} HTTPRequestObject(): version("1.1"), method("GET"), path(), headers() {}
XTOSTRUCT(O(version, method, path, headers)) XTOSTRUCT(O(version, method, path, headers))
}; };
struct HTTPResponseObject { struct HTTPResponseObject {
string version = "1.1"; string version;
string status = "200"; string status ;
string reason = "OK"; string reason ;
map<string, list<string>> headers; map<string, list<string>> headers;
HTTPResponseObject(): version(), status(), reason(), headers() {} HTTPResponseObject(): version("1.1"), status("200"), reason("OK"), headers() {}
XTOSTRUCT(O(version, status, reason, headers)) XTOSTRUCT(O(version, status, reason, headers))
}; };
struct TCPHeader_M_Object { struct TCPHeader_M_Object {
string type; string type;
HTTPRequestObject request; HTTPRequestObject request;
HTTPResponseObject response; HTTPResponseObject response;
TCPHeader_M_Object(): type(), request(), response() {} TCPHeader_M_Object(): type("none"), request(), response() {}
XTOSTRUCT(O(type, request, response)) XTOSTRUCT(O(type, request, response))
}; };
struct HeaderObject { struct HeaderObject {
string type; string type;
HeaderObject(): type() {} HeaderObject(): type("none") {}
XTOSTRUCT(O(type)) XTOSTRUCT(O(type))
}; };
} }
@ -125,20 +125,20 @@ namespace Qv2ray
struct WebSocketObject { struct WebSocketObject {
string path; string path;
map<string, string> headers; map<string, string> headers;
WebSocketObject(): path(), headers() {} WebSocketObject(): path("/"), headers() {}
XTOSTRUCT(O(path, headers)) XTOSTRUCT(O(path, headers))
}; };
struct HttpObject { struct HttpObject {
list<string> host; list<string> host;
string path; string path;
HttpObject() : host(), path() {} HttpObject() : host(), path("/") {}
XTOSTRUCT(O(host, path)) XTOSTRUCT(O(host, path))
}; };
struct DomainSocketObject { struct DomainSocketObject {
string path; string path;
DomainSocketObject(): path() {} DomainSocketObject(): path("/") {}
XTOSTRUCT(O(path)) XTOSTRUCT(O(path))
}; };
@ -146,7 +146,7 @@ namespace Qv2ray
string security; string security;
string key; string key;
TRANSFERObjectsInternal::HeaderObject header; TRANSFERObjectsInternal::HeaderObject header;
QuicObject(): security(), key(), header() {} QuicObject(): security(""), key(""), header() {}
XTOSTRUCT(O(security, key, header)) XTOSTRUCT(O(security, key, header))
}; };
} }
@ -154,7 +154,7 @@ namespace Qv2ray
namespace INBOUNDObjects namespace INBOUNDObjects
{ {
struct SniffingObject { struct SniffingObject {
bool enabled; bool enabled = false;
list<string> destOverride; list<string> destOverride;
SniffingObject(): enabled(), destOverride() {} SniffingObject(): enabled(), destOverride() {}
XTOSTRUCT(O(enabled, destOverride)) XTOSTRUCT(O(enabled, destOverride))
@ -167,7 +167,7 @@ namespace Qv2ray
int mark; int mark;
bool tcpFastOpen; bool tcpFastOpen;
string tproxy; string tproxy;
SockoptObject(): mark(), tcpFastOpen(), tproxy() {} SockoptObject(): mark(0), tcpFastOpen(), tproxy("off") {}
XTOSTRUCT(O(mark, tcpFastOpen, tproxy)) XTOSTRUCT(O(mark, tcpFastOpen, tproxy))
}; };
@ -203,7 +203,7 @@ namespace Qv2ray
_TransferSettingObjects::HttpObject httpSettings; _TransferSettingObjects::HttpObject httpSettings;
_TransferSettingObjects::DomainSocketObject dsSettings; _TransferSettingObjects::DomainSocketObject dsSettings;
_TransferSettingObjects::QuicObject quicSettings; _TransferSettingObjects::QuicObject quicSettings;
StreamSettingsObject(): network(), security(), sockopt(), tlsSettings(), tcpSettings(), kcpSettings(), wsSettings(), httpSettings(), dsSettings(), quicSettings() {} StreamSettingsObject(): network("tcp"), security(), sockopt(), tlsSettings(), tcpSettings(), kcpSettings(), wsSettings(), httpSettings(), dsSettings(), quicSettings() {}
XTOSTRUCT(O(network, security, sockopt, tcpSettings, tlsSettings, kcpSettings, wsSettings, httpSettings, dsSettings, quicSettings)) XTOSTRUCT(O(network, security, sockopt, tcpSettings, tlsSettings, kcpSettings, wsSettings, httpSettings, dsSettings, quicSettings))
}; };
@ -214,7 +214,6 @@ namespace Qv2ray
XTOSTRUCT(O(enabled, concurrency)) XTOSTRUCT(O(enabled, concurrency))
}; };
struct RootObject { struct RootObject {
ApiObject api; ApiObject api;
PolicyObject policy; PolicyObject policy;
@ -222,8 +221,6 @@ namespace Qv2ray
XTOSTRUCT(O(api, policy)) XTOSTRUCT(O(api, policy))
}; };
// //
//
//
/// Some protocols from: https://v2ray.com/chapter_02/02_protocols.html /// Some protocols from: https://v2ray.com/chapter_02/02_protocols.html
namespace Protocols namespace Protocols
{ {
@ -278,6 +275,7 @@ namespace Qv2ray
int alterId; int alterId;
string security; string security;
int level; int level;
UserObject() : id(), alterId(64), security("auto"), level(0) {}
XTOSTRUCT(O(id, alterId, security, level)) XTOSTRUCT(O(id, alterId, security, level))
}; };
// OUTBound; // OUTBound;

View File

@ -11,7 +11,6 @@
#define QV2RAY_MAIN_CONFIG_FILE_PATH (QV2RAY_CONFIG_PATH + "Qv2ray.conf") #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 + "genrerated/")
#define QV2RAY_GENERATED_CONFIG_FILE_PATH (QV2RAY_GENERATED_CONFIG_DIRPATH + "config.gen.json") #define QV2RAY_GENERATED_CONFIG_FILE_PATH (QV2RAY_GENERATED_CONFIG_DIRPATH + "config.gen.json")
#define QV2RAY_FIRSTRUN_IDENTIFIER (QV2RAY_CONFIG_PATH + ".initialised")
#define QV2RAY_VCORE_LOG_DIRNAME "logs/" #define QV2RAY_VCORE_LOG_DIRNAME "logs/"
#define QV2RAY_VCORE_ACCESS_LOG_FILENAME "access.log" #define QV2RAY_VCORE_ACCESS_LOG_FILENAME "access.log"
@ -22,6 +21,17 @@ using namespace std;
#define QV2RAY_CONNECTION_FILE_EXTENSION ".qv2ray.json" #define QV2RAY_CONNECTION_FILE_EXTENSION ".qv2ray.json"
// GUI TOOLS
#define RED(obj) \
auto p = ui->obj->palette(); \
p.setColor(QPalette::Text, Qt::red); \
ui->obj->setPalette(p);
#define WHITE(obj) \
auto p = ui->obj->palette(); \
p.setColor(QPalette::Text, Qt::black); \
ui->obj->setPalette(p);
namespace Qv2ray namespace Qv2ray
{ {
namespace QvConfigModels namespace QvConfigModels

View File

@ -57,7 +57,7 @@ bool initializeQv()
} }
} }
if (!Utils::CheckFile(ConfigDir, ".initialised")) { if (!QFile(QV2RAY_MAIN_CONFIG_FILE_PATH).exists()) {
// This is first run! // This is first run!
// //
// These below genenrated very basic global config. // These below genenrated very basic global config.
@ -68,11 +68,6 @@ bool initializeQv()
SetGlobalConfig(conf); SetGlobalConfig(conf);
SaveGlobalConfig(); SaveGlobalConfig();
// //
// Create Placeholder for initialise indicator.
QFile initPlaceHolder(QV2RAY_FIRSTRUN_IDENTIFIER);
initPlaceHolder.open(QFile::WriteOnly);
initPlaceHolder.close();
//
LOG("Created initial default config file.") LOG("Created initial default config file.")
} else { } else {
LoadGlobalConfig(); LoadGlobalConfig();

View File

@ -4,17 +4,6 @@
#include <QFile> #include <QFile>
#include <QIntValidator> #include <QIntValidator>
#include <iostream> #include <iostream>
#define RED(obj) \
auto p = ui->obj->palette(); \
p.setColor(QPalette::Text, Qt::red); \
ui->obj->setPalette(p);
#define WHITE(obj) \
auto p = ui->obj->palette(); \
p.setColor(QPalette::Text, Qt::black); \
ui->obj->setPalette(p);
ConnectionEditWindow::ConnectionEditWindow(QWidget *parent) ConnectionEditWindow::ConnectionEditWindow(QWidget *parent)
: QDialog(parent), : QDialog(parent),
_alias(), _alias(),
@ -25,6 +14,8 @@ ConnectionEditWindow::ConnectionEditWindow(QWidget *parent)
ui->setupUi(this); ui->setupUi(this);
ui->portLineEdit->setValidator(new QIntValidator()); ui->portLineEdit->setValidator(new QIntValidator());
ui->alterLineEdit->setValidator(new QIntValidator()); ui->alterLineEdit->setValidator(new QIntValidator());
//
LoadGUIContents();
} }
ConnectionEditWindow::ConnectionEditWindow(QJsonObject editRootObject, QString alias, QWidget *parent) ConnectionEditWindow::ConnectionEditWindow(QJsonObject editRootObject, QString alias, QWidget *parent)
@ -126,6 +117,17 @@ void ConnectionEditWindow::on_buttonBox_accepted()
void ConnectionEditWindow::on_ipLineEdit_textEdited(const QString &arg1) void ConnectionEditWindow::on_ipLineEdit_textEdited(const QString &arg1)
{ {
vmess.address = arg1.toStdString(); vmess.address = arg1.toStdString();
//
// No thanks.
//if (ui->httpHostTxt->toPlainText() == "") {
// ui->httpHostTxt->setPlainText(arg1);
// on_httpHostTxt_textChanged();
//}
//
//if (ui->wsHeadersTxt->toPlainText() == "") {
// ui->wsHeadersTxt->setPlainText("Host|" + arg1);
// on_wsHeadersTxt_textChanged();
//}
} }
void ConnectionEditWindow::on_portLineEdit_textEdited(const QString &arg1) void ConnectionEditWindow::on_portLineEdit_textEdited(const QString &arg1)
@ -137,19 +139,22 @@ void ConnectionEditWindow::on_portLineEdit_textEdited(const QString &arg1)
void ConnectionEditWindow::on_idLineEdit_textEdited(const QString &arg1) void ConnectionEditWindow::on_idLineEdit_textEdited(const QString &arg1)
{ {
LOG("BUGFUL!") if (vmess.users.size() == 0) vmess.users.push_back(VMessOut::ServerObject::UserObject());
vmess.users.front().id = arg1.toStdString(); vmess.users.front().id = arg1.toStdString();
} }
void ConnectionEditWindow::on_alterLineEdit_textEdited(const QString &arg1) void ConnectionEditWindow::on_alterLineEdit_textEdited(const QString &arg1)
{ {
LOG("BUGFUL!") if (vmess.users.size() == 0) vmess.users.push_back(VMessOut::ServerObject::UserObject());
vmess.users.front().id = arg1.toStdString();
vmess.users.front().alterId = stoi(arg1.toStdString());
} }
void ConnectionEditWindow::on_securityCombo_currentIndexChanged(const QString &arg1) void ConnectionEditWindow::on_securityCombo_currentIndexChanged(const QString &arg1)
{ {
LOG("BUGFUL!") if (vmess.users.size() == 0) vmess.users.push_back(VMessOut::ServerObject::UserObject());
vmess.users.front().security = arg1.toStdString(); vmess.users.front().security = arg1.toStdString();
} }
@ -158,11 +163,6 @@ void ConnectionEditWindow::on_tranportCombo_currentIndexChanged(const QString &a
stream.network = arg1.toStdString(); stream.network = arg1.toStdString();
} }
void ConnectionEditWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
stream.tcpSettings.header.type = arg1.toStdString();
}
void ConnectionEditWindow::on_httpPathTxt_textEdited(const QString &arg1) void ConnectionEditWindow::on_httpPathTxt_textEdited(const QString &arg1)
{ {
stream.httpSettings.path = arg1.toStdString(); stream.httpSettings.path = arg1.toStdString();
@ -184,11 +184,6 @@ void ConnectionEditWindow::on_httpHostTxt_textChanged()
} }
} }
void ConnectionEditWindow::on_lineEdit_textEdited(const QString &arg1)
{
stream.wsSettings.path = arg1.toStdString();
}
void ConnectionEditWindow::on_wsHeadersTxt_textChanged() void ConnectionEditWindow::on_wsHeadersTxt_textChanged()
{ {
try { try {
@ -209,28 +204,24 @@ void ConnectionEditWindow::on_wsHeadersTxt_textChanged()
} }
} }
void ConnectionEditWindow::on_spinBox_valueChanged(int arg1)
{
stream.kcpSettings.mtu = arg1;
}
void ConnectionEditWindow::on_tcpRequestDefBtn_clicked() void ConnectionEditWindow::on_tcpRequestDefBtn_clicked()
{ {
ui->tcpRequestTxt->clear(); ui->tcpRequestTxt->clear();
ui->tcpRequestTxt->insertPlainText("{ \"version\" : \"TODO....\""); ui->tcpRequestTxt->insertPlainText("{\"version\":\"1.1\",\"method\":\"GET\",\"path\":[\"/\"],\"headers\":{\"Host\":[\"www.baidu.com\",\"www.bing.com\"],\"User-Agent\":[\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46\"],\"Accept-Encoding\":[\"gzip, deflate\"],\"Connection\":[\"keep-alive\"],\"Pragma\":\"no-cache\"}}");
} }
void ConnectionEditWindow::on_tcpRespDefBtn_clicked() void ConnectionEditWindow::on_tcpRespDefBtn_clicked()
{ {
ui->tcpRespTxt->clear(); ui->tcpRespTxt->clear();
ui->tcpRespTxt->insertPlainText("{ \"version\" : \"TODO....\""); ui->tcpRespTxt->insertPlainText("{\"version\":\"1.1\",\"status\":\"200\",\"reason\":\"OK\",\"headers\":{\"Content-Type\":[\"application/octet-stream\",\"video/mpeg\"],\"Transfer-Encoding\":[\"chunked\"],\"Connection\":[\"keep-alive\"],\"Pragma\":\"no-cache\"}}");
} }
void ConnectionEditWindow::on_tcpRequestTxt_textChanged() void ConnectionEditWindow::on_tcpRequestTxt_textChanged()
{ {
try { try {
auto httpReqObject = StructFromJSONString<_TransferSettingObjects::TRANSFERObjectsInternal::HTTPRequestObject>(ui->tcpRequestTxt->toPlainText()); auto tcpReqObject = StructFromJSONString<_TransferSettingObjects::TRANSFERObjectsInternal::HTTPRequestObject>(ui->tcpRequestTxt->toPlainText());
stream.tcpSettings.header.request = httpReqObject; stream.tcpSettings.header.request = tcpReqObject;
WHITE(tcpRequestTxt) WHITE(tcpRequestTxt)
} catch (...) { } catch (...) {
RED(tcpRequestTxt) RED(tcpRequestTxt)
@ -240,8 +231,8 @@ void ConnectionEditWindow::on_tcpRequestTxt_textChanged()
void ConnectionEditWindow::on_tcpRespTxt_textChanged() void ConnectionEditWindow::on_tcpRespTxt_textChanged()
{ {
try { try {
auto httpRspObject = StructFromJSONString<_TransferSettingObjects::TRANSFERObjectsInternal::HTTPResponseObject>(ui->tcpRespTxt->toPlainText()); auto tcpRspObject = StructFromJSONString<_TransferSettingObjects::TRANSFERObjectsInternal::HTTPResponseObject>(ui->tcpRespTxt->toPlainText());
stream.tcpSettings.header.response = httpRspObject; stream.tcpSettings.header.response = tcpRspObject;
WHITE(tcpRespTxt) WHITE(tcpRespTxt)
} catch (...) { } catch (...) {
RED(tcpRespTxt) RED(tcpRespTxt)
@ -289,7 +280,7 @@ void ConnectionEditWindow::on_tProxyCB_currentIndexChanged(const QString &arg1)
void ConnectionEditWindow::on_quicSecurityCB_currentTextChanged(const QString &arg1) void ConnectionEditWindow::on_quicSecurityCB_currentTextChanged(const QString &arg1)
{ {
stream.quicSettings.header.type = arg1.toStdString(); stream.quicSettings.security = arg1.toStdString();
} }
void ConnectionEditWindow::on_quicKeyTxt_textEdited(const QString &arg1) void ConnectionEditWindow::on_quicKeyTxt_textEdited(const QString &arg1)
@ -301,3 +292,76 @@ void ConnectionEditWindow::on_quicHeaderTypeCB_currentIndexChanged(const QString
{ {
stream.quicSettings.header.type = arg1.toStdString(); stream.quicSettings.header.type = arg1.toStdString();
} }
void ConnectionEditWindow::on_tcpRequestPrettifyBtn_clicked()
{
try {
auto tcpReqObject = StructFromJSONString<_TransferSettingObjects::TRANSFERObjectsInternal::HTTPRequestObject>(ui->tcpRequestTxt->toPlainText());
auto tcpReqObjectStr = StructToJSONString(tcpReqObject);
ui->tcpRequestTxt->setPlainText(tcpReqObjectStr);
} catch (...) {
QvMessageBox(this, tr("#JsonPrettify"), tr("#JsonContainsError"));
}
}
void ConnectionEditWindow::on_tcpRespPrettifyBtn_clicked()
{
try {
auto tcpRspObject = StructFromJSONString<_TransferSettingObjects::TRANSFERObjectsInternal::HTTPResponseObject>(ui->tcpRespTxt->toPlainText());
auto tcpRspObjectStr = StructToJSONString(tcpRspObject);
ui->tcpRespTxt->setPlainText(tcpRspObjectStr);
} catch (...) {
QvMessageBox(this, tr("#JsonPrettify"), tr("#JsonContainsError"));
}
}
void ConnectionEditWindow::on_tcpHeaderTypeCB_currentIndexChanged(const QString &arg1)
{
stream.tcpSettings.header.type = arg1.toStdString();
}
void ConnectionEditWindow::on_wsPathTxt_textEdited(const QString &arg1)
{
stream.wsSettings.path = arg1.toStdString();
}
void ConnectionEditWindow::on_kcpMTU_valueChanged(int arg1)
{
stream.kcpSettings.mtu = arg1;
}
void ConnectionEditWindow::on_kcpTTI_valueChanged(int arg1)
{
stream.kcpSettings.tti = arg1;
}
void ConnectionEditWindow::on_kcpUploadCapacSB_valueChanged(int arg1)
{
stream.kcpSettings.uplinkCapacity = arg1;
}
void ConnectionEditWindow::on_kcpCongestionCB_stateChanged(int arg1)
{
stream.kcpSettings.congestion = arg1 == Qt::Checked;
}
void ConnectionEditWindow::on_kcpDownCapacitySB_valueChanged(int arg1)
{
stream.kcpSettings.downlinkCapacity = arg1;
}
void ConnectionEditWindow::on_kcpReadBufferSB_valueChanged(int arg1)
{
stream.kcpSettings.readBufferSize = arg1;
}
void ConnectionEditWindow::on_kcpWriteBufferSB_valueChanged(int arg1)
{
stream.kcpSettings.writeBufferSize = arg1;
}
void ConnectionEditWindow::on_kcpHeaderType_currentTextChanged(const QString &arg1)
{
stream.kcpSettings.header.type = arg1.toStdString();
}

View File

@ -36,18 +36,12 @@ class ConnectionEditWindow : public QDialog
void on_tranportCombo_currentIndexChanged(const QString &arg1); void on_tranportCombo_currentIndexChanged(const QString &arg1);
void on_comboBox_currentIndexChanged(const QString &arg1);
void on_httpPathTxt_textEdited(const QString &arg1); void on_httpPathTxt_textEdited(const QString &arg1);
void on_httpHostTxt_textChanged(); void on_httpHostTxt_textChanged();
void on_lineEdit_textEdited(const QString &arg1);
void on_wsHeadersTxt_textChanged(); void on_wsHeadersTxt_textChanged();
void on_spinBox_valueChanged(int arg1);
void on_tcpRequestDefBtn_clicked(); void on_tcpRequestDefBtn_clicked();
void on_tcpRespDefBtn_clicked(); void on_tcpRespDefBtn_clicked();
@ -72,6 +66,30 @@ class ConnectionEditWindow : public QDialog
void on_quicHeaderTypeCB_currentIndexChanged(const QString &arg1); void on_quicHeaderTypeCB_currentIndexChanged(const QString &arg1);
void on_tcpRequestPrettifyBtn_clicked();
void on_tcpRespPrettifyBtn_clicked();
void on_tcpHeaderTypeCB_currentIndexChanged(const QString &arg1);
void on_wsPathTxt_textEdited(const QString &arg1);
void on_kcpMTU_valueChanged(int arg1);
void on_kcpTTI_valueChanged(int arg1);
void on_kcpUploadCapacSB_valueChanged(int arg1);
void on_kcpCongestionCB_stateChanged(int arg1);
void on_kcpDownCapacitySB_valueChanged(int arg1);
void on_kcpReadBufferSB_valueChanged(int arg1);
void on_kcpWriteBufferSB_valueChanged(int arg1);
void on_kcpHeaderType_currentTextChanged(const QString &arg1);
private: private:
QString _alias; QString _alias;
void LoadGUIContents(); void LoadGUIContents();

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1012</width> <width>1012</width>
<height>547</height> <height>574</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -227,7 +227,7 @@
</size> </size>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>0</number>
</property> </property>
<property name="usesScrollButtons"> <property name="usesScrollButtons">
<bool>true</bool> <bool>true</bool>
@ -237,7 +237,7 @@
<string>TCP</string> <string>TCP</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2"> <item row="0" column="0" colspan="4">
<layout class="QGridLayout" name="gridLayout_4" columnstretch="1,5"> <layout class="QGridLayout" name="gridLayout_4" columnstretch="1,5">
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="tcpHeaderTypeCB"> <widget class="QComboBox" name="tcpHeaderTypeCB">
@ -269,14 +269,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="2">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>#Response</string> <string>#Response</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="2" column="0" colspan="2">
<widget class="QPlainTextEdit" name="tcpRequestTxt"> <widget class="QPlainTextEdit" name="tcpRequestTxt">
<property name="lineWrapMode"> <property name="lineWrapMode">
<enum>QPlainTextEdit::NoWrap</enum> <enum>QPlainTextEdit::NoWrap</enum>
@ -289,7 +289,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="2" column="2" colspan="2">
<widget class="QPlainTextEdit" name="tcpRespTxt"> <widget class="QPlainTextEdit" name="tcpRespTxt">
<property name="lineWrapMode"> <property name="lineWrapMode">
<enum>QPlainTextEdit::NoWrap</enum> <enum>QPlainTextEdit::NoWrap</enum>
@ -307,12 +307,26 @@
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QPushButton" name="tcpRequestPrettifyBtn">
<property name="text">
<string>#Prettify</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="tcpRespDefBtn"> <widget class="QPushButton" name="tcpRespDefBtn">
<property name="text"> <property name="text">
<string>#InsertDefaultContent</string> <string>#InsertDefaultContent</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="3">
<widget class="QPushButton" name="tcpRespPrettifyBtn">
<property name="text">
<string>#Prettify</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="httpTab"> <widget class="QWidget" name="httpTab">

View File

@ -105,6 +105,7 @@ void MainWindow::on_stopButton_clicked()
{ {
LOG("Stop connection!") LOG("Stop connection!")
this->vinstance->Stop(); this->vinstance->Stop();
QFile(QV2RAY_GENERATED_CONFIG_FILE_PATH).remove();
ui->statusLabel->setText(tr("#Stopped")); ui->statusLabel->setText(tr("#Stopped"));
ui->logText->clear(); ui->logText->clear();
trayMenu->actions()[2]->setEnabled(true); trayMenu->actions()[2]->setEnabled(true);
@ -126,6 +127,7 @@ void MainWindow::on_clbutton_clicked()
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)
{ {
this->hide(); this->hide();
trayMenu->actions()[0]->setText(tr("#Show"));
event->ignore(); event->ignore();
} }
@ -141,13 +143,6 @@ void MainWindow::on_activatedTray(QSystemTrayIcon::ActivationReason reason)
#endif #endif
break; break;
case QSystemTrayIcon::DoubleClick:
if (this->isHidden()) {
this->show();
}
break;
case QSystemTrayIcon::MiddleClick: case QSystemTrayIcon::MiddleClick:
if (this->vinstance->Status == Qv2ray::STOPPED) { if (this->vinstance->Status == Qv2ray::STOPPED) {
on_startButton_clicked(); on_startButton_clicked();
@ -244,14 +239,16 @@ void MainWindow::on_delConfigBtn_clicked()
{ {
auto conf = GetGlobalConfig(); auto conf = GetGlobalConfig();
QList<string> list = QList<string>::fromStdList(conf.configs); QList<string> list = QList<string>::fromStdList(conf.configs);
auto currentSelected = ui->connectionListWidget->currentItem()->text(); auto currentSelected = ui->connectionListWidget->currentIndex().row();
if (currentSelected == CurrentConnectionName) { if (currentSelected < 0) return;
if (ui->connectionListWidget->item(currentSelected)->text() == CurrentConnectionName) {
on_stopButton_clicked(); on_stopButton_clicked();
CurrentConnectionName = ""; CurrentConnectionName = "";
} }
list.removeOne(currentSelected.toStdString()); list.removeOne(ui->connectionListWidget->item(currentSelected)->text().toStdString());
conf.configs = list.toStdList(); conf.configs = list.toStdList();
SetGlobalConfig(conf); SetGlobalConfig(conf);
SaveGlobalConfig(); SaveGlobalConfig();
@ -262,7 +259,6 @@ void MainWindow::on_prefrencesBtn_clicked()
{ {
PrefrencesWindow *w = new PrefrencesWindow(this); PrefrencesWindow *w = new PrefrencesWindow(this);
connect(w, &PrefrencesWindow::s_reload_config, this, &MainWindow::reload_config); connect(w, &PrefrencesWindow::s_reload_config, this, &MainWindow::reload_config);
w->ReloadCurrentConfig();
w->show(); w->show();
} }

View File

@ -9,7 +9,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>568</width> <width>607</width>
<height>457</height> <height>457</height>
</rect> </rect>
</property> </property>
@ -25,12 +25,6 @@
<height>457</height> <height>457</height>
</size> </size>
</property> </property>
<property name="maximumSize">
<size>
<width>866</width>
<height>990</height>
</size>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>Qv2ray</string> <string>Qv2ray</string>
</property> </property>
@ -41,8 +35,8 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QGridLayout" name="gridLayout">
<item> <item row="0" column="0" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1,1,1,0,0,0,0"> <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1,1,1,0,0,0,0">
<property name="spacing"> <property name="spacing">
<number>5</number> <number>5</number>
@ -117,191 +111,175 @@
</item> </item>
</layout> </layout>
</item> </item>
<item> <item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="1,1"> <widget class="QLabel" name="label_8">
<item> <property name="text">
<layout class="QVBoxLayout" name="verticalLayout_2"> <string>#HostList</string>
<item> </property>
<widget class="QLabel" name="label_8"> </widget>
<property name="text">
<string>#HostList</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="connectionListWidget">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="midLineWidth">
<number>0</number>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::CopyAction</enum>
</property>
<property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="horizontalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="viewMode">
<enum>QListView::ListMode</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="importConfigBtn">
<property name="text">
<string>#ImportConfig</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addConfigBtn">
<property name="text">
<string>#AddConfig</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="delConfigBtn">
<property name="text">
<string>#RemoveConfig</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>#ConfigDetail</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="verticalSpacing">
<number>10</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>#Host</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="_hostLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>#Port</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="_portLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>#UUID</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="_uuidLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>#Transport</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="_transportLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>#ConnectionSettings</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="editConnectionSettingsBtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>#ConnectionSettings</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item> </item>
<item> <item row="1" column="3" rowspan="3">
<layout class="QVBoxLayout" name="verticalLayout_3"> <widget class="QGroupBox" name="groupBox">
<item> <property name="title">
<widget class="QLabel" name="label_10"> <string>#ConfigDetail</string>
<property name="text"> </property>
<string>#Log</string> <layout class="QFormLayout" name="formLayout">
</property> <property name="fieldGrowthPolicy">
</widget> <enum>QFormLayout::ExpandingFieldsGrow</enum>
</item> </property>
<item> <property name="verticalSpacing">
<widget class="QTextBrowser" name="logText"> <number>10</number>
<property name="verticalScrollBarPolicy"> </property>
<enum>Qt::ScrollBarAlwaysOn</enum> <item row="0" column="0">
</property> <widget class="QLabel" name="label">
</widget> <property name="text">
</item> <string>#Host</string>
</layout> </property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="_hostLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>#Port</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="_portLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>#UUID</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="_uuidLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>#Transport</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="_transportLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>#ConnectionSettings</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="editConnectionSettingsBtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>#ConnectionSettings</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0" colspan="3">
<widget class="QListWidget" name="connectionListWidget">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="midLineWidth">
<number>0</number>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::CopyAction</enum>
</property>
<property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="horizontalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="viewMode">
<enum>QListView::ListMode</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="importConfigBtn">
<property name="text">
<string>#ImportConfig</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="addConfigBtn">
<property name="text">
<string>#AddConfig</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="delConfigBtn">
<property name="text">
<string>#RemoveConfig</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>#Log</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="4">
<widget class="QTextBrowser" name="logText">
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -1,6 +1,7 @@
#include "QvUtils.h" #include "QvUtils.h"
#include "QvCoreInteractions.h" #include "QvCoreInteractions.h"
#include "w_PrefrencesWindow.h" #include "w_PrefrencesWindow.h"
#include <QFileDialog>
#ifndef _WIN32 #ifndef _WIN32
#include <unistd.h> #include <unistd.h>
@ -11,11 +12,6 @@ PrefrencesWindow::PrefrencesWindow(QWidget *parent) : QDialog(parent),
ui(new Ui::PrefrencesWindow) ui(new Ui::PrefrencesWindow)
{ {
ui->setupUi(this); ui->setupUi(this);
ReloadCurrentConfig();
}
void PrefrencesWindow::ReloadCurrentConfig()
{
CurrentConfig = GetGlobalConfig(); CurrentConfig = GetGlobalConfig();
// //
ui->languageComboBox->setCurrentText(QString::fromStdString(CurrentConfig.language)); ui->languageComboBox->setCurrentText(QString::fromStdString(CurrentConfig.language));
@ -56,11 +52,13 @@ void PrefrencesWindow::ReloadCurrentConfig()
ui->proxyDefaultCb->setChecked(CurrentConfig.proxyDefault); ui->proxyDefaultCb->setChecked(CurrentConfig.proxyDefault);
ui->localDNSCb->setChecked(CurrentConfig.withLocalDNS); ui->localDNSCb->setChecked(CurrentConfig.withLocalDNS);
// //
ui->DNSListListBox->clear(); ui->DNSListTxt->clear();
foreach (auto dnsStr, CurrentConfig.dnsList) { foreach (auto dnsStr, CurrentConfig.dnsList) {
ui->DNSListListBox->addItem(QString::fromStdString(dnsStr)); ui->DNSListTxt->appendPlainText(QString::fromStdString(dnsStr) + "\r\n");
} }
finishedLoading = true;
} }
PrefrencesWindow::~PrefrencesWindow() PrefrencesWindow::~PrefrencesWindow()
@ -227,3 +225,42 @@ void PrefrencesWindow::on_localDNSCb_stateChanged(int arg1)
{ {
CurrentConfig.withLocalDNS = arg1 == Qt::Checked; CurrentConfig.withLocalDNS = arg1 == Qt::Checked;
} }
void PrefrencesWindow::on_selectVCoreBtn_clicked()
{
QString dir = QFileDialog::getOpenFileName(this, tr("#OpenVCoreFile"), QDir::homePath());
ui->vCoreExePathTxt->setText(dir);
on_vCoreExePathTxt_textEdited(dir);
}
void PrefrencesWindow::on_selectVAssetBtn_clicked()
{
QString dir = QFileDialog::getExistingDirectory(this, tr("OpenVAssetsDir"), QDir::homePath());
ui->vCoreAssetsPathTxt->setText(dir);
on_vCoreAssetsPathTxt_textChanged(dir);
}
void PrefrencesWindow::on_DNSListTxt_textChanged()
{
if (finishedLoading) {
try {
QStringList hosts = ui->DNSListTxt->toPlainText().replace("\r", "").split("\n");
CurrentConfig.dnsList.clear();
foreach (auto host, hosts) {
if (host != "" && host != "\r") {
// Not empty, so we save.
CurrentConfig.dnsList.push_back(host.toStdString());
}
}
WHITE(DNSListTxt)
} catch (...) {
RED(DNSListTxt)
}
}
}
void PrefrencesWindow::on_vCoreAssetsPathTxt_textChanged(const QString &arg1)
{
CurrentConfig.v2AssetsPath = arg1.toStdString();
}

View File

@ -17,7 +17,6 @@ class PrefrencesWindow : public QDialog
public: public:
explicit PrefrencesWindow(QWidget *parent = nullptr); explicit PrefrencesWindow(QWidget *parent = nullptr);
~PrefrencesWindow(); ~PrefrencesWindow();
void ReloadCurrentConfig();
signals: signals:
void s_reload_config(); void s_reload_config();
private slots: private slots:
@ -63,7 +62,16 @@ class PrefrencesWindow : public QDialog
void on_localDNSCb_stateChanged(int arg1); void on_localDNSCb_stateChanged(int arg1);
void on_selectVCoreBtn_clicked();
void on_selectVAssetBtn_clicked();
void on_DNSListTxt_textChanged();
void on_vCoreAssetsPathTxt_textChanged(const QString &arg1);
private: private:
bool finishedLoading = false;
Qv2ray::QvConfigModels::Qv2Config_v1 CurrentConfig; Qv2ray::QvConfigModels::Qv2Config_v1 CurrentConfig;
Ui::PrefrencesWindow *ui; Ui::PrefrencesWindow *ui;
}; };

View File

@ -23,7 +23,7 @@
<item> <item>
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>3</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@ -37,6 +37,26 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1">
<widget class="QComboBox" name="languageComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>zh-CN</string>
</property>
</item>
<item>
<property name="text">
<string>en-US</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_7"> <widget class="QLabel" name="label_7">
<property name="text"> <property name="text">
@ -107,7 +127,18 @@
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QLineEdit" name="vCoreExePathTxt"/> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLineEdit" name="vCoreExePathTxt"/>
</item>
<item>
<widget class="QPushButton" name="selectVCoreBtn">
<property name="text">
<string>#Select</string>
</property>
</widget>
</item>
</layout>
</item> </item>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_15"> <widget class="QLabel" name="label_15">
@ -117,27 +148,18 @@
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="4" column="1">
<widget class="QLineEdit" name="vCoreAssetsPathTxt"/> <layout class="QHBoxLayout" name="horizontalLayout_5">
</item>
<item row="0" column="1">
<widget class="QComboBox" name="languageComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item> <item>
<property name="text"> <widget class="QLineEdit" name="vCoreAssetsPathTxt"/>
<string>zh-CN</string>
</property>
</item> </item>
<item> <item>
<property name="text"> <widget class="QPushButton" name="selectVAssetBtn">
<string>en-US</string> <property name="text">
</property> <string>#Select</string>
</property>
</widget>
</item> </item>
</widget> </layout>
</item> </item>
</layout> </layout>
</widget> </widget>
@ -406,32 +428,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QListWidget" name="DNSListListBox"/> <widget class="QPlainTextEdit" name="DNSListTxt"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="addDNStoListBtn">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="removeDNSinListBtn">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="chearDNSListBtn">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -10,7 +10,7 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="31"/> <location filename="../src/w_ConnectionEditWindow.ui" line="31"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="336"/> <location filename="../src/w_ConnectionEditWindow.ui" line="350"/>
<source>#Host</source> <source>#Host</source>
<translation>Host</translation> <translation>Host</translation>
</message> </message>
@ -31,7 +31,7 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="86"/> <location filename="../src/w_ConnectionEditWindow.ui" line="86"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="649"/> <location filename="../src/w_ConnectionEditWindow.ui" line="663"/>
<source>#Security</source> <source>#Security</source>
<translation>Security Settings</translation> <translation>Security Settings</translation>
</message> </message>
@ -52,8 +52,8 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="259"/> <location filename="../src/w_ConnectionEditWindow.ui" line="259"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="567"/> <location filename="../src/w_ConnectionEditWindow.ui" line="581"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="716"/> <location filename="../src/w_ConnectionEditWindow.ui" line="730"/>
<source>#Type</source> <source>#Type</source>
<translation>Type</translation> <translation>Type</translation>
</message> </message>
@ -64,7 +64,7 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="305"/> <location filename="../src/w_ConnectionEditWindow.ui" line="305"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="312"/> <location filename="../src/w_ConnectionEditWindow.ui" line="319"/>
<source>#InsertDefaultContent</source> <source>#InsertDefaultContent</source>
<translation>Insert Default Content</translation> <translation>Insert Default Content</translation>
</message> </message>
@ -84,82 +84,88 @@
<translation>Generate JSON</translation> <translation>Generate JSON</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="320"/> <location filename="../src/w_ConnectionEditWindow.ui" line="312"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="326"/>
<source>#Prettify</source>
<translation>Prettify JSON</translation>
</message>
<message>
<location filename="../src/w_ConnectionEditWindow.ui" line="334"/>
<source>HTTP</source> <source>HTTP</source>
<translation>HTTP</translation> <translation>HTTP</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="326"/> <location filename="../src/w_ConnectionEditWindow.ui" line="340"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="355"/> <location filename="../src/w_ConnectionEditWindow.ui" line="369"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="626"/> <location filename="../src/w_ConnectionEditWindow.ui" line="640"/>
<source>#Path</source> <source>#Path</source>
<translation>Path</translation> <translation>Path</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="347"/> <location filename="../src/w_ConnectionEditWindow.ui" line="361"/>
<source>WebSocket</source> <source>WebSocket</source>
<translation>WebSocket</translation> <translation>WebSocket</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="371"/> <location filename="../src/w_ConnectionEditWindow.ui" line="385"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="695"/> <location filename="../src/w_ConnectionEditWindow.ui" line="709"/>
<source>#Headers</source> <source>#Headers</source>
<translation>Headers</translation> <translation>Headers</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="378"/> <location filename="../src/w_ConnectionEditWindow.ui" line="392"/>
<source>#key|value format</source> <source>#key|value format</source>
<translation>Format: KEY|VALUE</translation> <translation>Format: KEY|VALUE</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="389"/> <location filename="../src/w_ConnectionEditWindow.ui" line="403"/>
<source>mKCP</source> <source>mKCP</source>
<translation>mKCP</translation> <translation>mKCP</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="397"/> <location filename="../src/w_ConnectionEditWindow.ui" line="411"/>
<source>#MTU</source> <source>#MTU</source>
<translation>MTU</translation> <translation>MTU</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="423"/> <location filename="../src/w_ConnectionEditWindow.ui" line="437"/>
<source>#TTI (ms)</source> <source>#TTI (ms)</source>
<translation>TTI (ms)</translation> <translation>TTI (ms)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="449"/> <location filename="../src/w_ConnectionEditWindow.ui" line="463"/>
<source>#UplinkCapacity (MB/s)</source> <source>#UplinkCapacity (MB/s)</source>
<translation>Uplink Capacity (MB/s)</translation> <translation>Uplink Capacity (MB/s)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="472"/> <location filename="../src/w_ConnectionEditWindow.ui" line="486"/>
<source>#Congestion</source> <source>#Congestion</source>
<translation>Congestion Control</translation> <translation>Congestion Control</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="769"/> <location filename="../src/w_ConnectionEditWindow.ui" line="783"/>
<source>SockOpt</source> <source>SockOpt</source>
<translation>SockOpt</translation> <translation>SockOpt</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="775"/> <location filename="../src/w_ConnectionEditWindow.ui" line="789"/>
<source>#Mark</source> <source>#Mark</source>
<translation>Mark</translation> <translation>Mark</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="785"/> <location filename="../src/w_ConnectionEditWindow.ui" line="799"/>
<source>#TCPFastOpen</source> <source>#TCPFastOpen</source>
<translation>TCP Fast Open</translation> <translation>TCP Fast Open</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="799"/> <location filename="../src/w_ConnectionEditWindow.ui" line="813"/>
<source>#TProxy</source> <source>#TProxy</source>
<translation>Transparent Proxy Mode</translation> <translation>Transparent Proxy Mode</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="165"/> <location filename="../src/w_ConnectionEditWindow.ui" line="165"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="479"/> <location filename="../src/w_ConnectionEditWindow.ui" line="493"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="792"/> <location filename="../src/w_ConnectionEditWindow.ui" line="806"/>
<source>#Enabled</source> <source>#Enabled</source>
<translation>Enabled</translation> <translation>Enabled</translation>
</message> </message>
@ -169,41 +175,53 @@
<translation>Preview Generated JSON</translation> <translation>Preview Generated JSON</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="490"/> <location filename="../src/w_ConnectionEditWindow.ui" line="504"/>
<source>#DownlinkCapacity (MB/s)</source> <source>#DownlinkCapacity (MB/s)</source>
<translation>Downlink Capacity (MB/s)</translation> <translation>Downlink Capacity (MB/s)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="513"/> <location filename="../src/w_ConnectionEditWindow.ui" line="527"/>
<source>#ReadBufferSize (MB)</source> <source>#ReadBufferSize (MB)</source>
<translation>Read Buffer Size (MB)</translation> <translation>Read Buffer Size (MB)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="536"/> <location filename="../src/w_ConnectionEditWindow.ui" line="550"/>
<source>#WriteBufferSize (MB)</source> <source>#WriteBufferSize (MB)</source>
<translation>Write Buffer Size (MB)</translation> <translation>Write Buffer Size (MB)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="561"/> <location filename="../src/w_ConnectionEditWindow.ui" line="575"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="708"/> <location filename="../src/w_ConnectionEditWindow.ui" line="722"/>
<source>#Header</source> <source>#Header</source>
<translation>Headers</translation> <translation>Headers</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="618"/> <location filename="../src/w_ConnectionEditWindow.ui" line="632"/>
<source>DomainSocket</source> <source>DomainSocket</source>
<translation>DomainSocket</translation> <translation>DomainSocket</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="643"/> <location filename="../src/w_ConnectionEditWindow.ui" line="657"/>
<source>QUIC</source> <source>QUIC</source>
<translation>QUIC</translation> <translation>QUIC</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="681"/> <location filename="../src/w_ConnectionEditWindow.ui" line="695"/>
<source>#Key</source> <source>#Key</source>
<translation>Key</translation> <translation>Key</translation>
</message> </message>
<message>
<location filename="../src/w_ConnectionEditWindow.cpp" line="303"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="314"/>
<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"/>
<source>#JsonContainsError</source>
<translation>JSON is in a bad syntax</translation>
</message>
</context> </context>
<context> <context>
<name>ImportConfigWindow</name> <name>ImportConfigWindow</name>
@ -297,127 +315,127 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="35"/> <location filename="../src/w_MainWindow.ui" line="29"/>
<source>Qv2ray</source> <source>Qv2ray</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="53"/> <location filename="../src/w_MainWindow.ui" line="47"/>
<location filename="../src/w_MainWindow.ui" line="331"/> <location filename="../src/w_MainWindow.ui" line="309"/>
<location filename="../src/w_MainWindow.cpp" line="28"/> <location filename="../src/w_MainWindow.cpp" line="28"/>
<source>#Start</source> <source>#Start</source>
<translation>Start</translation> <translation>Start</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="60"/> <location filename="../src/w_MainWindow.ui" line="54"/>
<location filename="../src/w_MainWindow.ui" line="336"/> <location filename="../src/w_MainWindow.ui" line="314"/>
<location filename="../src/w_MainWindow.cpp" line="29"/> <location filename="../src/w_MainWindow.cpp" line="29"/>
<source>#Stop</source> <source>#Stop</source>
<translation>Stop</translation> <translation>Stop</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="67"/> <location filename="../src/w_MainWindow.ui" line="61"/>
<location filename="../src/w_MainWindow.ui" line="341"/> <location filename="../src/w_MainWindow.ui" line="319"/>
<location filename="../src/w_MainWindow.cpp" line="30"/> <location filename="../src/w_MainWindow.cpp" line="30"/>
<source>#Restart</source> <source>#Restart</source>
<translation>Restart</translation> <translation>Restart</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="77"/> <location filename="../src/w_MainWindow.ui" line="71"/>
<source>#ClearLog</source> <source>#ClearLog</source>
<translation>Clear Log</translation> <translation>Clear Log</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="107"/> <location filename="../src/w_MainWindow.ui" line="101"/>
<source>#Status</source> <source>#Status</source>
<translation>Status</translation> <translation>Status</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="114"/> <location filename="../src/w_MainWindow.ui" line="108"/>
<location filename="../src/w_MainWindow.cpp" line="108"/> <location filename="../src/w_MainWindow.cpp" line="109"/>
<source>#Stopped</source> <source>#Stopped</source>
<translation>Stopped</translation> <translation>Stopped</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="127"/> <location filename="../src/w_MainWindow.ui" line="117"/>
<source>#HostList</source> <source>#HostList</source>
<translation>Host List</translation> <translation>Host List</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="170"/> <location filename="../src/w_MainWindow.ui" line="252"/>
<source>#ImportConfig</source> <source>#ImportConfig</source>
<translation>Import Config</translation> <translation>Import Config</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="177"/> <location filename="../src/w_MainWindow.ui" line="259"/>
<source>#AddConfig</source> <source>#AddConfig</source>
<translation>Add Config</translation> <translation>Add Config</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="184"/> <location filename="../src/w_MainWindow.ui" line="266"/>
<source>#RemoveConfig</source> <source>#RemoveConfig</source>
<translation>Remove Config</translation> <translation>Remove Config</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="195"/> <location filename="../src/w_MainWindow.ui" line="124"/>
<source>#ConfigDetail</source> <source>#ConfigDetail</source>
<translation>Detailed Config Info</translation> <translation>Detailed Config Info</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="207"/> <location filename="../src/w_MainWindow.ui" line="136"/>
<source>#Host</source> <source>#Host</source>
<translation>Host</translation> <translation>Host</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="221"/> <location filename="../src/w_MainWindow.ui" line="150"/>
<source>#Port</source> <source>#Port</source>
<translation>Port</translation> <translation>Port</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="235"/> <location filename="../src/w_MainWindow.ui" line="164"/>
<source>#UUID</source> <source>#UUID</source>
<translation>UUID</translation> <translation>UUID</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="249"/> <location filename="../src/w_MainWindow.ui" line="178"/>
<source>#Transport</source> <source>#Transport</source>
<translation>Transport Settings</translation> <translation>Transport Settings</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="263"/> <location filename="../src/w_MainWindow.ui" line="192"/>
<location filename="../src/w_MainWindow.ui" line="276"/> <location filename="../src/w_MainWindow.ui" line="205"/>
<source>#ConnectionSettings</source> <source>#ConnectionSettings</source>
<translation>Connection Settings</translation> <translation>Connection Settings</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="293"/> <location filename="../src/w_MainWindow.ui" line="273"/>
<source>#Log</source> <source>#Log</source>
<translation>Log</translation> <translation>Log</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="311"/> <location filename="../src/w_MainWindow.ui" line="289"/>
<source>#ManuallyCreateConnection</source> <source>#ManuallyCreateConnection</source>
<translation>Manually Create Connection</translation> <translation>Manually Create Connection</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="316"/> <location filename="../src/w_MainWindow.ui" line="294"/>
<source>#ImportConnection</source> <source>#ImportConnection</source>
<translation>Import Config File</translation> <translation>Import Config File</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="321"/> <location filename="../src/w_MainWindow.ui" line="299"/>
<source>#Exit</source> <source>#Exit</source>
<translation>Exit</translation> <translation>Exit</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="84"/> <location filename="../src/w_MainWindow.ui" line="78"/>
<location filename="../src/w_MainWindow.ui" line="326"/> <location filename="../src/w_MainWindow.ui" line="304"/>
<source>#Preferences</source> <source>#Preferences</source>
<translation>Preferences</translation> <translation>Preferences</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.cpp" line="26"/> <location filename="../src/w_MainWindow.cpp" line="26"/>
<location filename="../src/w_MainWindow.cpp" line="169"/> <location filename="../src/w_MainWindow.cpp" line="164"/>
<source>#Hide</source> <source>#Hide</source>
<translation>Hide</translation> <translation>Hide</translation>
</message> </message>
@ -442,7 +460,8 @@
<translation>Started</translation> <translation>Started</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.cpp" line="172"/> <location filename="../src/w_MainWindow.cpp" line="130"/>
<location filename="../src/w_MainWindow.cpp" line="167"/>
<source>#Show</source> <source>#Show</source>
<translation>Show</translation> <translation>Show</translation>
</message> </message>
@ -451,8 +470,8 @@
<name>PrefrencesWindow</name> <name>PrefrencesWindow</name>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="20"/> <location filename="../src/w_PrefrencesWindow.ui" line="20"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="74"/> <location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="140"/> <location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<source>Prefrences</source> <source>Prefrences</source>
<translation>Preferences</translation> <translation>Preferences</translation>
</message> </message>
@ -467,188 +486,201 @@
<translation>Language</translation> <translation>Language</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="132"/> <location filename="../src/w_PrefrencesWindow.ui" line="50"/>
<source>zh-CN</source> <source>zh-CN</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="137"/> <location filename="../src/w_PrefrencesWindow.ui" line="55"/>
<source>en-US</source> <source>en-US</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="43"/> <location filename="../src/w_PrefrencesWindow.ui" line="63"/>
<source>#RunAsRoot</source> <source>#RunAsRoot</source>
<translation>Run v2ray as root</translation> <translation>Run v2ray as root</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="50"/> <location filename="../src/w_PrefrencesWindow.ui" line="70"/>
<location filename="../src/w_PrefrencesWindow.ui" line="152"/> <location filename="../src/w_PrefrencesWindow.ui" line="174"/>
<location filename="../src/w_PrefrencesWindow.ui" line="159"/> <location filename="../src/w_PrefrencesWindow.ui" line="181"/>
<location filename="../src/w_PrefrencesWindow.ui" line="229"/> <location filename="../src/w_PrefrencesWindow.ui" line="251"/>
<location filename="../src/w_PrefrencesWindow.ui" line="236"/> <location filename="../src/w_PrefrencesWindow.ui" line="258"/>
<location filename="../src/w_PrefrencesWindow.ui" line="302"/> <location filename="../src/w_PrefrencesWindow.ui" line="324"/>
<location filename="../src/w_PrefrencesWindow.ui" line="316"/> <location filename="../src/w_PrefrencesWindow.ui" line="338"/>
<location filename="../src/w_PrefrencesWindow.ui" line="364"/> <location filename="../src/w_PrefrencesWindow.ui" line="386"/>
<location filename="../src/w_PrefrencesWindow.ui" line="385"/> <location filename="../src/w_PrefrencesWindow.ui" line="407"/>
<location filename="../src/w_PrefrencesWindow.ui" line="392"/> <location filename="../src/w_PrefrencesWindow.ui" line="414"/>
<source>#Enabled</source> <source>#Enabled</source>
<translation>Enabled</translation> <translation>Enabled</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="57"/> <location filename="../src/w_PrefrencesWindow.ui" line="77"/>
<source>#LogLevel</source> <source>#LogLevel</source>
<translation>Log Level</translation> <translation>Log Level</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="82"/> <location filename="../src/w_PrefrencesWindow.ui" line="102"/>
<source>debug</source> <source>debug</source>
<translation>Debug</translation> <translation>Debug</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="87"/> <location filename="../src/w_PrefrencesWindow.ui" line="107"/>
<source>info</source> <source>info</source>
<translation>Info</translation> <translation>Info</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="92"/> <location filename="../src/w_PrefrencesWindow.ui" line="112"/>
<source>warning</source> <source>warning</source>
<translation>Warning</translation> <translation>Warning</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="97"/> <location filename="../src/w_PrefrencesWindow.ui" line="117"/>
<source>error</source> <source>error</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="357"/> <location filename="../src/w_PrefrencesWindow.ui" line="137"/>
<location filename="../src/w_PrefrencesWindow.ui" line="158"/>
<source>#Select</source>
<translation>Select</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="379"/>
<source>#ProxyGlobal</source> <source>#ProxyGlobal</source>
<translation>Use Proxy as Default</translation> <translation>Use Proxy as Default</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="371"/> <location filename="../src/w_PrefrencesWindow.ui" line="393"/>
<source>#ProxyCN</source> <source>#ProxyCN</source>
<translation>Use Proxy for China Mainland</translation> <translation>Use Proxy for China Mainland</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="378"/> <location filename="../src/w_PrefrencesWindow.ui" line="400"/>
<source>#WithLocalDNS</source> <source>#WithLocalDNS</source>
<translation>Use localhost DNS</translation> <translation>Use localhost DNS</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="404"/> <location filename="../src/w_PrefrencesWindow.ui" line="426"/>
<source>#DNSList</source> <source>#DNSList</source>
<translation>DNS Address List</translation> <translation>DNS Address List</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="416"/>
<source>Add</source> <source>Add</source>
<translation>Add</translation> <translation type="vanished">Add</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="423"/>
<source>Remove</source> <source>Remove</source>
<translation>Remove</translation> <translation type="vanished">Remove</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="430"/>
<source>Clear</source> <source>Clear</source>
<translation>Clear</translation> <translation type="vanished">Clear</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="77"/> <location filename="../src/w_PrefrencesWindow.ui" line="97"/>
<source>none</source> <source>none</source>
<translation>Do not use</translation> <translation>Do not use</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="105"/> <location filename="../src/w_PrefrencesWindow.ui" line="125"/>
<source>#VCoreExePath</source> <source>#VCoreExePath</source>
<translation>V2ray Kernal Path</translation> <translation>V2ray Kernal Path</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="115"/> <location filename="../src/w_PrefrencesWindow.ui" line="146"/>
<source>#VCoreAssetsPath</source> <source>#VCoreAssetsPath</source>
<translation>V2ray Assets Path</translation> <translation>V2ray Assets Path</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="146"/> <location filename="../src/w_PrefrencesWindow.ui" line="168"/>
<source>#MuxSettings</source> <source>#MuxSettings</source>
<translation>Mux Settings</translation> <translation>Mux Settings</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="187"/> <location filename="../src/w_PrefrencesWindow.ui" line="209"/>
<source>#InBoundSettings</source> <source>#InBoundSettings</source>
<translation>Inbound Settings</translation> <translation>Inbound Settings</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="195"/> <location filename="../src/w_PrefrencesWindow.ui" line="217"/>
<source>#ListenIP</source> <source>#ListenIP</source>
<translation>Listen IP</translation> <translation>Listen IP</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="273"/> <location filename="../src/w_PrefrencesWindow.ui" line="295"/>
<source>#HTTPInBoundSettings</source> <source>#HTTPInBoundSettings</source>
<translation>HTTP Inbound Settings</translation> <translation>HTTP Inbound Settings</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="209"/> <location filename="../src/w_PrefrencesWindow.ui" line="231"/>
<source>#SOCKSBoundSettings</source> <source>#SOCKSBoundSettings</source>
<translation>SOCKS Inbound Settings</translation> <translation>SOCKS Inbound Settings</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="349"/> <location filename="../src/w_PrefrencesWindow.ui" line="371"/>
<source>#RouteSettings</source> <source>#RouteSettings</source>
<translation>Route Settings</translation> <translation>Route Settings</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="166"/> <location filename="../src/w_PrefrencesWindow.ui" line="188"/>
<source>#Concurrency</source> <source>#Concurrency</source>
<translation>Maximum Connections</translation> <translation>Maximum Connections</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="215"/> <location filename="../src/w_PrefrencesWindow.ui" line="237"/>
<location filename="../src/w_PrefrencesWindow.ui" line="279"/> <location filename="../src/w_PrefrencesWindow.ui" line="301"/>
<source>#Port</source> <source>#Port</source>
<translation>Port</translation> <translation>Port</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="253"/> <location filename="../src/w_PrefrencesWindow.ui" line="275"/>
<location filename="../src/w_PrefrencesWindow.ui" line="323"/> <location filename="../src/w_PrefrencesWindow.ui" line="345"/>
<source>#Username</source> <source>#Username</source>
<translation>Username</translation> <translation>Username</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="243"/> <location filename="../src/w_PrefrencesWindow.ui" line="265"/>
<location filename="../src/w_PrefrencesWindow.ui" line="309"/> <location filename="../src/w_PrefrencesWindow.ui" line="331"/>
<source>#Auth</source> <source>#Auth</source>
<translation>Authentication</translation> <translation>Authentication</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="260"/> <location filename="../src/w_PrefrencesWindow.ui" line="282"/>
<location filename="../src/w_PrefrencesWindow.ui" line="333"/> <location filename="../src/w_PrefrencesWindow.ui" line="355"/>
<source>#Password</source> <source>#Password</source>
<translation>Password</translation> <translation>Password</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.cpp" line="74"/> <location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<source>PortNumbersCannotBeSame</source> <source>PortNumbersCannotBeSame</source>
<translation>Port numbers cannot be the same</translation> <translation>Port numbers cannot be the same</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.cpp" line="140"/> <location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<source>RunAsRootNotOnWindows</source> <source>RunAsRootNotOnWindows</source>
<translation>Run as root is not avaliable on Windows Platform</translation> <translation>Run as root is not avaliable on Windows Platform</translation>
</message> </message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="231"/>
<source>#OpenVCoreFile</source>
<translation>Open v2rat-core file</translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="238"/>
<source>OpenVAssetsDir</source>
<translation>Open v2ray assets folder</translation>
</message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../src/main.cpp" line="91"/> <location filename="../src/main.cpp" line="86"/>
<source>AnotherInstanceRunning</source> <source>AnotherInstanceRunning</source>
<translation>Another instance is already running</translation> <translation>Another instance is already running</translation>
</message> </message>
<message> <message>
<location filename="../src/main.cpp" line="91"/> <location filename="../src/main.cpp" line="86"/>
<source>Qv2ray</source> <source>Qv2ray</source>
<translation></translation> <translation></translation>
</message> </message>

View File

@ -10,7 +10,7 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="31"/> <location filename="../src/w_ConnectionEditWindow.ui" line="31"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="336"/> <location filename="../src/w_ConnectionEditWindow.ui" line="350"/>
<source>#Host</source> <source>#Host</source>
<translation></translation> <translation></translation>
</message> </message>
@ -31,7 +31,7 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="86"/> <location filename="../src/w_ConnectionEditWindow.ui" line="86"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="649"/> <location filename="../src/w_ConnectionEditWindow.ui" line="663"/>
<source>#Security</source> <source>#Security</source>
<translation></translation> <translation></translation>
</message> </message>
@ -52,8 +52,8 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="259"/> <location filename="../src/w_ConnectionEditWindow.ui" line="259"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="567"/> <location filename="../src/w_ConnectionEditWindow.ui" line="581"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="716"/> <location filename="../src/w_ConnectionEditWindow.ui" line="730"/>
<source>#Type</source> <source>#Type</source>
<translation></translation> <translation></translation>
</message> </message>
@ -64,7 +64,7 @@
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="305"/> <location filename="../src/w_ConnectionEditWindow.ui" line="305"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="312"/> <location filename="../src/w_ConnectionEditWindow.ui" line="319"/>
<source>#InsertDefaultContent</source> <source>#InsertDefaultContent</source>
<translation></translation> <translation></translation>
</message> </message>
@ -84,82 +84,88 @@
<translation> JSON</translation> <translation> JSON</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="320"/> <location filename="../src/w_ConnectionEditWindow.ui" line="312"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="326"/>
<source>#Prettify</source>
<translation> JSON</translation>
</message>
<message>
<location filename="../src/w_ConnectionEditWindow.ui" line="334"/>
<source>HTTP</source> <source>HTTP</source>
<translation>HTTP</translation> <translation>HTTP</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="326"/> <location filename="../src/w_ConnectionEditWindow.ui" line="340"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="355"/> <location filename="../src/w_ConnectionEditWindow.ui" line="369"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="626"/> <location filename="../src/w_ConnectionEditWindow.ui" line="640"/>
<source>#Path</source> <source>#Path</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="347"/> <location filename="../src/w_ConnectionEditWindow.ui" line="361"/>
<source>WebSocket</source> <source>WebSocket</source>
<translation>WebSocket</translation> <translation>WebSocket</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="371"/> <location filename="../src/w_ConnectionEditWindow.ui" line="385"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="695"/> <location filename="../src/w_ConnectionEditWindow.ui" line="709"/>
<source>#Headers</source> <source>#Headers</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="378"/> <location filename="../src/w_ConnectionEditWindow.ui" line="392"/>
<source>#key|value format</source> <source>#key|value format</source>
<translation>|</translation> <translation>|</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="389"/> <location filename="../src/w_ConnectionEditWindow.ui" line="403"/>
<source>mKCP</source> <source>mKCP</source>
<translation>mKCP</translation> <translation>mKCP</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="397"/> <location filename="../src/w_ConnectionEditWindow.ui" line="411"/>
<source>#MTU</source> <source>#MTU</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="423"/> <location filename="../src/w_ConnectionEditWindow.ui" line="437"/>
<source>#TTI (ms)</source> <source>#TTI (ms)</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="449"/> <location filename="../src/w_ConnectionEditWindow.ui" line="463"/>
<source>#UplinkCapacity (MB/s)</source> <source>#UplinkCapacity (MB/s)</source>
<translation> (MB/s)</translation> <translation> (MB/s)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="472"/> <location filename="../src/w_ConnectionEditWindow.ui" line="486"/>
<source>#Congestion</source> <source>#Congestion</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="769"/> <location filename="../src/w_ConnectionEditWindow.ui" line="783"/>
<source>SockOpt</source> <source>SockOpt</source>
<translation>SockOpt</translation> <translation>SockOpt</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="775"/> <location filename="../src/w_ConnectionEditWindow.ui" line="789"/>
<source>#Mark</source> <source>#Mark</source>
<translation>Mark</translation> <translation>Mark</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="785"/> <location filename="../src/w_ConnectionEditWindow.ui" line="799"/>
<source>#TCPFastOpen</source> <source>#TCPFastOpen</source>
<translation>TCP Fast Open</translation> <translation>TCP Fast Open</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="799"/> <location filename="../src/w_ConnectionEditWindow.ui" line="813"/>
<source>#TProxy</source> <source>#TProxy</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="165"/> <location filename="../src/w_ConnectionEditWindow.ui" line="165"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="479"/> <location filename="../src/w_ConnectionEditWindow.ui" line="493"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="792"/> <location filename="../src/w_ConnectionEditWindow.ui" line="806"/>
<source>#Enabled</source> <source>#Enabled</source>
<translation></translation> <translation></translation>
</message> </message>
@ -169,41 +175,53 @@
<translation>JSON预览</translation> <translation>JSON预览</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="490"/> <location filename="../src/w_ConnectionEditWindow.ui" line="504"/>
<source>#DownlinkCapacity (MB/s)</source> <source>#DownlinkCapacity (MB/s)</source>
<translation> (MB/s)</translation> <translation> (MB/s)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="513"/> <location filename="../src/w_ConnectionEditWindow.ui" line="527"/>
<source>#ReadBufferSize (MB)</source> <source>#ReadBufferSize (MB)</source>
<translation> (MB)</translation> <translation> (MB)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="536"/> <location filename="../src/w_ConnectionEditWindow.ui" line="550"/>
<source>#WriteBufferSize (MB)</source> <source>#WriteBufferSize (MB)</source>
<translation> (MB)</translation> <translation> (MB)</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="561"/> <location filename="../src/w_ConnectionEditWindow.ui" line="575"/>
<location filename="../src/w_ConnectionEditWindow.ui" line="708"/> <location filename="../src/w_ConnectionEditWindow.ui" line="722"/>
<source>#Header</source> <source>#Header</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="618"/> <location filename="../src/w_ConnectionEditWindow.ui" line="632"/>
<source>DomainSocket</source> <source>DomainSocket</source>
<translation>DomainSocket</translation> <translation>DomainSocket</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="643"/> <location filename="../src/w_ConnectionEditWindow.ui" line="657"/>
<source>QUIC</source> <source>QUIC</source>
<translation>QUIC</translation> <translation>QUIC</translation>
</message> </message>
<message> <message>
<location filename="../src/w_ConnectionEditWindow.ui" line="681"/> <location filename="../src/w_ConnectionEditWindow.ui" line="695"/>
<source>#Key</source> <source>#Key</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../src/w_ConnectionEditWindow.cpp" line="303"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="314"/>
<source>#JsonPrettify</source>
<translation> JSON</translation>
</message>
<message>
<location filename="../src/w_ConnectionEditWindow.cpp" line="303"/>
<location filename="../src/w_ConnectionEditWindow.cpp" line="314"/>
<source>#JsonContainsError</source>
<translation>JSON </translation>
</message>
</context> </context>
<context> <context>
<name>ImportConfigWindow</name> <name>ImportConfigWindow</name>
@ -297,127 +315,127 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="35"/> <location filename="../src/w_MainWindow.ui" line="29"/>
<source>Qv2ray</source> <source>Qv2ray</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="53"/> <location filename="../src/w_MainWindow.ui" line="47"/>
<location filename="../src/w_MainWindow.ui" line="331"/> <location filename="../src/w_MainWindow.ui" line="309"/>
<location filename="../src/w_MainWindow.cpp" line="28"/> <location filename="../src/w_MainWindow.cpp" line="28"/>
<source>#Start</source> <source>#Start</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="60"/> <location filename="../src/w_MainWindow.ui" line="54"/>
<location filename="../src/w_MainWindow.ui" line="336"/> <location filename="../src/w_MainWindow.ui" line="314"/>
<location filename="../src/w_MainWindow.cpp" line="29"/> <location filename="../src/w_MainWindow.cpp" line="29"/>
<source>#Stop</source> <source>#Stop</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="67"/> <location filename="../src/w_MainWindow.ui" line="61"/>
<location filename="../src/w_MainWindow.ui" line="341"/> <location filename="../src/w_MainWindow.ui" line="319"/>
<location filename="../src/w_MainWindow.cpp" line="30"/> <location filename="../src/w_MainWindow.cpp" line="30"/>
<source>#Restart</source> <source>#Restart</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="77"/> <location filename="../src/w_MainWindow.ui" line="71"/>
<source>#ClearLog</source> <source>#ClearLog</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="107"/> <location filename="../src/w_MainWindow.ui" line="101"/>
<source>#Status</source> <source>#Status</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="114"/> <location filename="../src/w_MainWindow.ui" line="108"/>
<location filename="../src/w_MainWindow.cpp" line="108"/> <location filename="../src/w_MainWindow.cpp" line="109"/>
<source>#Stopped</source> <source>#Stopped</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="127"/> <location filename="../src/w_MainWindow.ui" line="117"/>
<source>#HostList</source> <source>#HostList</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="170"/> <location filename="../src/w_MainWindow.ui" line="252"/>
<source>#ImportConfig</source> <source>#ImportConfig</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="177"/> <location filename="../src/w_MainWindow.ui" line="259"/>
<source>#AddConfig</source> <source>#AddConfig</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="184"/> <location filename="../src/w_MainWindow.ui" line="266"/>
<source>#RemoveConfig</source> <source>#RemoveConfig</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="195"/> <location filename="../src/w_MainWindow.ui" line="124"/>
<source>#ConfigDetail</source> <source>#ConfigDetail</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="207"/> <location filename="../src/w_MainWindow.ui" line="136"/>
<source>#Host</source> <source>#Host</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="221"/> <location filename="../src/w_MainWindow.ui" line="150"/>
<source>#Port</source> <source>#Port</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="235"/> <location filename="../src/w_MainWindow.ui" line="164"/>
<source>#UUID</source> <source>#UUID</source>
<translation>UUID</translation> <translation>UUID</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="249"/> <location filename="../src/w_MainWindow.ui" line="178"/>
<source>#Transport</source> <source>#Transport</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="263"/> <location filename="../src/w_MainWindow.ui" line="192"/>
<location filename="../src/w_MainWindow.ui" line="276"/> <location filename="../src/w_MainWindow.ui" line="205"/>
<source>#ConnectionSettings</source> <source>#ConnectionSettings</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="293"/> <location filename="../src/w_MainWindow.ui" line="273"/>
<source>#Log</source> <source>#Log</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="311"/> <location filename="../src/w_MainWindow.ui" line="289"/>
<source>#ManuallyCreateConnection</source> <source>#ManuallyCreateConnection</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="316"/> <location filename="../src/w_MainWindow.ui" line="294"/>
<source>#ImportConnection</source> <source>#ImportConnection</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="321"/> <location filename="../src/w_MainWindow.ui" line="299"/>
<source>#Exit</source> <source>#Exit</source>
<translation>退</translation> <translation>退</translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.ui" line="84"/> <location filename="../src/w_MainWindow.ui" line="78"/>
<location filename="../src/w_MainWindow.ui" line="326"/> <location filename="../src/w_MainWindow.ui" line="304"/>
<source>#Preferences</source> <source>#Preferences</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.cpp" line="26"/> <location filename="../src/w_MainWindow.cpp" line="26"/>
<location filename="../src/w_MainWindow.cpp" line="169"/> <location filename="../src/w_MainWindow.cpp" line="164"/>
<source>#Hide</source> <source>#Hide</source>
<translation></translation> <translation></translation>
</message> </message>
@ -442,7 +460,8 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_MainWindow.cpp" line="172"/> <location filename="../src/w_MainWindow.cpp" line="130"/>
<location filename="../src/w_MainWindow.cpp" line="167"/>
<source>#Show</source> <source>#Show</source>
<translation></translation> <translation></translation>
</message> </message>
@ -451,8 +470,8 @@
<name>PrefrencesWindow</name> <name>PrefrencesWindow</name>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="20"/> <location filename="../src/w_PrefrencesWindow.ui" line="20"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="74"/> <location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<location filename="../src/w_PrefrencesWindow.cpp" line="140"/> <location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<source>Prefrences</source> <source>Prefrences</source>
<translation></translation> <translation></translation>
</message> </message>
@ -467,188 +486,201 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="132"/> <location filename="../src/w_PrefrencesWindow.ui" line="50"/>
<source>zh-CN</source> <source>zh-CN</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="137"/> <location filename="../src/w_PrefrencesWindow.ui" line="55"/>
<source>en-US</source> <source>en-US</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="43"/> <location filename="../src/w_PrefrencesWindow.ui" line="63"/>
<source>#RunAsRoot</source> <source>#RunAsRoot</source>
<translation>使 root </translation> <translation>使 root </translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="50"/> <location filename="../src/w_PrefrencesWindow.ui" line="70"/>
<location filename="../src/w_PrefrencesWindow.ui" line="152"/> <location filename="../src/w_PrefrencesWindow.ui" line="174"/>
<location filename="../src/w_PrefrencesWindow.ui" line="159"/> <location filename="../src/w_PrefrencesWindow.ui" line="181"/>
<location filename="../src/w_PrefrencesWindow.ui" line="229"/> <location filename="../src/w_PrefrencesWindow.ui" line="251"/>
<location filename="../src/w_PrefrencesWindow.ui" line="236"/> <location filename="../src/w_PrefrencesWindow.ui" line="258"/>
<location filename="../src/w_PrefrencesWindow.ui" line="302"/> <location filename="../src/w_PrefrencesWindow.ui" line="324"/>
<location filename="../src/w_PrefrencesWindow.ui" line="316"/> <location filename="../src/w_PrefrencesWindow.ui" line="338"/>
<location filename="../src/w_PrefrencesWindow.ui" line="364"/> <location filename="../src/w_PrefrencesWindow.ui" line="386"/>
<location filename="../src/w_PrefrencesWindow.ui" line="385"/> <location filename="../src/w_PrefrencesWindow.ui" line="407"/>
<location filename="../src/w_PrefrencesWindow.ui" line="392"/> <location filename="../src/w_PrefrencesWindow.ui" line="414"/>
<source>#Enabled</source> <source>#Enabled</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="57"/> <location filename="../src/w_PrefrencesWindow.ui" line="77"/>
<source>#LogLevel</source> <source>#LogLevel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="82"/> <location filename="../src/w_PrefrencesWindow.ui" line="102"/>
<source>debug</source> <source>debug</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="87"/> <location filename="../src/w_PrefrencesWindow.ui" line="107"/>
<source>info</source> <source>info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="92"/> <location filename="../src/w_PrefrencesWindow.ui" line="112"/>
<source>warning</source> <source>warning</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="97"/> <location filename="../src/w_PrefrencesWindow.ui" line="117"/>
<source>error</source> <source>error</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="357"/> <location filename="../src/w_PrefrencesWindow.ui" line="137"/>
<location filename="../src/w_PrefrencesWindow.ui" line="158"/>
<source>#Select</source>
<translation></translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.ui" line="379"/>
<source>#ProxyGlobal</source> <source>#ProxyGlobal</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="371"/> <location filename="../src/w_PrefrencesWindow.ui" line="393"/>
<source>#ProxyCN</source> <source>#ProxyCN</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="378"/> <location filename="../src/w_PrefrencesWindow.ui" line="400"/>
<source>#WithLocalDNS</source> <source>#WithLocalDNS</source>
<translation>使 DNS</translation> <translation>使 DNS</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="404"/> <location filename="../src/w_PrefrencesWindow.ui" line="426"/>
<source>#DNSList</source> <source>#DNSList</source>
<translation>DNS </translation> <translation>DNS </translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="416"/>
<source>Add</source> <source>Add</source>
<translation></translation> <translation type="vanished"></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="423"/>
<source>Remove</source> <source>Remove</source>
<translation></translation> <translation type="vanished"></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="430"/>
<source>Clear</source> <source>Clear</source>
<translation></translation> <translation type="vanished"></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="77"/> <location filename="../src/w_PrefrencesWindow.ui" line="97"/>
<source>none</source> <source>none</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="105"/> <location filename="../src/w_PrefrencesWindow.ui" line="125"/>
<source>#VCoreExePath</source> <source>#VCoreExePath</source>
<translation>v2ray </translation> <translation>v2ray </translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="115"/> <location filename="../src/w_PrefrencesWindow.ui" line="146"/>
<source>#VCoreAssetsPath</source> <source>#VCoreAssetsPath</source>
<translation>v2ray </translation> <translation>v2ray </translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="146"/> <location filename="../src/w_PrefrencesWindow.ui" line="168"/>
<source>#MuxSettings</source> <source>#MuxSettings</source>
<translation>Mux </translation> <translation>Mux </translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="187"/> <location filename="../src/w_PrefrencesWindow.ui" line="209"/>
<source>#InBoundSettings</source> <source>#InBoundSettings</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="195"/> <location filename="../src/w_PrefrencesWindow.ui" line="217"/>
<source>#ListenIP</source> <source>#ListenIP</source>
<translation> IP</translation> <translation> IP</translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="273"/> <location filename="../src/w_PrefrencesWindow.ui" line="295"/>
<source>#HTTPInBoundSettings</source> <source>#HTTPInBoundSettings</source>
<translation>HTTP </translation> <translation>HTTP </translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="209"/> <location filename="../src/w_PrefrencesWindow.ui" line="231"/>
<source>#SOCKSBoundSettings</source> <source>#SOCKSBoundSettings</source>
<translation>SOCKS </translation> <translation>SOCKS </translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="349"/> <location filename="../src/w_PrefrencesWindow.ui" line="371"/>
<source>#RouteSettings</source> <source>#RouteSettings</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="166"/> <location filename="../src/w_PrefrencesWindow.ui" line="188"/>
<source>#Concurrency</source> <source>#Concurrency</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="215"/> <location filename="../src/w_PrefrencesWindow.ui" line="237"/>
<location filename="../src/w_PrefrencesWindow.ui" line="279"/> <location filename="../src/w_PrefrencesWindow.ui" line="301"/>
<source>#Port</source> <source>#Port</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="253"/> <location filename="../src/w_PrefrencesWindow.ui" line="275"/>
<location filename="../src/w_PrefrencesWindow.ui" line="323"/> <location filename="../src/w_PrefrencesWindow.ui" line="345"/>
<source>#Username</source> <source>#Username</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="243"/> <location filename="../src/w_PrefrencesWindow.ui" line="265"/>
<location filename="../src/w_PrefrencesWindow.ui" line="309"/> <location filename="../src/w_PrefrencesWindow.ui" line="331"/>
<source>#Auth</source> <source>#Auth</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.ui" line="260"/> <location filename="../src/w_PrefrencesWindow.ui" line="282"/>
<location filename="../src/w_PrefrencesWindow.ui" line="333"/> <location filename="../src/w_PrefrencesWindow.ui" line="355"/>
<source>#Password</source> <source>#Password</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.cpp" line="74"/> <location filename="../src/w_PrefrencesWindow.cpp" line="72"/>
<source>PortNumbersCannotBeSame</source> <source>PortNumbersCannotBeSame</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/w_PrefrencesWindow.cpp" line="140"/> <location filename="../src/w_PrefrencesWindow.cpp" line="138"/>
<source>RunAsRootNotOnWindows</source> <source>RunAsRootNotOnWindows</source>
<translation>Windows </translation> <translation>Windows </translation>
</message> </message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="231"/>
<source>#OpenVCoreFile</source>
<translation> v2ray </translation>
</message>
<message>
<location filename="../src/w_PrefrencesWindow.cpp" line="238"/>
<source>OpenVAssetsDir</source>
<translation> v2ray </translation>
</message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../src/main.cpp" line="91"/> <location filename="../src/main.cpp" line="86"/>
<source>AnotherInstanceRunning</source> <source>AnotherInstanceRunning</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/main.cpp" line="91"/> <location filename="../src/main.cpp" line="86"/>
<source>Qv2ray</source> <source>Qv2ray</source>
<translation></translation> <translation></translation>
</message> </message>