mirror of
https://github.com/arcan1s/netctl-gui.git
synced 2025-07-27 12:39:58 +00:00
Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
8dd48fa7cc | |||
287405f81a | |||
fa27b80060 | |||
c2c14c4911 | |||
e2deb8751d | |||
1fe7d6e21f | |||
e68be6d4f1 | |||
45d3a42754 | |||
cb0410a182 | |||
9d349461cf | |||
d41a34673b | |||
b199b43f58 | |||
6d212efe1e | |||
d32486d882 | |||
5afa65ce68 | |||
5b46247df2 | |||
bda5433716 | |||
835e82ca63 | |||
98cdb18d62 | |||
cd59a9b294 | |||
4780433c4d | |||
28a4934a82 | |||
4e8bbeed35 | |||
f86ef0514b | |||
4c004af1ae | |||
66e3a737d4 | |||
9cf6552c71 | |||
f18e74917b | |||
b909222db9 | |||
0c7868536a | |||
fc3956caf1 | |||
4cf3c85070 | |||
6e57baccaf | |||
5ed704e676 | |||
eb3753ab25 | |||
f9d71577f3 | |||
814f2c7904 |
12
.gitmodules
vendored
Normal file
12
.gitmodules
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
[submodule "sources/3rdparty/tasks"]
|
||||
path = sources/3rdparty/tasks
|
||||
url = https://github.com/mhogomchungu/tasks.git
|
||||
[submodule "sources/3rdparty/pdebug"]
|
||||
path = sources/3rdparty/pdebug
|
||||
url = https://github.com/arcan1s/qtadds-pdebug.git
|
||||
[submodule "sources/3rdparty/language"]
|
||||
path = sources/3rdparty/language
|
||||
url = https://github.com/arcan1s/qtadds-language.git
|
||||
[submodule "sources/3rdparty/task"]
|
||||
path = sources/3rdparty/task
|
||||
url = https://github.com/arcan1s/qtadds-taskadds-qprocess.git
|
3
AUTHORS
3
AUTHORS
@ -1,2 +1,5 @@
|
||||
Current developers:
|
||||
Evgeniy Alekseev aka arcanis <esalexeev (at) gmail (dot) com>
|
||||
|
||||
Translators:
|
||||
@nosada (Japanese translation)
|
||||
|
31
CHANGELOG
31
CHANGELOG
@ -1,3 +1,32 @@
|
||||
Ver.1.3.3
|
||||
---------
|
||||
* all
|
||||
* update Japanese translation
|
||||
* dataengine
|
||||
- fix #19
|
||||
|
||||
***
|
||||
|
||||
|
||||
Ver.1.3.2
|
||||
---------
|
||||
* all
|
||||
+ add Japanese translation (thanks to @nosada)
|
||||
|
||||
***
|
||||
|
||||
Ver.1.3.1
|
||||
---------
|
||||
* gui:
|
||||
* more correct calls of boolean DBus methods
|
||||
* edit helper icon
|
||||
* helper:
|
||||
* more correct calls of boolean DBus methods
|
||||
* more correct systemd service
|
||||
* add ability to create session bus
|
||||
|
||||
***
|
||||
|
||||
Ver.1.3.0
|
||||
---------
|
||||
* all:
|
||||
@ -46,7 +75,7 @@ Ver.1.3.0
|
||||
- remove SleepThread class
|
||||
* rewrite to use [tasks](https://github.com/mhogomchungu/tasks) (see #7)
|
||||
* rename getInterfaceList() to getWirelessInterfaceList()
|
||||
* change temporaty directory from $HOME/.cache to system one
|
||||
* change temporary directory from $HOME/.cache to system one
|
||||
* plasmoid:
|
||||
+ add 3rd party license information
|
||||
+ allow plasmoid to use system tray
|
||||
|
@ -4,15 +4,15 @@ pkgbase=netctl-gui
|
||||
pkgname=('libnetctlgui' 'netctlgui-helper' 'netctl-gui'
|
||||
'libnetctlgui-qt4' 'netctlgui-helper-qt4' 'netctl-gui-qt4'
|
||||
'kdeplasma-applets-netctl-gui')
|
||||
pkgver=1.3.0
|
||||
pkgrel=1
|
||||
pkgver=1.3.3
|
||||
pkgrel=2
|
||||
pkgdesc="Qt4/Qt5 GUI for netctl. Also provides a widget for KDE"
|
||||
arch=('i686' 'x86_64')
|
||||
url="http://arcanis.name/projects/netctl-gui"
|
||||
license=('GPL3')
|
||||
makedepends=('automoc4' 'cmake' 'kdelibs' 'qt5-base' 'qt5-tools')
|
||||
source=("https://github.com/arcan1s/netctl-gui/releases/download/V.${pkgver}/${pkgbase}-${pkgver}-src.tar.xz")
|
||||
md5sums=('9b56b04258855258ed30549f1039b8f8')
|
||||
md5sums=('9ba672ef33e9962ccc04fc4de75fad68')
|
||||
|
||||
|
||||
prepare() {
|
||||
@ -36,6 +36,7 @@ build() {
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_DATAENGINE:BOOL=0 \
|
||||
-DBUILD_PLASMOID:BOOL=0 \
|
||||
-DUSE_CAPABILITIES:BOOL=0 \
|
||||
-DUSE_QT5:BOOL=0 \
|
||||
"../${pkgbase}"
|
||||
make
|
||||
@ -45,6 +46,7 @@ build() {
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_DATAENGINE:BOOL=0 \
|
||||
-DBUILD_PLASMOID:BOOL=0 \
|
||||
-DUSE_CAPABILITIES:BOOL=0 \
|
||||
"../${pkgbase}"
|
||||
make
|
||||
}
|
||||
@ -84,7 +86,8 @@ package_netctlgui-helper() {
|
||||
depends=('libnetctlgui')
|
||||
provides=('netctlgui-helper-qt4')
|
||||
conflicts=('netctlgui-helper-qt4')
|
||||
backup=('etc/netctlgui-helper.conf')
|
||||
backup=('etc/netctl-gui.conf'
|
||||
'etc/dbus-1/system.d/org.netctlgui.helper.conf')
|
||||
install="netctlgui-helper.install"
|
||||
|
||||
cd "${srcdir}/build-qt5/helper"
|
||||
@ -103,6 +106,8 @@ package_netctl-gui() {
|
||||
|
||||
cd "${srcdir}/build-qt5/gui"
|
||||
make DESTDIR="${pkgdir}" install
|
||||
cd "${srcdir}/build-qt5/resources"
|
||||
make DESTDIR="${pkgdir}" install
|
||||
}
|
||||
|
||||
|
||||
@ -126,7 +131,8 @@ package_netctlgui-helper-qt4() {
|
||||
depends=('libnetctlgui-qt4')
|
||||
provides=('netctlgui-helper')
|
||||
conflicts=('netctlgui-helper')
|
||||
backup=('etc/netctlgui-helper.conf')
|
||||
backup=('etc/netctl-gui.conf'
|
||||
'etc/dbus-1/system.d/org.netctlgui.helper.conf')
|
||||
install="netctlgui-helper.install"
|
||||
|
||||
cd "${srcdir}/build-qt4/helper"
|
||||
@ -145,4 +151,6 @@ package_netctl-gui-qt4() {
|
||||
|
||||
cd "${srcdir}/build-qt4/gui"
|
||||
make DESTDIR="${pkgdir}" install
|
||||
cd "${srcdir}/build-qt4/resources"
|
||||
make DESTDIR="${pkgdir}" install
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
post_install() {
|
||||
xdg-icon-resource forceupdate --theme hicolor 2> /dev/null
|
||||
true
|
||||
}
|
||||
|
||||
post_upgrade() {
|
||||
|
@ -1,5 +1,9 @@
|
||||
post_install() {
|
||||
setcap cap_setuid=ep usr/bin/netctlgui-helper 2>/dev/null || chmod +s usr/bin/ping
|
||||
setcap cap_setuid=ep usr/bin/netctlgui-helper 2>/dev/null || chmod +s usr/bin/netctlgui-helper
|
||||
cat << EOF
|
||||
Note: users should be in network group if you want to get them access to the system bus
|
||||
See http://arcanis.name/devs/netctl-gui-security-notes.html#helper
|
||||
EOF
|
||||
}
|
||||
|
||||
post_upgrade() {
|
||||
|
@ -3,10 +3,12 @@
|
||||
ARCHIVE="netctl-gui"
|
||||
SRCDIR="sources"
|
||||
FILES="AUTHORS CHANGELOG COPYING README.md"
|
||||
IGNORELIST="build en.qm ru.qm netctl-gui.qm *.cppcheck"
|
||||
IGNORELIST="build *.qm *.cppcheck .git*"
|
||||
VERSION=$(grep -m1 PROJECT_VERSION_MAJOR sources/CMakeLists.txt | awk '{print $3}' | cut -c 1).\
|
||||
$(grep -m1 PROJECT_VERSION_MINOR sources/CMakeLists.txt | awk '{print $3}' | cut -c 1).\
|
||||
$(grep -m1 PROJECT_VERSION_PATCH sources/CMakeLists.txt | awk '{print $3}' | cut -c 1)
|
||||
# update submodules
|
||||
git submodule update --init --recursive
|
||||
# create archive
|
||||
[[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz"
|
||||
[[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}"
|
||||
|
1
sources/3rdparty/language
vendored
Submodule
1
sources/3rdparty/language
vendored
Submodule
Submodule sources/3rdparty/language added at a119b60ed1
12
sources/3rdparty/language-config.h
vendored
Normal file
12
sources/3rdparty/language-config.h
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
#ifndef LANGUAGE_CONFIG_H
|
||||
#define LANGUAGE_CONFIG_H
|
||||
|
||||
|
||||
// put your languages here comma separated
|
||||
// the first language is default language
|
||||
#define LANGUAGES "en,ru"
|
||||
// language key in the configuration file
|
||||
#define LANGUAGE_KEY "LANGUAGE"
|
||||
|
||||
|
||||
#endif /* LANGUAGE_CONFIG_H */
|
115
sources/3rdparty/language/language.cpp
vendored
115
sources/3rdparty/language/language.cpp
vendored
@ -1,115 +0,0 @@
|
||||
/***************************************************************************
|
||||
* This file is part of netctl-gui *
|
||||
* *
|
||||
* netctl-gui is free software: you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* netctl-gui is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with netctl-gui. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "language.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QLocale>
|
||||
|
||||
|
||||
Language::Language()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
QString Language::checkLanguage(const QString language, const QString defaultLanguage)
|
||||
{
|
||||
QStringList availableLanguages = getAvailableLanguages();
|
||||
for (int i=0; i<availableLanguages.count(); i++)
|
||||
if (language == availableLanguages[i])
|
||||
return availableLanguages[i];
|
||||
for (int i=0; i<availableLanguages.count(); i++)
|
||||
if (language.contains(availableLanguages[i] + QChar('_')))
|
||||
return availableLanguages[i];
|
||||
|
||||
return defaultLanguage;
|
||||
}
|
||||
|
||||
|
||||
QString Language::defineLanguage(const QString configPath, const QString options)
|
||||
{
|
||||
QMap<QString, QString> optionsDict = parseOptions(options);
|
||||
if (optionsDict.contains(QString("LANGUAGE")))
|
||||
if (getAvailableLanguages().contains(optionsDict[QString("LANGUAGE")]))
|
||||
return optionsDict[QString("LANGUAGE")];
|
||||
|
||||
QString language;
|
||||
language = defineLanguageFromFile(configPath);
|
||||
if (language.isEmpty())
|
||||
language = defineLanguageFromLocale();
|
||||
language = checkLanguage(language, QString("en"));
|
||||
|
||||
return language;
|
||||
}
|
||||
|
||||
|
||||
QString Language::defineLanguageFromFile(const QString configPath)
|
||||
{
|
||||
QMap<QString, QString> settings;
|
||||
if (configPath.isEmpty())
|
||||
return QString("");
|
||||
QFile configFile(configPath);
|
||||
QString fileStr;
|
||||
if (!configFile.open(QIODevice::ReadOnly))
|
||||
return QString("");
|
||||
while (true) {
|
||||
fileStr = QString(configFile.readLine()).trimmed();
|
||||
if ((fileStr.isEmpty()) && (!configFile.atEnd())) continue;
|
||||
if ((fileStr[0] == QChar('#')) && (!configFile.atEnd())) continue;
|
||||
if ((fileStr[0] == QChar(';')) && (!configFile.atEnd())) continue;
|
||||
if (fileStr.contains(QChar('=')))
|
||||
settings[fileStr.split(QChar('='))[0]] = fileStr.split(QChar('='))[1];
|
||||
if (configFile.atEnd()) break;
|
||||
}
|
||||
configFile.close();
|
||||
|
||||
if (settings.contains(QString("LANGUAGE")))
|
||||
return settings[QString("LANGUAGE")];
|
||||
else
|
||||
return QString("");
|
||||
}
|
||||
|
||||
|
||||
QString Language::defineLanguageFromLocale()
|
||||
{
|
||||
return QLocale::system().name();
|
||||
}
|
||||
|
||||
|
||||
QStringList Language::getAvailableLanguages()
|
||||
{
|
||||
QStringList languages;
|
||||
languages.append(QString("en"));
|
||||
languages.append(QString("ru"));
|
||||
|
||||
return languages;
|
||||
}
|
||||
|
||||
|
||||
QMap<QString, QString> Language::parseOptions(const QString options)
|
||||
{
|
||||
QMap<QString, QString> optionsDict;
|
||||
for (int i=0; i<options.split(QChar(',')).count(); i++) {
|
||||
if (options.split(QChar(','))[i].split(QChar('=')).count() < 2)
|
||||
continue;
|
||||
optionsDict[options.split(QChar(','))[i].split(QChar('='))[0]] =
|
||||
options.split(QChar(','))[i].split(QChar('='))[1];
|
||||
}
|
||||
|
||||
return optionsDict;
|
||||
}
|
43
sources/3rdparty/language/language.h
vendored
43
sources/3rdparty/language/language.h
vendored
@ -1,43 +0,0 @@
|
||||
/***************************************************************************
|
||||
* This file is part of netctl-gui *
|
||||
* *
|
||||
* netctl-gui is free software: you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* netctl-gui is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with netctl-gui. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef LANGUAGE_H
|
||||
#define LANGUAGE_H
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
|
||||
class Language : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Language();
|
||||
static QString checkLanguage(const QString language,
|
||||
const QString defaultLanguage = QString("en"));
|
||||
static QString defineLanguage(const QString configPath,
|
||||
const QString options = QString("OPTIONS"));
|
||||
static QString defineLanguageFromFile(const QString configPath);
|
||||
static QString defineLanguageFromLocale();
|
||||
static QStringList getAvailableLanguages();
|
||||
|
||||
private:
|
||||
static QMap<QString, QString> parseOptions(const QString options);
|
||||
};
|
||||
|
||||
|
||||
#endif /* LANGUAGE_H */
|
1
sources/3rdparty/pdebug
vendored
Submodule
1
sources/3rdparty/pdebug
vendored
Submodule
Submodule sources/3rdparty/pdebug added at 294a590bb9
45
sources/3rdparty/pdebug/pdebug.h
vendored
45
sources/3rdparty/pdebug/pdebug.h
vendored
@ -1,45 +0,0 @@
|
||||
/***************************************************************************
|
||||
* This file is part of netctl-gui *
|
||||
* *
|
||||
* netctl-gui is free software: you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* netctl-gui is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with netctl-gui. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef PRETTY_DEBUG_H
|
||||
#define PRETTY_DEBUG_H
|
||||
|
||||
|
||||
inline const char *pDebug(const std::string prettyFunction)
|
||||
{
|
||||
return prettyFunction.c_str();
|
||||
}
|
||||
|
||||
|
||||
inline std::string pFuncInfo(const std::string prettyFunction)
|
||||
{
|
||||
size_t colons = prettyFunction.find("::");
|
||||
// workaround for functions which are not belong to any class
|
||||
if (colons == std::string::npos)
|
||||
colons = prettyFunction.rfind("(");
|
||||
size_t begin = prettyFunction.substr(0, colons).rfind(" ") + 1;
|
||||
size_t end = prettyFunction.rfind("(") - begin;
|
||||
|
||||
return "[" + prettyFunction.substr(begin, end) + "]";
|
||||
}
|
||||
|
||||
|
||||
#define PDEBUG pDebug(pFuncInfo(__PRETTY_FUNCTION__))
|
||||
|
||||
|
||||
#endif /* PRETTY_DEBUG_H */
|
1
sources/3rdparty/task
vendored
Submodule
1
sources/3rdparty/task
vendored
Submodule
Submodule sources/3rdparty/task added at d2798204a1
41
sources/3rdparty/task/README.md
vendored
41
sources/3rdparty/task/README.md
vendored
@ -1,41 +0,0 @@
|
||||
|
||||
|
||||
Asynchronous programming in Qt/C++ using tasks,continuations and resumable functions.
|
||||
|
||||
This project is inspired by this[1] video on channel9.
|
||||
|
||||
The project seeks to do async based programming in Qt/C++ using modern C++ with lambdas.
|
||||
|
||||
The project has two sets of APIs.
|
||||
|
||||
1. Task::run().then() API provides async based programming with continuation[4].
|
||||
|
||||
2. Task::await() API provides the first API presented in a different way[5].
|
||||
|
||||
Under certain use cases,they can be used interchangeably, and in others,only one or the other can be used.Some of the problems
|
||||
the first API causes and solved by the second API are discussed in this[7] youtube video.
|
||||
|
||||
Example use case for the Task::run().then() API can be found here[0]. Additional example is [2] where an API is
|
||||
declared and [3] where the declared API is used.
|
||||
|
||||
Example use case of the Task::await() API is here[6] where a function call "blocks" waiting for a result without "hanging" the entire GUI application.
|
||||
|
||||
A short tutorial on task/async/await as implemented in C# can be viewed from this[8] link.
|
||||
|
||||
[0] https://github.com/mhogomchungu/tasks/blob/master/example.cpp
|
||||
|
||||
[1] http://channel9.msdn.com/Blogs/Charles/Asynchronous-Programming-for-C-Developers-PPL-Tasks-and-Windows-8
|
||||
|
||||
[2] https://github.com/mhogomchungu/zuluCrypt/blob/d0439a4e36521e42fa9392b82dcefd3224d53334/zuluMount-gui/zulumounttask.h#L61
|
||||
|
||||
[3] https://github.com/mhogomchungu/zuluCrypt/blob/d0439a4e36521e42fa9392b82dcefd3224d53334/zuluMount-gui/mainwindow.cpp#L812
|
||||
|
||||
[4] Disscussion about this can be found on the following link among other places: http://isocpp.org/files/papers/N3558.pdf
|
||||
|
||||
[5] Disscussion about this can be found on the following link among other places: http://isocpp.org/files/papers/N3564.pdf
|
||||
|
||||
[6] https://github.com/mhogomchungu/zuluCrypt/blob/7123e3c3a7c8c5b3b3b6958464fd92a7f780d827/zuluMount-gui/keydialog.cpp#L511
|
||||
|
||||
[7] https://www.youtube.com/watch?v=Y475RshtAHA
|
||||
|
||||
[8] http://www.youtube.com/watch?v=DqjIQiZ_ql4
|
385
sources/3rdparty/task/task.h
vendored
385
sources/3rdparty/task/task.h
vendored
@ -1,385 +0,0 @@
|
||||
/*
|
||||
* copyright: 2014
|
||||
* name : mhogo mchungu
|
||||
* email: mhogomchungu@gmail.com
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __TASK_H_INCLUDED__
|
||||
#define __TASK_H_INCLUDED__
|
||||
|
||||
#include <utility>
|
||||
#include <future>
|
||||
#include <functional>
|
||||
#include <QThread>
|
||||
#include <QEventLoop>
|
||||
|
||||
/*
|
||||
*
|
||||
* Examples on how to use the library are at the end of this file.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace Task
|
||||
{
|
||||
class Thread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Thread()
|
||||
{
|
||||
connect( this,SIGNAL( finished() ),this,SLOT( deleteLater() ) ) ;
|
||||
}
|
||||
protected:
|
||||
virtual ~Thread()
|
||||
{
|
||||
}
|
||||
private:
|
||||
virtual void run( void )
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
template< typename T >
|
||||
class future
|
||||
{
|
||||
public:
|
||||
future() : m_function( []( T t ){ Q_UNUSED( t ) ; } )
|
||||
{
|
||||
}
|
||||
void setActions( std::function< void( void ) > start,
|
||||
std::function< void( void ) > cancel,
|
||||
std::function< T ( void ) > get )
|
||||
{
|
||||
m_start = std::move( start ) ;
|
||||
m_cancel = std::move( cancel ) ;
|
||||
m_get = std::move( get ) ;
|
||||
}
|
||||
void then( std::function< void( T ) > function )
|
||||
{
|
||||
m_function = std::move( function ) ;
|
||||
m_start() ;
|
||||
}
|
||||
T get()
|
||||
{
|
||||
return m_get() ;
|
||||
}
|
||||
T await()
|
||||
{
|
||||
QEventLoop p ;
|
||||
|
||||
T q ;
|
||||
|
||||
m_function = [ & ]( T r ){ q = std::move( r ) ; p.exit() ; } ;
|
||||
|
||||
m_start() ;
|
||||
|
||||
p.exec() ;
|
||||
|
||||
return q ;
|
||||
}
|
||||
void start()
|
||||
{
|
||||
m_start() ;
|
||||
}
|
||||
void cancel()
|
||||
{
|
||||
m_cancel() ;
|
||||
}
|
||||
void run( T r )
|
||||
{
|
||||
m_function( std::move( r ) ) ;
|
||||
}
|
||||
private:
|
||||
std::function< void( T ) > m_function ;
|
||||
std::function< void( void ) > m_start ;
|
||||
std::function< void( void ) > m_cancel ;
|
||||
std::function< T ( void ) > m_get ;
|
||||
};
|
||||
|
||||
template< typename T >
|
||||
class ThreadHelper : public Thread
|
||||
{
|
||||
public:
|
||||
ThreadHelper( std::function< T ( void ) >&& function ) : m_function( std::move( function ) )
|
||||
{
|
||||
}
|
||||
future<T>& Future( void )
|
||||
{
|
||||
m_future.setActions( [ this ](){ this->start() ; },
|
||||
[ this ](){ this->deleteLater() ; },
|
||||
[ this ](){ T r = m_function() ; this->deleteLater() ; return r ; } ) ;
|
||||
return m_future ;
|
||||
}
|
||||
private:
|
||||
~ThreadHelper()
|
||||
{
|
||||
m_future.run( std::move( m_cargo ) ) ;
|
||||
}
|
||||
void run( void )
|
||||
{
|
||||
m_cargo = m_function() ;
|
||||
}
|
||||
std::function< T ( void ) > m_function ;
|
||||
future<T> m_future ;
|
||||
T m_cargo ;
|
||||
};
|
||||
|
||||
class future_1
|
||||
{
|
||||
public:
|
||||
future_1() : m_function( [](){} )
|
||||
{
|
||||
}
|
||||
void setActions( std::function< void( void ) > start,
|
||||
std::function< void( void ) > cancel,
|
||||
std::function< void( void ) > get )
|
||||
{
|
||||
m_start = std::move( start ) ;
|
||||
m_cancel = std::move( cancel ) ;
|
||||
m_get = std::move( get ) ;
|
||||
}
|
||||
void then( std::function< void( void ) > function )
|
||||
{
|
||||
m_function = std::move( function ) ;
|
||||
m_start() ;
|
||||
}
|
||||
void get()
|
||||
{
|
||||
m_get() ;
|
||||
}
|
||||
void await()
|
||||
{
|
||||
QEventLoop p ;
|
||||
|
||||
m_function = [ & ](){ p.exit() ; } ;
|
||||
|
||||
m_start() ;
|
||||
|
||||
p.exec() ;
|
||||
}
|
||||
void start()
|
||||
{
|
||||
m_start() ;
|
||||
}
|
||||
void run()
|
||||
{
|
||||
m_function() ;
|
||||
}
|
||||
void cancel()
|
||||
{
|
||||
m_cancel() ;
|
||||
}
|
||||
private:
|
||||
std::function< void( void ) > m_function ;
|
||||
std::function< void( void ) > m_start ;
|
||||
std::function< void( void ) > m_cancel ;
|
||||
std::function< void( void ) > m_get ;
|
||||
};
|
||||
|
||||
class ThreadHelper_1 : public Thread
|
||||
{
|
||||
public:
|
||||
ThreadHelper_1( std::function< void ( void ) >&& function ) : m_function( std::move( function ) )
|
||||
{
|
||||
}
|
||||
future_1& Future( void )
|
||||
{
|
||||
m_future.setActions( [ this ](){ this->start() ; },
|
||||
[ this ](){ this->deleteLater() ; },
|
||||
[ this ](){ m_function() ; this->deleteLater() ; } ) ;
|
||||
return m_future ;
|
||||
}
|
||||
private:
|
||||
~ThreadHelper_1()
|
||||
{
|
||||
m_future.run() ;
|
||||
}
|
||||
void run( void )
|
||||
{
|
||||
m_function() ;
|
||||
}
|
||||
std::function< void ( void ) > m_function ;
|
||||
future_1 m_future ;
|
||||
};
|
||||
|
||||
/*
|
||||
* Below APIs runs two tasks,the first one will run in a different thread and
|
||||
* the second one will be run on the original thread after the completion of the
|
||||
* first one.
|
||||
*/
|
||||
|
||||
template< typename T >
|
||||
future<T>& run( std::function< T ( void ) > function )
|
||||
{
|
||||
auto t = new ThreadHelper<T>( std::move( function ) ) ;
|
||||
return t->Future() ;
|
||||
}
|
||||
|
||||
static inline future_1& run( std::function< void( void ) > function )
|
||||
{
|
||||
auto t = new ThreadHelper_1( std::move( function ) ) ;
|
||||
return t->Future() ;
|
||||
}
|
||||
|
||||
static inline void exec( std::function< void( void ) > function )
|
||||
{
|
||||
Task::run( std::move( function ) ).start() ;
|
||||
}
|
||||
|
||||
/*
|
||||
* Below APIs implements resumable functions where a function will be "blocked"
|
||||
* waiting for the function to return without "hanging" the current thread.
|
||||
*
|
||||
* recommending reading up on C#'s await keyword to get a sense of what is being
|
||||
* discussed below.
|
||||
*/
|
||||
|
||||
static inline void await( Task::future_1& e )
|
||||
{
|
||||
e.await() ;
|
||||
}
|
||||
|
||||
static inline void await( std::function< void( void ) > function )
|
||||
{
|
||||
Task::run( std::move( function ) ).await() ;
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
T await( std::function< T ( void ) > function )
|
||||
{
|
||||
return Task::run<T>( std::move( function ) ).await() ;
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
T await( Task::future<T>& e )
|
||||
{
|
||||
return e.await() ;
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
T await( std::future<T>&& t )
|
||||
{
|
||||
return Task::await<T>( [ & ](){ return t.get() ; } ) ;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
/*
|
||||
* Examples on how to use the library
|
||||
*/
|
||||
/*
|
||||
* templated version that passes a return value of one function to another function
|
||||
*/
|
||||
auto _a = [](){
|
||||
/*
|
||||
* task _a does what task _a does here.
|
||||
*
|
||||
* This function body will run on a different thread
|
||||
*/
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
auto _b = []( int r ){
|
||||
/*
|
||||
*
|
||||
* task _b does what task _b does here.
|
||||
*
|
||||
* r is a const reference to a value returned by _a
|
||||
*
|
||||
* This function body will run on the original thread
|
||||
*/
|
||||
}
|
||||
|
||||
Task::run<int>( _a ).then( _b ) ;
|
||||
|
||||
alternatively,
|
||||
|
||||
Task::future<int>& e = Task::run( _a ) ;
|
||||
|
||||
e.then( _b ) ;
|
||||
|
||||
/*
|
||||
* Non templated version that does not pass around return value
|
||||
*/
|
||||
auto _c = [](){
|
||||
/*
|
||||
* task _a does what task _a does here.
|
||||
*
|
||||
* This function body will run on a different thread
|
||||
*/
|
||||
}
|
||||
|
||||
auto _d = [](){
|
||||
/*
|
||||
* task _b does what task _b does here.
|
||||
*
|
||||
* r is a const reference to a value returned by _a
|
||||
*
|
||||
* This function body will run on the original thread
|
||||
*/
|
||||
}
|
||||
|
||||
Task::run( _c ).then( _d ) ;
|
||||
|
||||
/*
|
||||
* if no continuation
|
||||
*/
|
||||
Task::exec( _c ) ;
|
||||
|
||||
/*
|
||||
* Task::await() is used to "block" without "hanging" the calling thread until the function returns.
|
||||
*
|
||||
* Its use case is to do sync programming without hanging the calling thread.
|
||||
*
|
||||
* example use case for it is to "block" on function in a GUI thread withough blocking the GUI thread
|
||||
* hanging the application.
|
||||
*/
|
||||
|
||||
/*
|
||||
* await example when the called function return no result
|
||||
*/
|
||||
Task::await( _c ) ;
|
||||
|
||||
/*
|
||||
* await example when the called function return a result
|
||||
*/
|
||||
int r = Task::await<int>( _a ) ;
|
||||
|
||||
alternatively,
|
||||
|
||||
Task::future<int>& e = Task::run<int>( _a ) ;
|
||||
|
||||
int r = e.await() ;
|
||||
|
||||
alternatively,
|
||||
|
||||
int r = Task::run<int>( _a ).await() ;
|
||||
|
||||
#endif
|
||||
|
||||
#endif //__TASK_H_INCLUDED__
|
44
sources/3rdparty/task/taskadds.cpp
vendored
44
sources/3rdparty/task/taskadds.cpp
vendored
@ -1,44 +0,0 @@
|
||||
/***************************************************************************
|
||||
* This file is part of netctl-gui *
|
||||
* *
|
||||
* netctl-gui is free software: you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* netctl-gui is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with netctl-gui. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "taskadds.h"
|
||||
|
||||
|
||||
TaskResult runTask(const QString cmd, const bool useSuid)
|
||||
{
|
||||
return Task::await<TaskResult>( [ & ]() {
|
||||
TaskResult r;
|
||||
if (useSuid) {
|
||||
RootProcess command;
|
||||
command.start(cmd);
|
||||
command.waitForFinished(-1);
|
||||
r.exitCode = command.exitCode();
|
||||
r.output = command.readAllStandardOutput();
|
||||
r.error = command.readAllStandardError();
|
||||
} else {
|
||||
QProcess command;
|
||||
command.start(cmd);
|
||||
command.waitForFinished(-1);
|
||||
r.exitCode = command.exitCode();
|
||||
r.output = command.readAllStandardOutput();
|
||||
r.error = command.readAllStandardError();
|
||||
}
|
||||
|
||||
return r;
|
||||
});
|
||||
}
|
47
sources/3rdparty/task/taskadds.h
vendored
47
sources/3rdparty/task/taskadds.h
vendored
@ -1,47 +0,0 @@
|
||||
/***************************************************************************
|
||||
* This file is part of netctl-gui *
|
||||
* *
|
||||
* netctl-gui is free software: you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* netctl-gui is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with netctl-gui. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef TASKADDS_H
|
||||
#define TASKADDS_H
|
||||
|
||||
#include <QProcess>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "task.h"
|
||||
|
||||
|
||||
class RootProcess : public QProcess
|
||||
{
|
||||
protected:
|
||||
void setupChildProcess()
|
||||
{
|
||||
::setuid(0);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
struct TaskResult
|
||||
{
|
||||
int exitCode;
|
||||
QByteArray error;
|
||||
QByteArray output;
|
||||
};
|
||||
TaskResult runTask(const QString cmd, const bool useSuid = true);
|
||||
|
||||
|
||||
#endif /* TASKADDS_H */
|
1
sources/3rdparty/tasks
vendored
Submodule
1
sources/3rdparty/tasks
vendored
Submodule
Submodule sources/3rdparty/tasks added at 230bdecd2c
@ -11,7 +11,7 @@ set (PROJECT_CONTACT "esalexeev@gmail.com")
|
||||
set (PROJECT_LICENSE "GPLv3")
|
||||
set (PROJECT_VERSION_MAJOR 1)
|
||||
set (PROJECT_VERSION_MINOR 3)
|
||||
set (PROJECT_VERSION_PATCH 0)
|
||||
set (PROJECT_VERSION_PATCH 3)
|
||||
set (PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
|
||||
string (TIMESTAMP CURRENT_DATE "%Y-%m-%d %H:%M" UTC)
|
||||
string (TIMESTAMP CURRENT_YEAR "%Y")
|
||||
|
@ -46,6 +46,7 @@ Netctl::Netctl(QObject *parent, const QVariantList &args)
|
||||
|
||||
setMinimumPollingInterval(333);
|
||||
readConfiguration();
|
||||
initSources();
|
||||
}
|
||||
|
||||
|
||||
@ -185,6 +186,8 @@ QString Netctl::getExtIp(const QString cmd)
|
||||
if (debug) qDebug() << PDEBUG;
|
||||
if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd;
|
||||
|
||||
// test network connection
|
||||
if (!isNetworkActive()) return QString("N\\A");
|
||||
TaskResult process = runTask(cmd);
|
||||
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
|
||||
if (process.exitCode != 0)
|
||||
@ -317,6 +320,32 @@ QString Netctl::getStatus(const QString cmdNetctl, const QString cmdNetctlAuto)
|
||||
}
|
||||
|
||||
|
||||
void Netctl::initSources()
|
||||
{
|
||||
if (debug) qDebug() << PDEBUG;
|
||||
|
||||
QStringList sourcesList = sources();
|
||||
for (int i=0; i<sourcesList.count(); i++)
|
||||
setData(sourcesList[i], QString("value"), QString("N\\A"));
|
||||
}
|
||||
|
||||
|
||||
bool Netctl::isNetworkActive()
|
||||
{
|
||||
if (debug) qDebug() << PDEBUG;
|
||||
|
||||
QString cmd = QString("ping -c 1 google.com");
|
||||
if (debug) qDebug() << PDEBUG << ":" << "Cmd" << cmd;
|
||||
TaskResult process = runTask(cmd);
|
||||
if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode;
|
||||
|
||||
if (process.exitCode == 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Netctl::updateSourceEvent(const QString &source)
|
||||
{
|
||||
if (debug) qDebug() << PDEBUG;
|
||||
|
@ -37,6 +37,10 @@ public:
|
||||
QStringList getProfileList(const QString cmdNetctl, const QString cmdNetctlAuto);
|
||||
QStringList getProfileStringStatus(const QString cmdNetctl, const QString cmdNetctlAuto);
|
||||
QString getStatus(const QString cmdNetctl, const QString cmdNetctlAuto);
|
||||
bool isNetworkActive();
|
||||
|
||||
public slots:
|
||||
void initSources();
|
||||
|
||||
protected:
|
||||
bool sourceRequestEvent(const QString &name);
|
||||
|
@ -1,3 +1,4 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
@ -20,26 +21,26 @@ th {
|
||||
th.sub {
|
||||
font-style: italic;
|
||||
font-weight: normal;
|
||||
}
|
||||
small {
|
||||
font-size: 70%;
|
||||
}
|
||||
</style>
|
||||
<h1>netctl-gui DBus API description</h1>
|
||||
<h3>Project version : @PROJECT_VERSION@</h3>
|
||||
<ol>
|
||||
<li><a href="#api">DBus API</a></li>
|
||||
<li><a href="#helper">Helper API</a></li>
|
||||
<ul>
|
||||
<li><a href="#ctrl">Helper ctrl API</a></li>
|
||||
<li><a href="#netctl">Helper netctl API</a></li>
|
||||
</ul>
|
||||
<li><a href="#gui">GUI API</a></li>
|
||||
<ul>
|
||||
<li><a href="#netctlgui">GUI netctlgui API</a></li>
|
||||
</ul>
|
||||
<li><a href="#links">External links</a></li>
|
||||
</ol>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>netctl-gui DBus API description</h1>
|
||||
<h3>Project version : @PROJECT_VERSION@</h3>
|
||||
<ol>
|
||||
<li><a href="#api">DBus API</a></li>
|
||||
<li><a href="#helper">Helper API</a></li>
|
||||
<li><a href="#ctrl">Helper ctrl API</a></li>
|
||||
<li><a href="#netctl">Helper netctl API</a></li>
|
||||
<li><a href="#gui">GUI API</a></li>
|
||||
<li><a href="#netctlgui">GUI netctlgui API</a></li>
|
||||
<li><a href="#links">External links</a></li>
|
||||
</ol>
|
||||
|
||||
<h2><a href="#api" class="anchor" id="api"></a>DBus API</h2>
|
||||
<table>
|
||||
<tbody><tr>
|
||||
@ -371,10 +372,10 @@ th.sub {
|
||||
<li><a href="https://github.com/arcan1s/netctl-gui/issues">Bugtracker</a></li>
|
||||
</ul>
|
||||
|
||||
<p align="center" style="font-size: 70%">
|
||||
<small>
|
||||
© 2014-@CURRENT_YEAR@ <a href="mailto:@PROJECT_CONTACT@">@PROJECT_AUTHOR@</a><br>
|
||||
This software is licensed under @PROJECT_LICENSE@
|
||||
</p>
|
||||
</small>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,47 +1,54 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>netctl-gui secutiry notes</title>
|
||||
<style type="text/css">
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
small {
|
||||
font-size: 70%;
|
||||
}
|
||||
</style>
|
||||
<h1>netctl-gui security notes</h1>
|
||||
<h3>Project version : @PROJECT_VERSION@</h3>
|
||||
<ol>
|
||||
<li><a href="#description">Description</a></li>
|
||||
<li><a href="#arch">Architecture</a></li>
|
||||
<li><a href="#library">Library</a></li>
|
||||
<li><a href="#helper">Helper</a></li>
|
||||
<li><a href="#gui">Graphical interface</a></li>
|
||||
<li><a href="#kde">KDE components</a></li>
|
||||
<li><a href="#links">External links</a></li>
|
||||
</ol>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>netctl-gui security notes</h1>
|
||||
<h3>Project version : @PROJECT_VERSION@</h3>
|
||||
<ol>
|
||||
<li><a href="#arch">Architecture</a></li>
|
||||
<li><a href="#library">Library</a></li>
|
||||
<li><a href="#helper">Helper</a></li>
|
||||
<li><a href="#gui">Graphical interface</a></li>
|
||||
<li><a href="#kde">KDE components</a></li>
|
||||
<li><a href="#links">External links</a></li>
|
||||
</ol>
|
||||
|
||||
<h2><a href="#description" class="anchor" id="description"></a>Description</h2>
|
||||
<p></p>
|
||||
|
||||
<h2><a href="#arch" class="anchor" id="arch"></a>Architecture</h2>
|
||||
<img src="architecture.png" alt="architecture" align="middle">
|
||||
<img src="architecture.png" alt="architecture">
|
||||
|
||||
<h2><a href="#library" class="anchor" id="library"></a>Library</h2>
|
||||
<p>According to <a href="#arch">the scheme<a> the library gets information from netctl and can control it. Also it provides some additional functions such as a profile creation and removal and access to wpa_supplicant functions. Some functions do not require additional permissions, but other ones do it. All dynamic arguments including profile names and paths are in double quotes to avoid white spaces problem. The functions which <b>require</b> root privileges are:</p>
|
||||
<p>According to <a href="#arch">the scheme</a> the library gets information from netctl and can control it. Also it provides some additional functions such as a profile creation and removal and access to wpa_supplicant functions. Some functions do not require additional permissions, but other ones do it. All dynamic arguments including profile names and paths are in double quotes to avoid white spaces problem. The functions which <b>require</b> root privileges are:</p>
|
||||
<ul>
|
||||
<li>Netctl control module</li>
|
||||
<ul>
|
||||
<li><ul>
|
||||
<li><code>netctl stop-all|start|stop|restart|switch-to|enable|disable|reenable <profile></code>. They are commands which provide a general control to netctl.</li>
|
||||
<li><code>systemctl start|restart|enable <netctl-auto@service></code>. They are commands which provide ability to control netctl-auto systemd service.</li>
|
||||
</ul>
|
||||
</ul></li>
|
||||
<li>Netctl profiles module</li>
|
||||
<ul>
|
||||
<li><ul>
|
||||
<li>Copying of a temporary profile from home directory to netctl profiles directory. <code>cp</code> command is used for it.</li>
|
||||
<li>Removal of a profile. <code>rm</code> command is used for it.</li>
|
||||
</ul>
|
||||
</ul></li>
|
||||
<li>WiFi module</li>
|
||||
<ul>
|
||||
<li><ul>
|
||||
<li>This module require root privileges to start <code>wpa_supplicant</code> only. For the futher interaction user must be in <code>CTRL_GROUP</code>.</li>
|
||||
</ul>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>If library will be initialized with <code>FORCE_SUDO=true</code> than it will use <code>sudo</code> command (which can be transferred to the library by <code>SUDO_PATH</code> option). Otherwise it will try to set UID of children processes to 0. Please note that <code>sudo</code> command and UID setting will be used only for those commands which require it.</p>
|
||||
@ -96,10 +103,10 @@ env -i bash -c "source '<profile>'; for i in ${!<key>[@]}; do ec
|
||||
<li><a href="https://github.com/arcan1s/netctl-gui/issues">Bugtracker</a></li>
|
||||
</ul>
|
||||
|
||||
<p align="center" style="font-size: 70%">
|
||||
<small>
|
||||
© 2014-@CURRENT_YEAR@ <a href="mailto:@PROJECT_CONTACT@">@PROJECT_AUTHOR@</a><br>
|
||||
This software is licensed under @PROJECT_LICENSE@
|
||||
</p>
|
||||
</small>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -43,7 +43,7 @@ bool existingSessionOperation(const QString operation)
|
||||
QDBusMessage response = bus.call(request);
|
||||
QList<QVariant> arguments = response.arguments();
|
||||
|
||||
return !arguments.isEmpty();
|
||||
return (!arguments.isEmpty() && bool(arguments[0].toInt()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <QDesktopServices>
|
||||
#include <QFileDialog>
|
||||
#include <QFileInfo>
|
||||
#include <QMenu>
|
||||
#include <QUrl>
|
||||
|
||||
#include <pdebug/pdebug.h>
|
||||
@ -163,16 +164,16 @@ void MainWindow::updateToolBars()
|
||||
{
|
||||
if (debug) qDebug() << PDEBUG;
|
||||
|
||||
if (sender() == toolBarActions[QString("menu")]) {
|
||||
if (sender() == ui->pushButton_menu) {
|
||||
mainToolBar->setHidden(false);
|
||||
actionToolBar->setHidden(true);
|
||||
helpToolBar->setHidden(true);
|
||||
} else if (sender() == toolBarActions[QString("actions")]) {
|
||||
} else if (sender() == ui->pushButton_action) {
|
||||
mainToolBar->setHidden(true);
|
||||
actionToolBar->setHidden(false);
|
||||
helpToolBar->setHidden(true);
|
||||
updateMenu();
|
||||
} else if (sender() == toolBarActions[QString("help")]) {
|
||||
} else if (sender() == ui->pushButton_help) {
|
||||
mainToolBar->setHidden(true);
|
||||
actionToolBar->setHidden(true);
|
||||
helpToolBar->setHidden(false);
|
||||
|
@ -361,6 +361,7 @@ void MainWindow::updateConfiguration(const QMap<QString, QVariant> args)
|
||||
|
||||
createObjects();
|
||||
createActions();
|
||||
createToolBars();
|
||||
|
||||
// tray
|
||||
if ((QSystemTrayIcon::isSystemTrayAvailable()) &&
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusMessage>
|
||||
#include <QDebug>
|
||||
#include <QMenu>
|
||||
|
||||
#include <pdebug/pdebug.h>
|
||||
#include <task/taskadds.h>
|
||||
@ -234,7 +235,7 @@ bool MainWindow::isHelperActive()
|
||||
DBUS_HELPER_INTERFACE, QString("Active"),
|
||||
QList<QVariant>(), true, debug);
|
||||
|
||||
return (!responce.isEmpty());
|
||||
return (!responce.isEmpty() && bool(responce[0].toInt()));
|
||||
}
|
||||
|
||||
|
||||
@ -345,6 +346,9 @@ void MainWindow::createActions()
|
||||
if (debug) qDebug() << PDEBUG;
|
||||
|
||||
connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(updateTabs(int)));
|
||||
connect(ui->pushButton_menu, SIGNAL(clicked(bool)), this, SLOT(updateToolBars()));
|
||||
connect(ui->pushButton_action, SIGNAL(clicked(bool)), this, SLOT(updateToolBars()));
|
||||
connect(ui->pushButton_help, SIGNAL(clicked(bool)), this, SLOT(updateToolBars()));
|
||||
|
||||
// main tab events
|
||||
connect(ui->pushButton_netctlAuto, SIGNAL(clicked(bool)), this, SLOT(showNetctlAutoWindow()));
|
||||
@ -437,8 +441,6 @@ void MainWindow::createObjects()
|
||||
ui->scrollAreaWidgetContents->layout()->addWidget(vlanWid);
|
||||
wirelessWid = new WirelessWidget(this, configuration);
|
||||
ui->scrollAreaWidgetContents->layout()->addWidget(wirelessWid);
|
||||
|
||||
createToolBars();
|
||||
}
|
||||
|
||||
|
||||
@ -446,13 +448,6 @@ void MainWindow::createToolBars()
|
||||
{
|
||||
if (debug) qDebug() << PDEBUG;
|
||||
|
||||
toolBarActions[QString("menu")] = ui->menuBar->addAction(QApplication::translate("MainWindow", "Menu"),
|
||||
this, SLOT(updateToolBars()));
|
||||
toolBarActions[QString("actions")] = ui->menuBar->addAction(QApplication::translate("MainWindow", "Actions"),
|
||||
this, SLOT(updateToolBars()));
|
||||
toolBarActions[QString("help")] = ui->menuBar->addAction(QApplication::translate("MainWindow", "Help"),
|
||||
this, SLOT(updateToolBars()));
|
||||
|
||||
mainToolBar = new QToolBar(this);
|
||||
mainToolBar->setToolButtonStyle(Qt::ToolButtonFollowStyle);
|
||||
toolBarActions[QString("netctlAuto")] = mainToolBar->addAction(QApplication::translate("MainWindow", "netctl-auto"),
|
||||
@ -467,7 +462,7 @@ void MainWindow::createToolBars()
|
||||
this, SLOT(closeMainWindow()));
|
||||
appShortcuts[QString("quitShortcut")] = new QShortcut(QKeySequence(QApplication::translate("MainWindow", "Ctrl+Q")),
|
||||
this, SLOT(closeMainWindow()));
|
||||
ui->centralLayout->insertWidget(0, mainToolBar);
|
||||
ui->centralLayout->insertWidget(1, mainToolBar);
|
||||
mainToolBar->setHidden(true);
|
||||
|
||||
actionToolBar = new QToolBar(this);
|
||||
@ -522,7 +517,7 @@ void MainWindow::createToolBars()
|
||||
toolBarActions[QString("profileRemove")] = actionToolBar->addAction(QIcon::fromTheme(QString("edit-delete")),
|
||||
QApplication::translate("MainWindow", "Remove"),
|
||||
this, SLOT(profileTabRemoveProfile()));
|
||||
ui->centralLayout->insertWidget(0, actionToolBar);
|
||||
ui->centralLayout->insertWidget(1, actionToolBar);
|
||||
actionToolBar->setHidden(true);
|
||||
|
||||
helpToolBar = new QToolBar(this);
|
||||
@ -541,10 +536,10 @@ void MainWindow::createToolBars()
|
||||
toolBarActions[QString("about")] = helpToolBar->addAction(QIcon::fromTheme(QString("help-about")),
|
||||
QApplication::translate("MainWindow", "About"),
|
||||
this, SLOT(showAboutWindow()));
|
||||
ui->centralLayout->insertWidget(0, helpToolBar);
|
||||
ui->centralLayout->insertWidget(1, helpToolBar);
|
||||
helpToolBar->setHidden(true);
|
||||
|
||||
toolBarActions[QString("menu")]->trigger();
|
||||
ui->pushButton_menu->click();
|
||||
}
|
||||
|
||||
|
||||
@ -593,10 +588,7 @@ void MainWindow::deleteObjects()
|
||||
delete appShortcuts[QString("quitShortcut")];
|
||||
}
|
||||
if (trayIcon != nullptr) delete trayIcon;
|
||||
if (ui != nullptr) {
|
||||
ui->menuBar->clear();
|
||||
delete ui;
|
||||
}
|
||||
if (ui != nullptr) delete ui;
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,6 +15,40 @@
|
||||
</property>
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<layout class="QVBoxLayout" name="centralLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_menus">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_menu">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: none;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Menu</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_action">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: none;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Actions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_help">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: none;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Help</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
@ -157,7 +191,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>437</width>
|
||||
<height>371</height>
|
||||
<height>368</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@ -251,16 +285,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>469</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusBar"/>
|
||||
</widget>
|
||||
<tabstops>
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>680</width>
|
||||
<height>397</height>
|
||||
<width>678</width>
|
||||
<height>395</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -73,7 +73,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../resources/resources.qrc">
|
||||
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
|
||||
<normaloff>:/icon-helper.png</normaloff>:/icon-helper.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
@ -136,8 +136,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>464</width>
|
||||
<height>336</height>
|
||||
<width>462</width>
|
||||
<height>330</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
@ -218,8 +218,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>397</width>
|
||||
<height>256</height>
|
||||
<width>462</width>
|
||||
<height>330</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||
@ -389,7 +389,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>436</width>
|
||||
<height>165</height>
|
||||
<height>173</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
@ -576,7 +576,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>436</width>
|
||||
<height>43</height>
|
||||
<height>45</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
@ -646,7 +646,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>277</width>
|
||||
<height>190</height>
|
||||
<height>194</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
@ -843,7 +843,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>436</width>
|
||||
<height>103</height>
|
||||
<height>107</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_11">
|
||||
|
@ -25,6 +25,7 @@ _netctlgui_helper_arglist=(
|
||||
'--nodaemon'
|
||||
'--replace'
|
||||
'--restore'
|
||||
'--session'
|
||||
'--system'
|
||||
'-v'
|
||||
'--version'
|
||||
|
@ -23,6 +23,8 @@ do not run as daemon
|
||||
force replace the existing session
|
||||
.IP "--restore"
|
||||
force restore the existing session
|
||||
.IP "--session"
|
||||
force create user DBus session
|
||||
.IP "--system"
|
||||
do not read user configuration
|
||||
.IP "-v, --version"
|
||||
|
@ -1,9 +1,11 @@
|
||||
[Unit]
|
||||
Description=netctlgui-helper daemon
|
||||
Documentation=man:netctlgui-helper(1) man:netctl-gui.conf(5)
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
ExecStart=/usr/bin/netctlgui-helper --system
|
||||
Type=dbus
|
||||
BusName=org.netctlgui.helper
|
||||
ExecStart=/usr/bin/netctlgui-helper --nodaemon --system
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
@ -47,8 +47,8 @@ else ()
|
||||
set (TRANSLATIONS_BINARY ${TRANSLATIONS_BINARY} ${QM})
|
||||
add_custom_command (OUTPUT ${QM} COMMAND ${QT_LRELEASE_EXECUTABLE} ${TS} MAIN_DEPENDENCY ${TS})
|
||||
endforeach ()
|
||||
add_custom_target (translations-header COMMAND ${QT_LUPDATE_EXECUTABLE} ${HEADERS} ${SOURCES} -ts ${TRANSLATIONS})
|
||||
add_custom_command (TARGET translations-header COMMAND ${QT_LRELEASE_EXECUTABLE} ${TRANSLATIONS})
|
||||
add_custom_target (translations-helper COMMAND ${QT_LUPDATE_EXECUTABLE} ${HEADERS} ${SOURCES} -ts ${TRANSLATIONS})
|
||||
add_custom_command (TARGET translations-helper COMMAND ${QT_LRELEASE_EXECUTABLE} ${TRANSLATIONS})
|
||||
endif()
|
||||
|
||||
add_executable (${SUBPROJECT} ${SOURCES} ${HEADERS} ${MOC_SOURCES} ${QRC_SOURCES} ${TRANSLATIONS})
|
||||
|
@ -43,7 +43,7 @@ bool existingSessionOperation(const QString operation)
|
||||
QDBusMessage response = bus.call(request);
|
||||
QList<QVariant> arguments = response.arguments();
|
||||
|
||||
return !arguments.isEmpty();
|
||||
return (!arguments.isEmpty() && bool(arguments[0].toInt()));
|
||||
}
|
||||
|
||||
|
||||
@ -68,6 +68,9 @@ int main(int argc, char *argv[])
|
||||
} else if (QString(argv[i]) == QString("--restore")) {
|
||||
// restore
|
||||
args[QString("state")] = (int) 2;
|
||||
} else if (QString(argv[i]) == QString("--session")) {
|
||||
// session
|
||||
args[QString("session")] = true;
|
||||
} else if (QString(argv[i]) == QString("--system")) {
|
||||
// system
|
||||
args[QString("system")] = true;
|
||||
@ -96,6 +99,7 @@ int main(int argc, char *argv[])
|
||||
.arg(QString::number(geteuid())).toUtf8().data() << endl;
|
||||
cout << QCoreApplication::translate("NetctlHelper", "See security notes for more details.")
|
||||
.toUtf8().data() << endl;
|
||||
args[QString("session")] = true;
|
||||
}
|
||||
|
||||
#if QT_VERSION >= 0x050000
|
||||
|
@ -37,6 +37,7 @@ QMap<QString, QVariant> getArgs()
|
||||
args[QString("config")] = QString(QDir::homePath() + QString("/.config/netctl-gui.conf"));
|
||||
args[QString("debug")] = false;
|
||||
args[QString("nodaemon")] = false;
|
||||
args[QString("session")] = false;
|
||||
args[QString("state")] = (int) 0;
|
||||
args[QString("system")] = false;
|
||||
args[QString("help")] = false;
|
||||
@ -65,6 +66,8 @@ QString helpMessage()
|
||||
.arg(QCoreApplication::translate("NetctlHelper", "force replace the existing session"));
|
||||
helpMessage += QString(" --restore - %1\n")
|
||||
.arg(QCoreApplication::translate("NetctlHelper", "force restore the existing session"));
|
||||
helpMessage += QString(" --session - %1\n")
|
||||
.arg(QCoreApplication::translate("NetctlHelper", "force create user DBus session"));
|
||||
helpMessage += QString(" --system - %1\n")
|
||||
.arg(QCoreApplication::translate("NetctlHelper", "do not read user configuration, system-wide only"));
|
||||
helpMessage += QString(" %1\n").arg(QCoreApplication::translate("NetctlHelper", "Show messages:"));
|
||||
|
@ -35,6 +35,7 @@ NetctlHelper::NetctlHelper(QObject *parent, QMap<QString, QVariant> args)
|
||||
: QObject(parent),
|
||||
configPath(args[QString("config")].toString()),
|
||||
debug(args[QString("debug")].toBool()),
|
||||
session(args[QString("session")].toBool()),
|
||||
system(args[QString("system")].toBool())
|
||||
{
|
||||
updateConfiguration();
|
||||
@ -88,6 +89,25 @@ void NetctlHelper::createInterface()
|
||||
if (debug) qDebug() << PDEBUG << ":" << bus.lastError().message();
|
||||
return quitHelper();
|
||||
}
|
||||
// session bus
|
||||
if (!session) return;
|
||||
QDBusConnection sessionBus = QDBusConnection::sessionBus();
|
||||
if (!sessionBus.registerService(DBUS_HELPER_SERVICE)) {
|
||||
if (debug) qDebug() << PDEBUG << ":" << "Could not register session service";
|
||||
if (debug) qDebug() << PDEBUG << ":" << sessionBus.lastError().message();
|
||||
}
|
||||
if (!sessionBus.registerObject(DBUS_LIB_PATH,
|
||||
new NetctlAdaptor(this, debug, configuration),
|
||||
QDBusConnection::ExportAllContents)) {
|
||||
if (debug) qDebug() << PDEBUG << ":" << "Could not register session library object";
|
||||
if (debug) qDebug() << PDEBUG << ":" << sessionBus.lastError().message();
|
||||
}
|
||||
if (!sessionBus.registerObject(DBUS_CTRL_PATH,
|
||||
new ControlAdaptor(this, debug, configuration),
|
||||
QDBusConnection::ExportAllContents)) {
|
||||
if (debug) qDebug() << PDEBUG << ":" << "Could not register session control object";
|
||||
if (debug) qDebug() << PDEBUG << ":" << sessionBus.lastError().message();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -98,6 +118,11 @@ void NetctlHelper::deleteInterface()
|
||||
QDBusConnection::systemBus().unregisterObject(DBUS_LIB_PATH);
|
||||
QDBusConnection::systemBus().unregisterObject(DBUS_CTRL_PATH);
|
||||
QDBusConnection::systemBus().unregisterService(DBUS_HELPER_SERVICE);
|
||||
// session bus
|
||||
if (!session) return;
|
||||
QDBusConnection::sessionBus().unregisterObject(DBUS_LIB_PATH);
|
||||
QDBusConnection::sessionBus().unregisterObject(DBUS_CTRL_PATH);
|
||||
QDBusConnection::sessionBus().unregisterService(DBUS_HELPER_SERVICE);
|
||||
}
|
||||
|
||||
|
||||
|
@ -41,6 +41,7 @@ private:
|
||||
QString configPath;
|
||||
QMap<QString, QString> configuration;
|
||||
bool debug;
|
||||
bool session;
|
||||
bool system;
|
||||
void createInterface();
|
||||
void deleteInterface();
|
||||
|
@ -24,6 +24,7 @@ _netctlgui_helper_arglist=(
|
||||
{'--nodaemon','--nodaemon'}'[do not start as daemon]'
|
||||
{'--replace','--replace'}'[force replace the existing session]'
|
||||
{'--restore','--restore'}'[force restore the existing session]'
|
||||
{'--session','--session'}'[force create user DBus session]'
|
||||
{'--system','--system'}'[do not read user configuration]'
|
||||
{'(--version)-v','(-v)--version'}'[show version and exit]'
|
||||
{'(--info)-i','(-i)--info'}'[show build information and exit]'
|
||||
|
@ -1,5 +1,5 @@
|
||||
[Global]
|
||||
IconName=netctl-gui
|
||||
IconName=netctl-gui-widget
|
||||
Name=Netctl plasmoid
|
||||
Comment=Netctl plasmoid popups
|
||||
|
||||
|
422
sources/plasmoid/po/ja.po
Normal file
422
sources/plasmoid/po/ja.po
Normal file
@ -0,0 +1,422 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# NOGISAKA Sadata <ngsksdt@gmail.com>, 2014.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/netctl-gui/issues\n"
|
||||
"POT-Creation-Date: 2014-08-24 16:44+0400\n"
|
||||
"PO-Revision-Date: 2014-10-13 16:37+0900\n"
|
||||
"Last-Translator: NOGISAKA Sadata <ngsksdt@gmail.com>\n"
|
||||
"Language-Team: Japanese <kde-i18n-doc@kde.org>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
|
||||
#: netctl.cpp:270
|
||||
msgid "Set profile %1 disabled"
|
||||
msgstr "プロファイル %1 を無効にする"
|
||||
|
||||
#: netctl.cpp:273
|
||||
msgid "Set profile %1 enabled"
|
||||
msgstr "プロファイル %1 を有効にする"
|
||||
|
||||
#: netctl.cpp:294
|
||||
msgid "Restart profile %1"
|
||||
msgstr "プロファイル %1 の利用を再開"
|
||||
|
||||
#: netctl.cpp:315
|
||||
msgid "Start profile %1"
|
||||
msgstr "プロファイル %1 の利用を開始"
|
||||
|
||||
#: netctl.cpp:341
|
||||
msgid "Stop profile %1"
|
||||
msgstr "プロファイル %1 の利用を停止する"
|
||||
|
||||
#: netctl.cpp:361 netctl.cpp:499
|
||||
msgid "Stop all profiles"
|
||||
msgstr "全てのプロファイルの利用を停止する"
|
||||
|
||||
#: netctl.cpp:381
|
||||
msgid "Switch to profile %1"
|
||||
msgstr "プロファイルを %1 へ切り替える"
|
||||
|
||||
#: netctl.cpp:454
|
||||
msgid "Start another profile"
|
||||
msgstr "他のプロファイルの利用を開始"
|
||||
|
||||
#: netctl.cpp:455
|
||||
msgid "Stop %1"
|
||||
msgstr "%1 を停止"
|
||||
|
||||
#: netctl.cpp:456
|
||||
msgid "Restart %1"
|
||||
msgstr "%1 を再開"
|
||||
|
||||
#: netctl.cpp:458
|
||||
msgid "Disable %1"
|
||||
msgstr "%1 を無効にする"
|
||||
|
||||
#: netctl.cpp:460
|
||||
msgid "Enable %1"
|
||||
msgstr "%1 を有効にする"
|
||||
|
||||
#: netctl.cpp:463 netctl.cpp:486
|
||||
msgid "Start profile"
|
||||
msgstr "プロファイルの利用を開始"
|
||||
|
||||
#: netctl.cpp:494
|
||||
msgid "Stop profile"
|
||||
msgstr "プロファイルの利用を停止する"
|
||||
|
||||
#: netctl.cpp:504
|
||||
msgid "Switch to profile"
|
||||
msgstr "プロファイルを切り替える"
|
||||
|
||||
#: netctl.cpp:512
|
||||
msgid "Restart profile"
|
||||
msgstr "プロファイルの利用を再開"
|
||||
|
||||
#: netctl.cpp:517
|
||||
msgid "Enable profile"
|
||||
msgstr "プロファイルを有効にする"
|
||||
|
||||
#: netctl.cpp:521
|
||||
msgid "Show netctl-gui"
|
||||
msgstr "netctl-gui を表示"
|
||||
|
||||
#: netctl.cpp:526
|
||||
msgid "Show WiFi menu"
|
||||
msgstr "WiFi メニューを表示"
|
||||
|
||||
#: netctl.cpp:553
|
||||
msgid "Start GUI"
|
||||
msgstr "GUI を開始"
|
||||
|
||||
#: netctl.cpp:564
|
||||
msgid "Start WiFi menu"
|
||||
msgstr "WiFi メニューを開始"
|
||||
|
||||
#: netctl.cpp:604
|
||||
msgid "Network is up"
|
||||
msgstr "ネットワークは有効です"
|
||||
|
||||
#: netctl.cpp:608
|
||||
msgid "Network is down"
|
||||
msgstr "ネットワークは無効です"
|
||||
|
||||
#: netctl.cpp:798
|
||||
msgid ""
|
||||
"Version %1\n"
|
||||
"(build date %2)"
|
||||
msgstr ""
|
||||
"バージョン:%1\n"
|
||||
"(ビルド日時:%2)"
|
||||
|
||||
#: netctl.cpp:799
|
||||
msgid "KDE widget which interacts with netctl."
|
||||
msgstr "netctl と連携する KDE ウィジェット"
|
||||
|
||||
#: netctl.cpp:800
|
||||
msgid "Links:"
|
||||
msgstr "リンク:"
|
||||
|
||||
#: netctl.cpp:801
|
||||
msgid "Homepage"
|
||||
msgstr "ホームページ"
|
||||
|
||||
#: netctl.cpp:802
|
||||
msgid "Repository"
|
||||
msgstr "レポジトリ"
|
||||
|
||||
#: netctl.cpp:803
|
||||
msgid "Bugtracker"
|
||||
msgstr "バグトラッカ"
|
||||
|
||||
#: netctl.cpp:804
|
||||
msgid "Translation issue"
|
||||
msgstr "翻訳に関する issue"
|
||||
|
||||
#: netctl.cpp:805
|
||||
msgid "AUR packages"
|
||||
msgstr "AUR パッケージ"
|
||||
|
||||
#: netctl.cpp:807
|
||||
msgid "This software is licensed under %1"
|
||||
msgstr "このソフトウェアは %1 の下で許諾されます"
|
||||
|
||||
#: netctl.cpp:815
|
||||
msgid "Translators: %1"
|
||||
msgstr "翻訳者:%1"
|
||||
|
||||
#: netctl.cpp:816
|
||||
msgid "This software uses: %1"
|
||||
msgstr "このソフトウェアは次を利用しています:%1"
|
||||
|
||||
#: netctl.cpp:818
|
||||
msgid "Netctl plasmoid"
|
||||
msgstr "Netctl plasmoid"
|
||||
|
||||
#: netctl.cpp:819
|
||||
msgid "Appearance"
|
||||
msgstr "外観"
|
||||
|
||||
#: netctl.cpp:820
|
||||
msgid "DataEngine"
|
||||
msgstr "DataEngine"
|
||||
|
||||
#: netctl.cpp:821
|
||||
msgid "About"
|
||||
msgstr "概要"
|
||||
|
||||
#. i18n: file: appearance.ui:47
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_inactiveIcon)
|
||||
#: po/rc.cpp:3 rc.cpp:3
|
||||
msgid "Inactive icon"
|
||||
msgstr "非アクティブ時のアイコン"
|
||||
|
||||
#. i18n: file: appearance.ui:63
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_inactiveIcon)
|
||||
#. i18n: file: appearance.ui:391
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_activeIcon)
|
||||
#. i18n: file: dataengine.ui:50
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctl)
|
||||
#. i18n: file: dataengine.ui:83
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctlAuto)
|
||||
#. i18n: file: dataengine.ui:119
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_extIp4)
|
||||
#. i18n: file: dataengine.ui:155
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_extIp6)
|
||||
#. i18n: file: widget.ui:108
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_gui)
|
||||
#. i18n: file: widget.ui:144
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_helper)
|
||||
#. i18n: file: widget.ui:177
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctl)
|
||||
#. i18n: file: widget.ui:210
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctlAuto)
|
||||
#. i18n: file: widget.ui:246
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_sudo)
|
||||
#. i18n: file: widget.ui:282
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_wifi)
|
||||
#. i18n: file: appearance.ui:63
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_inactiveIcon)
|
||||
#. i18n: file: appearance.ui:391
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_activeIcon)
|
||||
#. i18n: file: dataengine.ui:50
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctl)
|
||||
#. i18n: file: dataengine.ui:83
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctlAuto)
|
||||
#. i18n: file: dataengine.ui:119
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_extIp4)
|
||||
#. i18n: file: dataengine.ui:155
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_extIp6)
|
||||
#. i18n: file: widget.ui:108
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_gui)
|
||||
#. i18n: file: widget.ui:144
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_helper)
|
||||
#. i18n: file: widget.ui:177
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctl)
|
||||
#. i18n: file: widget.ui:210
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_netctlAuto)
|
||||
#. i18n: file: widget.ui:246
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_sudo)
|
||||
#. i18n: file: widget.ui:282
|
||||
#. i18n: ectx: property (text), widget (QPushButton, pushButton_wifi)
|
||||
#: po/rc.cpp:6 po/rc.cpp:42 po/rc.cpp:54 po/rc.cpp:60 po/rc.cpp:66
|
||||
#: po/rc.cpp:72 po/rc.cpp:81 po/rc.cpp:87 po/rc.cpp:93 po/rc.cpp:99
|
||||
#: po/rc.cpp:105 po/rc.cpp:111 rc.cpp:6 rc.cpp:42 rc.cpp:54 rc.cpp:60
|
||||
#: rc.cpp:66 rc.cpp:72 rc.cpp:81 rc.cpp:87 rc.cpp:93 rc.cpp:99 rc.cpp:105
|
||||
#: rc.cpp:111
|
||||
msgid "Browse"
|
||||
msgstr "参照"
|
||||
|
||||
#. i18n: file: appearance.ui:80
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_fontColor)
|
||||
#: po/rc.cpp:9 rc.cpp:9
|
||||
msgid "Font color"
|
||||
msgstr "フォントの色"
|
||||
|
||||
#. i18n: file: appearance.ui:112
|
||||
#. i18n: ectx: property (toolTip), widget (KColorCombo, kcolorcombo_fontColor)
|
||||
#: po/rc.cpp:12 rc.cpp:12
|
||||
msgid "Set font color"
|
||||
msgstr "フォントの色を設定する"
|
||||
|
||||
#. i18n: file: appearance.ui:142
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_fontSize)
|
||||
#: po/rc.cpp:15 rc.cpp:15
|
||||
msgid "Font size"
|
||||
msgstr "フォントの大きさ"
|
||||
|
||||
#. i18n: file: appearance.ui:174
|
||||
#. i18n: ectx: property (toolTip), widget (QSpinBox, spinBox_fontSize)
|
||||
#: po/rc.cpp:18 rc.cpp:18
|
||||
msgid "Set font size"
|
||||
msgstr "フォントの大きさを設定する"
|
||||
|
||||
#. i18n: file: appearance.ui:203
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_fontWeight)
|
||||
#: po/rc.cpp:21 rc.cpp:21
|
||||
msgid "Font weight"
|
||||
msgstr "フォントの太さ"
|
||||
|
||||
#. i18n: file: appearance.ui:235
|
||||
#. i18n: ectx: property (toolTip), widget (QSpinBox, spinBox_fontWeight)
|
||||
#: po/rc.cpp:24 rc.cpp:24
|
||||
msgid "Set font weight"
|
||||
msgstr "フォントの太さを設定する"
|
||||
|
||||
#. i18n: file: appearance.ui:267
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_fontStyle)
|
||||
#: po/rc.cpp:27 rc.cpp:27
|
||||
msgid "Font style"
|
||||
msgstr "フォントの字形"
|
||||
|
||||
#. i18n: file: appearance.ui:299
|
||||
#. i18n: ectx: property (toolTip), widget (QComboBox, comboBox_fontStyle)
|
||||
#: po/rc.cpp:30 rc.cpp:30
|
||||
msgid "Set font style"
|
||||
msgstr "フォントの字形を設定する"
|
||||
|
||||
#. i18n: file: appearance.ui:326
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_font)
|
||||
#: po/rc.cpp:33 rc.cpp:33
|
||||
msgid "Font"
|
||||
msgstr "フォント"
|
||||
|
||||
#. i18n: file: appearance.ui:358
|
||||
#. i18n: ectx: property (toolTip), widget (QFontComboBox, fontComboBox_font)
|
||||
#: po/rc.cpp:36 rc.cpp:36
|
||||
msgid "Set font family"
|
||||
msgstr "フォントを設定する"
|
||||
|
||||
#. i18n: file: appearance.ui:375
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_activeIcon)
|
||||
#: po/rc.cpp:39 rc.cpp:39
|
||||
msgid "Active icon"
|
||||
msgstr "アクティブ時のアイコン"
|
||||
|
||||
#. i18n: file: appearance.ui:408
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_textAlign)
|
||||
#: po/rc.cpp:45 rc.cpp:45
|
||||
msgid "Text align"
|
||||
msgstr "テキストの位置"
|
||||
|
||||
#. i18n: file: appearance.ui:440
|
||||
#. i18n: ectx: property (toolTip), widget (QComboBox, comboBox_textAlign)
|
||||
#: po/rc.cpp:48 rc.cpp:48
|
||||
msgid "Set text align"
|
||||
msgstr "テキストの位置を設定する"
|
||||
|
||||
#. i18n: file: dataengine.ui:34
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctl)
|
||||
#. i18n: file: widget.ui:161
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctl)
|
||||
#. i18n: file: dataengine.ui:34
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctl)
|
||||
#. i18n: file: widget.ui:161
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctl)
|
||||
#: po/rc.cpp:51 po/rc.cpp:90 rc.cpp:51 rc.cpp:90
|
||||
msgid "Path to netctl"
|
||||
msgstr "netctl へのパス"
|
||||
|
||||
#. i18n: file: dataengine.ui:67
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctlAuto)
|
||||
#. i18n: file: widget.ui:194
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctlAuto)
|
||||
#. i18n: file: dataengine.ui:67
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctlAuto)
|
||||
#. i18n: file: widget.ui:194
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_netctlAuto)
|
||||
#: po/rc.cpp:57 po/rc.cpp:96 rc.cpp:57 rc.cpp:96
|
||||
msgid "Path to netctl-auto"
|
||||
msgstr "netctl-auto へのパス"
|
||||
|
||||
#. i18n: file: dataengine.ui:100
|
||||
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_extIp4)
|
||||
#: po/rc.cpp:63 rc.cpp:63
|
||||
msgid "Check external IPv4"
|
||||
msgstr "外部 IPv4 アドレスを確認"
|
||||
|
||||
#. i18n: file: dataengine.ui:136
|
||||
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_extIp6)
|
||||
#: po/rc.cpp:69 rc.cpp:69
|
||||
msgid "Check external IPv6"
|
||||
msgstr "外部 IPv6 アドレスを確認"
|
||||
|
||||
#. i18n: file: widget.ui:34
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_autoUpdate)
|
||||
#: po/rc.cpp:75 rc.cpp:75
|
||||
msgid "Auto update interval, msec"
|
||||
msgstr "自動更新の間隔(ミリ秒)"
|
||||
|
||||
#. i18n: file: widget.ui:92
|
||||
#. i18n: ectx: property (text), widget (QLabel, label_gui)
|
||||
#: po/rc.cpp:78 rc.cpp:78
|
||||
msgid "Path to GUI"
|
||||
msgstr "GUIへのパス"
|
||||
|
||||
#. i18n: file: widget.ui:125
|
||||
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_helper)
|
||||
#: po/rc.cpp:84 rc.cpp:84
|
||||
msgid "Use helper"
|
||||
msgstr "ヘルパを使用する"
|
||||
|
||||
#. i18n: file: widget.ui:227
|
||||
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_sudo)
|
||||
#: po/rc.cpp:102 rc.cpp:102
|
||||
msgid "Use sudo for netctl"
|
||||
msgstr "netctl に対して sudo を使用する"
|
||||
|
||||
#. i18n: file: widget.ui:263
|
||||
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_wifi)
|
||||
#: po/rc.cpp:108 rc.cpp:108
|
||||
msgid "Show 'Start WiFi menu'"
|
||||
msgstr "「Wifi メニューの開始」を表示"
|
||||
|
||||
#. i18n: file: widget.ui:291
|
||||
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_showBigInterface)
|
||||
#: po/rc.cpp:114 rc.cpp:114
|
||||
msgid "Show more detailed interface"
|
||||
msgstr "インターフェースについての詳細を表示"
|
||||
|
||||
#. i18n: file: widget.ui:309
|
||||
#. i18n: ectx: property (toolTip), widget (QPlainTextEdit, textEdit)
|
||||
#: po/rc.cpp:117 rc.cpp:117
|
||||
msgid ""
|
||||
"$info - active profile information\n"
|
||||
"$current - current profile name\n"
|
||||
"$extip4 - external IPv4\n"
|
||||
"$extip6 - external IPv6\n"
|
||||
"$interfaces - list of the network interfaces\n"
|
||||
"$intip4 - internal IPv4\n"
|
||||
"$intip6 - internal IPv6\n"
|
||||
"$profiles - list of the netctl profiles\n"
|
||||
"$status - current profile status (static/enabled)"
|
||||
msgstr ""
|
||||
"$info - アクティブなプロファイルの情報\n"
|
||||
"$current - 現在利用中プロファイルの情報\n"
|
||||
"$extip4 - 外部 IPv4 アドレス\n"
|
||||
"$extip6 - 外部 IPv6 アドレス\n"
|
||||
"$interfaces - ネットワークインターフェースの一覧\n"
|
||||
"$intip4 - 内部 IPv4 アドレス\n"
|
||||
"$intip6 - 内部 IPv6 アドレス\n"
|
||||
"$profiles - プロファイルの一覧\n"
|
||||
"$status - 現在のプロファイルの状態(静的/有効)"
|
||||
|
||||
#: po/rc.cpp:126 rc.cpp:126
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
msgid "Your names"
|
||||
msgstr "NOGISAKA Sadata"
|
||||
|
||||
#: po/rc.cpp:127 rc.cpp:127
|
||||
msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "ngsksdt@gmail.com "
|
||||
|
||||
|
BIN
sources/resources/icon-helper.png
Normal file
BIN
sources/resources/icon-helper.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
@ -2,6 +2,7 @@
|
||||
<qresource>
|
||||
<!-- helper translations -->
|
||||
<file>translations-helper/en.qm</file>
|
||||
<file>translations-helper/ja.qm</file>
|
||||
<file>translations-helper/ru.qm</file>
|
||||
<!-- pony <3 -->
|
||||
<file>pinkiepie</file>
|
||||
|
@ -2,9 +2,11 @@
|
||||
<qresource>
|
||||
<!-- gui translations -->
|
||||
<file>translations/en.qm</file>
|
||||
<file>translations/ja.qm</file>
|
||||
<file>translations/ru.qm</file>
|
||||
<!-- icons -->
|
||||
<file>icon.png</file>
|
||||
<file>icon-helper.png</file>
|
||||
<file>wifi.png</file>
|
||||
<file>network-idle-64x64.png</file>
|
||||
<file>network-offline-64x64.png</file>
|
||||
|
150
sources/resources/translations-helper/ja.ts
Normal file
150
sources/resources/translations-helper/ja.ts
Normal file
@ -0,0 +1,150 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="ja_JP">
|
||||
<context>
|
||||
<name>NetctlHelper</name>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="28"/>
|
||||
<source>Unknown flag
|
||||
</source>
|
||||
<translation>不明なフラグです</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="54"/>
|
||||
<source>Usage:</source>
|
||||
<translation>使用法:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="56"/>
|
||||
<source>Options:</source>
|
||||
<translation>オプション:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="59"/>
|
||||
<source>read configuration from this file</source>
|
||||
<translation>このファイルから設定を読み込む</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="61"/>
|
||||
<source>print debug information</source>
|
||||
<translation>デバッグ情報を表示する</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="63"/>
|
||||
<source>do not start as daemon</source>
|
||||
<translation>デーモンとして実行しない</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="65"/>
|
||||
<source>force replace the existing session</source>
|
||||
<translation>既存のセッションを強制的に置き換える</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="67"/>
|
||||
<source>force restore the existing session</source>
|
||||
<translation>既存のセッションを強制的に復帰させる</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="69"/>
|
||||
<source>do not read user configuration, system-wide only</source>
|
||||
<translation>ユーザの設定ファイルではなくシステム全体の設定ファイルのみを読み込む</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="70"/>
|
||||
<source>Show messages:</source>
|
||||
<translation>メッセージの表示:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="72"/>
|
||||
<source>show version and exit</source>
|
||||
<translation>バージョンを表示して終了</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="74"/>
|
||||
<source>show build information and exit</source>
|
||||
<translation>ビルド情報を表示して終了</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="76"/>
|
||||
<source>show this help and exit</source>
|
||||
<translation>このヘルプを表示して終了</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="86"/>
|
||||
<source>Build date: %1</source>
|
||||
<translation>ビルド日時:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="89"/>
|
||||
<source>cmake flags</source>
|
||||
<translation>cmake のフラグ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="91"/>
|
||||
<source>cmake properties</source>
|
||||
<translation>cmake のプロパティ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="95"/>
|
||||
<source>Components</source>
|
||||
<translation>コンポーネント</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="102"/>
|
||||
<source>Additional components</source>
|
||||
<translation>追加のコンポーネント</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="106"/>
|
||||
<source>Project properties</source>
|
||||
<translation>プロジェクトのプロパティ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="112"/>
|
||||
<source>DBus configuration</source>
|
||||
<translation>DBus 設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="121"/>
|
||||
<source>Documentation</source>
|
||||
<translation>ドキュメンテーション</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="133"/>
|
||||
<source>Version</source>
|
||||
<translation>バージョン</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="136"/>
|
||||
<source>Author</source>
|
||||
<translation>作者</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/messages.cpp" line="139"/>
|
||||
<source>License</source>
|
||||
<translation>ライセンス</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/main.cpp" line="95"/>
|
||||
<source>The helper is running with EUID %1. Some functions may not be available.</source>
|
||||
<translation>このヘルパは EUID %1 として実行されています。いくつか利用できない機能が存在します。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/main.cpp" line="97"/>
|
||||
<source>See security notes for more details.</source>
|
||||
<translation>詳細情報を得るにはセキュリティノートを参照して下さい。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/main.cpp" line="136"/>
|
||||
<location filename="../../helper/src/main.cpp" line="147"/>
|
||||
<source>Replace existing session.</source>
|
||||
<translation>既存のセッションを置き換える。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../helper/src/main.cpp" line="141"/>
|
||||
<location filename="../../helper/src/main.cpp" line="153"/>
|
||||
<source>Restore existing session.</source>
|
||||
<translation>既存のセッションを復帰させる。</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
2705
sources/resources/translations/ja.ts
Normal file
2705
sources/resources/translations/ja.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,7 @@
|
||||
#define NAME "Netctl Graphical Interface"
|
||||
#define VERSION "@PROJECT_VERSION@"
|
||||
#define AUTHOR "@PROJECT_AUTHOR@"
|
||||
#define TRANSLATORS ""
|
||||
#define TRANSLATORS "nosada (Japanese translation)"
|
||||
#define EMAIL "@PROJECT_CONTACT@"
|
||||
#define LICENSE "@PROJECT_LICENSE@"
|
||||
#define TRDPARTY_LICENSE "tasks,BSD,https://github.com/mhogomchungu/tasks;ponysay,GPLv3,http://erkin.co/ponysay"
|
||||
|
Reference in New Issue
Block a user