refactor: checking for server config files read permissions upon start
This commit is contained in:
committed by
Chris Rizzitello
parent
2ecf91e50a
commit
7743d9008d
@ -383,12 +383,17 @@ void MainWindow::coreProcessError(CoreProcess::Error error)
|
|||||||
);
|
);
|
||||||
} else if (error == CoreProcess::Error::StartFailed) {
|
} else if (error == CoreProcess::Error::StartFailed) {
|
||||||
show();
|
show();
|
||||||
QMessageBox::warning(
|
auto message = tr("The Core executable could not be started.\n"
|
||||||
this, tr("Core cannot be started"),
|
"Please check if you have sufficient permissions to run %1.")
|
||||||
tr("The Core executable could not be successfully started, "
|
.arg(kCoreBinName);
|
||||||
"although it does exist. "
|
|
||||||
"Please check if you have sufficient permissions to run this program.")
|
if (Settings::value(Settings::Core::CoreMode) == Settings::CoreMode::Server) {
|
||||||
);
|
const auto mode =
|
||||||
|
Settings::value(Settings::Server::ExternalConfigFile).toBool() ? tr("read") : tr("read and write");
|
||||||
|
message.append(tr("\nAdditionally, check you are able to %1 the server config file: %2")
|
||||||
|
.arg(mode, Settings::serverConfigFile()));
|
||||||
|
}
|
||||||
|
QMessageBox::warning(this, kAppName, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -330,11 +330,17 @@ void CoreProcess::start(std::optional<ProcessMode> processModeOption)
|
|||||||
QStringList args = {coreMode};
|
QStringList args = {coreMode};
|
||||||
|
|
||||||
if (m_mode == Settings::CoreMode::Server) {
|
if (m_mode == Settings::CoreMode::Server) {
|
||||||
const auto configFilename = persistServerConfig();
|
const auto [hasNeededPermissions, configFilename] = persistServerConfig();
|
||||||
if (configFilename.isEmpty()) {
|
if (configFilename.isEmpty()) {
|
||||||
qFatal("config file name empty for server args");
|
qFatal("config file name empty for server args");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!hasNeededPermissions) {
|
||||||
|
setProcessState(ProcessState::Stopped);
|
||||||
|
setConnectionState(ConnectionState::Disconnected);
|
||||||
|
Q_EMIT error(Error::StartFailed);
|
||||||
|
return;
|
||||||
|
}
|
||||||
qInfo("core config file: %s", qPrintable(configFilename));
|
qInfo("core config file: %s", qPrintable(configFilename));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,21 +423,22 @@ void CoreProcess::cleanup()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CoreProcess::persistServerConfig() const
|
QPair<bool, QString> CoreProcess::persistServerConfig() const
|
||||||
{
|
{
|
||||||
if (Settings::value(Settings::Server::ExternalConfig).toBool()) {
|
if (Settings::value(Settings::Server::ExternalConfig).toBool()) {
|
||||||
return Settings::value(Settings::Server::ExternalConfigFile).toString();
|
return {Settings::isServerConfigFileReadable(), Settings::value(Settings::Server::ExternalConfigFile).toString()};
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto configFilePath = Settings::defaultValue(Settings::Server::ExternalConfigFile).toString();
|
const auto configFilePath = Settings::defaultValue(Settings::Server::ExternalConfigFile).toString();
|
||||||
QFile configFile(configFilePath);
|
QFile configFile(configFilePath);
|
||||||
if (!configFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
if (!configFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
||||||
qFatal("failed to open core config file for write: %s", qPrintable(configFile.fileName()));
|
qWarning() << "failed to open core config file for write:" << configFilePath;
|
||||||
|
return {false, configFile.fileName()};
|
||||||
}
|
}
|
||||||
|
|
||||||
m_serverConfig.save(configFile);
|
m_serverConfig.save(configFile);
|
||||||
configFile.close();
|
configFile.close();
|
||||||
return configFile.fileName();
|
return {Settings::isServerConfigFileReadable(), configFile.fileName()};
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoreProcess::setConnectionState(ConnectionState state)
|
void CoreProcess::setConnectionState(ConnectionState state)
|
||||||
|
|||||||
@ -101,7 +101,7 @@ private:
|
|||||||
void startProcessFromDaemon(const QStringList &args);
|
void startProcessFromDaemon(const QStringList &args);
|
||||||
void stopForegroundProcess() const;
|
void stopForegroundProcess() const;
|
||||||
void stopProcessFromDaemon();
|
void stopProcessFromDaemon();
|
||||||
QString persistServerConfig() const;
|
QPair<bool, QString> persistServerConfig() const;
|
||||||
void setConnectionState(ConnectionState state);
|
void setConnectionState(ConnectionState state);
|
||||||
void setProcessState(ProcessState state);
|
void setProcessState(ProcessState state);
|
||||||
void checkLogLine(const QString &line);
|
void checkLogLine(const QString &line);
|
||||||
|
|||||||
@ -402,10 +402,6 @@ Do you want to connect to the server?
|
|||||||
<source>Please enter the hostname or IP address of the other computer.</source>
|
<source>Please enter the hostname or IP address of the other computer.</source>
|
||||||
<translation type="unfinished">Introduzca el nombre de host o la dirección IP de la otra computadora.</translation>
|
<translation type="unfinished">Introduzca el nombre de host o la dirección IP de la otra computadora.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Core cannot be started</source>
|
|
||||||
<translation type="unfinished">No se puede iniciar el núcleo</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Save server configuration as...</source>
|
<source>Save server configuration as...</source>
|
||||||
<translation type="unfinished">Guardar la configuración del servidor como...</translation>
|
<translation type="unfinished">Guardar la configuración del servidor como...</translation>
|
||||||
@ -523,10 +519,6 @@ Nombres válidos:
|
|||||||
<source>This computer's name:</source>
|
<source>This computer's name:</source>
|
||||||
<translation type="unfinished">Nombre de esta computadora:</translation>
|
<translation type="unfinished">Nombre de esta computadora:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
|
|
||||||
<translation type="unfinished">No se pudo iniciar el archivo ejecutable principal, aunque existe. Compruebe si tiene permisos suficientes para ejecutar este programa.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>&Configure Client</source>
|
<source>&Configure Client</source>
|
||||||
<translation type="unfinished">&Configurar cliente</translation>
|
<translation type="unfinished">&Configurar cliente</translation>
|
||||||
@ -539,6 +531,26 @@ Nombres válidos:
|
|||||||
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
||||||
<translation type="unfinished"><html>Nome host o indirizzo IP del computer server.<br/>Può contenere un elenco separato da virgole.</html></translation>
|
<translation type="unfinished"><html>Nome host o indirizzo IP del computer server.<br/>Può contenere un elenco separato da virgole.</html></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read</source>
|
||||||
|
<translation type="unfinished">leer</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read and write</source>
|
||||||
|
<translation type="unfinished">leer y escribir</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The Core executable could not be started.
|
||||||
|
Please check if you have sufficient permissions to run %1.</source>
|
||||||
|
<translation type="unfinished">No se pudo iniciar el ejecutable Core.
|
||||||
|
Verifique si tiene permisos suficientes para ejecutar %1.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>
|
||||||
|
Additionally, check you are able to %1 the server config file: %2</source>
|
||||||
|
<translation type="unfinished">
|
||||||
|
Además, verifique que puede %1 el archivo de configuración del servidor: %2</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>NewScreenWidget</name>
|
<name>NewScreenWidget</name>
|
||||||
|
|||||||
@ -390,10 +390,6 @@ Vuoi connetterti al server?
|
|||||||
<source>Please enter the hostname or IP address of the other computer.</source>
|
<source>Please enter the hostname or IP address of the other computer.</source>
|
||||||
<translation>Inserisci l'hostname o l'indirizzo IP dell'altro computer.</translation>
|
<translation>Inserisci l'hostname o l'indirizzo IP dell'altro computer.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Core cannot be started</source>
|
|
||||||
<translation>Impossibile avviare il core</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Save server configuration as...</source>
|
<source>Save server configuration as...</source>
|
||||||
<translation>Salva configurazione server come...</translation>
|
<translation>Salva configurazione server come...</translation>
|
||||||
@ -523,10 +519,6 @@ Nomi validi:
|
|||||||
<translation>Usa mouse e tastiera di un altro computer
|
<translation>Usa mouse e tastiera di un altro computer
|
||||||
(imposta questo computer come client)</translation>
|
(imposta questo computer come client)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
|
|
||||||
<translation type="unfinished">Non è stato possibile avviare correttamente l'eseguibile Core, sebbene esista. Verifica di disporre delle autorizzazioni necessarie per eseguire questo programma.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>&Configure Client</source>
|
<source>&Configure Client</source>
|
||||||
<translation type="unfinished">&Configurare il client</translation>
|
<translation type="unfinished">&Configurare il client</translation>
|
||||||
@ -539,6 +531,26 @@ Nomi validi:
|
|||||||
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
||||||
<translation type="unfinished"><html>Nome host o indirizzo IP del computer server.<br/>Può contenere un elenco separato da virgole.</html></translation>
|
<translation type="unfinished"><html>Nome host o indirizzo IP del computer server.<br/>Può contenere un elenco separato da virgole.</html></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read</source>
|
||||||
|
<translation type="unfinished">leggere</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read and write</source>
|
||||||
|
<translation type="unfinished">leggere e scrivere</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The Core executable could not be started.
|
||||||
|
Please check if you have sufficient permissions to run %1.</source>
|
||||||
|
<translation type="unfinished">Impossibile avviare l'eseguibile Core.
|
||||||
|
Verifica di avere i permessi sufficienti per eseguire %1.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>
|
||||||
|
Additionally, check you are able to %1 the server config file: %2</source>
|
||||||
|
<translation type="unfinished">
|
||||||
|
Inoltre, verifica di poter %1 il file di configurazione del server: %2</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>NewScreenWidget</name>
|
<name>NewScreenWidget</name>
|
||||||
|
|||||||
@ -358,10 +358,6 @@ Do you want to connect to the server?
|
|||||||
<source>Please enter the hostname or IP address of the other computer.</source>
|
<source>Please enter the hostname or IP address of the other computer.</source>
|
||||||
<translation>他のコンピューターのIPアドレスかホスト名を入力してください。</translation>
|
<translation>他のコンピューターのIPアドレスかホスト名を入力してください。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Core cannot be started</source>
|
|
||||||
<translation>コアが起動できません</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Save server configuration as...</source>
|
<source>Save server configuration as...</source>
|
||||||
<translation>サーバー設定を保存…</translation>
|
<translation>サーバー設定を保存…</translation>
|
||||||
@ -523,10 +519,6 @@ Valid names:
|
|||||||
<source>Suggested IP: </source>
|
<source>Suggested IP: </source>
|
||||||
<translation>推奨IPアドレス: </translation>
|
<translation>推奨IPアドレス: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
|
|
||||||
<translation>コア実行ファイルは存在していますが、起動できませんでした。このプログラムを実行するのに十分な権限があることを確認してください。</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>&Configure Client</source>
|
<source>&Configure Client</source>
|
||||||
<translation>クライアント設定 (&C)</translation>
|
<translation>クライアント設定 (&C)</translation>
|
||||||
@ -539,6 +531,26 @@ Valid names:
|
|||||||
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
||||||
<translation><html>サーバーコンピューターのホスト名または IP アドレス。<br/>カンマ区切りのリストを含めることができます。</html></translation>
|
<translation><html>サーバーコンピューターのホスト名または IP アドレス。<br/>カンマ区切りのリストを含めることができます。</html></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read</source>
|
||||||
|
<translation type="unfinished">読み取り</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read and write</source>
|
||||||
|
<translation type="unfinished">読み書き</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The Core executable could not be started.
|
||||||
|
Please check if you have sufficient permissions to run %1.</source>
|
||||||
|
<translation type="unfinished">Coreの実行ファイルを起動できませんでした。
|
||||||
|
%1を実行するための十分な権限があるか確認してください。</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>
|
||||||
|
Additionally, check you are able to %1 the server config file: %2</source>
|
||||||
|
<translation type="unfinished">
|
||||||
|
また、サーバー設定ファイルを%1できることを確認してください: %2</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>NewScreenWidget</name>
|
<name>NewScreenWidget</name>
|
||||||
|
|||||||
@ -358,10 +358,6 @@ Do you want to connect to the server?
|
|||||||
<source>Please enter the hostname or IP address of the other computer.</source>
|
<source>Please enter the hostname or IP address of the other computer.</source>
|
||||||
<translation>다른 컴퓨터의 호스트 이름 또는 IP 주소를 입력하세요.</translation>
|
<translation>다른 컴퓨터의 호스트 이름 또는 IP 주소를 입력하세요.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Core cannot be started</source>
|
|
||||||
<translation>코어를 시작할 수 없습니다</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Save server configuration as...</source>
|
<source>Save server configuration as...</source>
|
||||||
<translation>서버 설정을 다른 이름으로 저장...</translation>
|
<translation>서버 설정을 다른 이름으로 저장...</translation>
|
||||||
@ -523,10 +519,6 @@ Valid names:
|
|||||||
<source>Suggested IP: </source>
|
<source>Suggested IP: </source>
|
||||||
<translation type="unfinished">추천 IP: </translation>
|
<translation type="unfinished">추천 IP: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
|
|
||||||
<translation>코어 실행 파일이 존재하지만 정상적으로 시작할 수 없습니다. 이 프로그램을 실행할 권한이 충분한지 확인하세요.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>&Configure Client</source>
|
<source>&Configure Client</source>
|
||||||
<translation type="unfinished">클라이언트 구성 (&C)</translation>
|
<translation type="unfinished">클라이언트 구성 (&C)</translation>
|
||||||
@ -539,6 +531,26 @@ Valid names:
|
|||||||
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
||||||
<translation><html>서버 컴퓨터의 호스트 이름 또는 IP 주소입니다.<br/>목록 요소는 쉼표로 구분됩니다.</html></translation>
|
<translation><html>서버 컴퓨터의 호스트 이름 또는 IP 주소입니다.<br/>목록 요소는 쉼표로 구분됩니다.</html></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read</source>
|
||||||
|
<translation type="unfinished">읽기</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read and write</source>
|
||||||
|
<translation type="unfinished">읽기 및 쓰기</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The Core executable could not be started.
|
||||||
|
Please check if you have sufficient permissions to run %1.</source>
|
||||||
|
<translation type="unfinished">Core 실행 파일을 시작할 수 없습니다.
|
||||||
|
%1을 실행할 수 있는 충분한 권한이 있는지 확인하세요.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>
|
||||||
|
Additionally, check you are able to %1 the server config file: %2</source>
|
||||||
|
<translation type="unfinished">
|
||||||
|
또한 서버 구성 파일을 %1할 수 있는지 확인하세요: %2</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>NewScreenWidget</name>
|
<name>NewScreenWidget</name>
|
||||||
|
|||||||
@ -358,10 +358,6 @@ Do you want to connect to the server?
|
|||||||
<source>Please enter the hostname or IP address of the other computer.</source>
|
<source>Please enter the hostname or IP address of the other computer.</source>
|
||||||
<translation>Пожалуйста, введите имя хоста или IP-адрес другого компьютера.</translation>
|
<translation>Пожалуйста, введите имя хоста или IP-адрес другого компьютера.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Core cannot be started</source>
|
|
||||||
<translation>Не удалось запустить ядро</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Save server configuration as...</source>
|
<source>Save server configuration as...</source>
|
||||||
<translation>Сохранить конфигурацию сервера как...</translation>
|
<translation>Сохранить конфигурацию сервера как...</translation>
|
||||||
@ -523,10 +519,6 @@ Valid names:
|
|||||||
<source>Suggested IP: </source>
|
<source>Suggested IP: </source>
|
||||||
<translation>Рекомендуемый IP-адрес: </translation>
|
<translation>Рекомендуемый IP-адрес: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
|
|
||||||
<translation>Не удалось запустить исполняемый файл ядра, хотя он существует. Проверьте наличие прав на запуск программы.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>&Configure Client</source>
|
<source>&Configure Client</source>
|
||||||
<translation type="unfinished">&Настройка клиента</translation>
|
<translation type="unfinished">&Настройка клиента</translation>
|
||||||
@ -539,6 +531,26 @@ Valid names:
|
|||||||
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
||||||
<translation type="unfinished"><html>Имя хоста или IP-адрес серверного компьютера.<br/>Может содержать список, разделенный запятыми.</html></translation>
|
<translation type="unfinished"><html>Имя хоста или IP-адрес серверного компьютера.<br/>Может содержать список, разделенный запятыми.</html></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read</source>
|
||||||
|
<translation type="unfinished">прочитать</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read and write</source>
|
||||||
|
<translation type="unfinished">читать и записывать</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The Core executable could not be started.
|
||||||
|
Please check if you have sufficient permissions to run %1.</source>
|
||||||
|
<translation type="unfinished">Не удалось запустить исполняемый файл Core.
|
||||||
|
Проверьте, достаточно ли у вас прав для запуска %1.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>
|
||||||
|
Additionally, check you are able to %1 the server config file: %2</source>
|
||||||
|
<translation type="unfinished">
|
||||||
|
Также убедитесь, что вы можете %1 файл конфигурации сервера: %2</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>NewScreenWidget</name>
|
<name>NewScreenWidget</name>
|
||||||
|
|||||||
@ -358,10 +358,6 @@ Do you want to connect to the server?
|
|||||||
<source>Please enter the hostname or IP address of the other computer.</source>
|
<source>Please enter the hostname or IP address of the other computer.</source>
|
||||||
<translation>请输入另一台计算机的主机名或 IP 地址。</translation>
|
<translation>请输入另一台计算机的主机名或 IP 地址。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Core cannot be started</source>
|
|
||||||
<translation>核心服务无法启动</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Save server configuration as...</source>
|
<source>Save server configuration as...</source>
|
||||||
<translation>另存服务器配置为...</translation>
|
<translation>另存服务器配置为...</translation>
|
||||||
@ -523,10 +519,6 @@ Valid names:
|
|||||||
<source>Suggested IP: </source>
|
<source>Suggested IP: </source>
|
||||||
<translation type="unfinished">建议 IP: </translation>
|
<translation type="unfinished">建议 IP: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
|
|
||||||
<translation type="unfinished">Core 可执行文件虽然存在,但无法成功启动。请检查您是否拥有运行此程序的足够权限。</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>&Configure Client</source>
|
<source>&Configure Client</source>
|
||||||
<translation type="unfinished">配置客户端(&C)</translation>
|
<translation type="unfinished">配置客户端(&C)</translation>
|
||||||
@ -539,6 +531,26 @@ Valid names:
|
|||||||
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
<source><html>Hostname or IP address of the server computer.<br/>May contain a comma seperated list.</html></source>
|
||||||
<translation type="unfinished"><html>服务器计算机的主机名或 IP 地址。<br/>可以包含以逗号分隔的列表。</html></translation>
|
<translation type="unfinished"><html>服务器计算机的主机名或 IP 地址。<br/>可以包含以逗号分隔的列表。</html></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read</source>
|
||||||
|
<translation type="unfinished">读取</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>read and write</source>
|
||||||
|
<translation type="unfinished">读取和写入</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The Core executable could not be started.
|
||||||
|
Please check if you have sufficient permissions to run %1.</source>
|
||||||
|
<translation type="unfinished">无法启动Core可执行文件。
|
||||||
|
请检查您是否有足够的权限来运行%1。</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>
|
||||||
|
Additionally, check you are able to %1 the server config file: %2</source>
|
||||||
|
<translation type="unfinished">
|
||||||
|
另外,请检查您是否能够%1服务器配置文件:%2</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>NewScreenWidget</name>
|
<name>NewScreenWidget</name>
|
||||||
|
|||||||
Reference in New Issue
Block a user