[Added] Added UI Translations

Signed-off-by: Leroy.H.Y <lhy20010403@hotmail.com>

Former-commit-id: 688071dd00
This commit is contained in:
Leroy.H.Y 2019-06-23 19:19:20 +08:00
parent 7c46831ec6
commit 787773635e
19 changed files with 1035 additions and 918 deletions

View File

@ -24,8 +24,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
CONFIG += c++11
VPATH += ./src \
./translations
VPATH += ./src
SOURCES += \
main.cpp \
@ -52,15 +51,21 @@ FORMS += \
ImportConfig.ui \
PrefrencesWindow.ui
TRANSLATIONS += ./translations/zh-CN.ts
RESOURCES += \
resources.qrc
TRANSLATIONS += \
./translations/zh-CN.ts \
./translations/en-US.ts
RC_ICONS += ./icons/Hv2ray.ico
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RC_ICONS = Himeki.ico
WITH_PYTHON = no
unix: exists( "/usr/include/python3.7m/Python.h" ) {

View File

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 264 KiB

7
resources.qrc Normal file
View File

@ -0,0 +1,7 @@
<RCC>
<qresource prefix="/">
<file>icons/Hv2ray.ico</file>
<file>translations/zh-CN.qm</file>
<file>translations/en-US.qm</file>
</qresource>
</RCC>

View File

@ -19,12 +19,12 @@ ConnectionEditWindow::~ConnectionEditWindow()
{
delete ui;
}
int vConfig::save()
int Hv2Config::save()
{
return -1;
}
void vConfig::getConfigFromDialog(Ui::ConnectionEditWindow *ui)
void Hv2Config::getConfigFromDialog(Ui::ConnectionEditWindow *ui)
{
this->host = ui->ipLineEdit->text();
this->port = ui->portLineEdit->text();

View File

@ -8,7 +8,7 @@ namespace Ui
class ConnectionEditWindow;
}
class vConfig
class Hv2Config
{
public:
QString host;

View File

@ -17,7 +17,7 @@
</sizepolicy>
</property>
<property name="windowTitle">
<string>Connection Settings</string>
<string>#ConnectionSettings</string>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,3">
<item row="0" column="0">
@ -25,7 +25,7 @@
<item row="0" column="0">
<widget class="QLabel" name="ipLabel">
<property name="text">
<string>Host</string>
<string>#Host</string>
</property>
</widget>
</item>
@ -39,7 +39,7 @@
<item row="1" column="0">
<widget class="QLabel" name="portLabel">
<property name="text">
<string>Port</string>
<string>#Port</string>
</property>
</widget>
</item>
@ -53,7 +53,7 @@
<item row="2" column="0">
<widget class="QLabel" name="aliasLabel">
<property name="text">
<string>Name</string>
<string>#Name</string>
</property>
</widget>
</item>
@ -70,7 +70,7 @@
<item row="3" column="0">
<widget class="QLabel" name="idLabel">
<property name="text">
<string>UUID</string>
<string>#UUID</string>
</property>
</widget>
</item>
@ -87,7 +87,7 @@
<item row="4" column="0">
<widget class="QLabel" name="alterLabel">
<property name="text">
<string>Alter ID</string>
<string>#AlterID</string>
</property>
</widget>
</item>
@ -101,7 +101,7 @@
<item row="5" column="0">
<widget class="QLabel" name="securityLabel">
<property name="text">
<string>Security</string>
<string>#Security</string>
</property>
</widget>
</item>
@ -132,7 +132,7 @@
<item row="6" column="0">
<widget class="QLabel" name="transportLabel">
<property name="text">
<string>Transport</string>
<string>#Transport</string>
</property>
</widget>
</item>
@ -172,13 +172,26 @@
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QTextBrowser" name="textBrowser"/>
</item>
<item row="2" column="1">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="0" column="1" rowspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="title">
<string>Transport Settings (StreamSettingsObject)</string>
<string>#TransportSettings</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@ -202,7 +215,7 @@
</size>
</property>
<property name="currentIndex">
<number>5</number>
<number>0</number>
</property>
<property name="usesScrollButtons">
<bool>true</bool>
@ -225,7 +238,7 @@
</item>
<item>
<property name="text">
<string>http (HttpHeaderobject)</string>
<string>http</string>
</property>
</item>
</widget>
@ -233,7 +246,7 @@
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>type</string>
<string>#Type</string>
</property>
</widget>
</item>
@ -246,7 +259,7 @@
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Request (HTTPRequestObject)</string>
<string>#Request</string>
</property>
</widget>
</item>
@ -256,28 +269,20 @@
<enum>QPlainTextEdit::NoWrap</enum>
</property>
<property name="plainText">
<string>{
&quot;version&quot;: &quot;1.1&quot;,
&quot;method&quot;: &quot;GET&quot;,
&quot;path&quot;: [&quot;/&quot;],
&quot;headers&quot;: {
&quot;Host&quot;: [&quot;www.baidu.com&quot;, &quot;www.bing.com&quot;],
&quot;User-Agent&quot;: [
&quot;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36&quot;,
&quot;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&quot;
],
&quot;Accept-Encoding&quot;: [&quot;gzip, deflate&quot;],
&quot;Connection&quot;: [&quot;keep-alive&quot;],
&quot;Pragma&quot;: &quot;no-cache&quot;
}
}
</string>
<string/>
</property>
<property name="backgroundVisible">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>#InsertDefaultContent</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -285,7 +290,7 @@
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Response (HTTPResponseObject)</string>
<string>#Response</string>
</property>
</widget>
</item>
@ -295,17 +300,14 @@
<enum>QPlainTextEdit::NoWrap</enum>
</property>
<property name="plainText">
<string>{
&quot;version&quot;: &quot;1.1&quot;,
&quot;status&quot;: &quot;200&quot;,
&quot;reason&quot;: &quot;OK&quot;,
&quot;headers&quot;: {
&quot;Content-Type&quot;: [&quot;application/octet-stream&quot;, &quot;video/mpeg&quot;],
&quot;Transfer-Encoding&quot;: [&quot;chunked&quot;],
&quot;Connection&quot;: [&quot;keep-alive&quot;],
&quot;Pragma&quot;: &quot;no-cache&quot;
}
}</string>
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>#InsertDefaultContent</string>
</property>
</widget>
</item>
@ -325,32 +327,26 @@
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_5" columnstretch="1,1">
<item row="1" column="0">
<widget class="QListWidget" name="listWidget">
<item>
<property name="text">
<string>v2ray.com</string>
</property>
</item>
</widget>
<widget class="QListWidget" name="listWidget"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>host</string>
<string>#Host</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_5">
<property name="text">
<string>path</string>
<string>#Path</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPlainTextEdit" name="plainTextEdit_3">
<property name="plainText">
<string>/</string>
<string/>
</property>
</widget>
</item>
@ -370,14 +366,14 @@
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>path</string>
<string>#Path</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit">
<property name="text">
<string>/</string>
<string/>
</property>
</widget>
</item>
@ -386,7 +382,7 @@
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>headers (Key Value Pair)</string>
<string>#Headers</string>
</property>
</widget>
</item>
@ -418,11 +414,6 @@
<property name="currentRow">
<number>-1</number>
</property>
<item>
<property name="text">
<string>Host</string>
</property>
</item>
</widget>
</item>
<item>
@ -436,11 +427,6 @@
<property name="editTriggers">
<set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
</property>
<item>
<property name="text">
<string>v2ray.com</string>
</property>
</item>
</widget>
</item>
</layout>
@ -459,7 +445,7 @@
<item row="0" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>MTU</string>
<string>#MTU</string>
</property>
</widget>
</item>
@ -485,7 +471,7 @@
<item row="1" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>TTI (ms)</string>
<string>#TTI (ms)</string>
</property>
</widget>
</item>
@ -511,7 +497,7 @@
<item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>UplinkCapacity (MB/s)</string>
<string>#UplinkCapacity (MB/s)</string>
</property>
</widget>
</item>
@ -534,14 +520,14 @@
<item row="3" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Congestion</string>
<string>#Congestion</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
@ -552,7 +538,7 @@
<item row="0" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>downlinkCapacity (MB/s)</string>
<string>#DownlinkCapacity (MB/s)</string>
</property>
</widget>
</item>
@ -575,7 +561,7 @@
<item row="1" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>readBufferSize (MB)</string>
<string>#ReadBufferSize (MB)</string>
</property>
</widget>
</item>
@ -598,7 +584,7 @@
<item row="2" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>writeBufferSize (MB)</string>
<string>#WriteBufferSize (MB)</string>
</property>
</widget>
</item>
@ -623,13 +609,13 @@
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>header (Header Object)</string>
<string>#Header</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>type</string>
<string>#Type</string>
</property>
</widget>
</item>
@ -688,14 +674,14 @@
<item row="0" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>path</string>
<string>#Path</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit_2">
<property name="text">
<string>/path/to/ds/file</string>
<string/>
</property>
</widget>
</item>
@ -713,7 +699,7 @@
<item row="0" column="0">
<widget class="QLabel" name="label_18">
<property name="text">
<string>security</string>
<string>#Security</string>
</property>
</widget>
</item>
@ -745,21 +731,21 @@
<item row="1" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>key</string>
<string>#Key</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_3">
<property name="text">
<string>xxxxx</string>
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>header</string>
<string>#Headers</string>
</property>
</widget>
</item>
@ -772,7 +758,7 @@
</sizepolicy>
</property>
<property name="title">
<string>header (HeaderObject)</string>
<string>#Header</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
@ -780,7 +766,7 @@
<item row="0" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>type</string>
<string>#Type</string>
</property>
</widget>
</item>
@ -838,21 +824,41 @@
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QTextBrowser" name="textBrowser"/>
</item>
<item row="2" column="1">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>ipLineEdit</tabstop>
<tabstop>portLineEdit</tabstop>
<tabstop>aliasLineEdit</tabstop>
<tabstop>idLineEdit</tabstop>
<tabstop>alterLineEdit</tabstop>
<tabstop>securityCombo</tabstop>
<tabstop>tranportCombo</tabstop>
<tabstop>tabWidget</tabstop>
<tabstop>comboBox</tabstop>
<tabstop>plainTextEdit</tabstop>
<tabstop>pushButton</tabstop>
<tabstop>plainTextEdit_2</tabstop>
<tabstop>pushButton_2</tabstop>
<tabstop>listWidget</tabstop>
<tabstop>plainTextEdit_3</tabstop>
<tabstop>lineEdit</tabstop>
<tabstop>listWidget_3</tabstop>
<tabstop>listWidget_2</tabstop>
<tabstop>spinBox</tabstop>
<tabstop>spinBox_3</tabstop>
<tabstop>spinBox_5</tabstop>
<tabstop>checkBox</tabstop>
<tabstop>spinBox_2</tabstop>
<tabstop>spinBox_4</tabstop>
<tabstop>spinBox_6</tabstop>
<tabstop>comboBox_2</tabstop>
<tabstop>lineEdit_2</tabstop>
<tabstop>comboBox_3</tabstop>
<tabstop>lineEdit_3</tabstop>
<tabstop>comboBox_4</tabstop>
<tabstop>textBrowser</tabstop>
</tabstops>
<resources/>
<connections>
<connection>

View File

@ -31,17 +31,18 @@ ImportConfig::~ImportConfig()
void ImportConfig::on_pushButton_clicked()
{
QString dir = QFileDialog::getOpenFileName(this, tr("Open Config File"), "~/");
QString dir = QFileDialog::getOpenFileName(this, tr("OpenConfigFile"), "~/");
ui->fileLineTxt->setText(dir);
}
void ImportConfig::savefromFile(QString path, QString alias)
{
vConfig newConf;
newConf.alias = alias;
Hv2Config newConfig;
newConfig.alias = alias;
QFile configFile(path);
if(!configFile.open(QIODevice::ReadOnly)) {
qDebug() << "Couldn't open config json";
showWarnMessageBox(this, tr("ImportConfig"), tr("CannotOpenFile"));
qDebug() << "ImportConfig::CannotOpenFile";
return;
}
QByteArray allData = configFile.readAll();
@ -56,25 +57,27 @@ void ImportConfig::savefromFile(QString path, QString alias)
}
QJsonObject vnext = switchJsonArrayObject(outbound.value("settings").toObject(), "vnext");
QJsonObject user = switchJsonArrayObject(vnext, "users");
newConf.host = vnext.value("address").toString();
newConf.port = QString::number(vnext.value("port").toInt());
newConf.alterid = QString::number(user.value("alterId").toInt());
newConf.uuid = user.value("id").toString();
newConf.security = user.value("security").toString();
if (newConf.security.isNull()) {
newConf.security = "auto";
newConfig.host = vnext.value("address").toString();
newConfig.port = QString::number(vnext.value("port").toInt());
newConfig.alterid = QString::number(user.value("alterId").toInt());
newConfig.uuid = user.value("id").toString();
newConfig.security = user.value("security").toString();
if (newConfig.security.isNull()) {
newConfig.security = "auto";
}
newConf.isCustom = 1;
int id = newConf.save();
newConfig.isCustom = 1;
int id = newConfig.save();
if(id < 0)
{
showWarnMessageBox(this, "Database Error", "Failed to open database while saving");
showWarnMessageBox(this, tr("ImportConfig"), tr("SaveFailed"));
qDebug() << "ImportConfig::SaveFailed";
return;
}
emit updateConfTable();
QString newFile = "conf/" + QString::number(id) + ".conf";
if(!QFile::copy(path, newFile)) {
showWarnMessageBox(this, "Copy error", "Failed to copy custom config file.");
showWarnMessageBox(this, tr("ImportConfig"), tr("CannotCopyCustomConfig"));
qDebug() << "ImportConfig::CannotCopyCustomConfig";
}
}
@ -93,9 +96,7 @@ void ImportConfig::on_buttonBox_accepted()
{
QString vmess = ui->vmessConnectionStringTxt->toPlainText();
Py_Initialize();
if ( !Py_IsInitialized() ) {
qDebug() << "Python is not initialized";
}
assert(Py_IsInitialized());
QString param = "--inbound socks:1080 " + vmess + " -o config.json.tmp";
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./utils')");
@ -113,7 +114,8 @@ void ImportConfig::on_buttonBox_accepted()
}
QFile::remove("config.json.tmp");
} else {
showWarnMessageBox(this, "Error occured", "Failed to generate config file.");
showWarnMessageBox(this, tr("ImportConfig"), tr("CannotGenerateConfig"));
qDebug() << "ImportConfig::CannotGenerateConfig";
}
}

View File

@ -25,7 +25,7 @@
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Import From</string>
<string>#ImportFrom</string>
</property>
</widget>
</item>
@ -48,13 +48,13 @@
<item row="1" column="0">
<widget class="QGroupBox" name="fromFileGroupBox">
<property name="title">
<string>From File</string>
<string>#FromFile</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="fileLabel">
<property name="text">
<string>Path</string>
<string>#Path</string>
</property>
</widget>
</item>
@ -70,7 +70,7 @@
<item>
<widget class="QPushButton" name="selectFileBtn">
<property name="text">
<string>Select File</string>
<string>#SelectFile</string>
</property>
</widget>
</item>
@ -79,7 +79,7 @@
<item row="1" column="0">
<widget class="QLabel" name="aliasLabel">
<property name="text">
<string>Name</string>
<string>#Name</string>
</property>
</widget>
</item>
@ -89,7 +89,7 @@
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Inbound</string>
<string>#Inbound</string>
</property>
</widget>
</item>
@ -98,7 +98,7 @@
<item>
<widget class="QRadioButton" name="useCurrentSettingRidBtn">
<property name="text">
<string>Use Current</string>
<string>#UseCurrent</string>
</property>
<property name="checked">
<bool>true</bool>
@ -108,7 +108,7 @@
<item>
<widget class="QRadioButton" name="useImportedRidBtn">
<property name="text">
<string>Use Imported</string>
<string>#UseImported</string>
</property>
</widget>
</item>
@ -120,13 +120,13 @@
<item row="1" column="1">
<widget class="QGroupBox" name="fromVMessGroupBox">
<property name="title">
<string>From VMess Connection String</string>
<string>#From VMess Connection String</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>VMess Connection String</string>
<string>#VMess Connection String</string>
</property>
</widget>
</item>
@ -148,6 +148,15 @@
</item>
</layout>
</widget>
<tabstops>
<tabstop>importSourceCombo</tabstop>
<tabstop>fileLineTxt</tabstop>
<tabstop>selectFileBtn</tabstop>
<tabstop>nameTxt</tabstop>
<tabstop>useCurrentSettingRidBtn</tabstop>
<tabstop>useImportedRidBtn</tabstop>
<tabstop>vmessConnectionStringTxt</tabstop>
</tabstops>
<resources/>
<connections>
<connection>

View File

@ -8,29 +8,61 @@
#include <QFileInfo>
#include <QInputDialog>
#include "ui_MainWindow.h"
#include "PrefrencesWindow.h"
#include "MainWindow.h"
#include <ui_MainWindow.h>
#include "ConnectionEditWindow.h"
#include "ImportConfig.h"
#include "vinteract.h"
#include "utils.h"
void MainWindow::CreateTrayIcon()
{
hTray = new QSystemTrayIcon();
hTray->setToolTip(tr("Hv2ray"));
hTray->setIcon(this->windowIcon());
connect(hTray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_activatedTray(QSystemTrayIcon::ActivationReason)));
QAction *actionShow = new QAction(this);
QAction *actionQuit = new QAction(this);
QAction *actionStart = new QAction(this);
QAction *actionRestart = new QAction(this);
QAction *actionStop = new QAction(this);
actionShow->setText(tr("#Hide"));
actionQuit->setText(tr("#Quit"));
actionStart->setText(tr("#Start"));
actionStop->setText(tr("#Stop"));
actionRestart->setText(tr("#Restart"));
actionStart->setEnabled(true);
actionStop->setEnabled(false);
actionRestart->setEnabled(false);
trayMenu->addAction(actionShow);
trayMenu->addSeparator();
trayMenu->addAction(actionStart);
trayMenu->addAction(actionStop);
trayMenu->addAction(actionRestart);
trayMenu->addSeparator();
trayMenu->addAction(actionQuit);
connect(actionShow, SIGNAL(triggered()), this, SLOT(toggleMainWindowVisibility()));
connect(actionStart, SIGNAL(triggered()), this, SLOT(on_startButton_clicked()));
connect(actionStop, SIGNAL(triggered()), this, SLOT(on_stopButton_clicked()));
connect(actionRestart, SIGNAL(triggered()), this, SLOT(on_restartButton_clicked()));
connect(actionQuit, SIGNAL(triggered()), this, SLOT(quit()));
hTray->setContextMenu(trayMenu);
hTray->show();
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
this->setWindowIcon(QIcon("Himeki.ico"));
this->setWindowIcon(QIcon(":/icons/Hv2ray.ico"));
ui->setupUi(this);
UpdateConfigTable();
// ui->configTable->setContextMenuPolicy(Qt::CustomContextMenu);
// connect(ui->configTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showMenu(QPoint)));
this->v2instance = new v2Instance();
hTray = new QSystemTrayIcon();
hTray->setToolTip("Hv2ray");
hTray->setIcon(QIcon("Himeki.ico"));
connect(hTray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_activatedTray(QSystemTrayIcon::ActivationReason)));
createTrayAction();
CreateTrayIcon();
if(QFileInfo("config.json").exists()) {
v2instance->start(this);
}
@ -50,8 +82,10 @@ MainWindow::MainWindow(QWidget *parent) :
MainWindow::~MainWindow()
{
delete ui;
hTray->hide();
delete this->hTray;
delete this->v2instance;
delete ui;
}
void MainWindow::on_actionEdit_triggered()
@ -95,7 +129,7 @@ void MainWindow::UpdateConfigTable()
}
void MainWindow::GenerateConfig(int idIntable)
{
vConfig tmpConf;
Hv2Config tmpConf;
emit UpdateConfigTable();
if (tmpConf.isCustom == 1) {
QString src = "conf/" + QString::number(idIntable) + ".conf";
@ -153,37 +187,6 @@ void MainWindow::closeEvent(QCloseEvent *event)
event->ignore();
}
void MainWindow::createTrayAction()
{
QAction *actionShow = new QAction(this);
QAction *actionQuit = new QAction(this);
QAction *actionStart = new QAction(this);
QAction *actionRestart = new QAction(this);
QAction *actionStop = new QAction(this);
actionShow->setText("Hide");
actionQuit->setText("Quit Hv2ray");
actionStart->setText("Start v2ray");
actionStop->setText("Stop v2ray");
actionRestart->setText("Restart v2ray");
actionStart->setEnabled(true);
actionStop->setEnabled(false);
actionRestart->setEnabled(false);
trayMenu->addAction(actionShow);
trayMenu->addSeparator();
trayMenu->addAction(actionStart);
trayMenu->addAction(actionStop);
trayMenu->addAction(actionRestart);
trayMenu->addSeparator();
trayMenu->addAction(actionQuit);
connect(actionShow, SIGNAL(triggered()), this, SLOT(toggleMainWindowVisibility()));
connect(actionStart, SIGNAL(triggered()), this, SLOT(on_startButton_clicked()));
connect(actionStop, SIGNAL(triggered()), this, SLOT(on_stopButton_clicked()));
connect(actionRestart, SIGNAL(triggered()), this, SLOT(on_restartButton_clicked()));
connect(actionQuit, SIGNAL(triggered()), this, SLOT(quit()));
hTray->setContextMenu(trayMenu);
hTray->show();
}
void MainWindow::on_activatedTray(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
@ -216,10 +219,10 @@ void MainWindow::toggleMainWindowVisibility()
{
if(this->isHidden()) {
this->show();
trayMenu->actions()[0]->setText("Hide");
trayMenu->actions()[0]->setText(tr("#Hide"));
} else {
this->hide();
trayMenu->actions()[0]->setText("Show");
trayMenu->actions()[0]->setText(tr("#Show"));
}
}

View File

@ -57,6 +57,7 @@ private:
void closeEvent(QCloseEvent *);
void createTrayAction();
void CreateTrayIcon();
};
#endif // MAINWINDOW_H

View File

@ -43,21 +43,21 @@
<item>
<widget class="QPushButton" name="startButton">
<property name="text">
<string>Start</string>
<string>#Start</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="stopButton">
<property name="text">
<string>Stop</string>
<string>#Stop</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="restartButton">
<property name="text">
<string>Restart</string>
<string>#Restart</string>
</property>
<property name="flat">
<bool>false</bool>
@ -67,7 +67,7 @@
<item>
<widget class="QPushButton" name="clearlogButton">
<property name="text">
<string>Clear Log</string>
<string>#ClearLog</string>
</property>
</widget>
</item>
@ -94,7 +94,7 @@
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Host list</string>
<string>#HostList</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
@ -129,11 +129,6 @@
<property name="viewMode">
<enum>QListView::ListMode</enum>
</property>
<item>
<property name="text">
<string>Config 1 (www.hostname.com:port)</string>
</property>
</item>
</widget>
</item>
</layout>
@ -142,7 +137,7 @@
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Config Detail</string>
<string>#ConfigDetail</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
@ -151,56 +146,56 @@
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Host</string>
<string>#Host</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_2">
<property name="text">
<string>www.hostname.com</string>
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Port</string>
<string>#Port</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>12345</string>
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>UUID</string>
<string>#UUID</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_7">
<property name="text">
<string>TextLabel</string>
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Transport</string>
<string>#Transport</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_6">
<property name="text">
<string>mKCP</string>
<string/>
</property>
</widget>
</item>
@ -213,14 +208,14 @@
</sizepolicy>
</property>
<property name="text">
<string>Connection Settings</string>
<string>#ConnectionSettings</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Settings</string>
<string>#ConnectionSettings</string>
</property>
</widget>
</item>
@ -246,16 +241,16 @@
<x>0</x>
<y>0</y>
<width>568</width>
<height>29</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
<string>#File</string>
</property>
<widget class="QMenu" name="menuNew">
<property name="title">
<string>New Connection</string>
<string>#NewConnection</string>
</property>
<addaction name="actionExisting_config"/>
<addaction name="actionEdit"/>
@ -265,37 +260,40 @@
<addaction name="separator"/>
<addaction name="actionExit"/>
</widget>
<widget class="QMenu" name="menuAbout">
<property name="title">
<string>About</string>
</property>
</widget>
<addaction name="menuFile"/>
<addaction name="menuAbout"/>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<action name="actionEdit">
<property name="text">
<string>Manual</string>
<string>#ManuallyInput</string>
</property>
</action>
<action name="actionExisting_config">
<property name="text">
<string>Import</string>
<string>#ImportConnection</string>
</property>
</action>
<action name="actionExit">
<property name="text">
<string>Exit</string>
<string>#Exit</string>
</property>
</action>
<action name="actionPreferences">
<property name="text">
<string>Preferences</string>
<string>#Preferences</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>startButton</tabstop>
<tabstop>stopButton</tabstop>
<tabstop>restartButton</tabstop>
<tabstop>clearlogButton</tabstop>
<tabstop>listWidget</tabstop>
<tabstop>pushButton</tabstop>
<tabstop>logText</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View File

@ -8,13 +8,12 @@
#include <QFileInfo>
#include <QProcess>
#include <unistd.h>
#include <ui_PrefrencesWindow.h>
#include "utils.h"
#include "PrefrencesWindow.h"
#include "MainWindow.h"
#include "ui_PrefrencesWindow.h"
PrefrencesWindow::PrefrencesWindow(MainWindow *parent) :
PrefrencesWindow::PrefrencesWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::PrefrencesWindow)
{
@ -23,16 +22,16 @@ PrefrencesWindow::PrefrencesWindow(MainWindow *parent) :
QJsonObject http = findValueFromJsonArray(rootObj.value("inbounds").toArray(), "tag", "http-in");
QJsonObject socks = findValueFromJsonArray(rootObj.value("inbounds").toArray(), "tag", "socks-in");
if(rootObj.value("v2suidEnabled").toBool()) {
ui->checkBox->setCheckState(Qt::Checked);
ui->runAsRootCheckBox->setCheckState(Qt::Checked);
}
if(!http.isEmpty()) {
ui->httpPortLE->setText(QString::number(http.value("port").toInt()));
ui->httpPortLE->setText(http.value("port").toString());
ui->httpCB->setCheckState(Qt::Checked);
} else {
ui->httpPortLE->setDisabled(true);
}
if(!socks.isEmpty()) {
ui->socksPortLE->setText(QString::number(socks.value("port").toInt()));
ui->socksPortLE->setText(socks.value("port").toString());
ui->socksCB->setCheckState(Qt::Checked);
} else {
ui->socksPortLE->setDisabled(true);
@ -110,12 +109,13 @@ void PrefrencesWindow::on_buttonBox_accepted()
QByteArray byteArray = modifiedDoc.toJson(QJsonDocument::Indented);
QFile confFile("conf/Hv2ray.config.json");
if(!confFile.open(QIODevice::WriteOnly)) {
showWarnMessageBox(this, tr("#Prefrences"), tr("#CannotOpenConfigFile"));
qDebug() << "Cannot open Hv2ray.config.json for modifying";
}
confFile.write(byteArray);
confFile.close();
} else {
showWarnMessageBox(this, tr("Config error"), tr("Port numbers cannot be the same!"));
showWarnMessageBox(this, tr("Prefrences"), tr("PortNumbersCannotBeSame"));
}
}
}
@ -140,3 +140,19 @@ void PrefrencesWindow::on_socksCB_stateChanged(int checked)
ui->socksPortLE->setText("1080");
}
}
void PrefrencesWindow::on_httpAuthCB_stateChanged(int checked)
{
if(checked)
{
}
}
void PrefrencesWindow::on_runAsRootCheckBox_stateChanged(int arg1)
{
Q_UNUSED(arg1);
#ifdef _WIN32
showWarnMessageBox(this, tr("Prefrences"), tr("RunAsRootNotOnWindows"));
#endif
}

View File

@ -3,7 +3,6 @@
#include <QDialog>
#include <QJsonObject>
#include "MainWindow.h"
namespace Ui
{
@ -15,16 +14,20 @@ class PrefrencesWindow : public QDialog
Q_OBJECT
public:
explicit PrefrencesWindow(MainWindow *parent = nullptr);
explicit PrefrencesWindow(QWidget *parent = nullptr);
~PrefrencesWindow();
QJsonObject rootObj;
MainWindow *parentMW;
QWidget *parentMW;
private slots:
void on_buttonBox_accepted();
void on_httpCB_stateChanged(int arg1);
void on_socksCB_stateChanged(int arg1);
void on_httpAuthCB_stateChanged(int arg1);
void on_runAsRootCheckBox_stateChanged(int arg1);
private:
Ui::PrefrencesWindow *ui;
};

View File

@ -23,7 +23,7 @@
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>General</string>
<string>#General</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@ -31,12 +31,12 @@
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Language</string>
<string>#Language</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBox">
<widget class="QComboBox" name="languageComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -58,26 +58,26 @@
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Run v2ray with root</string>
<string>#RunAsRoot</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="checkBox">
<widget class="QCheckBox" name="runAsRootCheckBox">
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Log Level</string>
<string>#LogLevel</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBox_2">
<widget class="QComboBox" name="logLevelCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -122,32 +122,32 @@
<item>
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>Mux Cool</string>
<string>#MuxCool</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="checkBox_2">
<widget class="QCheckBox" name="muxEnabledCB">
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Concurrency</string>
<string>#Concurrency</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBox">
<widget class="QSpinBox" name="muxConcurrencyTxt">
<property name="minimum">
<number>1</number>
</property>
@ -168,7 +168,7 @@
<item row="0" column="1">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Inbound Settings</string>
<string>#InboundSettings</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1">
<item>
@ -183,14 +183,14 @@
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Port</string>
<string>#Port</string>
</property>
</widget>
</item>
@ -210,36 +210,36 @@
<item row="3" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Username</string>
<string>#Username</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Auth</string>
<string>#Auth</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Password</string>
<string>#Password</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="checkBox_3">
<widget class="QCheckBox" name="httpAuthCB">
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="lineEdit"/>
<widget class="QLineEdit" name="httpAuthUsernameTxt"/>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="lineEdit_2"/>
<widget class="QLineEdit" name="httpAuthPasswordTxt"/>
</item>
</layout>
</widget>
@ -253,7 +253,7 @@
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Port</string>
<string>#Port</string>
</property>
</widget>
</item>
@ -267,43 +267,43 @@
<item row="0" column="1">
<widget class="QCheckBox" name="socksCB">
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Auth</string>
<string>#Auth</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Username</string>
<string>#Username</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Password</string>
<string>#Password</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="checkBox_4">
<widget class="QCheckBox" name="socksAuthCB">
<property name="text">
<string>Enabled</string>
<string>#Enabled</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="lineEdit_3"/>
<widget class="QLineEdit" name="socksAuthUsernameTxt"/>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="lineEdit_4"/>
<widget class="QLineEdit" name="socksAuthPasswordTxt"/>
</item>
</layout>
</widget>
@ -323,6 +323,23 @@
</item>
</layout>
</widget>
<tabstops>
<tabstop>languageComboBox</tabstop>
<tabstop>runAsRootCheckBox</tabstop>
<tabstop>logLevelCheckBox</tabstop>
<tabstop>muxEnabledCB</tabstop>
<tabstop>muxConcurrencyTxt</tabstop>
<tabstop>httpCB</tabstop>
<tabstop>httpPortLE</tabstop>
<tabstop>httpAuthCB</tabstop>
<tabstop>httpAuthUsernameTxt</tabstop>
<tabstop>httpAuthPasswordTxt</tabstop>
<tabstop>socksCB</tabstop>
<tabstop>socksPortLE</tabstop>
<tabstop>socksAuthCB</tabstop>
<tabstop>socksAuthUsernameTxt</tabstop>
<tabstop>socksAuthPasswordTxt</tabstop>
</tabstops>
<resources/>
<connections>
<connection>

View File

@ -65,7 +65,7 @@ int main(int argc, char *argv[])
QApplication _qApp(argc, argv);
QTranslator translator;
if (translator.load(QString("zh-CN.qm"), QString("translations")))
if (translator.load(QString(":/translations/zh-CN.qm"), QString("translations")))
{
cout << "Loaded Chinese translations" << endl;
}
@ -73,7 +73,7 @@ int main(int argc, char *argv[])
RunGuard guard("Hv2ray");
if(!guard.isSingleInstance()) {
showWarnMessageBox(nullptr, "Hv2Ray", "Another instance of Hv2ray is already running!");
showWarnMessageBox(nullptr, QObject::tr("Hv2Ray"), QObject::tr("AnotherInstanceRunning"));
return -1;
}

View File

@ -53,7 +53,7 @@ bool checkVCoreExes()
if (QFileInfo("v2ray").exists() && QFileInfo("geoip.dat").exists() && QFileInfo("geosite.dat").exists() && QFileInfo("v2ctl").exists()) {
return true;
} else {
showWarnMessageBox(nullptr, "v2ray core not found", "V2ray core files not found. Please download the latest version of v2ray and extract it into the current folder.");
showWarnMessageBox(nullptr, QObject::tr("CoreNotFound"), QObject::tr("CoreFileNotFoundExplaination"));
return false;
}
}

View File

@ -25,7 +25,7 @@ bool validationCheck(QString path)
QString output = QString(process.readAllStandardOutput());
if (!output.contains("Configuration OK")) {
showWarnMessageBox(nullptr, "Error in configuration", output.mid(output.indexOf("anti-censorship.") + 17));
showWarnMessageBox(nullptr, QObject::tr("ConfigurationError"), output.mid(output.indexOf("anti-censorship.") + 17));
return false;
}
else return true;

View File

@ -3,35 +3,41 @@
<TS version="2.1">
<context>
<name>ConnectionEditWindow</name>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="20"/>
<source>#ConnectionSettings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="28"/>
<location filename="../src/ConnectionEditWindow.ui" line="423"/>
<source>Host</source>
<location filename="../src/ConnectionEditWindow.ui" line="335"/>
<source>#Host</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="42"/>
<source>Port</source>
<source>#Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="56"/>
<source>Name</source>
<source>#Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="73"/>
<source>UUID</source>
<source>#UUID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="90"/>
<source>Alter ID</source>
<source>#AlterID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="104"/>
<source>Security</source>
<location filename="../src/ConnectionEditWindow.ui" line="702"/>
<source>#Security</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -41,28 +47,28 @@
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="117"/>
<location filename="../src/ConnectionEditWindow.ui" line="735"/>
<location filename="../src/ConnectionEditWindow.ui" line="721"/>
<source>aes-128-gcm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="122"/>
<location filename="../src/ConnectionEditWindow.ui" line="740"/>
<location filename="../src/ConnectionEditWindow.ui" line="726"/>
<source>chacha20-poly1305</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="127"/>
<location filename="../src/ConnectionEditWindow.ui" line="223"/>
<location filename="../src/ConnectionEditWindow.ui" line="646"/>
<location filename="../src/ConnectionEditWindow.ui" line="730"/>
<location filename="../src/ConnectionEditWindow.ui" line="797"/>
<location filename="../src/ConnectionEditWindow.ui" line="236"/>
<location filename="../src/ConnectionEditWindow.ui" line="632"/>
<location filename="../src/ConnectionEditWindow.ui" line="716"/>
<location filename="../src/ConnectionEditWindow.ui" line="783"/>
<source>none</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="135"/>
<source>Transport</source>
<source>#Transport</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -96,514 +102,558 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="181"/>
<source>Transport Settings (StreamSettingsObject)</source>
<location filename="../src/ConnectionEditWindow.ui" line="194"/>
<source>#TransportSettings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="212"/>
<location filename="../src/ConnectionEditWindow.ui" line="225"/>
<source>TCP</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="20"/>
<source>Connection Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="228"/>
<source>http (HttpHeaderobject)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="236"/>
<location filename="../src/ConnectionEditWindow.ui" line="632"/>
<location filename="../src/ConnectionEditWindow.ui" line="783"/>
<source>type</source>
<location filename="../src/ConnectionEditWindow.ui" line="241"/>
<source>http</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="249"/>
<source>Request (HTTPRequestObject)</source>
<location filename="../src/ConnectionEditWindow.ui" line="618"/>
<location filename="../src/ConnectionEditWindow.ui" line="769"/>
<source>#Type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="259"/>
<source>{
&quot;version&quot;: &quot;1.1&quot;,
&quot;method&quot;: &quot;GET&quot;,
&quot;path&quot;: [&quot;/&quot;],
&quot;headers&quot;: {
&quot;Host&quot;: [&quot;www.baidu.com&quot;, &quot;www.bing.com&quot;],
&quot;User-Agent&quot;: [
&quot;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36&quot;,
&quot;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&quot;
],
&quot;Accept-Encoding&quot;: [&quot;gzip, deflate&quot;],
&quot;Connection&quot;: [&quot;keep-alive&quot;],
&quot;Pragma&quot;: &quot;no-cache&quot;
}
}
</source>
<location filename="../src/ConnectionEditWindow.ui" line="262"/>
<source>#Request</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="288"/>
<source>Response (HTTPResponseObject)</source>
<location filename="../src/ConnectionEditWindow.ui" line="282"/>
<location filename="../src/ConnectionEditWindow.ui" line="310"/>
<source>#InsertDefaultContent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="298"/>
<source>{
&quot;version&quot;: &quot;1.1&quot;,
&quot;status&quot;: &quot;200&quot;,
&quot;reason&quot;: &quot;OK&quot;,
&quot;headers&quot;: {
&quot;Content-Type&quot;: [&quot;application/octet-stream&quot;, &quot;video/mpeg&quot;],
&quot;Transfer-Encoding&quot;: [&quot;chunked&quot;],
&quot;Connection&quot;: [&quot;keep-alive&quot;],
&quot;Pragma&quot;: &quot;no-cache&quot;
}
}</source>
<location filename="../src/ConnectionEditWindow.ui" line="293"/>
<source>#Response</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="322"/>
<location filename="../src/ConnectionEditWindow.ui" line="324"/>
<source>HTTP</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="331"/>
<location filename="../src/ConnectionEditWindow.ui" line="441"/>
<source>v2ray.com</source>
<location filename="../src/ConnectionEditWindow.ui" line="342"/>
<location filename="../src/ConnectionEditWindow.ui" line="369"/>
<location filename="../src/ConnectionEditWindow.ui" line="677"/>
<source>#Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="339"/>
<source>host</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="346"/>
<location filename="../src/ConnectionEditWindow.ui" line="373"/>
<location filename="../src/ConnectionEditWindow.ui" line="691"/>
<source>path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="353"/>
<location filename="../src/ConnectionEditWindow.ui" line="380"/>
<source>/</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="363"/>
<location filename="../src/ConnectionEditWindow.ui" line="359"/>
<source>WebSocket</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="389"/>
<source>headers (Key Value Pair)</source>
<location filename="../src/ConnectionEditWindow.ui" line="385"/>
<location filename="../src/ConnectionEditWindow.ui" line="748"/>
<source>#Headers</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="454"/>
<location filename="../src/ConnectionEditWindow.ui" line="440"/>
<source>mKCP</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="462"/>
<source>MTU</source>
<location filename="../src/ConnectionEditWindow.ui" line="448"/>
<source>#MTU</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="488"/>
<source>TTI (ms)</source>
<location filename="../src/ConnectionEditWindow.ui" line="474"/>
<source>#TTI (ms)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="514"/>
<source>UplinkCapacity (MB/s)</source>
<location filename="../src/ConnectionEditWindow.ui" line="500"/>
<source>#UplinkCapacity (MB/s)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="537"/>
<source>Congestion</source>
<location filename="../src/ConnectionEditWindow.ui" line="523"/>
<source>#Congestion</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="544"/>
<source>Enabled</source>
<location filename="../src/ConnectionEditWindow.ui" line="530"/>
<source>#Enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="555"/>
<source>downlinkCapacity (MB/s)</source>
<location filename="../src/ConnectionEditWindow.ui" line="541"/>
<source>#DownlinkCapacity (MB/s)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="578"/>
<source>readBufferSize (MB)</source>
<location filename="../src/ConnectionEditWindow.ui" line="564"/>
<source>#ReadBufferSize (MB)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="601"/>
<source>writeBufferSize (MB)</source>
<location filename="../src/ConnectionEditWindow.ui" line="587"/>
<source>#WriteBufferSize (MB)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="626"/>
<source>header (Header Object)</source>
<location filename="../src/ConnectionEditWindow.ui" line="612"/>
<location filename="../src/ConnectionEditWindow.ui" line="761"/>
<source>#Header</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="651"/>
<location filename="../src/ConnectionEditWindow.ui" line="802"/>
<location filename="../src/ConnectionEditWindow.ui" line="637"/>
<location filename="../src/ConnectionEditWindow.ui" line="788"/>
<source>srtp (SRTP, FaceTime)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="656"/>
<location filename="../src/ConnectionEditWindow.ui" line="807"/>
<location filename="../src/ConnectionEditWindow.ui" line="642"/>
<location filename="../src/ConnectionEditWindow.ui" line="793"/>
<source>utp (BitTorrent)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="661"/>
<location filename="../src/ConnectionEditWindow.ui" line="812"/>
<location filename="../src/ConnectionEditWindow.ui" line="647"/>
<location filename="../src/ConnectionEditWindow.ui" line="798"/>
<source>wechat-video (WeChat Video Message)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="666"/>
<location filename="../src/ConnectionEditWindow.ui" line="817"/>
<location filename="../src/ConnectionEditWindow.ui" line="652"/>
<location filename="../src/ConnectionEditWindow.ui" line="803"/>
<source>dtls (DTLS 1.2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="671"/>
<location filename="../src/ConnectionEditWindow.ui" line="822"/>
<location filename="../src/ConnectionEditWindow.ui" line="657"/>
<location filename="../src/ConnectionEditWindow.ui" line="808"/>
<source>wireguard (WireGuard fake packets)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="683"/>
<location filename="../src/ConnectionEditWindow.ui" line="669"/>
<source>DomainSocket</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="698"/>
<source>/path/to/ds/file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="708"/>
<location filename="../src/ConnectionEditWindow.ui" line="694"/>
<source>QUIC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="716"/>
<source>security</source>
<location filename="../src/ConnectionEditWindow.ui" line="734"/>
<source>#Key</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ImportConfig</name>
<message>
<location filename="../src/ImportConfig.ui" line="20"/>
<source>Import file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="748"/>
<source>key</source>
<location filename="../src/ImportConfig.ui" line="28"/>
<source>#ImportFrom</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="755"/>
<source>xxxxx</source>
<location filename="../src/ImportConfig.ui" line="36"/>
<source>Existing File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="762"/>
<source>header</source>
<location filename="../src/ImportConfig.ui" line="41"/>
<source>VMess Connection String</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ConnectionEditWindow.ui" line="775"/>
<source>header (HeaderObject)</source>
<location filename="../src/ImportConfig.ui" line="51"/>
<source>#FromFile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="57"/>
<source>#Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="73"/>
<source>#SelectFile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="82"/>
<source>#Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="92"/>
<source>#Inbound</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="101"/>
<source>#UseCurrent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="111"/>
<source>#UseImported</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="123"/>
<source>#From VMess Connection String</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.ui" line="129"/>
<source>#VMess Connection String</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.cpp" line="34"/>
<source>OpenConfigFile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.cpp" line="44"/>
<location filename="../src/ImportConfig.cpp" line="72"/>
<location filename="../src/ImportConfig.cpp" line="79"/>
<location filename="../src/ImportConfig.cpp" line="117"/>
<source>ImportConfig</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.cpp" line="44"/>
<source>CannotOpenFile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.cpp" line="72"/>
<source>SaveFailed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.cpp" line="79"/>
<source>CannotCopyCustomConfig</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/ImportConfig.cpp" line="117"/>
<source>CannotGenerateConfig</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../src/mainwindow.ui" line="26"/>
<location filename="../src/MainWindow.ui" line="26"/>
<location filename="../src/MainWindow.cpp" line="22"/>
<source>Hv2ray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="46"/>
<source>Start</source>
<location filename="../src/MainWindow.ui" line="46"/>
<location filename="../src/MainWindow.cpp" line="33"/>
<source>#Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="53"/>
<source>Stop</source>
<location filename="../src/MainWindow.ui" line="53"/>
<location filename="../src/MainWindow.cpp" line="34"/>
<source>#Stop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="60"/>
<source>Restart</source>
<location filename="../src/MainWindow.ui" line="60"/>
<location filename="../src/MainWindow.cpp" line="35"/>
<source>#Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="70"/>
<source>Clear Log</source>
<location filename="../src/MainWindow.ui" line="70"/>
<source>#ClearLog</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="145"/>
<source>Config Detail</source>
<location filename="../src/MainWindow.ui" line="97"/>
<source>#HostList</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="97"/>
<source>Host list</source>
<location filename="../src/MainWindow.ui" line="140"/>
<source>#ConfigDetail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="134"/>
<source>Config 1 (www.hostname.com:port)</source>
<location filename="../src/MainWindow.ui" line="149"/>
<source>#Host</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="154"/>
<source>Host</source>
<location filename="../src/MainWindow.ui" line="163"/>
<source>#Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="161"/>
<source>www.hostname.com</source>
<location filename="../src/MainWindow.ui" line="177"/>
<source>#UUID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="168"/>
<source>Port</source>
<location filename="../src/MainWindow.ui" line="191"/>
<source>#Transport</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="175"/>
<source>12345</source>
<location filename="../src/MainWindow.ui" line="211"/>
<location filename="../src/MainWindow.ui" line="218"/>
<source>#ConnectionSettings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="182"/>
<source>UUID</source>
<location filename="../src/MainWindow.ui" line="249"/>
<source>#File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="189"/>
<source>TextLabel</source>
<location filename="../src/MainWindow.ui" line="253"/>
<source>#NewConnection</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="196"/>
<source>Transport</source>
<location filename="../src/MainWindow.ui" line="268"/>
<source>#ManuallyInput</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="203"/>
<source>mKCP</source>
<location filename="../src/MainWindow.ui" line="273"/>
<source>#ImportConnection</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="216"/>
<source>Connection Settings</source>
<location filename="../src/MainWindow.ui" line="278"/>
<source>#Exit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="223"/>
<source>Settings</source>
<location filename="../src/MainWindow.ui" line="283"/>
<source>#Preferences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="254"/>
<source>File</source>
<location filename="../src/MainWindow.cpp" line="31"/>
<location filename="../src/MainWindow.cpp" line="222"/>
<source>#Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="258"/>
<source>New</source>
<location filename="../src/MainWindow.cpp" line="32"/>
<source>#Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="262"/>
<source>From</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="277"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="286"/>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="291"/>
<source>Vmess</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="296"/>
<source>Existing config</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="301"/>
<source>Exit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="306"/>
<source>Preferences</source>
<location filename="../src/MainWindow.cpp" line="225"/>
<source>#Show</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrefrencesWindow</name>
<message>
<location filename="../src/PrefrencesWindow.ui" line="14"/>
<location filename="../src/PrefrencesWindow.ui" line="20"/>
<location filename="../src/PrefrencesWindow.cpp" line="118"/>
<location filename="../src/PrefrencesWindow.cpp" line="156"/>
<source>Prefrences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="20"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="26"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="40"/>
<location filename="../src/PrefrencesWindow.ui" line="48"/>
<source>zh-CN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="45"/>
<location filename="../src/PrefrencesWindow.ui" line="53"/>
<source>en-US</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="53"/>
<source>Run v2ray with root</source>
<location filename="../src/PrefrencesWindow.ui" line="26"/>
<source>#General</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="60"/>
<location filename="../src/PrefrencesWindow.ui" line="133"/>
<location filename="../src/PrefrencesWindow.ui" line="183"/>
<source>Enabled</source>
<location filename="../src/PrefrencesWindow.ui" line="34"/>
<source>#Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="67"/>
<source>Log Level</source>
<location filename="../src/PrefrencesWindow.ui" line="61"/>
<source>#RunAsRoot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="87"/>
<location filename="../src/PrefrencesWindow.ui" line="68"/>
<location filename="../src/PrefrencesWindow.ui" line="131"/>
<location filename="../src/PrefrencesWindow.ui" line="138"/>
<location filename="../src/PrefrencesWindow.ui" line="186"/>
<location filename="../src/PrefrencesWindow.ui" line="234"/>
<location filename="../src/PrefrencesWindow.ui" line="270"/>
<location filename="../src/PrefrencesWindow.ui" line="298"/>
<source>#Enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="75"/>
<source>#LogLevel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="95"/>
<source>debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="92"/>
<location filename="../src/PrefrencesWindow.ui" line="100"/>
<source>info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="97"/>
<location filename="../src/PrefrencesWindow.ui" line="105"/>
<source>warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="102"/>
<location filename="../src/PrefrencesWindow.ui" line="110"/>
<source>error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="107"/>
<location filename="../src/PrefrencesWindow.ui" line="115"/>
<source>none</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="118"/>
<source>Inbound Settings</source>
<location filename="../src/PrefrencesWindow.ui" line="125"/>
<source>#MuxCool</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="124"/>
<location filename="../src/PrefrencesWindow.ui" line="145"/>
<source>#Concurrency</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="171"/>
<source>#InboundSettings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="193"/>
<location filename="../src/PrefrencesWindow.ui" line="256"/>
<source>#Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="213"/>
<location filename="../src/PrefrencesWindow.ui" line="284"/>
<source>#Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="220"/>
<location filename="../src/PrefrencesWindow.ui" line="277"/>
<source>#Auth</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="227"/>
<location filename="../src/PrefrencesWindow.ui" line="291"/>
<source>#Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="177"/>
<source>HTTP</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="140"/>
<location filename="../src/PrefrencesWindow.ui" line="169"/>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="147"/>
<location filename="../src/PrefrencesWindow.ui" line="200"/>
<source>8080</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="163"/>
<location filename="../src/PrefrencesWindow.ui" line="250"/>
<source>SOCKS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/PrefrencesWindow.ui" line="176"/>
<location filename="../src/PrefrencesWindow.ui" line="263"/>
<source>9001</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>importConf</name>
<message>
<location filename="../src/importconf.ui" line="14"/>
<source>Import file</source>
<location filename="../src/PrefrencesWindow.cpp" line="112"/>
<source>#Prefrences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/importconf.ui" line="45"/>
<source>File name:</source>
<location filename="../src/PrefrencesWindow.cpp" line="112"/>
<source>#CannotOpenConfigFile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/importconf.ui" line="59"/>
<source>open</source>
<location filename="../src/PrefrencesWindow.cpp" line="118"/>
<source>PortNumbersCannotBeSame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/importconf.ui" line="66"/>
<source>Alias:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/importconf.cpp" line="29"/>
<source>Open Config File</source>
<location filename="../src/PrefrencesWindow.cpp" line="156"/>
<source>RunAsRootNotOnWindows</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>import_vmess</name>
<name>QObject</name>
<message>
<location filename="../src/import_vmess.ui" line="14"/>
<source>Vmess</source>
<location filename="../src/main.cpp" line="76"/>
<source>Hv2Ray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/import_vmess.ui" line="55"/>
<source>Alias:</source>
<location filename="../src/main.cpp" line="76"/>
<source>AnotherInstanceRunning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/utils.cpp" line="56"/>
<source>CoreNotFound</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/utils.cpp" line="56"/>
<source>CoreFileNotFoundExplaination</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/vinteract.cpp" line="28"/>
<source>ConfigurationError</source>
<translation type="unfinished"></translation>
</message>
</context>

File diff suppressed because it is too large Load Diff