parent
ad9505eaaf
commit
df848b7b59
@ -1 +0,0 @@
|
||||
build
|
@ -0,0 +1,73 @@
|
||||
# lxqt-admin
|
||||
|
||||
## Overview
|
||||
|
||||
This repository is providing two GUI tools to adjust settings of the operating system LXQt is running on.
|
||||
|
||||
"Time and date configuration", binary `lxqt-admin-time`, can adjust system time and timezone.
|
||||
|
||||
![lxqt-admin-time](lxqt-admin-time.png)
|
||||
|
||||
It is using `systemd-timedated` as backend which is accessed by its D-Bus interface. Among other this means the option
|
||||
to sync the system time by NTP is relying on `systemd-timesyncd` as backend.
|
||||
|
||||
In "User and Group Settings", binary `lxqt-admin-user`, users and groups of the operating system can be modified.
|
||||
|
||||
![lxqt-admin-user](lxqt-admin-user.png)
|
||||
|
||||
The backend is a script `lxqt-admin-user-helper`. By default it is in turn using the shadow tools to do the actual work.
|
||||
The script can be modified to use different tools, though.
|
||||
|
||||
Both are using [polkit](https://www.freedesktop.org/wiki/Software/polkit/) to handle permissions. So polkit and a corresponding
|
||||
authentication agent are needed at runtime. As for LXQt sessions [lxqt-policykit](https://github.com/lxde/lxqt-policykit/)
|
||||
is the first choice.
|
||||
|
||||
Earlier versions of lxqt-admin were relying on [system-tools-backends](http://system-tools-backends.freedesktop.org)
|
||||
and their wrapper [liboobs](https://github.com/GNOME/liboobs). These were replaced as both go unmaintained for years and
|
||||
were hence dropped from many distributions heavily restricting the usage of lxqt-admin.
|
||||
As long as they can be built it should still be possible to compile lxqt-admin release ≤ 0.10 against them in order
|
||||
to make use of it on platforms lacking systemd like BSD.
|
||||
|
||||
## Installing
|
||||
|
||||
### Compiling sources
|
||||
|
||||
Build dependencies are Git, CMake, qttools to handle localization as well as library [liblxqt](https://github.com/lxde/liblxqt)
|
||||
and its dependency [libqtxdg](https://github.com/lxde/libqtxdg).
|
||||
By default lxqt-admin is pulling translations from repository [translations](https://github.com/lxde/translations/) at
|
||||
compile time, see file README.md of the latter.
|
||||
|
||||
To compile, run `cmake`, `make` and `make install`.
|
||||
`cmake` can be invoked in an out of source build directory and will normally need variable `-DCMAKE_INSTALL_PREFIX=/usr`.
|
||||
`make install` can be invoked with `DESTDIR=<some path>`.
|
||||
|
||||
### Binary packages
|
||||
|
||||
#### Arch Linux
|
||||
|
||||
[AUR](https://aur.archlinux.org) packages `lxqt-admin` and `lxqt-admin-git` are providing the current stable release and the
|
||||
actual master checkout at compile time as usual.
|
||||
Note that package `lxqt-admin` had to be kept in the AUR due to lack of the dependency liboobs as depicted [above](#overview).
|
||||
So it will be transferred to community as of release 0.11.
|
||||
|
||||
#### Debian
|
||||
|
||||
Package `lxqt-admin` is available in the official repositories as of Debian stretch.
|
||||
|
||||
#### Fedora
|
||||
|
||||
Fedora doesn't provide lxqt-admin so far due to lack of the dependency liboobs as depicted [above](#overview). This will hopefully change
|
||||
once release LXQt release 0.11 makes it into the Fedora repositories.
|
||||
|
||||
#### openSUSE
|
||||
|
||||
openSUSE does not ship with lxqt-admin in it's standard repositories since the functionality is covered by openSUSE's [YaST](http://yast.github.io/).
|
||||
However it is still possible to install it on openSUSE. The package and its dependencies, like the [above](#overview) mentioned, outdated liboobs are available through the [X11:LXQt](https://build.opensuse.org/project/show/X11:LXQt) repository.
|
||||
|
||||
## Usage
|
||||
|
||||
Both GUIs can be launched from GUI "Configuration Center" of [lxqt-config](https://github.com/lxde/lxqt-config) and are available
|
||||
in LXQt panel's main menu at Preferences - LXQt settings as well.
|
||||
|
||||
The actual usage should be self-explanatory. To apply settings the GUI of the polkit authentication agent that's in use is
|
||||
launched to acquire the root password.
|
After Width: | Height: | Size: 47 KiB |
@ -0,0 +1,85 @@
|
||||
#include "timedatectl.h"
|
||||
#include <QProcess>
|
||||
#include <QDebug>
|
||||
#include <QDBusInterface>
|
||||
#include <QDBusConnection>
|
||||
#include <QMessageBox>
|
||||
|
||||
|
||||
TimeDateCtl::TimeDateCtl()
|
||||
{
|
||||
mIface = new QDBusInterface(QStringLiteral("org.freedesktop.timedate1"),
|
||||
QStringLiteral("/org/freedesktop/timedate1"),
|
||||
QStringLiteral("org.freedesktop.timedate1"),
|
||||
QDBusConnection::systemBus());
|
||||
}
|
||||
|
||||
TimeDateCtl::~TimeDateCtl()
|
||||
{
|
||||
delete mIface;
|
||||
}
|
||||
|
||||
QString TimeDateCtl::timeZone() const
|
||||
{
|
||||
return mIface->property("Timezone").toString();
|
||||
}
|
||||
|
||||
bool TimeDateCtl::setTimeZone(QString timeZone, QString& errorMessage)
|
||||
{
|
||||
mIface->call("SetTimezone", timeZone, true);
|
||||
QDBusError err = mIface->lastError();
|
||||
if(err.isValid())
|
||||
{
|
||||
errorMessage = err.message();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TimeDateCtl::setDateTime(QDateTime dateTime, QString& errorMessage)
|
||||
{
|
||||
// the timedatectl dbus service accepts "usec" input.
|
||||
// Qt can only get "msec" => convert to usec here.
|
||||
mIface->call("SetTime", dateTime.toMSecsSinceEpoch() * 1000, false, true);
|
||||
QDBusError err = mIface->lastError();
|
||||
if(err.isValid())
|
||||
{
|
||||
errorMessage = err.message();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TimeDateCtl::useNtp() const
|
||||
{
|
||||
return mIface->property("NTP").toBool();
|
||||
}
|
||||
|
||||
bool TimeDateCtl::setUseNtp(bool value, QString& errorMessage)
|
||||
{
|
||||
mIface->call("SetNTP", value, true);
|
||||
QDBusError err = mIface->lastError();
|
||||
if(err.isValid())
|
||||
{
|
||||
errorMessage = err.message();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TimeDateCtl::localRtc() const
|
||||
{
|
||||
return mIface->property("LocalRTC").toBool();
|
||||
}
|
||||
|
||||
bool TimeDateCtl::setLocalRtc(bool value, QString& errorMessage)
|
||||
{
|
||||
mIface->call("SetLocalRTC", value, false, true);
|
||||
QDBusError err = mIface->lastError();
|
||||
if(err.isValid())
|
||||
{
|
||||
errorMessage = err.message();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
#ifndef TIMEDATECTL_H
|
||||
#define TIMEDATECTL_H
|
||||
|
||||
#include <QString>
|
||||
#include <QDateTime>
|
||||
|
||||
class QDBusInterface;
|
||||
|
||||
class TimeDateCtl
|
||||
{
|
||||
public:
|
||||
explicit TimeDateCtl();
|
||||
~TimeDateCtl();
|
||||
|
||||
bool useNtp() const;
|
||||
bool setUseNtp(bool value, QString& errorMessage);
|
||||
|
||||
bool localRtc() const;
|
||||
bool setLocalRtc(bool value, QString& errorMessage);
|
||||
|
||||
QString timeZone() const;
|
||||
bool setTimeZone(QString timeZone, QString& errorMessage);
|
||||
|
||||
bool setDateTime(QDateTime dateTime, QString& errorMessage);
|
||||
|
||||
private:
|
||||
QDBusInterface* mIface;
|
||||
};
|
||||
|
||||
#endif // TIMEDATECTL_H
|
@ -1,78 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="23"/>
|
||||
<source>Time:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="53"/>
|
||||
<source>Date:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="89"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="19"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>TextLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Filter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="54"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,79 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="de">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="23"/>
|
||||
<source>Time:</source>
|
||||
<translation>Zeit:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translatorcomment>No need to translate.</translatorcomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="53"/>
|
||||
<source>Date:</source>
|
||||
<translation>Datum:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="89"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>Das Sichern der Einstellungen benötigt Administrator-Rechte.<br>Nach dem Betätigen der Schließen-Schaltfläche wird die Berechtigung eingeholt.</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation>Zeit und Datum einstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation>Datum und Zeit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation>Zeitzone</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation>Authentifizierungsfehler</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="19"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation>Derzeitige Zeitzone:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>TextLabel</source>
|
||||
<translation>Textfeld</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Filter</source>
|
||||
<translation>Filter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="54"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>Das Sichern der Einstellungen benötigt Administrator-Rechte.<br>Nach dem Betätigen der Schließen-Schaltfläche wird die Berechtigung eingeholt.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation>Keine</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,98 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="hr_HR">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="20"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="32"/>
|
||||
<source>Time and date setup</source>
|
||||
<translation type="unfinished">Postavke datuma i vremena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>Time:</source>
|
||||
<translation type="unfinished">Vrijeme:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="55"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translation type="unfinished">HH:mm:ss</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="69"/>
|
||||
<source>Date:</source>
|
||||
<translation type="unfinished">Nadnevak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="105"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>Spremanje pronjena zahtjeva adminstracijske dozvole.<br>Biti će zatražene nakon što kliknete na dugme zatvori</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation type="unfinished">Konfiguracija vremena i nadnevka</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation type="unfinished">Nadnevak i vrijeme</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation type="unfinished">Vremenska zona</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>Timezone setup</source>
|
||||
<translation type="unfinished">Postavljanje vremenske zone</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation type="unfinished">Vaša trenutna vremenska zona</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="42"/>
|
||||
<source>TextLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="51"/>
|
||||
<source>Filter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="70"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>Spremanje pronjena zahtjeva adminstracijske dozvole.<br>Biti će zatražene nakon što kliknete na dugme zatvori</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation type="unfinished">Nijedan</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,98 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="hu_HU">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="20"/>
|
||||
<source>Form</source>
|
||||
<translation>Űrlap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="32"/>
|
||||
<source>Time and date setup</source>
|
||||
<translation>Dátum és időbeállítás</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>Time:</source>
|
||||
<translation>Idő:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="55"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="69"/>
|
||||
<source>Date:</source>
|
||||
<translation>Dátum:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="105"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>Változtatások csak rendszergazdaként menthetők,<br>jelszóbekérés a kilépés után.</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation>Dátum és időbeállítások</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation>Dátum és idő</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation>Időzóna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation>Hitelesítési hiba</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Űrlap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>Timezone setup</source>
|
||||
<translation>Időzóna beállítás</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation>Mostani időzóna:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="42"/>
|
||||
<source>TextLabel</source>
|
||||
<translation>Szövegcím</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="51"/>
|
||||
<source>Filter</source>
|
||||
<translation>Szűrő</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="70"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>Változtatások csak rendszergazdaként menthetők,<br>jelszóbekérés a kilépés után.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation>Nincs</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,100 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="it_IT" sourcelanguage="it_IT">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="20"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="32"/>
|
||||
<source>Time and date setup</source>
|
||||
<translation>Imposta data e ora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>Time:</source>
|
||||
<translation>Ora:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="55"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="69"/>
|
||||
<source>Date:</source>
|
||||
<translation>Data:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="105"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation>Il salvataggio richiede privilegi di amministratore,
|
||||
saranno chiesti dopo la chiusura di questa finestra.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation>Configura data e ora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation>Data e ora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation>Fuso orario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation>Errore di autenticazione</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>Timezone setup</source>
|
||||
<translation>Configura fuso orario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation>Fuso orario attuale:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="42"/>
|
||||
<source>TextLabel</source>
|
||||
<translation>nessuno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="51"/>
|
||||
<source>Filter</source>
|
||||
<translation>Filtro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="70"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation type="unfinished">Il salvataggio richiede privilegi di amministratore,
|
||||
saranno chiesti dopo la chiusura di questa finestra.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,98 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="ja">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="20"/>
|
||||
<source>Form</source>
|
||||
<translation>フォーム</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="32"/>
|
||||
<source>Time and date setup</source>
|
||||
<translation>日時設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>Time:</source>
|
||||
<translation>時刻:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="55"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translation>HH:mm:ss</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="69"/>
|
||||
<source>Date:</source>
|
||||
<translation>日付</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="105"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>変更の保存には管理権限が必要です。<br>閉じるボタンを押した直後に要求されるでしょう。</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation>日時設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation>日時</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation>タイムゾーン</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation>認証エラー</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>フォーム</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>Timezone setup</source>
|
||||
<translation>タイムゾーン設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation>現在のタイムゾーン</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="42"/>
|
||||
<source>TextLabel</source>
|
||||
<translation>テキストラベル</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="51"/>
|
||||
<source>Filter</source>
|
||||
<translation>フィルター</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="70"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>変更の保存には管理権限が必要です。<br>閉じるボタンを押した直後に要求されるでしょう。</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation>なし</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,98 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="pl_PL">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="20"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="32"/>
|
||||
<source>Time and date setup</source>
|
||||
<translation>Konfiguracja daty i czasu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>Time:</source>
|
||||
<translation>Czas:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="55"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="69"/>
|
||||
<source>Date:</source>
|
||||
<translation>Data:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="105"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>Zapisywanie zmian wymaga uprawnień administratora.<br>Zostaniesz poproszony o hasło.</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation>Konfiguracja daty i czasu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation>Data i czas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation>Strefa czasowa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation>Błąd autoryzacji</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>Timezone setup</source>
|
||||
<translation>Ustawienia strefy czasowej</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation>Twoja aktualna strefa czasowa:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="42"/>
|
||||
<source>TextLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="51"/>
|
||||
<source>Filter</source>
|
||||
<translation>Filtr</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="70"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>Zapisywanie zmian wymaga uprawnień administratora.<br>Zostaniesz poproszony o hasło.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation>Żadna</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,98 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.0" language="pt">
|
||||
<context>
|
||||
<name>DateTime</name>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="20"/>
|
||||
<source>Form</source>
|
||||
<translation>Formulário</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="32"/>
|
||||
<source>Time and date setup</source>
|
||||
<translation>Configuração de data e hora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="39"/>
|
||||
<source>Time:</source>
|
||||
<translation>Hora:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="55"/>
|
||||
<source>HH:mm:ss</source>
|
||||
<translation>H:mm:ss</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="69"/>
|
||||
<source>Date:</source>
|
||||
<translation>Data:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../datetime.ui" line="105"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>A gravação de alterações requer permissões de administrador.<br>A senha será solicitada ao clicar em Fechar.</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimeAdminDialog</name>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="42"/>
|
||||
<source>Time and date configuration</source>
|
||||
<translation>Configuração de data e hora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="53"/>
|
||||
<source>Date and time</source>
|
||||
<translation>Data e hora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="62"/>
|
||||
<source>Timezone</source>
|
||||
<translation>Fuso horário</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timeadmindialog.cpp" line="162"/>
|
||||
<source>Authentication Error</source>
|
||||
<translation>Erro de autenticação</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Timezone</name>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Formulário</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="26"/>
|
||||
<source>Timezone setup</source>
|
||||
<translation>Configuração de fuso horário</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="35"/>
|
||||
<source>Your current timezone:</source>
|
||||
<translation>O seu fuso horário:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="42"/>
|
||||
<source>TextLabel</source>
|
||||
<translation>Texto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="51"/>
|
||||
<source>Filter</source>
|
||||
<translation>Filtrar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.ui" line="70"/>
|
||||
<source><html><head/><body><p>Saving changes requires admin permissions.<br>You will be requested after clicking close button</p></body></html></source>
|
||||
<translation><html><head/><body><p>A gravação de alterações requer permissões de administrador.<br>A senha será solicitada ao clicar em Fechar.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../timezone.cpp" line="42"/>
|
||||
<source>None</source>
|
||||
<translation>Nenhum</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,6 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name[ru_RU]=Дата и время
|
||||
GenericName[ru_RU]=Настройки даты и времени
|
||||
Comment[ru_RU]=Настроить дату и время вашей системы
|
||||
|
||||
#TRANSLATIONS_DIR=translations
|
After Width: | Height: | Size: 44 KiB |
@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
case "$1" in
|
||||
# we only allow executing these commands
|
||||
useradd|usermod|userdel|groupadd|groupmod|groupdel|passwd|gpasswd)
|
||||
# TODO: platforms using different commands can add wrapper scripts here.
|
||||
export LC_ALL=C
|
||||
exec "$@"
|
||||
;;
|
||||
*)
|
||||
echo "Command '$1' is not allowed!"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE policyconfig PUBLIC
|
||||
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||
<policyconfig>
|
||||
|
||||
<action id="org.lxqt.lxqt-admin-user">
|
||||
<message>Authentication is required for user administration</message>
|
||||
<icon_name></icon_name>
|
||||
<defaults>
|
||||
<allow_any>auth_admin</allow_any>
|
||||
<allow_inactive>auth_admin</allow_inactive>
|
||||
<allow_active>auth_admin_keep</allow_active>
|
||||
</defaults>
|
||||
<annotate key="org.freedesktop.policykit.exec.path">@CMAKE_INSTALL_PREFIX@/bin/lxqt-admin-user-helper</annotate>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
@ -1,263 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
<context>
|
||||
<name>GroupDialog</name>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="14"/>
|
||||
<source>Group Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="20"/>
|
||||
<source>Group name:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="37"/>
|
||||
<source>Group ID:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="44"/>
|
||||
<source>Users belong to this group:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<source>The group ID is in use.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<source>The group name cannot be empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>The group name is in use.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="14"/>
|
||||
<source>User and Group Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="31"/>
|
||||
<source>&Users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="50"/>
|
||||
<source>Login Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="55"/>
|
||||
<source>User ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="60"/>
|
||||
<source>Full Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="65"/>
|
||||
<source>Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="70"/>
|
||||
<source>Home Directory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Show system users (for advanced users only)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="89"/>
|
||||
<source>&Groups</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="102"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="107"/>
|
||||
<source>Group ID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="120"/>
|
||||
<source>toolBar</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="147"/>
|
||||
<source>Add</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="150"/>
|
||||
<source>Add new users or groups</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="160"/>
|
||||
<source>Delete</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="163"/>
|
||||
<source>Delete selected item</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="173"/>
|
||||
<source>Properties</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="176"/>
|
||||
<source>edit properties of the selected item</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="186"/>
|
||||
<source>Refresh</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="189"/>
|
||||
<source>Refresh the lists</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="145"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Confirm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<source>Are you sure you want to delete the selected user?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Are you sure you want to delete the selected group?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserDialog</name>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="14"/>
|
||||
<source>User Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="24"/>
|
||||
<source>General</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="33"/>
|
||||
<source>Full name:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="43"/>
|
||||
<source>Login name:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="53"/>
|
||||
<source>Set password:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="77"/>
|
||||
<source>User ID:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="84"/>
|
||||
<source>Main group:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="99"/>
|
||||
<source>Advanced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="105"/>
|
||||
<source>Login shell:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="122"/>
|
||||
<source>Home directory:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="64"/>
|
||||
<source>Change password:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<source>The user ID is in use.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<source>The user name cannot be empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>The user name is in use.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Confirm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Are you sure you want to use an "empty password" for the user?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,263 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="de">
|
||||
<context>
|
||||
<name>GroupDialog</name>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="14"/>
|
||||
<source>Group Settings</source>
|
||||
<translation>Gruppeneinstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="20"/>
|
||||
<source>Group name:</source>
|
||||
<translation>Gruppen-Name:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="37"/>
|
||||
<source>Group ID:</source>
|
||||
<translation>Gruppen-ID:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="44"/>
|
||||
<source>Users belong to this group:</source>
|
||||
<translation>Benutzer in dieser Gruppe:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="86"/>
|
||||
<location filename="../groupdialog.cpp" line="95"/>
|
||||
<location filename="../groupdialog.cpp" line="100"/>
|
||||
<source>Error</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="86"/>
|
||||
<source>The group ID is in use.</source>
|
||||
<translation>Die Gruppen-ID existiert bereits.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="95"/>
|
||||
<source>The group name cannot be empty.</source>
|
||||
<translation>Der Gruppen-Name kann nicht leer sein.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="100"/>
|
||||
<source>The group name is in use.</source>
|
||||
<translation>Der Gruppen-Name existiert bereits.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="14"/>
|
||||
<source>User and Group Settings</source>
|
||||
<translation>Nutzer- und Gruppeneinstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="31"/>
|
||||
<source>&Users</source>
|
||||
<translation>&Nutzer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="50"/>
|
||||
<source>Login Name</source>
|
||||
<translation>Anmeldename</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="55"/>
|
||||
<source>User ID</source>
|
||||
<translation>Nutzer-ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="60"/>
|
||||
<source>Full Name</source>
|
||||
<translation>Vollständiger Name</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="65"/>
|
||||
<source>Group</source>
|
||||
<translation>Gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="70"/>
|
||||
<source>Home Directory</source>
|
||||
<translation>Nutzerverzeichnis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Show system users (for advanced users only)</source>
|
||||
<translation>Systemnutzer anzeigen (nur für erfahrene Nutzer)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="89"/>
|
||||
<source>&Groups</source>
|
||||
<translation>&Gruppen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="102"/>
|
||||
<source>Name</source>
|
||||
<translation>Name</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="107"/>
|
||||
<source>Group ID</source>
|
||||
<translation>Gruppen-ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="120"/>
|
||||
<source>toolBar</source>
|
||||
<translation>Werkzeugleiste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="147"/>
|
||||
<source>Add</source>
|
||||
<translation>Hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="150"/>
|
||||
<source>Add new users or groups</source>
|
||||
<translation>Neue Nutzer oder Gruppen hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="160"/>
|
||||
<source>Delete</source>
|
||||
<translation>Entfernen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="163"/>
|
||||
<source>Delete selected item</source>
|
||||
<translation>Ausgewähltes Element löschen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="173"/>
|
||||
<source>Properties</source>
|
||||
<translation>Eigenschaften</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="176"/>
|
||||
<source>edit properties of the selected item</source>
|
||||
<translation>Eigenschaften des ausgewählten Elements editieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="186"/>
|
||||
<source>Refresh</source>
|
||||
<translation>Erneuern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="189"/>
|
||||
<source>Refresh the lists</source>
|
||||
<translation>Listen erneuern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="145"/>
|
||||
<source>Error</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Bestätigen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<source>Are you sure you want to delete the selected user?</source>
|
||||
<translation>Wollen Sie den ausgewählten Nutzer wirklich löschen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Are you sure you want to delete the selected group?</source>
|
||||
<translation>Wollen Sie die ausgewählte Gruppe wirklich löschen?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserDialog</name>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="14"/>
|
||||
<source>User Settings</source>
|
||||
<translation>Nutzereinstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="24"/>
|
||||
<source>General</source>
|
||||
<translation>Allgemein</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="33"/>
|
||||
<source>Full name:</source>
|
||||
<translation>Vollständiger Name:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="43"/>
|
||||
<source>Login name:</source>
|
||||
<translation>Anmeldename:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="53"/>
|
||||
<source>Set password:</source>
|
||||
<translation>Kennwort setzen:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="77"/>
|
||||
<source>User ID:</source>
|
||||
<translation>Nutzer-ID:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="84"/>
|
||||
<source>Main group:</source>
|
||||
<translation>Hauptgruppe:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="99"/>
|
||||
<source>Advanced</source>
|
||||
<translation>Erweitert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="105"/>
|
||||
<source>Login shell:</source>
|
||||
<translation>Befehlsinterpreter (shell):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="122"/>
|
||||
<source>Home directory:</source>
|
||||
<translation>Nutzerverzeichnis:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="67"/>
|
||||
<source>Change password:</source>
|
||||
<translation>Kennwort ändern:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="128"/>
|
||||
<location filename="../userdialog.cpp" line="141"/>
|
||||
<location filename="../userdialog.cpp" line="146"/>
|
||||
<source>Error</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="128"/>
|
||||
<source>The user ID is in use.</source>
|
||||
<translation>Die Nutzer-ID existiert bereits.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="141"/>
|
||||
<source>The user name cannot be empty.</source>
|
||||
<translation>Der Nutzername kann nicht leer sein.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="146"/>
|
||||
<source>The user name is in use.</source>
|
||||
<translation>Der Nutzername existiert bereits.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="162"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Bestätigen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="162"/>
|
||||
<source>Are you sure you want to use an "empty password" for the user?</source>
|
||||
<translation>Wollen Sie wirklich ein "leeres Kennwort" für den Nutzer vergeben?</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,263 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="hr_HR">
|
||||
<context>
|
||||
<name>GroupDialog</name>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="14"/>
|
||||
<source>Group Settings</source>
|
||||
<translation type="unfinished">Postavke grupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="20"/>
|
||||
<source>Group name:</source>
|
||||
<translation type="unfinished">Ime grupe:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="37"/>
|
||||
<source>Group ID:</source>
|
||||
<translation type="unfinished">ID grupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="44"/>
|
||||
<source>Users belong to this group:</source>
|
||||
<translation type="unfinished">Korisnici koji pripadaju ovoj grupi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished">Greška</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<source>The group ID is in use.</source>
|
||||
<translation type="unfinished">ID grupe je u uporabi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<source>The group name cannot be empty.</source>
|
||||
<translation type="unfinished">Ime grupe ne može biti prazno.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>The group name is in use.</source>
|
||||
<translation type="unfinished">Ime grupe je u uporabi.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="14"/>
|
||||
<source>User and Group Settings</source>
|
||||
<translation type="unfinished">Postavke korisnika i grupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="31"/>
|
||||
<source>&Users</source>
|
||||
<translation type="unfinished">&Korisnici</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="50"/>
|
||||
<source>Login Name</source>
|
||||
<translation type="unfinished">Ime prijave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="55"/>
|
||||
<source>User ID</source>
|
||||
<translation type="unfinished">ID korisnika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="60"/>
|
||||
<source>Full Name</source>
|
||||
<translation type="unfinished">Puno ime</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="65"/>
|
||||
<source>Group</source>
|
||||
<translation type="unfinished">Grupa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="70"/>
|
||||
<source>Home Directory</source>
|
||||
<translation type="unfinished">Osobna mapa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Show system users (for advanced users only)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="89"/>
|
||||
<source>&Groups</source>
|
||||
<translation type="unfinished">&Grupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="102"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished">Ime</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="107"/>
|
||||
<source>Group ID</source>
|
||||
<translation type="unfinished">ID grupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="120"/>
|
||||
<source>toolBar</source>
|
||||
<translation type="unfinished">alatna traka</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="147"/>
|
||||
<source>Add</source>
|
||||
<translation type="unfinished">Dodaj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="150"/>
|
||||
<source>Add new users or groups</source>
|
||||
<translation type="unfinished">Dodaj nove korisnike ili grupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="160"/>
|
||||
<source>Delete</source>
|
||||
<translation type="unfinished">Izbriši</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="163"/>
|
||||
<source>Delete selected item</source>
|
||||
<translation type="unfinished">Izbriši odabranu stavku</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="173"/>
|
||||
<source>Properties</source>
|
||||
<translation type="unfinished">Svojstva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="176"/>
|
||||
<source>edit properties of the selected item</source>
|
||||
<translation type="unfinished">uredi svojstva odabrane stavke</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="186"/>
|
||||
<source>Refresh</source>
|
||||
<translation type="unfinished">Osvježi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="189"/>
|
||||
<source>Refresh the lists</source>
|
||||
<translation type="unfinished">Osvježi liste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="145"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished">Greška</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Confirm</source>
|
||||
<translation type="unfinished">Potvrdi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<source>Are you sure you want to delete the selected user?</source>
|
||||
<translation type="unfinished">Jeste li sigurni da želite izbrisati odabranoga korisnika?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Are you sure you want to delete the selected group?</source>
|
||||
<translation type="unfinished">Jeste li sigurni da želite izbrisati odabranu grupu?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserDialog</name>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="14"/>
|
||||
<source>User Settings</source>
|
||||
<translation type="unfinished">Postavke korisnika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="24"/>
|
||||
<source>General</source>
|
||||
<translation type="unfinished">Općenito</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="33"/>
|
||||
<source>Full name:</source>
|
||||
<translation type="unfinished">Puno ime:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="43"/>
|
||||
<source>Login name:</source>
|
||||
<translation type="unfinished">Ime prijave:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="53"/>
|
||||
<source>Set password:</source>
|
||||
<translation type="unfinished">Postavi lozinku:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="77"/>
|
||||
<source>User ID:</source>
|
||||
<translation type="unfinished">ID korisnika:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="84"/>
|
||||
<source>Main group:</source>
|
||||
<translation type="unfinished">Glavna grupa:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="99"/>
|
||||
<source>Advanced</source>
|
||||
<translation type="unfinished">Napredno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="105"/>
|
||||
<source>Login shell:</source>
|
||||
<translation type="unfinished">Ljuska prijave:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="122"/>
|
||||
<source>Home directory:</source>
|
||||
<translation type="unfinished">Osobna mapa:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="64"/>
|
||||
<source>Change password:</source>
|
||||
<translation type="unfinished">Promjeni lozinku:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished">Greška</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<source>The user ID is in use.</source>
|
||||
<translation type="unfinished">ID korisnika je u uporabi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<source>The user name cannot be empty.</source>
|
||||
<translation type="unfinished">Korisničko ime ne može biti prazno.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>The user name is in use.</source>
|
||||
<translation type="unfinished">Korisničko ime je u uoprabi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Confirm</source>
|
||||
<translation type="unfinished">Potvrdi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Are you sure you want to use an "empty password" for the user?</source>
|
||||
<translation type="unfinished">Jeste li sigurni da želite koristiti "praznu lozinku" za korisnika?</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,263 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="hu_HU">
|
||||
<context>
|
||||
<name>GroupDialog</name>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="14"/>
|
||||
<source>Group Settings</source>
|
||||
<translation>Csoportbeállítás</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="20"/>
|
||||
<source>Group name:</source>
|
||||
<translation>Csoportnév:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="37"/>
|
||||
<source>Group ID:</source>
|
||||
<translation>Csoport ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="44"/>
|
||||
<source>Users belong to this group:</source>
|
||||
<translation>A csoport tagjai:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>Error</source>
|
||||
<translation>Hiba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<source>The group ID is in use.</source>
|
||||
<translation>Csoport ID foglalt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<source>The group name cannot be empty.</source>
|
||||
<translation>Csoportnév nem lehet üres.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>The group name is in use.</source>
|
||||
<translation>Csoportnév foglalt.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="14"/>
|
||||
<source>User and Group Settings</source>
|
||||
<translation>Felhasználók és csoportok</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="31"/>
|
||||
<source>&Users</source>
|
||||
<translation>&Felhasználók</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="50"/>
|
||||
<source>Login Name</source>
|
||||
<translation>Bejelenkezési név</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="55"/>
|
||||
<source>User ID</source>
|
||||
<translation>Felhasználó ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="60"/>
|
||||
<source>Full Name</source>
|
||||
<translation>Teljes név</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="65"/>
|
||||
<source>Group</source>
|
||||
<translation>Csoport</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="70"/>
|
||||
<source>Home Directory</source>
|
||||
<translation>Saját könyvtár</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Show system users (for advanced users only)</source>
|
||||
<translation>Rendszer felhasználók is látszanak (csak haladóknak)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="89"/>
|
||||
<source>&Groups</source>
|
||||
<translation>&Csoportok</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="102"/>
|
||||
<source>Name</source>
|
||||
<translation>Név</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="107"/>
|
||||
<source>Group ID</source>
|
||||
<translation>Csoport ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="120"/>
|
||||
<source>toolBar</source>
|
||||
<translation>eszközsáv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="147"/>
|
||||
<source>Add</source>
|
||||
<translation>Hozzáad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="150"/>
|
||||
<source>Add new users or groups</source>
|
||||
<translation>Új felhasználó, vagy csoport hozzáadása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="160"/>
|
||||
<source>Delete</source>
|
||||
<translation>Törlés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="163"/>
|
||||
<source>Delete selected item</source>
|
||||
<translation>Kiválasztott törlése</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="173"/>
|
||||
<source>Properties</source>
|
||||
<translation>Tulajdonságok</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="176"/>
|
||||
<source>edit properties of the selected item</source>
|
||||
<translation>A választott elem módosítása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="186"/>
|
||||
<source>Refresh</source>
|
||||
<translation>Frisítés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="189"/>
|
||||
<source>Refresh the lists</source>
|
||||
<translation>Lista frissítése</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="145"/>
|
||||
<source>Error</source>
|
||||
<translation>Hiba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Megerősítés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<source>Are you sure you want to delete the selected user?</source>
|
||||
<translation>Tényleg töröljük az illető felhasználót?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Are you sure you want to delete the selected group?</source>
|
||||
<translation>Tényleg töröljük az illető csoportot?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserDialog</name>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="14"/>
|
||||
<source>User Settings</source>
|
||||
<translation>Felhasználó beállítása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="24"/>
|
||||
<source>General</source>
|
||||
<translation>Alap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="33"/>
|
||||
<source>Full name:</source>
|
||||
<translation>Teljes név:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="43"/>
|
||||
<source>Login name:</source>
|
||||
<translation>Bejelenkezési név:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="53"/>
|
||||
<source>Set password:</source>
|
||||
<translation>Jelszóbeállítás:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="77"/>
|
||||
<source>User ID:</source>
|
||||
<translation>Felhasználó ID:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="84"/>
|
||||
<source>Main group:</source>
|
||||
<translation>Főcsoport</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="99"/>
|
||||
<source>Advanced</source>
|
||||
<translation>Bővített</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="105"/>
|
||||
<source>Login shell:</source>
|
||||
<translation>Parancsértelmező:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="122"/>
|
||||
<source>Home directory:</source>
|
||||
<translation>Saját könyvtár:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="64"/>
|
||||
<source>Change password:</source>
|
||||
<translation>Jelszóváltoztatás:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>Error</source>
|
||||
<translation>Hiba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<source>The user ID is in use.</source>
|
||||
<translation>Felhasználó ID foglalt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<source>The user name cannot be empty.</source>
|
||||
<translation>Felhasználónév nem lehet üres.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>The user name is in use.</source>
|
||||
<translation>Felhasználónév foglalt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Megerősítés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Are you sure you want to use an "empty password" for the user?</source>
|
||||
<translation>Üres legyen a jelszava a felhasználónak?</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,264 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="it_IT" sourcelanguage="it_IT">
|
||||
<context>
|
||||
<name>GroupDialog</name>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="14"/>
|
||||
<source>Group Settings</source>
|
||||
<translation>Gestione gruppi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="20"/>
|
||||
<source>Group name:</source>
|
||||
<translation>Nome del gruppo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="37"/>
|
||||
<source>Group ID:</source>
|
||||
<translation>ID gruppo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="44"/>
|
||||
<source>Users belong to this group:</source>
|
||||
<translation>Utenti appartenenti:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>Error</source>
|
||||
<translation>Errore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<source>The group ID is in use.</source>
|
||||
<translation>ID già in uso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<source>The group name cannot be empty.</source>
|
||||
<translation>Il nome non può essere vuoto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>The group name is in use.</source>
|
||||
<translation>Il nome è già in uso.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="14"/>
|
||||
<source>User and Group Settings</source>
|
||||
<translation>Impostazioni utenti e gruppi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="31"/>
|
||||
<source>&Users</source>
|
||||
<translatorcomment>remove &_ in source</translatorcomment>
|
||||
<translation type="unfinished">Utenti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="50"/>
|
||||
<source>Login Name</source>
|
||||
<translation>Nome Login</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="55"/>
|
||||
<source>User ID</source>
|
||||
<translation>ID utente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="60"/>
|
||||
<source>Full Name</source>
|
||||
<translation>Nome completo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="65"/>
|
||||
<source>Group</source>
|
||||
<translation>Gruppo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="70"/>
|
||||
<source>Home Directory</source>
|
||||
<translation>Cartella Home</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Show system users (for advanced users only)</source>
|
||||
<translation>Mostra utenti di sistema (avanzato)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="89"/>
|
||||
<source>&Groups</source>
|
||||
<translation>Gruppi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="102"/>
|
||||
<source>Name</source>
|
||||
<translation>Nome</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="107"/>
|
||||
<source>Group ID</source>
|
||||
<translation>ID gruppo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="120"/>
|
||||
<source>toolBar</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="147"/>
|
||||
<source>Add</source>
|
||||
<translation>Aggiungi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="150"/>
|
||||
<source>Add new users or groups</source>
|
||||
<translation>Aggiungi utenti o gruppi nuovi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="160"/>
|
||||
<source>Delete</source>
|
||||
<translation>Cancella</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="163"/>
|
||||
<source>Delete selected item</source>
|
||||
<translation>Cancella selezionato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="173"/>
|
||||
<source>Properties</source>
|
||||
<translation>Proprietà</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="176"/>
|
||||
<source>edit properties of the selected item</source>
|
||||
<translation>Modifica proprietà</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="186"/>
|
||||
<source>Refresh</source>
|
||||
<translation>Aggiorna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="189"/>
|
||||
<source>Refresh the lists</source>
|
||||
<translation>Aggiorna lista</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="145"/>
|
||||
<source>Error</source>
|
||||
<translation>Errore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Conferma</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<source>Are you sure you want to delete the selected user?</source>
|
||||
<translation>Si è sicuro di voler cancellare l'utente selezionato?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Are you sure you want to delete the selected group?</source>
|
||||
<translation>Si è sicuro di voler cancellare il gruppo selezionato?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserDialog</name>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="14"/>
|
||||
<source>User Settings</source>
|
||||
<translation>Impostazioni utente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="24"/>
|
||||
<source>General</source>
|
||||
<translation>Generali</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="33"/>
|
||||
<source>Full name:</source>
|
||||
<translation>Nome completo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="43"/>
|
||||
<source>Login name:</source>
|
||||
<translation>Nome al Login:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="53"/>
|
||||
<source>Set password:</source>
|
||||
<translation>Scegli il password:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="77"/>
|
||||
<source>User ID:</source>
|
||||
<translation>ID utente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="84"/>
|
||||
<source>Main group:</source>
|
||||
<translation>Gruppo principale:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="99"/>
|
||||
<source>Advanced</source>
|
||||
<translation>Avanzate:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="105"/>
|
||||
<source>Login shell:</source>
|
||||
<translation>Shell del login:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="122"/>
|
||||
<source>Home directory:</source>
|
||||
<translation>Cartella home:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="64"/>
|
||||
<source>Change password:</source>
|
||||
<translation>Cambia password:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>Error</source>
|
||||
<translation>Errore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<source>The user ID is in use.</source>
|
||||
<translation>ID già in uso.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<source>The user name cannot be empty.</source>
|
||||
<translation>Il nome non può essere vuoto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>The user name is in use.</source>
|
||||
<translation>Il nome è già in uso.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Conferma</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Are you sure you want to use an "empty password" for the user?</source>
|
||||
<translation>Si è sicuro di volere un password vuoto per l'utente?</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,263 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="pl_PL">
|
||||
<context>
|
||||
<name>GroupDialog</name>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="14"/>
|
||||
<source>Group Settings</source>
|
||||
<translation>Ustawienia Grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="20"/>
|
||||
<source>Group name:</source>
|
||||
<translation>Nazwa grupy:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="37"/>
|
||||
<source>Group ID:</source>
|
||||
<translation>ID grupy:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="44"/>
|
||||
<source>Users belong to this group:</source>
|
||||
<translation>Użytkownicy należący do tej grupy:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>Error</source>
|
||||
<translation>Błąd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<source>The group ID is in use.</source>
|
||||
<translation>ID grupy jest już w użyciu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<source>The group name cannot be empty.</source>
|
||||
<translation>Nazwa grupy nie może być pusta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>The group name is in use.</source>
|
||||
<translation>Ta nazwa grupy jest już w użyciu.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="14"/>
|
||||
<source>User and Group Settings</source>
|
||||
<translation>Ustawienia użytkowników i grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="31"/>
|
||||
<source>&Users</source>
|
||||
<translation>&Użytkownicy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="50"/>
|
||||
<source>Login Name</source>
|
||||
<translation>Login</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="55"/>
|
||||
<source>User ID</source>
|
||||
<translation>ID użytkownika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="60"/>
|
||||
<source>Full Name</source>
|
||||
<translation>Pełna nazwa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="65"/>
|
||||
<source>Group</source>
|
||||
<translation>Grupa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="70"/>
|
||||
<source>Home Directory</source>
|
||||
<translation>Katalog domowy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Show system users (for advanced users only)</source>
|
||||
<translation>Pokaż użytkowników systemowych (dla zaawansowanych)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="89"/>
|
||||
<source>&Groups</source>
|
||||
<translation>&Grupy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="102"/>
|
||||
<source>Name</source>
|
||||
<translation>Nazwa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="107"/>
|
||||
<source>Group ID</source>
|
||||
<translation>ID grupy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="120"/>
|
||||
<source>toolBar</source>
|
||||
<translation>Pasek narzędzi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="147"/>
|
||||
<source>Add</source>
|
||||
<translation>Dodaj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="150"/>
|
||||
<source>Add new users or groups</source>
|
||||
<translation>Dodaj nowych użytkowników lub grupy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="160"/>
|
||||
<source>Delete</source>
|
||||
<translation>Usuń</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="163"/>
|
||||
<source>Delete selected item</source>
|
||||
<translation>Usuń zaznaczoną pozycję</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="173"/>
|
||||
<source>Properties</source>
|
||||
<translation>Właściwości</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="176"/>
|
||||
<source>edit properties of the selected item</source>
|
||||
<translation>edytuj właściwości dla wybranej pozycji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="186"/>
|
||||
<source>Refresh</source>
|
||||
<translation>Odśwież</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="189"/>
|
||||
<source>Refresh the lists</source>
|
||||
<translation>Odśwież listę</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="145"/>
|
||||
<source>Error</source>
|
||||
<translation>Błąd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Potwierdzenie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<source>Are you sure you want to delete the selected user?</source>
|
||||
<translation>Czy na pewno chcesz usunąć wybranego użytkownika?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Are you sure you want to delete the selected group?</source>
|
||||
<translation>Czy na pewno chcesz usunąć wybraną grupę?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserDialog</name>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="14"/>
|
||||
<source>User Settings</source>
|
||||
<translation>Ustawienia użytkownika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="24"/>
|
||||
<source>General</source>
|
||||
<translation>Ogólne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="33"/>
|
||||
<source>Full name:</source>
|
||||
<translation>Pełna nazwa:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="43"/>
|
||||
<source>Login name:</source>
|
||||
<translation>Login:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="53"/>
|
||||
<source>Set password:</source>
|
||||
<translation>Ustaw hasło:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="77"/>
|
||||
<source>User ID:</source>
|
||||
<translation>ID użytkownika:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="84"/>
|
||||
<source>Main group:</source>
|
||||
<translation>Grupa główna:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="99"/>
|
||||
<source>Advanced</source>
|
||||
<translation>Zaawansowane</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="105"/>
|
||||
<source>Login shell:</source>
|
||||
<translation>Powłoka:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="122"/>
|
||||
<source>Home directory:</source>
|
||||
<translation>Katalog domowy:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="64"/>
|
||||
<source>Change password:</source>
|
||||
<translation>Zmień hasło:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>Error</source>
|
||||
<translation>Błąd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<source>The user ID is in use.</source>
|
||||
<translation>To ID użytkownika jest już w użyciu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<source>The user name cannot be empty.</source>
|
||||
<translation>Nazwa użytkownika nie może być pusta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>The user name is in use.</source>
|
||||
<translation>Ta nazwa użytkownika jest już w użyciu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Potwierdzenie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Are you sure you want to use an "empty password" for the user?</source>
|
||||
<translation>Czy na pewno chcesz użyć "pustego hasła" dla tego użytkownika?</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,263 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.0" language="pt">
|
||||
<context>
|
||||
<name>GroupDialog</name>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="14"/>
|
||||
<source>Group Settings</source>
|
||||
<translation>Definições de grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="20"/>
|
||||
<source>Group name:</source>
|
||||
<translation>Nome do grupo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="37"/>
|
||||
<source>Group ID:</source>
|
||||
<translation>ID do grupo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.ui" line="44"/>
|
||||
<source>Users belong to this group:</source>
|
||||
<translation>Utilizadores pertencentes a este grupo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>Error</source>
|
||||
<translation>Erro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="83"/>
|
||||
<source>The group ID is in use.</source>
|
||||
<translation>O ID do grupo já está em utilização.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="92"/>
|
||||
<source>The group name cannot be empty.</source>
|
||||
<translation>O nome do grupo não pode estar vazio.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../groupdialog.cpp" line="97"/>
|
||||
<source>The group name is in use.</source>
|
||||
<translation>O nome do grupo já está em utilização.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="14"/>
|
||||
<source>User and Group Settings</source>
|
||||
<translation>Definições de grupo e utilizador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="31"/>
|
||||
<source>&Users</source>
|
||||
<translation>&Utilizadores</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="50"/>
|
||||
<source>Login Name</source>
|
||||
<translation>Nome de acesso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="55"/>
|
||||
<source>User ID</source>
|
||||
<translation>ID de utilizador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="60"/>
|
||||
<source>Full Name</source>
|
||||
<translation>Nome completo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="65"/>
|
||||
<source>Group</source>
|
||||
<translation>Grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="70"/>
|
||||
<source>Home Directory</source>
|
||||
<translation>Pasta pessoal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Show system users (for advanced users only)</source>
|
||||
<translation>Mostrar utilizadores de sistema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="89"/>
|
||||
<source>&Groups</source>
|
||||
<translation>&Grupos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="102"/>
|
||||
<source>Name</source>
|
||||
<translation>Nome</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="107"/>
|
||||
<source>Group ID</source>
|
||||
<translation>ID do grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="120"/>
|
||||
<source>toolBar</source>
|
||||
<translation>Barra de ferramentas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="147"/>
|
||||
<source>Add</source>
|
||||
<translation>Adicionar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="150"/>
|
||||
<source>Add new users or groups</source>
|
||||
<translation>Adicionar utilizadores ou grupos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="160"/>
|
||||
<source>Delete</source>
|
||||
<translation>Eliminar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="163"/>
|
||||
<source>Delete selected item</source>
|
||||
<translation>Eliminar item selecionado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="173"/>
|
||||
<source>Properties</source>
|
||||
<translation>Propriedades</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="176"/>
|
||||
<source>edit properties of the selected item</source>
|
||||
<translation>Editar propriedades do item selecionado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="186"/>
|
||||
<source>Refresh</source>
|
||||
<translation>Atualizar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="189"/>
|
||||
<source>Refresh the lists</source>
|
||||
<translation>Atualizar as listas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="145"/>
|
||||
<source>Error</source>
|
||||
<translation>Erro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Confirmação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="191"/>
|
||||
<source>Are you sure you want to delete the selected user?</source>
|
||||
<translation>Tem a certeza que quer eliminar o utilizador selecionado?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="204"/>
|
||||
<source>Are you sure you want to delete the selected group?</source>
|
||||
<translation>Tem a certeza que quer eliminar o grupo selecionado?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserDialog</name>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="14"/>
|
||||
<source>User Settings</source>
|
||||
<translation>Definições de utilizador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="24"/>
|
||||
<source>General</source>
|
||||
<translation>Geral</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="33"/>
|
||||
<source>Full name:</source>
|
||||
<translation>Nome completo:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="43"/>
|
||||
<source>Login name:</source>
|
||||
<translation>Nome de acesso:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="53"/>
|
||||
<source>Set password:</source>
|
||||
<translation>Definir senha:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="77"/>
|
||||
<source>User ID:</source>
|
||||
<translation>ID de utilizador:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="84"/>
|
||||
<source>Main group:</source>
|
||||
<translation>Grupo principal:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="99"/>
|
||||
<source>Advanced</source>
|
||||
<translation>Avançado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="105"/>
|
||||
<source>Login shell:</source>
|
||||
<translation>Consola de acesso:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.ui" line="122"/>
|
||||
<source>Home directory:</source>
|
||||
<translation>Pasta pessoal:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="64"/>
|
||||
<source>Change password:</source>
|
||||
<translation>Mudar senha:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>Error</source>
|
||||
<translation>Erro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="125"/>
|
||||
<source>The user ID is in use.</source>
|
||||
<translation>O ID do utilizador já está em utilização.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="138"/>
|
||||
<source>The user name cannot be empty.</source>
|
||||
<translation>O nome de utilizador não pode estar vazio.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="143"/>
|
||||
<source>The user name is in use.</source>
|
||||
<translation>O nome de utilizador já está em utilização.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Confirm</source>
|
||||
<translation>Confirmação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../userdialog.cpp" line="159"/>
|
||||
<source>Are you sure you want to use an "empty password" for the user?</source>
|
||||
<translation>Tem a certeza que quer definir uma senha vazia para o utilizador?</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,6 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name[ru_RU]=Пользователи и группы
|
||||
GenericName[ru_RU]=Настройки пользователей и групп
|
||||
Comment[ru_RU]=Настроить пользователей и группы вашей системы
|
||||
|
||||
#TRANSLATIONS_DIR=translations
|
@ -0,0 +1,355 @@
|
||||
#include "usermanager.h"
|
||||
#include <QDebug>
|
||||
#include <algorithm>
|
||||
#include <QFileSystemWatcher>
|
||||
#include <QTimer>
|
||||
#include <QProcess>
|
||||
#include <QFile>
|
||||
#include <unistd.h>
|
||||
|
||||
static const QString PASSWD_FILE = QStringLiteral("/etc/passwd");
|
||||
static const QString GROUP_FILE = QStringLiteral("/etc/group");
|
||||
static const QString LOGIN_DEFS_FILE = QStringLiteral("/etc/login.defs");
|
||||
|
||||
UserManager::UserManager(QObject *parent):
|
||||
QObject(parent),
|
||||
mWatcher(new QFileSystemWatcher(QStringList() << PASSWD_FILE << GROUP_FILE, this))
|
||||
{
|
||||
loadUsersAndGroups();
|
||||
connect(mWatcher, &QFileSystemWatcher::fileChanged, this, &UserManager::onFileChanged);
|
||||
}
|
||||
|
||||
UserManager::~UserManager() {
|
||||
qDeleteAll(mUsers);
|
||||
qDeleteAll(mGroups);
|
||||
}
|
||||
|
||||
void UserManager::loadUsersAndGroups()
|
||||
{
|
||||
// load groups
|
||||
setgrent();
|
||||
struct group * grp;
|
||||
while((grp = getgrent())) {
|
||||
GroupInfo* group = new GroupInfo(grp);
|
||||
mGroups.append(group);
|
||||
// add members of this group
|
||||
for(char** member_name = grp->gr_mem; *member_name; ++member_name) {
|
||||
group->addMember(QString::fromLatin1(*member_name));
|
||||
}
|
||||
}
|
||||
endgrent();
|
||||
std::sort(mGroups.begin(), mGroups.end(), [](GroupInfo* g1, GroupInfo* g2) {
|
||||
return g1->name() < g2->name();
|
||||
});
|
||||
|
||||
// load users
|
||||
setpwent();
|
||||
struct passwd * pw;
|
||||
while((pw = getpwent())) {
|
||||
UserInfo* user = new UserInfo(pw);
|
||||
mUsers.append(user);
|
||||
// add groups to this user
|
||||
for(const GroupInfo* group: mGroups) {
|
||||
if(group->hasMember(user->name())) {
|
||||
user->addGroup(group->name());
|
||||
}
|
||||
}
|
||||
}
|
||||
endpwent();
|
||||
std::sort(mUsers.begin(), mUsers.end(), [](UserInfo*& u1, UserInfo*& u2) {
|
||||
return u1->name() < u2->name();
|
||||
});
|
||||
}
|
||||
|
||||
// load settings from /etc/login.defs
|
||||
void UserManager::loadLoginDefs() {
|
||||
// FIXME: parse /etc/login.defs to get max UID, max system UID...etc.
|
||||
QFile file(LOGIN_DEFS_FILE);
|
||||
if(file.open(QIODevice::ReadOnly)) {
|
||||
while(!file.atEnd()) {
|
||||
QByteArray line = file.readLine().trimmed();
|
||||
if(line.isEmpty() || line.startsWith('#'))
|
||||
continue;
|
||||
QStringList parts = QString::fromUtf8(line).split(QRegExp("\\s"), QString::SkipEmptyParts);
|
||||
if(parts.length() >= 2) {
|
||||
QString& key = parts[0];
|
||||
QString& val = parts[1];
|
||||
if(key == QLatin1Literal("SYS_UID_MIN")) {
|
||||
}
|
||||
else if(key == QLatin1Literal("SYS_UID_MAX")) {
|
||||
}
|
||||
else if(key == QLatin1Literal("UID_MIN")) {
|
||||
}
|
||||
else if(key == QLatin1Literal("UID_MAX")) {
|
||||
}
|
||||
else if(key == QLatin1Literal("SYS_GID_MIN")) {
|
||||
}
|
||||
else if(key == QLatin1Literal("SYS_GID_MAX")) {
|
||||
}
|
||||
else if(key == QLatin1Literal("GID_MIN")) {
|
||||
}
|
||||
else if(key == QLatin1Literal("GID_MAX")) {
|
||||
}
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UserInfo* UserManager::findUserInfo(const char* name) {
|
||||
auto it = std::find_if(mUsers.begin(), mUsers.end(), [name](const UserInfo* user) {
|
||||
return user->name() == name;
|
||||
});
|
||||
return it != mUsers.end() ? *it : nullptr;
|
||||
}
|
||||
|
||||
UserInfo* UserManager::findUserInfo(QString name) {
|
||||
auto it = std::find_if(mUsers.begin(), mUsers.end(), [name](const UserInfo* user) {
|
||||
return user->name() == name;
|
||||
});
|
||||
return it != mUsers.end() ? *it : nullptr;
|
||||
}
|
||||
|
||||
UserInfo* UserManager::findUserInfo(uid_t uid) {
|
||||
auto it = std::find_if(mUsers.begin(), mUsers.end(), [uid](const UserInfo* user) {
|
||||
return user->uid() == uid;
|
||||
});
|
||||
return it != mUsers.end() ? *it : nullptr;
|
||||
}
|
||||
|
||||
GroupInfo* UserManager::findGroupInfo(const char* name) {
|
||||
auto it = std::find_if(mGroups.begin(), mGroups.end(), [name](const GroupInfo* group) {
|
||||
return group->name() == name;
|
||||
});
|
||||
return it != mGroups.end() ? *it : nullptr;
|
||||
}
|
||||
|
||||
GroupInfo* UserManager::findGroupInfo(QString name) {
|
||||
auto it = std::find_if(mGroups.begin(), mGroups.end(), [name](const GroupInfo* group) {
|
||||
return group->name() == name;
|
||||
});
|
||||
return it != mGroups.end() ? *it : nullptr;
|
||||
}
|
||||
|
||||
GroupInfo* UserManager::findGroupInfo(gid_t gid) {
|
||||
auto it = std::find_if(mGroups.begin(), mGroups.end(), [gid](const GroupInfo* group) {
|
||||
return group->gid() == gid;
|
||||
});
|
||||
return it != mGroups.end() ? *it : nullptr;
|
||||
}
|
||||
|
||||
void UserManager::reload() {
|
||||
mWatcher->addPath(PASSWD_FILE);
|
||||
mWatcher->addPath(GROUP_FILE);
|
||||
|
||||
qDeleteAll(mUsers); // free the old UserInfo objects
|
||||
mUsers.clear();
|
||||
|
||||
qDeleteAll(mGroups); // free the old GroupInfo objects
|
||||
mGroups.clear();
|
||||
|
||||
loadUsersAndGroups();
|
||||
Q_EMIT changed();
|
||||
}
|
||||
|
||||
void UserManager::onFileChanged(const QString &path) {
|
||||
// QFileSystemWatcher is very broken and has a ridiculous design.
|
||||
// we get "fileChanged()" when the file is deleted or modified,
|
||||
// but there is no way to distinguish them. If the file is deleted,
|
||||
// the QFileSystemWatcher stop working silently. Hence we workaround
|
||||
// this by remove the paths from the watcher and add them back again
|
||||
// to force the creation of new notifiers.
|
||||
mWatcher->removePath(PASSWD_FILE);
|
||||
mWatcher->removePath(GROUP_FILE);
|
||||
QTimer::singleShot(500, this, &UserManager::reload);
|
||||
}
|
||||
|
||||
bool UserManager::pkexec(const QStringList& command, const QByteArray& stdinData) {
|
||||
QProcess process;
|
||||
qDebug() << command;
|
||||
QStringList args;
|
||||
args << QStringLiteral("--disable-internal-agent")
|
||||
<< QStringLiteral("lxqt-admin-user-helper")
|
||||
<< command;
|
||||
process.start(QStringLiteral("pkexec"), args);
|
||||
if(!stdinData.isEmpty()) {
|
||||
process.waitForStarted();
|
||||
process.write(stdinData);
|
||||
process.waitForBytesWritten();
|
||||
process.closeWriteChannel();
|
||||
}
|
||||
process.waitForFinished(-1);
|
||||
qDebug() << process.readAllStandardError();
|
||||
return process.exitCode() == 0;
|
||||
}
|
||||
|
||||
bool UserManager::addUser(UserInfo* user) {
|
||||
if(!user || user->name().isEmpty())
|
||||
return false;
|
||||
QStringList command;
|
||||
command << QStringLiteral("useradd");
|
||||
if(user->uid() != 0) {
|
||||
command << QStringLiteral("-u") << QString::number(user->uid());
|
||||
}
|
||||
if(!user->homeDir().isEmpty()) {
|
||||
command << QStringLiteral("-d") << user->homeDir();
|
||||
command << QStringLiteral("-m"); // create the user's home directory if it does not exist.
|
||||
}
|
||||
if(!user->shell().isEmpty()) {
|
||||
command << QStringLiteral("-s") << user->shell();
|
||||
}
|
||||
if(!user->fullName().isEmpty()) {
|
||||
command << QStringLiteral("-c") << user->fullName();
|
||||
}
|
||||
if(user->gid() != 0) {
|
||||
command << QStringLiteral("-g") << QString::number(user->gid());
|
||||
}
|
||||
if(!user->groups().isEmpty()) { // set group membership
|
||||
command << QStringLiteral("-G") << user->groups().join(',');
|
||||
}
|
||||
command << user->name();
|
||||
return pkexec(command);
|
||||
}
|
||||
|
||||
bool UserManager::modifyUser(UserInfo* user, UserInfo* newSettings) {
|
||||
if(!user || user->name().isEmpty() || !newSettings)
|
||||
return false;
|
||||
|
||||
QStringList command;
|
||||
command << QStringLiteral("usermod");
|
||||
if(newSettings->uid() != user->uid())
|
||||
command << QStringLiteral("-u") << QString::number(newSettings->uid());
|
||||
|
||||
if(newSettings->homeDir() != user->homeDir()) {
|
||||
command << QStringLiteral("-d") << newSettings->homeDir();
|
||||
// command << QStringLiteral("-m"); // create the user's home directory if it does not exist.
|
||||
}
|
||||
if(newSettings->shell() != user->shell()) {
|
||||
command << QStringLiteral("-s") << newSettings->shell();
|
||||
}
|
||||
|
||||
if(newSettings->fullName() != user->fullName())
|
||||
command << QStringLiteral("-c") << newSettings->fullName();
|
||||
if(newSettings->gid() != user->gid())
|
||||
command << QStringLiteral("-g") << QString::number(newSettings->gid());
|
||||
|
||||
if(newSettings->name() != user->name()) // change login name
|
||||
command << QStringLiteral("-l") << newSettings->name();
|
||||
|
||||
if(newSettings->groups() != user->groups()) { // change group membership
|
||||
command << QStringLiteral("-G") << newSettings->groups().join(',');
|
||||
}
|
||||
|
||||
command << user->name();
|
||||
return pkexec(command);
|
||||
}
|
||||
|
||||
bool UserManager::deleteUser(UserInfo* user) {
|
||||
if(!user || user->name().isEmpty())
|
||||
return false;
|
||||
|
||||
QStringList command;
|
||||
command << QStringLiteral("userdel");
|
||||
command << user->name();
|
||||
return pkexec(command);
|
||||
}
|
||||
|
||||
bool UserManager::changePassword(UserInfo* user, QByteArray newPasswd) {
|
||||
// In theory, the current user should be able to use "passwd" to
|
||||
// reset his/her own password without root permission, but...
|
||||
// /usr/bin/passwd is a setuid program running as root and QProcess
|
||||
// does not seem to capture its stdout... So... requires root for now.
|
||||
if(geteuid() == user->uid()) {
|
||||
// FIXME: there needs to be a way to let a user change his/her own password.
|
||||
// Maybe we can use our pkexec helper script to achieve this.
|
||||
}
|
||||
QStringList command;
|
||||
command << QStringLiteral("passwd");
|
||||
command << user->name();
|
||||
|
||||
// we need to type the new password for two times.
|
||||
QByteArray stdinData;
|
||||
stdinData += newPasswd;
|
||||
stdinData += "\n";
|
||||
stdinData += newPasswd;
|
||||
stdinData += "\n";
|
||||
return pkexec(command, stdinData);
|
||||
}
|
||||
|
||||
bool UserManager::addGroup(GroupInfo* group) {
|
||||
if(!group || group->name().isEmpty())
|
||||
return false;
|
||||
|
||||
QStringList command;
|
||||
command << QStringLiteral("groupadd");
|
||||
if(group->gid() != 0) {
|
||||
command << QStringLiteral("-g") << QString::number(group->gid());
|
||||
}
|
||||
command << group->name();
|
||||
return pkexec(command);
|
||||
}
|
||||
|
||||
bool UserManager::modifyGroup(GroupInfo* group, GroupInfo* newSettings) {
|
||||
if(!group || group->name().isEmpty() || !newSettings)
|
||||
return false;
|
||||
QStringList command;
|
||||
command << QStringLiteral("groupmod");
|
||||
if(newSettings->gid() != group->gid())
|
||||
command << QStringLiteral("-g") << QString::number(newSettings->gid());
|
||||
if(newSettings->name() != group->name())
|
||||
command << QStringLiteral("-n") << newSettings->name();
|
||||
command << group->name();
|
||||
if(!pkexec(command))
|
||||
return false;
|
||||
|
||||
// if group members are changed, use gpasswd to reset members
|
||||
if(newSettings->members() != group->members()) {
|
||||
command.clear();
|
||||
command << QStringLiteral("gpasswd");
|
||||
command << QStringLiteral("-M"); // Set the list of group members.
|
||||
command << newSettings->members().join(',');
|
||||
command << group->name();
|
||||
return pkexec(command);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UserManager::deleteGroup(GroupInfo* group) {
|
||||
if(!group || group->name().isEmpty())
|
||||
return false;
|
||||
QStringList command;
|
||||
command << QStringLiteral("groupdel");
|
||||
command << group->name();
|
||||
return pkexec(command);
|
||||
}
|
||||
|
||||
bool UserManager::changePassword(GroupInfo* group, QByteArray newPasswd) {
|
||||
QStringList command;
|
||||
command << QStringLiteral("gpasswd");
|
||||
command << group->name();
|
||||
|
||||
// we need to type the new password for two times.
|
||||
QByteArray stdinData = newPasswd;
|
||||
stdinData += "\n";
|
||||
stdinData += newPasswd;
|
||||
stdinData += "\n";
|
||||
return pkexec(command, stdinData);
|
||||
}
|
||||
|
||||
const QStringList& UserManager::availableShells() {
|
||||
if(mAvailableShells.isEmpty()) {
|
||||
QFile file("/etc/shells");
|
||||
if(file.open(QIODevice::ReadOnly)) {
|
||||
while(!file.atEnd()) {
|
||||
QByteArray line = file.readLine().trimmed();
|
||||
if(line.isEmpty() || line.startsWith('#'))
|
||||
continue;
|
||||
mAvailableShells.append(QString::fromLocal8Bit(line));
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
return mAvailableShells;
|
||||
}
|
||||
|
@ -0,0 +1,212 @@
|
||||
#ifndef USERMANAGER_H
|
||||
#define USERMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QStringList>
|
||||
#include <sys/types.h>
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
|
||||
class QFileSystemWatcher;
|
||||
|
||||
class UserInfo
|
||||
{
|
||||
public:
|
||||
explicit UserInfo():mUid(0), mGid(0) {
|
||||
}
|
||||
explicit UserInfo(struct passwd* pw):
|
||||
mUid(pw->pw_uid),
|
||||
mGid(pw->pw_gid),
|
||||
mName(QString::fromLatin1(pw->pw_name)),
|
||||
mFullName(QString::fromUtf8(pw->pw_gecos)),
|
||||
mShell(QString::fromLocal8Bit(pw->pw_shell)),
|
||||
mHomeDir(QString::fromLocal8Bit(pw->pw_dir))
|
||||
{
|
||||
}
|
||||
|
||||
uid_t uid()const {
|
||||
return mUid;
|
||||
}
|
||||
void setUid(uid_t uid) {
|
||||
mUid = uid;
|
||||
}
|
||||
|
||||
gid_t gid() const {
|
||||
return mGid;
|
||||
}
|
||||
|
||||
void setGid(gid_t gid) {
|
||||
mGid = gid;
|
||||
}
|
||||
|
||||
QString name() const {
|
||||
return mName;
|
||||
}
|
||||
|
||||
void setName(const QString& name) {
|
||||
mName = name;
|
||||
}
|
||||
|
||||
QString fullName() const {
|
||||
return mFullName;
|
||||
}
|
||||
void setFullName(const QString& fullName) {
|
||||
mFullName = fullName;
|
||||
}
|
||||
|
||||
QString shell() const {
|
||||
return mShell;
|
||||
}
|
||||
void setShell(const QString& shell) {
|
||||
mShell = shell;
|
||||
}
|
||||
|
||||
QString homeDir() const {
|
||||
return mHomeDir;
|
||||
}
|
||||
void setHomeDir(const QString& homeDir) {
|
||||
mHomeDir = homeDir;
|
||||
}
|
||||
|
||||
const QStringList& groups() const {
|
||||
return mGroups;
|
||||
}
|
||||
|
||||
void addGroup(const QString& group) {
|
||||
mGroups.append(group);
|
||||
}
|
||||
|
||||
void removeGroup(const QString& group) {
|
||||
mGroups.removeOne(group);
|
||||
}
|
||||
|
||||
void removeAllGroups() {
|
||||
mGroups.clear();
|
||||
}
|
||||
|
||||
bool hasGroup(const QString& group) {
|
||||
return mGroups.contains(group);
|
||||
}
|
||||
|
||||
private:
|
||||
uid_t mUid;
|
||||
gid_t mGid;
|
||||
QString mName;
|
||||
QString mFullName;
|
||||
QString mShell;
|
||||
QString mHomeDir;
|
||||
QStringList mGroups;
|
||||
};
|
||||
|
||||
class GroupInfo
|
||||
{
|
||||
public:
|
||||
explicit GroupInfo(): mGid(0) {
|
||||
}
|
||||
explicit GroupInfo(struct group* grp):
|
||||
mGid(grp->gr_gid),
|
||||
mName(grp->gr_name)
|
||||
{
|
||||
}
|
||||
|
||||
gid_t gid() const {
|
||||
return mGid;
|
||||
}
|
||||
void setGid(gid_t gid) {
|
||||
mGid = gid;
|
||||
}
|
||||
|
||||
QString name() const {
|
||||
return mName;
|
||||
}
|
||||
void setName(const QString& name) {
|
||||
mName = name;
|
||||
}
|
||||
|
||||
const QStringList& members() const {
|
||||
return mMembers;
|
||||
}
|
||||
|
||||
void setMembers(const QStringList& members) {
|
||||
mMembers = members;
|
||||
}
|
||||
|
||||
void addMember(const QString& userName) {
|
||||
mMembers.append(userName);
|
||||
}
|
||||
|
||||
void removeMember(const QString& userName) {
|
||||
mMembers.removeOne(userName);
|
||||
}
|
||||
|
||||
void removeAllMemberss() {
|
||||
mMembers.clear();
|
||||
}
|
||||
|
||||
bool hasMember(const QString& userName) const {
|
||||
return mMembers.contains(userName);
|
||||
}
|
||||
|
||||
private:
|
||||
gid_t mGid;
|
||||
QString mName;
|
||||
QStringList mMembers;
|
||||
};
|
||||
|
||||
class UserManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit UserManager(QObject *parent = 0);
|
||||
~UserManager();
|
||||
|
||||
const QList<UserInfo*>& users() const {
|
||||
return mUsers;
|
||||
}
|
||||
|
||||
const QList<GroupInfo*>& groups() const {
|
||||
return mGroups;
|
||||
}
|
||||
|
||||
const QStringList& availableShells();
|
||||
|
||||
bool addUser(UserInfo* user);
|
||||
bool modifyUser(UserInfo* user, UserInfo* newSettings);
|
||||
bool deleteUser(UserInfo* user);
|
||||
bool changePassword(UserInfo* user, QByteArray newPasswd);
|
||||
|
||||
bool addGroup(GroupInfo* group);
|
||||
bool modifyGroup(GroupInfo* group, GroupInfo* newSettings);
|
||||
bool deleteGroup(GroupInfo* group);
|
||||
bool changePassword(GroupInfo* group, QByteArray newPasswd);
|
||||
|
||||
// FIXME: add APIs to change group membership with "gpasswd"
|
||||
|
||||
UserInfo* findUserInfo(const char* name);
|
||||
UserInfo* findUserInfo(QString name);
|
||||
UserInfo* findUserInfo(uid_t uid);
|
||||
|
||||
GroupInfo* findGroupInfo(const char* name);
|
||||
GroupInfo* findGroupInfo(QString name);
|
||||
GroupInfo* findGroupInfo(gid_t gid);
|
||||
|
||||
private:
|
||||
void loadUsersAndGroups();
|
||||
void loadLoginDefs();
|
||||
bool pkexec(const QStringList &command, const QByteArray &stdinData = QByteArray());
|
||||
|
||||
Q_SIGNALS:
|
||||
void changed();
|
||||
|
||||
protected Q_SLOTS:
|
||||
void onFileChanged(const QString &path);
|
||||
void reload();
|
||||
|
||||
private:
|
||||
QList<UserInfo*> mUsers;
|
||||
QList<GroupInfo*> mGroups;
|
||||
QFileSystemWatcher* mWatcher;
|
||||
QStringList mAvailableShells;
|
||||
};
|
||||
|
||||
#endif // USERMANAGER_H
|
@ -1,3 +0,0 @@
|
||||
[Project]
|
||||
Manager=KDevCMakeManager
|
||||
Name=lxqt-admin
|
Loading…
Reference in new issue