1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Merge remote-tracking branch 'upsteam/master' into style

This commit is contained in:
agilob 2014-10-22 16:21:01 +01:00
commit 9bc1568c0d
47 changed files with 1665 additions and 789 deletions

View File

@ -20,15 +20,15 @@ However, it is not a fork.
This client runs on Windows, Linux and Mac natively.<br/> This client runs on Windows, Linux and Mac natively.<br/>
You can find the latest versions of qTox <a href="https://github.com/tux3/qTox/releases">here</a>, or from the Tox Project's servers : You can find the latest versions of qTox <a href="https://github.com/tux3/qTox/releases">here</a> (Windows and Linux), or from the Tox Project's servers :
<a href="https://jenkins.libtoxcore.so/job/tux3-toxgui-win32/lastSuccessfulBuild/artifact/toxgui-win32.zip">Windows download</a><br/> <a href="https://dist-build.tox.im/qtox.dmg">Mac download </a><br/>
<a href="https://jenkins.libtoxcore.so/job/qTox%20OS%20X/lastSuccessfulBuild/artifact/qtox.dmg">Mac download </a><br/> <a href="https://jenkins.libtoxcore.so/job/qTox-linux-amd64/lastSuccessfulBuild/artifact/qt/qtox.xz">Linux download</a> (click "Last successful artifacts")<br/>
<a href="https://jenkins.libtoxcore.so/job/qTox-linux-amd64/">Linux download</a> (click "Last successful artifacts")<br/>
<h3>Screenshots</h3> <h3>Screenshots</h3>
<h5>Note: The screenshots may not always be up to date, but they should give a good idea of the general look and features</h5> <h5>Note: The screenshots may not always be up to date, but they should give a good idea of the general look and features</h5>
<img src="https://wiki.tox.im/images/5/5d/ToxGUI_tux3.png"> <img src="https://wiki.tox.im/images/5/5d/ToxGUI_tux3.png"/>
<img src="https://i.imgur.com/0XWcqBc.jpg"/>
##Documentation: ##Documentation:

2
debian/control vendored
View File

@ -7,7 +7,7 @@ Build-Depends: debhelper (>= 9), cdbs, qt5-qmake, libopenal-dev (>= 1:1.14), lib
Package: qtox Package: qtox
Architecture: any Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libopenal1 (>= 1.14), libopus0 (>= 0.9), libqt5core5a (>= 5.2), libqt5gui5 (>= 5.2), libqt5network5 (>= 5.0), libqt5widgets5 (>= 5.2), libqt5xml5 (>= 5.0), libstdc++6 (>= 4.9), libvpx1 (>= 1.0.0) Depends: ${shlibs:Depends}, ${misc:Depends}, libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libopenal1 (>= 1.14), libopus0 (>= 0.9), libqt5core5a (>= 5.2), libqt5gui5 (>= 5.2), libqt5network5 (>= 5.0), libqt5widgets5 (>= 5.2), libqt5xml5 (>= 5.0), libstdc++6 (>= 4.8.2), libvpx1 (>= 1.0.0)
Description: Tox client Description: Tox client
qTox is a powerful Tox client that follows the Tox design guidelines. qTox is a powerful Tox client that follows the Tox design guidelines.
Tox is a decentralized and encrypted replacement for Skype, supporting Tox is a decentralized and encrypted replacement for Skype, supporting

BIN
img/icons/qtox.icns Normal file

Binary file not shown.

View File

@ -60,6 +60,7 @@ win32 {
LIBS += -lz -lopengl32 -lole32 -loleaut32 -luuid -lvfw32 -ljpeg -ltiff -lpng -ljasper -lIlmImf -lHalf -lws2_32 LIBS += -lz -lopengl32 -lole32 -loleaut32 -luuid -lvfw32 -ljpeg -ltiff -lpng -ljasper -lIlmImf -lHalf -lws2_32
} else { } else {
macx { macx {
ICON = img/icons/qtox.icns
LIBS += -L$$PWD/libs/lib/ -ltoxcore -ltoxav -lsodium -lvpx -framework OpenAL -lopencv_core -lopencv_highgui LIBS += -L$$PWD/libs/lib/ -ltoxcore -ltoxav -lsodium -lvpx -framework OpenAL -lopencv_core -lopencv_highgui
} else { } else {
# If we're building a package, static link libtox[core,av] and libsodium, since they are not provided by any package # If we're building a package, static link libtox[core,av] and libsodium, since they are not provided by any package
@ -68,7 +69,7 @@ win32 {
INSTALLS += target INSTALLS += target
LIBS += -L$$PWD/libs/lib/ -lopus -lvpx -lopenal -Wl,-Bstatic -ltoxcore -ltoxav -lsodium -lopencv_highgui -lopencv_imgproc -lopencv_core -lz -Wl,-Bdynamic LIBS += -L$$PWD/libs/lib/ -lopus -lvpx -lopenal -Wl,-Bstatic -ltoxcore -ltoxav -lsodium -lopencv_highgui -lopencv_imgproc -lopencv_core -lz -Wl,-Bdynamic
LIBS += -Wl,-Bstatic -ljpeg -ltiff -lpng -ljasper -lIlmImf -lIlmThread -lIex -ldc1394 -lraw1394 -lHalf -lz -llzma -ljbig LIBS += -Wl,-Bstatic -ljpeg -ltiff -lpng -ljasper -lIlmImf -lIlmThread -lIex -ldc1394 -lraw1394 -lHalf -lz -llzma -ljbig
LIBS += -Wl,-Bdynamic -ltbb -lv4l1 -lv4l2 -lgnutls -lrtmp -lgnutls -lavformat -lavcodec -lavutil -lavfilter -lswscale -lusb-1.0 LIBS += -Wl,-Bdynamic -lv4l1 -lv4l2 -lavformat -lavcodec -lavutil -lswscale -lusb-1.0
} else { } else {
LIBS += -L$$PWD/libs/lib/ -ltoxcore -ltoxav -lvpx -lopenal -lopencv_core -lopencv_highgui -lopencv_imgproc LIBS += -L$$PWD/libs/lib/ -ltoxcore -ltoxav -lvpx -lopenal -lopencv_core -lopencv_highgui -lopencv_imgproc
@ -134,10 +135,12 @@ HEADERS += src/widget/form/addfriendform.h \
src/widget/tool/chatactions/filetransferaction.h \ src/widget/tool/chatactions/filetransferaction.h \
src/widget/tool/chatactions/systemmessageaction.h \ src/widget/tool/chatactions/systemmessageaction.h \
src/widget/tool/chatactions/actionaction.h \ src/widget/tool/chatactions/actionaction.h \
src/widget/tool/chatactions/alertaction.h \
src/widget/maskablepixmapwidget.h \ src/widget/maskablepixmapwidget.h \
src/videosource.h \ src/videosource.h \
src/cameraworker.h \ src/cameraworker.h \
src/widget/videosurface.h src/widget/videosurface.h \
src/widget/form/tabcompleter.h
SOURCES += \ SOURCES += \
src/widget/form/addfriendform.cpp \ src/widget/form/addfriendform.cpp \
@ -182,7 +185,9 @@ SOURCES += \
src/widget/tool/chatactions/filetransferaction.cpp \ src/widget/tool/chatactions/filetransferaction.cpp \
src/widget/tool/chatactions/systemmessageaction.cpp \ src/widget/tool/chatactions/systemmessageaction.cpp \
src/widget/tool/chatactions/actionaction.cpp \ src/widget/tool/chatactions/actionaction.cpp \
src/widget/tool/chatactions/alertaction.cpp \
src/widget/maskablepixmapwidget.cpp \ src/widget/maskablepixmapwidget.cpp \
src/cameraworker.cpp \ src/cameraworker.cpp \
src/widget/videosurface.cpp \ src/widget/videosurface.cpp \
src/netvideosource.cpp src/netvideosource.cpp \
src/widget/form/tabcompleter.cpp

View File

@ -18,6 +18,7 @@
#include <QTimer> #include <QTimer>
#include <QDebug> #include <QDebug>
#include <QCoreApplication>
CameraWorker::CameraWorker(int index) CameraWorker::CameraWorker(int index)
: clock(nullptr) : clock(nullptr)
@ -178,6 +179,7 @@ void CameraWorker::setProp(int prop, double val)
double CameraWorker::getProp(int prop) double CameraWorker::getProp(int prop)
{ {
double ret = 0.0; double ret = 0.0;
qApp->processEvents();
QMetaObject::invokeMethod(this, "_getProp", Qt::BlockingQueuedConnection, Q_RETURN_ARG(double, ret), Q_ARG(int, prop)); QMetaObject::invokeMethod(this, "_getProp", Qt::BlockingQueuedConnection, Q_RETURN_ARG(double, ret), Q_ARG(int, prop));
return ret; return ret;

View File

@ -226,6 +226,12 @@ void Core::start()
} }
loadPath = ""; loadPath = "";
} }
else // new ID
{
setStatusMessage(tr("Toxing on qTox")); // this also solves the not updating issue
setUsername(tr("qTox User"));
Widget::getInstance()->onSettingsClicked(); // update ui with new profile (im worried about threading, but it seems to work)
}
tox_callback_friend_request(tox, onFriendRequest, this); tox_callback_friend_request(tox, onFriendRequest, this);
tox_callback_friend_message(tox, onFriendMessage, this); tox_callback_friend_message(tox, onFriendMessage, this);
@ -1187,10 +1193,7 @@ void Core::saveConfiguration(const QString& path)
void Core::switchConfiguration(const QString& profile) void Core::switchConfiguration(const QString& profile)
{ {
if (profile.isEmpty()) if (profile.isEmpty())
{ qDebug() << "Core: creating new Id";
qWarning() << "Core: got null profile to switch to, not switching";
return;
}
else else
qDebug() << "Core: switching from" << Settings::getInstance().getCurrentProfile() << "to" << profile; qDebug() << "Core: switching from" << Settings::getInstance().getCurrentProfile() << "to" << profile;
saveConfiguration(); saveConfiguration();
@ -1205,8 +1208,11 @@ void Core::switchConfiguration(const QString& profile)
} }
emit selfAvatarChanged(QPixmap(":/img/contact_dark.png")); emit selfAvatarChanged(QPixmap(":/img/contact_dark.png"));
emit blockingClearContacts(); // we need this to block, but signals are required for thread safety emit blockingClearContacts(); // we need this to block, but signals are required for thread safety
loadPath = QDir(Settings::getSettingsDirPath()).filePath(profile + TOX_EXT); if (profile.isEmpty())
loadPath = "";
else
loadPath = QDir(Settings::getSettingsDirPath()).filePath(profile + TOX_EXT);
Settings::getInstance().setCurrentProfile(profile); Settings::getInstance().setCurrentProfile(profile);
start(); start();

View File

@ -46,7 +46,7 @@ FileTransferInstance::FileTransferInstance(ToxFile File)
filenameElided = fm.elidedText(filename, Qt::ElideRight, MAX_CONTENT_WIDTH); filenameElided = fm.elidedText(filename, Qt::ElideRight, MAX_CONTENT_WIDTH);
size = getHumanReadableSize(File.filesize); size = getHumanReadableSize(File.filesize);
contentPrefWidth = std::max(fm.width(filenameElided), fm.width(size)); contentPrefWidth = std::max(fm.boundingRect(filenameElided).width(), fm.width(size));
speed = "0B/s"; speed = "0B/s";
eta = "00:00"; eta = "00:00";
@ -209,6 +209,7 @@ bool isFileWritable(QString& path)
void FileTransferInstance::acceptRecvRequest() void FileTransferInstance::acceptRecvRequest()
{ {
QString path = Settings::getInstance().getAutoAcceptDir(Core::getInstance()->getFriendAddress(friendId)); QString path = Settings::getInstance().getAutoAcceptDir(Core::getInstance()->getFriendAddress(friendId));
if (path.isEmpty()) path = Settings::getInstance().getGlobalAutoAcceptDir();
if (!path.isEmpty()) if (!path.isEmpty())
{ {
QDir dir(path); QDir dir(path);

View File

@ -18,7 +18,6 @@
#include "misc/settings.h" #include "misc/settings.h"
#include <QApplication> #include <QApplication>
#include <QFontDatabase> #include <QFontDatabase>
#include <QSystemTrayIcon>
#include <QDebug> #include <QDebug>
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -38,24 +37,6 @@ int main(int argc, char *argv[])
QFontDatabase::addApplicationFont("://DejaVuSans.ttf"); QFontDatabase::addApplicationFont("://DejaVuSans.ttf");
Widget* w = Widget::getInstance(); Widget* w = Widget::getInstance();
if (QSystemTrayIcon::isSystemTrayAvailable() == false)
{
qWarning() << "No system tray detected!";
w->show();
}
else
{
QSystemTrayIcon *icon = new QSystemTrayIcon(w);
QObject::connect(icon,
SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
w,
SLOT(onIconClick()));
icon->setIcon(w->windowIcon());
icon->show();
if(Settings::getInstance().getAutostartInTray() == false)
w->show();
}
int errorcode = a.exec(); int errorcode = a.exec();

View File

@ -112,6 +112,7 @@ void Settings::load()
translation = s.value("translation", "").toString(); translation = s.value("translation", "").toString();
makeToxPortable = s.value("makeToxPortable", false).toBool(); makeToxPortable = s.value("makeToxPortable", false).toBool();
autostartInTray = s.value("autostartInTray", false).toBool(); autostartInTray = s.value("autostartInTray", false).toBool();
closeToTray = s.value("closeToTray", false).toBool();
forceTCP = s.value("forceTCP", false).toBool(); forceTCP = s.value("forceTCP", false).toBool();
useProxy = s.value("useProxy", false).toBool(); useProxy = s.value("useProxy", false).toBool();
proxyAddr = s.value("proxyAddr", "").toString(); proxyAddr = s.value("proxyAddr", "").toString();
@ -137,6 +138,7 @@ void Settings::load()
secondColumnHandlePosFromRight = s.value("secondColumnHandlePosFromRight", 50).toInt(); secondColumnHandlePosFromRight = s.value("secondColumnHandlePosFromRight", 50).toInt();
timestampFormat = s.value("timestampFormat", "hh:mm").toString(); timestampFormat = s.value("timestampFormat", "hh:mm").toString();
minimizeOnClose = s.value("minimizeOnClose", false).toBool(); minimizeOnClose = s.value("minimizeOnClose", false).toBool();
minimizeToTray = s.value("minimizeToTray", false).toBool();
useNativeStyle = s.value("nativeStyle", false).toBool(); useNativeStyle = s.value("nativeStyle", false).toBool();
style = s.value("style", "None").toString(); style = s.value("style", "None").toString();
statusChangeNotificationEnabled = s.value("statusChangeNotificationEnabled", false).toBool(); statusChangeNotificationEnabled = s.value("statusChangeNotificationEnabled", false).toBool();
@ -153,6 +155,7 @@ void Settings::load()
s.endGroup(); s.endGroup();
s.beginGroup("AutoAccept"); s.beginGroup("AutoAccept");
globalAutoAcceptDir = s.value("globalAutoAcceptDir", "").toString();
for (auto& key : s.childKeys()) for (auto& key : s.childKeys())
autoAccept[key] = s.value(key).toString(); autoAccept[key] = s.value(key).toString();
s.endGroup(); s.endGroup();
@ -225,6 +228,7 @@ void Settings::save(QString path)
s.setValue("translation",translation); s.setValue("translation",translation);
s.setValue("makeToxPortable",makeToxPortable); s.setValue("makeToxPortable",makeToxPortable);
s.setValue("autostartInTray",autostartInTray); s.setValue("autostartInTray",autostartInTray);
s.setValue("closeToTray", closeToTray);
s.setValue("useProxy", useProxy); s.setValue("useProxy", useProxy);
s.setValue("forceTCP", forceTCP); s.setValue("forceTCP", forceTCP);
s.setValue("proxyAddr", proxyAddr); s.setValue("proxyAddr", proxyAddr);
@ -250,6 +254,7 @@ void Settings::save(QString path)
s.setValue("secondColumnHandlePosFromRight", secondColumnHandlePosFromRight); s.setValue("secondColumnHandlePosFromRight", secondColumnHandlePosFromRight);
s.setValue("timestampFormat", timestampFormat); s.setValue("timestampFormat", timestampFormat);
s.setValue("minimizeOnClose", minimizeOnClose); s.setValue("minimizeOnClose", minimizeOnClose);
s.setValue("minimizeToTray", minimizeToTray);
s.setValue("nativeStyle", useNativeStyle); s.setValue("nativeStyle", useNativeStyle);
s.setValue("style",style); s.setValue("style",style);
s.setValue("statusChangeNotificationEnabled", statusChangeNotificationEnabled); s.setValue("statusChangeNotificationEnabled", statusChangeNotificationEnabled);
@ -266,6 +271,7 @@ void Settings::save(QString path)
s.endGroup(); s.endGroup();
s.beginGroup("AutoAccept"); s.beginGroup("AutoAccept");
s.setValue("globalAutoAcceptDir", globalAutoAcceptDir);
for (auto& id : autoAccept.keys()) for (auto& id : autoAccept.keys())
s.setValue(id, autoAccept.value(id)); s.setValue(id, autoAccept.value(id));
s.endGroup(); s.endGroup();
@ -390,6 +396,27 @@ void Settings::setAutostartInTray(bool newValue)
autostartInTray = newValue; autostartInTray = newValue;
} }
bool Settings::getCloseToTray() const
{
return closeToTray;
}
void Settings::setCloseToTray(bool newValue)
{
closeToTray = newValue;
}
bool Settings::getMinimizeToTray() const
{
return minimizeToTray;
}
void Settings::setMinimizeToTray(bool newValue)
{
minimizeToTray = newValue;
}
bool Settings::getStatusChangeNotificationEnabled() const bool Settings::getStatusChangeNotificationEnabled() const
{ {
return statusChangeNotificationEnabled; return statusChangeNotificationEnabled;
@ -504,6 +531,16 @@ void Settings::setAutoAcceptDir(const QString& id, const QString& dir)
autoAccept[id.left(TOX_ID_PUBLIC_KEY_LENGTH)] = dir; autoAccept[id.left(TOX_ID_PUBLIC_KEY_LENGTH)] = dir;
} }
QString Settings::getGlobalAutoAcceptDir() const
{
return globalAutoAcceptDir;
}
void Settings::setGlobalAutoAcceptDir(const QString& newValue)
{
globalAutoAcceptDir = newValue;
}
void Settings::setWidgetData(const QString& uniqueName, const QByteArray& data) void Settings::setWidgetData(const QString& uniqueName, const QByteArray& data)
{ {
widgetSettings[uniqueName] = data; widgetSettings[uniqueName] = data;

View File

@ -52,6 +52,12 @@ public:
bool getAutostartInTray() const; bool getAutostartInTray() const;
void setAutostartInTray(bool newValue); void setAutostartInTray(bool newValue);
bool getCloseToTray() const;
void setCloseToTray(bool newValue);
bool getMinimizeToTray() const;
void setMinimizeToTray(bool newValue);
QString getStyle() const; QString getStyle() const;
void setStyle(const QString& newValue); void setStyle(const QString& newValue);
@ -128,6 +134,9 @@ public:
QString getAutoAcceptDir(const QString& id) const; QString getAutoAcceptDir(const QString& id) const;
void setAutoAcceptDir(const QString&id, const QString& dir); void setAutoAcceptDir(const QString&id, const QString& dir);
QString getGlobalAutoAcceptDir() const;
void setGlobalAutoAcceptDir(const QString& dir);
// ChatView // ChatView
int getFirstColumnHandlePos() const; int getFirstColumnHandlePos() const;
void setFirstColumnHandlePos(const int pos); void setFirstColumnHandlePos(const int pos);
@ -185,6 +194,8 @@ private:
QString translation; QString translation;
static bool makeToxPortable; static bool makeToxPortable;
bool autostartInTray; bool autostartInTray;
bool closeToTray;
bool minimizeToTray;
bool forceTCP; bool forceTCP;
@ -201,6 +212,7 @@ private:
QHash<QString, QByteArray> widgetSettings; QHash<QString, QByteArray> widgetSettings;
QHash<QString, QString> autoAccept; QHash<QString, QString> autoAccept;
QString globalAutoAcceptDir;
// GUI // GUI
bool enableSmoothAnimation; bool enableSmoothAnimation;

View File

@ -70,6 +70,7 @@ QColor Style::getColor(Style::ColorPalette entry)
QColor("#414141").lighter(120), QColor("#414141").lighter(120),
QColor("#d1d1d1"), QColor("#d1d1d1"),
QColor("#ffffff"), QColor("#ffffff"),
QColor("#ff7700"),
}; };
return palette[entry]; return palette[entry];
@ -108,6 +109,7 @@ QString Style::resolve(QString qss)
{"@mediumGreyLight", getColor(MediumGreyLight).name()}, {"@mediumGreyLight", getColor(MediumGreyLight).name()},
{"@lightGrey", getColor(LightGrey).name()}, {"@lightGrey", getColor(LightGrey).name()},
{"@white", getColor(White).name()}, {"@white", getColor(White).name()},
{"@orange", getColor(Orange).name()},
// fonts // fonts
{"@extraBig", qssifyFont(getFont(ExtraBig))}, {"@extraBig", qssifyFont(getFont(ExtraBig))},

View File

@ -37,6 +37,7 @@ public:
MediumGreyLight, MediumGreyLight,
LightGrey, LightGrey,
White, White,
Orange,
}; };
enum Font enum Font

View File

@ -154,4 +154,6 @@ void AddFriendForm::handleDnsLookup()
// finally we got it // finally we got it
emit friendRequested(friendAdress, getMessage()); emit friendRequested(friendAdress, getMessage());
this->toxId.setText("");
this->message.setText("");
} }

View File

@ -87,7 +87,7 @@ void ChatForm::onSendTriggered()
if (msg.isEmpty()) if (msg.isEmpty())
return; return;
QString name = Widget::getInstance()->getUsername(); QString name = Widget::getInstance()->getUsername();
if (msg.startsWith("/me ")) if (msg.startsWith("/me"))
{ {
msg = msg.right(msg.length() - 4); msg = msg.right(msg.length() - 4);
addMessage(name, msg, true); addMessage(name, msg, true);
@ -180,7 +180,8 @@ void ChatForm::onFileRecvRequest(ToxFile file)
chatWidget->insertMessage(new FileTransferAction(fileTrans, getElidedName(name), QTime::currentTime().toString("hh:mm"), false)); chatWidget->insertMessage(new FileTransferAction(fileTrans, getElidedName(name), QTime::currentTime().toString("hh:mm"), false));
if (!Settings::getInstance().getAutoAcceptDir(Core::getInstance()->getFriendAddress(f->friendId)).isEmpty()) if (!Settings::getInstance().getAutoAcceptDir(Core::getInstance()->getFriendAddress(f->friendId)).isEmpty()
|| !Settings::getInstance().getGlobalAutoAcceptDir().isEmpty())
fileTrans->pressFromHtml("btnB"); fileTrans->pressFromHtml("btnB");
} }
@ -408,7 +409,8 @@ void ChatForm::onAvPeerTimeout(int FriendId, int)
void ChatForm::onAvMediaChange(int FriendId, int CallId, bool video) void ChatForm::onAvMediaChange(int FriendId, int CallId, bool video)
{ {
Q_UNUSED(FriendId) if (FriendId != f->friendId || CallId != callId)
return;
if (video) if (video)
{ {

View File

@ -25,6 +25,7 @@
#include "src/widget/tool/chatactions/messageaction.h" #include "src/widget/tool/chatactions/messageaction.h"
#include "src/widget/tool/chatactions/systemmessageaction.h" #include "src/widget/tool/chatactions/systemmessageaction.h"
#include "src/widget/tool/chatactions/actionaction.h" #include "src/widget/tool/chatactions/actionaction.h"
#include "src/widget/tool/chatactions/alertaction.h"
#include "src/widget/chatareawidget.h" #include "src/widget/chatareawidget.h"
#include "src/widget/tool/chattextedit.h" #include "src/widget/tool/chattextedit.h"
#include "src/widget/maskablepixmapwidget.h" #include "src/widget/maskablepixmapwidget.h"
@ -173,7 +174,7 @@ void GenericChatForm::addMessage(QString author, QString message, bool isAction,
QString date = datetime.toString(Settings::getInstance().getTimestampFormat()); QString date = datetime.toString(Settings::getInstance().getTimestampFormat());
bool isMe = (author == Widget::getInstance()->getUsername()); bool isMe = (author == Widget::getInstance()->getUsername());
if (!isAction && message.startsWith("/me ")) if (!isAction && message.startsWith("/me"))
{ // always render actions regardless of what core thinks { // always render actions regardless of what core thinks
isAction = true; isAction = true;
message = message.right(message.length()-4); message = message.right(message.length()-4);
@ -193,6 +194,13 @@ void GenericChatForm::addMessage(QString author, QString message, bool isAction,
previousName = author; previousName = author;
} }
void GenericChatForm::addAlertMessage(QString author, QString message, QDateTime datetime)
{
QString date = datetime.toString(Settings::getInstance().getTimestampFormat());
chatWidget->insertMessage(new AlertAction(author, message, date));
previousName = author;
}
void GenericChatForm::onEmoteButtonClicked() void GenericChatForm::onEmoteButtonClicked()
{ {
// don't show the smiley selection widget if there are no smileys available // don't show the smiley selection widget if there are no smileys available

View File

@ -22,7 +22,7 @@
#include <QDateTime> #include <QDateTime>
// Spacing in px inserted when the author of the last message changes // Spacing in px inserted when the author of the last message changes
#define AUTHOR_CHANGE_SPACING 5 #define AUTHOR_CHANGE_SPACING 5 // why the hell is this a thing? surely the different font is enough?
class QLabel; class QLabel;
class QVBoxLayout; class QVBoxLayout;
@ -45,6 +45,7 @@ public:
virtual void setName(const QString &newName); virtual void setName(const QString &newName);
virtual void show(Ui::MainWindow &ui); virtual void show(Ui::MainWindow &ui);
void addMessage(QString author, QString message, bool isAction = false, QDateTime datetime=QDateTime::currentDateTime()); void addMessage(QString author, QString message, bool isAction = false, QDateTime datetime=QDateTime::currentDateTime());
void addAlertMessage(QString author, QString message, QDateTime datetime=QDateTime::currentDateTime());
void addSystemInfoMessage(const QString &message, const QString &type, const QDateTime &datetime=QDateTime::currentDateTime()); void addSystemInfoMessage(const QString &message, const QString &type, const QDateTime &datetime=QDateTime::currentDateTime());
int getNumberOfMessages(); int getNumberOfMessages();

View File

@ -15,6 +15,7 @@
*/ */
#include "groupchatform.h" #include "groupchatform.h"
#include "tabcompleter.h"
#include "src/group.h" #include "src/group.h"
#include "src/widget/groupwidget.h" #include "src/widget/groupwidget.h"
#include "src/widget/tool/chattextedit.h" #include "src/widget/tool/chattextedit.h"
@ -33,6 +34,8 @@ GroupChatForm::GroupChatForm(Group* chatGroup)
namesList = new QLabel(); namesList = new QLabel();
namesList->setObjectName("peersLabel"); namesList->setObjectName("peersLabel");
tabber = new TabCompleter(msgEdit, group);
fileButton->setEnabled(false); fileButton->setEnabled(false);
callButton->setVisible(false); callButton->setVisible(false);
videoButton->setVisible(false); videoButton->setVisible(false);
@ -59,6 +62,8 @@ GroupChatForm::GroupChatForm(Group* chatGroup)
connect(sendButton, SIGNAL(clicked()), this, SLOT(onSendTriggered())); connect(sendButton, SIGNAL(clicked()), this, SLOT(onSendTriggered()));
connect(msgEdit, SIGNAL(enterPressed()), this, SLOT(onSendTriggered())); connect(msgEdit, SIGNAL(enterPressed()), this, SLOT(onSendTriggered()));
connect(msgEdit, &ChatTextEdit::tabPressed, tabber, &TabCompleter::complete);
connect(msgEdit, &ChatTextEdit::keyPressed, tabber, &TabCompleter::reset);
setAcceptDrops(true); setAcceptDrops(true);
} }

View File

@ -21,6 +21,7 @@
namespace Ui {class MainWindow;} namespace Ui {class MainWindow;}
class Group; class Group;
class TabCompleter;
class GroupChatForm : public GenericChatForm class GroupChatForm : public GenericChatForm
{ {
@ -41,6 +42,7 @@ protected:
private: private:
Group* group; Group* group;
QLabel *nusersLabel, *namesList; QLabel *nusersLabel, *namesList;
TabCompleter* tabber;
}; };
#endif // GROUPCHATFORM_H #endif // GROUPCHATFORM_H

View File

@ -34,7 +34,44 @@
<height>489</height> <height>489</height>
</rect> </rect>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QGroupBox" name="audioGroup">
<property name="title">
<string>Volume Settings (Stubs)</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="4" column="0">
<widget class="QLabel" name="microphoneLabel">
<property name="text">
<string>Microphone</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="playbackLabel">
<property name="text">
<string>Playback</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSlider" name="playbackSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSlider" name="microphoneSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item> <item>
<widget class="QGroupBox" name="videoGroup"> <widget class="QGroupBox" name="videoGroup">
<property name="title"> <property name="title">
@ -47,7 +84,7 @@
<enum>QFormLayout::ExpandingFieldsGrow</enum> <enum>QFormLayout::ExpandingFieldsGrow</enum>
</property> </property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="resolutionLabel">
<property name="text"> <property name="text">
<string>Resolution</string> <string>Resolution</string>
</property> </property>
@ -64,7 +101,7 @@
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="hueLabel">
<property name="text"> <property name="text">
<string>Hue</string> <string>Hue</string>
</property> </property>
@ -78,7 +115,7 @@
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="brightnessLabel">
<property name="text"> <property name="text">
<string>Brightness</string> <string>Brightness</string>
</property> </property>
@ -92,7 +129,7 @@
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="saturationLabel">
<property name="text"> <property name="text">
<string>Saturation</string> <string>Saturation</string>
</property> </property>
@ -106,7 +143,7 @@
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="contrastLabel">
<property name="text"> <property name="text">
<string>Contrast</string> <string>Contrast</string>
</property> </property>
@ -119,64 +156,27 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1">
<widget class="QFrame" name="CamFrame">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>1</horstretch>
<verstretch>99</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="VideoSurface" name="CamVideoSurface" native="true"/>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> <item>
</widget> <widget class="QFrame" name="CamFrame">
</item> <property name="sizePolicy">
<item> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<widget class="QGroupBox" name="groupBox"> <horstretch>1</horstretch>
<property name="title"> <verstretch>99</verstretch>
<string>Volume Settings (Stubs)</string> </sizepolicy>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Playback</string>
</property> </property>
</widget> <property name="frameShape">
</item> <enum>QFrame::NoFrame</enum>
<item row="0" column="1">
<widget class="QSlider" name="horizontalSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property> </property>
</widget> <property name="frameShadow">
</item> <enum>QFrame::Raised</enum>
<item row="1" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Microphone</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSlider" name="horizontalSlider_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property> </property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="VideoSurface" name="CamVideoSurface" native="true"/>
</item>
</layout>
</widget> </widget>
</item> </item>
</layout> </layout>

View File

@ -40,7 +40,9 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
bodyUI->transComboBox->setCurrentIndex(locales.indexOf(Settings::getInstance().getTranslation())); bodyUI->transComboBox->setCurrentIndex(locales.indexOf(Settings::getInstance().getTranslation()));
bodyUI->cbMakeToxPortable->setChecked(Settings::getInstance().getMakeToxPortable()); bodyUI->cbMakeToxPortable->setChecked(Settings::getInstance().getMakeToxPortable());
bodyUI->startInTray->setChecked(Settings::getInstance().getAutostartInTray()); bodyUI->startInTray->setChecked(Settings::getInstance().getAutostartInTray());
bodyUI->statusChangesCheckbox->setChecked(Settings::getInstance().getStatusChangeNotificationEnabled()); bodyUI->closeToTray->setChecked(Settings::getInstance().getCloseToTray());
bodyUI->minimizeToTray->setChecked(Settings::getInstance().getMinimizeToTray());
bodyUI->statusChanges->setChecked(Settings::getInstance().getStatusChangeNotificationEnabled());
for (auto entry : SmileyPack::listSmileyPacks()) for (auto entry : SmileyPack::listSmileyPacks())
{ {
@ -72,7 +74,9 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
connect(bodyUI->transComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onTranslationUpdated())); connect(bodyUI->transComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onTranslationUpdated()));
connect(bodyUI->cbMakeToxPortable, &QCheckBox::stateChanged, this, &GeneralForm::onMakeToxPortableUpdated); connect(bodyUI->cbMakeToxPortable, &QCheckBox::stateChanged, this, &GeneralForm::onMakeToxPortableUpdated);
connect(bodyUI->startInTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetAutostartInTray); connect(bodyUI->startInTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetAutostartInTray);
connect(bodyUI->statusChangesCheckbox, &QCheckBox::stateChanged, this, &GeneralForm::onSetStatusChange); connect(bodyUI->closeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetCloseToTray);
connect(bodyUI->minimizeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetMinimizeToTray);
connect(bodyUI->statusChanges, &QCheckBox::stateChanged, this, &GeneralForm::onSetStatusChange);
connect(bodyUI->smileyPackBrowser, SIGNAL(currentIndexChanged(int)), this, SLOT(onSmileyBrowserIndexChanged(int))); connect(bodyUI->smileyPackBrowser, SIGNAL(currentIndexChanged(int)), this, SLOT(onSmileyBrowserIndexChanged(int)));
// new syntax can't handle overloaded signals... (at least not in a pretty way) // new syntax can't handle overloaded signals... (at least not in a pretty way)
connect(bodyUI->cbUDPDisabled, &QCheckBox::stateChanged, this, &GeneralForm::onUDPUpdated); connect(bodyUI->cbUDPDisabled, &QCheckBox::stateChanged, this, &GeneralForm::onUDPUpdated);
@ -109,6 +113,16 @@ void GeneralForm::onSetAutostartInTray()
Settings::getInstance().setAutostartInTray(bodyUI->startInTray->isChecked()); Settings::getInstance().setAutostartInTray(bodyUI->startInTray->isChecked());
} }
void GeneralForm::onSetCloseToTray()
{
Settings::getInstance().setCloseToTray(bodyUI->closeToTray->isChecked());
}
void GeneralForm::onSetMinimizeToTray()
{
Settings::getInstance().setMinimizeToTray(bodyUI->minimizeToTray->isChecked());
}
void GeneralForm::onStyleSelected(QString style) void GeneralForm::onStyleSelected(QString style)
{ {
Settings::getInstance().setStyle(style); Settings::getInstance().setStyle(style);
@ -125,7 +139,7 @@ void GeneralForm::onAutoAwayChanged()
void GeneralForm::onSetStatusChange() void GeneralForm::onSetStatusChange()
{ {
Settings::getInstance().setStatusChangeNotificationEnabled(bodyUI->statusChangesCheckbox->isChecked()); Settings::getInstance().setStatusChangeNotificationEnabled(bodyUI->statusChanges->isChecked());
} }
void GeneralForm::onSmileyBrowserIndexChanged(int index) void GeneralForm::onSmileyBrowserIndexChanged(int index)

View File

@ -35,6 +35,7 @@ private slots:
void onTranslationUpdated(); void onTranslationUpdated();
void onMakeToxPortableUpdated(); void onMakeToxPortableUpdated();
void onSetAutostartInTray(); void onSetAutostartInTray();
void onSetCloseToTray();
void onSmileyBrowserIndexChanged(int index); void onSmileyBrowserIndexChanged(int index);
void onUDPUpdated(); void onUDPUpdated();
void onProxyAddrEdited(); void onProxyAddrEdited();
@ -43,6 +44,7 @@ private slots:
void onStyleSelected(QString style); void onStyleSelected(QString style);
void onSetStatusChange(); void onSetStatusChange();
void onAutoAwayChanged(); void onAutoAwayChanged();
void onSetMinimizeToTray();
private: private:

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>527</width> <width>527</width>
<height>500</height> <height>525</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -74,7 +74,21 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="statusChangesCheckbox"> <widget class="QCheckBox" name="closeToTray">
<property name="text">
<string>Close to tray</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="minimizeToTray">
<property name="text">
<string>Minimize to tray</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="statusChanges">
<property name="text"> <property name="text">
<string>Show contacts' status changes</string> <string>Show contacts' status changes</string>
</property> </property>

View File

@ -54,6 +54,7 @@ IdentityForm::IdentityForm() :
connect(bodyUI->exportButton, &QPushButton::clicked, this, &IdentityForm::onExportClicked); connect(bodyUI->exportButton, &QPushButton::clicked, this, &IdentityForm::onExportClicked);
connect(bodyUI->deleteButton, &QPushButton::clicked, this, &IdentityForm::onDeleteClicked); connect(bodyUI->deleteButton, &QPushButton::clicked, this, &IdentityForm::onDeleteClicked);
connect(bodyUI->importButton, &QPushButton::clicked, this, &IdentityForm::onImportClicked); connect(bodyUI->importButton, &QPushButton::clicked, this, &IdentityForm::onImportClicked);
connect(bodyUI->newButton, &QPushButton::clicked, this, &IdentityForm::onNewClicked);
connect(Core::getInstance(), &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); }); connect(Core::getInstance(), &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); });
connect(Core::getInstance(), &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); }); connect(Core::getInstance(), &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); });
@ -120,15 +121,22 @@ void IdentityForm::onRenameClicked()
{ {
QString cur = bodyUI->profiles->currentText(); QString cur = bodyUI->profiles->currentText();
QString title = tr("Rename \"%1\"", "renaming a profile").arg(cur); QString title = tr("Rename \"%1\"", "renaming a profile").arg(cur);
QString name = QInputDialog::getText(this, title, title+":"); do
if (name != "")
{ {
QString name = QInputDialog::getText(this, title, title+":");
if (name.isEmpty()) break;
name = Core::sanitize(name); name = Core::sanitize(name);
QDir dir(Settings::getSettingsDirPath()); QDir dir(Settings::getSettingsDirPath());
QFile::rename(dir.filePath(cur+Core::TOX_EXT), dir.filePath(name+Core::TOX_EXT)); QString file = dir.filePath(name+Core::TOX_EXT);
bodyUI->profiles->setItemText(bodyUI->profiles->currentIndex(), name); if (!QFile::exists(file) || checkContinue(tr("Profile already exists", "rename confirm title"),
Settings::getInstance().setCurrentProfile(name); tr("A profile named \"%1\" already exists. Do you want to erase it?", "rename confirm text").arg(cur)))
} {
QFile::rename(dir.filePath(cur+Core::TOX_EXT), file);
bodyUI->profiles->setItemText(bodyUI->profiles->currentIndex(), name);
Settings::getInstance().setCurrentProfile(name);
break;
}
} while (true);
} }
void IdentityForm::onExportClicked() void IdentityForm::onExportClicked()
@ -149,9 +157,8 @@ void IdentityForm::onDeleteClicked()
} }
else else
{ {
QMessageBox::StandardButton resp = QMessageBox::question(this, if (checkContinue(tr("Deletion imminent!","deletion confirmation title"),
tr("Deletion imminent!","deletion confirmation title"), tr("Are you sure you want to delete this profile?","deletion confirmation text"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); tr("Are you sure you want to delete this profile?","deletion confirmation text")))
if (resp == QMessageBox::Yes)
{ {
QFile::remove(QDir(Settings::getSettingsDirPath()).filePath(bodyUI->profiles->currentText()+Core::TOX_EXT)); QFile::remove(QDir(Settings::getSettingsDirPath()).filePath(bodyUI->profiles->currentText()+Core::TOX_EXT));
bodyUI->profiles->removeItem(bodyUI->profiles->currentIndex()); bodyUI->profiles->removeItem(bodyUI->profiles->currentIndex());
@ -167,6 +174,7 @@ void IdentityForm::onImportClicked()
return; return;
QFileInfo info(path); QFileInfo info(path);
QString profile = info.completeBaseName();
if (info.suffix() != "tox") if (info.suffix() != "tox")
{ {
@ -174,8 +182,22 @@ void IdentityForm::onImportClicked()
return; return;
} }
QString profile = info.completeBaseName(); if (info.exists() && !checkContinue(tr("Profile already exists", "import confirm title"),
tr("A profile named \"%1\" already exists. Do you want to erase it?", "import confirm text").arg(profile)))
return;
QString profilePath = QDir(Settings::getSettingsDirPath()).filePath(profile + Core::TOX_EXT); QString profilePath = QDir(Settings::getSettingsDirPath()).filePath(profile + Core::TOX_EXT);
QFile::copy(path, profilePath); QFile::copy(path, profilePath);
bodyUI->profiles->addItem(profile); bodyUI->profiles->addItem(profile);
} }
void IdentityForm::onNewClicked()
{
emit Widget::getInstance()->changeProfile(QString());
}
bool IdentityForm::checkContinue(const QString& title, const QString& msg)
{
QMessageBox::StandardButton resp = QMessageBox::question(this, title, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
return resp == QMessageBox::Yes;
}

View File

@ -63,6 +63,8 @@ private slots:
void onExportClicked(); void onExportClicked();
void onDeleteClicked(); void onDeleteClicked();
void onImportClicked(); void onImportClicked();
void onNewClicked();
bool checkContinue(const QString& title, const QString& msg);
private: private:
Ui::IdentitySettings* bodyUI; Ui::IdentitySettings* bodyUI;

View File

@ -122,11 +122,22 @@
</layout> </layout>
</item> </item>
<item> <item>
<widget class="QPushButton" name="importButton"> <layout class="QHBoxLayout" name="profilesButtonsLayout2">
<property name="text"> <item>
<string comment="import profile button">Import a profile</string> <widget class="QPushButton" name="importButton">
</property> <property name="text">
</widget> <string comment="import profile button">Import a profile</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="newButton">
<property name="text">
<string comment="new profile button">New Tox ID</string>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -0,0 +1,122 @@
/*
Copyright (C) 2005-2014 by the Quassel Project and Project Tox
devel@quassel-irc.org and https://tox.im
This file is part of qTox, a Qt-based graphical interface for Tox.
This program is libre software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the COPYING file for more details.
*/
/* This file was taken from the Quassel IRC client source (src/uisupport), and
was greatly simplified for use in qTox. */
#include "tabcompleter.h"
#include "src/core.h"
#include "src/group.h"
#include "src/widget/tool/chattextedit.h"
#include <QRegExp>
#include <QKeyEvent>
const QString TabCompleter::nickSuffix = QString(": ");
TabCompleter::TabCompleter(ChatTextEdit* msgEdit, Group* group)
: QObject(msgEdit), msgEdit(msgEdit), group(group), enabled(false)
{
}
/* from quassel/src/uisupport/multilineedit.h
// Compatibility methods with the rest of the classes which still expect this to be a QLineEdit
inline QString text() const { return toPlainText(); }
inline QString html() const { return toHtml(); }
inline int cursorPosition() const { return textCursor().position(); }
inline void insert(const QString &newText) { insertPlainText(newText); }
inline void backspace() { keyPressEvent(new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier)); }
*/
void TabCompleter::buildCompletionList()
{
// ensure a safe state in case we return early.
completionMap.clear();
nextCompletion = completionMap.begin();
// split the string on the given RE (not chars, nums or braces/brackets) and take the last section
QString tabAbbrev = msgEdit->toPlainText().left(msgEdit->textCursor().position()).section(QRegExp("[^\\w\\d-_\\[\\]{}|`^.\\\\]"), -1, -1);
// that section is then used as the completion regex
QRegExp regex(QString("^[-_\\[\\]{}|`^.\\\\]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive);
for(auto name : group->peers.values())
if (regex.indexIn(name) > -1)
completionMap[name.toLower()] = name;
nextCompletion = completionMap.begin();
lastCompletionLength = tabAbbrev.length();
}
void TabCompleter::complete()
{
if (!enabled) {
buildCompletionList();
enabled = true;
}
if (nextCompletion != completionMap.end()) {
// clear previous completion
for (int i = 0; i < lastCompletionLength; i++) {
msgEdit->keyPressEvent(new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier));
}
// insert completion
msgEdit->insertPlainText(*nextCompletion);
// remember charcount to delete next time and advance to next completion
lastCompletionLength = nextCompletion->length();
nextCompletion++;
// we're completing the first word of the line
if (msgEdit->textCursor().position() == lastCompletionLength) {
msgEdit->insertPlainText(nickSuffix);
lastCompletionLength += nickSuffix.length();
}
}
else { // we're at the end of the list -> start over again
if (!completionMap.isEmpty()) {
nextCompletion = completionMap.begin();
complete();
}
}
}
void TabCompleter::reset()
{
enabled = false;
}
// this determines the sort order
bool TabCompleter::SortableString::operator<(const SortableString &other) const
{
QString name = Core::getInstance()->getUsername();
if (this->contents == name)
return false;
else if (other.contents == name)
return true;
/* QDateTime thisTime = thisUser->lastChannelActivity(_currentBufferId);
QDateTime thatTime = thatUser->lastChannelActivity(_currentBufferId);
if (thisTime.isValid() || thatTime.isValid())
return thisTime > thatTime;
*/ // this could be a useful feature at some point
return QString::localeAwareCompare(this->contents, other.contents) < 0;
}

View File

@ -0,0 +1,61 @@
/*
Copyright (C) 2005-2014 by the Quassel Project and Project Tox
devel@quassel-irc.org and https://tox.im
This file is part of qTox, a Qt-based graphical interface for Tox.
This program is libre software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the COPYING file for more details.
*/
/* This file was taken from the Quassel IRC client source (src/uisupport), and
was greatly simplified for use in qTox. */
#ifndef TABCOMPLETER_H
#define TABCOMPLETER_H
#include <QString>
#include <QMap>
#include <QObject> // I'm really confused why I need this
class ChatTextEdit;
class Group;
class TabCompleter : public QObject
{
Q_OBJECT
public:
explicit TabCompleter(ChatTextEdit* msgEdit, Group* group);
public slots:
void complete();
void reset();
private:
struct SortableString {
inline SortableString(const QString &n) { contents = n; }
bool operator<(const SortableString &other) const;
QString contents;
};
ChatTextEdit* msgEdit;
Group* group;
bool enabled;
const static QString nickSuffix;
QMap<SortableString, QString> completionMap;
QMap<SortableString, QString>::Iterator nextCompletion;
int lastCompletionLength;
void buildCompletionList();
};
#endif

View File

@ -49,9 +49,10 @@ void FriendWidget::contextMenuEvent(QContextMenuEvent * event)
QPoint pos = event->globalPos(); QPoint pos = event->globalPos();
QString id = Core::getInstance()->getFriendAddress(friendId); QString id = Core::getInstance()->getFriendAddress(friendId);
QString dir = Settings::getInstance().getAutoAcceptDir(id); QString dir = Settings::getInstance().getAutoAcceptDir(id);
QString globalDir = Settings::getInstance().getGlobalAutoAcceptDir();
QMenu menu; QMenu menu;
QMenu* inviteMenu = menu.addMenu(tr("Invite to group","Menu to invite a friend to a groupchat"));
QAction* copyId = menu.addAction(tr("Copy friend ID","Menu to copy the Tox ID of that friend")); QAction* copyId = menu.addAction(tr("Copy friend ID","Menu to copy the Tox ID of that friend"));
QMenu* inviteMenu = menu.addMenu(tr("Invite in group","Menu to invite a friend in a groupchat"));
QMap<QAction*, Group*> groupActions; QMap<QAction*, Group*> groupActions;
for (Group* group : GroupList::groupList) for (Group* group : GroupList::groupList)
{ {
@ -60,10 +61,15 @@ void FriendWidget::contextMenuEvent(QContextMenuEvent * event)
} }
if (groupActions.isEmpty()) if (groupActions.isEmpty())
inviteMenu->setEnabled(false); inviteMenu->setEnabled(false);
menu.addSeparator();
QAction* autoAccept = menu.addAction(tr("Auto accept files from this friend", "context menu entry")); QAction* autoAccept = menu.addAction(tr("Auto accept files from this friend", "context menu entry"));
QAction* disableAutoAccept = menu.addAction(tr("Diasble auto accepting files", "context menu entry")); QAction* disableAutoAccept = menu.addAction(tr("Manually accept files from this friend", "context menu entry"));
QAction* globalAA = menu.addAction(tr("Auto accept files from all friends", "context menu entry"));
QAction* disableGlobalAA = menu.addAction(tr("Disable global auto accept", "context menu entry"));
if (dir.isEmpty()) if (dir.isEmpty())
disableAutoAccept->setEnabled(false); disableAutoAccept->setEnabled(false);
if (globalDir.isEmpty())
disableGlobalAA->setEnabled(false);
menu.addSeparator(); menu.addSeparator();
QAction* removeFriendAction = menu.addAction(tr("Remove friend", "Menu to remove the friend from our friendlist")); QAction* removeFriendAction = menu.addAction(tr("Remove friend", "Menu to remove the friend from our friendlist"));
@ -98,6 +104,21 @@ void FriendWidget::contextMenuEvent(QContextMenuEvent * event)
{ {
Settings::getInstance().setAutoAcceptDir(id, ""); Settings::getInstance().setAutoAcceptDir(id, "");
} }
else if (selectedItem == globalAA)
{
if (globalDir.isEmpty())
globalDir = QDir::homePath();
globalDir = QFileDialog::getExistingDirectory(0, tr("Choose an auto accept directory","popup title"), dir);
if (!globalDir.isEmpty())
{
qDebug() << "FriendWidget: setting global auto accept dir to" << globalDir;
Settings::getInstance().setGlobalAutoAcceptDir(globalDir);
}
}
else if (selectedItem == disableGlobalAA)
{
Settings::getInstance().setGlobalAutoAcceptDir("");
}
else if (groupActions.contains(selectedItem)) else if (groupActions.contains(selectedItem))
{ {
Group* group = groupActions[selectedItem]; Group* group = groupActions[selectedItem];

View File

@ -15,11 +15,10 @@
*/ */
#include "actionaction.h" #include "actionaction.h"
#include "src/misc/smileypack.h" #include <QDebug>
ActionAction::ActionAction(const QString &author, const QString &message, const QString &date, const bool& me) : ActionAction::ActionAction(const QString &author, QString message, const QString &date, const bool& me) :
ChatAction(me, author, date), MessageAction(author, author+" "+message, date, me)
message(message)
{ {
} }
@ -45,24 +44,5 @@ QString ActionAction::getName()
QString ActionAction::getMessage() QString ActionAction::getMessage()
{ {
QString message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message)); return MessageAction::getMessage("action");
// detect urls
QRegExp exp("(www\\.|http[s]?:\\/\\/|ftp:\\/\\/)\\S+");
int offset = 0;
while ((offset = exp.indexIn(message_, offset)) != -1)
{
QString url = exp.cap();
// add scheme if not specified
if (exp.cap(1) == "www.")
url.prepend("http://");
QString htmledUrl = QString("<a href=\"%1\">%1</a>").arg(url);
message_.replace(offset, exp.cap().length(), htmledUrl);
offset += htmledUrl.length();
}
return QString("<div class=action>%1 %2</div>").arg(name).arg(message_);
} }

View File

@ -17,12 +17,12 @@
#ifndef ACTIONACTION_H #ifndef ACTIONACTION_H
#define ACTIONACTION_H #define ACTIONACTION_H
#include "chataction.h" #include "messageaction.h"
class ActionAction : public ChatAction class ActionAction : public MessageAction
{ {
public: public:
ActionAction(const QString &author, const QString &message, const QString& date, const bool&); ActionAction(const QString &author, QString message, const QString& date, const bool&);
virtual ~ActionAction(){;} virtual ~ActionAction(){;}
virtual QString getMessage(); virtual QString getMessage();
virtual QString getName(); virtual QString getName();

View File

@ -0,0 +1,47 @@
/*
Copyright (C) 2014 by Project Tox <https://tox.im>
This file is part of qTox, a Qt-based graphical interface for Tox.
This program is libre software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the COPYING file for more details.
*/
#include "alertaction.h"
AlertAction::AlertAction(const QString &author, const QString &message, const QString &date) :
MessageAction(author, message, date, false)
{
}
void AlertAction::setup(QTextCursor cursor, QTextEdit *)
{
// When this function is called, we're supposed to only update ourselve when needed
// Nobody should ask us to do anything with our content, we're on our own
// Except we never udpate on our own, so we can safely free our resources
(void) cursor;
message.clear();
message.squeeze();
name.clear();
name.squeeze();
date.clear();
date.squeeze();
}
/*
QString AlertAction::getName()
{
return QString("<div class=%1>%2</div>").arg("alert_name").arg(toHtmlChars(name));
}
*/
QString AlertAction::getMessage()
{
return MessageAction::getMessage("alert");
}

View File

@ -0,0 +1,35 @@
/*
Copyright (C) 2014 by Project Tox <https://tox.im>
This file is part of qTox, a Qt-based graphical interface for Tox.
This program is libre software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the COPYING file for more details.
*/
#ifndef ALERTACTION_H
#define ALERTACTION_H
#include "messageaction.h"
class AlertAction : public MessageAction
{
public:
AlertAction(const QString &author, const QString &message, const QString& date);
virtual ~AlertAction(){;}
virtual QString getMessage();
//virtual QString getName(); only do the message for now; preferably would do the whole row
virtual void setup(QTextCursor cursor, QTextEdit*) override;
private:
QString message;
};
#endif // MESSAGEACTION_H

View File

@ -38,7 +38,7 @@ void MessageAction::setup(QTextCursor cursor, QTextEdit *)
date.squeeze(); date.squeeze();
} }
QString MessageAction::getMessage() QString MessageAction::getMessage(QString div)
{ {
QString message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message)); QString message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message));
@ -65,14 +65,19 @@ QString MessageAction::getMessage()
for (QString& s : messageLines) for (QString& s : messageLines)
{ {
if (QRegExp("^[ ]*&gt;.*").exactMatch(s)) if (QRegExp("^[ ]*&gt;.*").exactMatch(s))
message_ += "<span class=quote>>" + s.right(s.length()-4) + "</span><br/>"; message_ += "<span class=quote>" + s.right(s.length()-4) + "</span><br/>";
else else
message_ += s + "<br/>"; message_ += s + "<br/>";
} }
message_ = message_.left(message_.length()-4); message_ = message_.left(message_.length()-4);
if (isMe) return QString(QString("<div class=%1>").arg(div) + message_ + "</div>");
return QString("<div class=message_me>" + message_ + "</div>"); }
else
return QString("<div class=message>" + message_ + "</div>"); QString MessageAction::getMessage()
{
if (isMe)
return getMessage("message_me");
else
return getMessage("message");
} }

View File

@ -25,9 +25,10 @@ public:
MessageAction(const QString &author, const QString &message, const QString &date, const bool &me); MessageAction(const QString &author, const QString &message, const QString &date, const bool &me);
virtual ~MessageAction(){;} virtual ~MessageAction(){;}
virtual QString getMessage(); virtual QString getMessage();
virtual QString getMessage(QString div);
virtual void setup(QTextCursor cursor, QTextEdit*) override; virtual void setup(QTextCursor cursor, QTextEdit*) override;
private: protected:
QString message; QString message;
}; };

View File

@ -27,11 +27,15 @@ ChatTextEdit::ChatTextEdit(QWidget *parent) :
void ChatTextEdit::keyPressEvent(QKeyEvent * event) void ChatTextEdit::keyPressEvent(QKeyEvent * event)
{ {
int key = event->key(); int key = event->key();
if ((key == Qt::Key_Enter || key == Qt::Key_Return) if ((key == Qt::Key_Enter || key == Qt::Key_Return) && !(event->modifiers() && Qt::ShiftModifier))
&& !(event->modifiers() && Qt::ShiftModifier))
{
emit enterPressed(); emit enterPressed();
return; else if (key == Qt::Key_Tab)
emit tabPressed();
else if (key == Qt::Key_Backspace) // because of the backspace() hack in tabber, we can't emit on these
QTextEdit::keyPressEvent(event);
else
{
emit keyPressed();
QTextEdit::keyPressEvent(event);
} }
QTextEdit::keyPressEvent(event);
} }

View File

@ -28,6 +28,8 @@ public:
signals: signals:
void enterPressed(); void enterPressed();
void tabPressed();
void keyPressed();
public slots: public slots:

View File

@ -61,7 +61,52 @@ Widget::Widget(QWidget *parent)
void Widget::init() void Widget::init()
{ {
ui->setupUi(this); ui->setupUi(this);
if (QSystemTrayIcon::isSystemTrayAvailable() == true)
{
icon = new QSystemTrayIcon(this);
icon->setIcon(this->windowIcon());
trayMenu = new QMenu;
trayMenu->setStyleSheet("QMenu {background: white; color: black; border: 1px solid black;}"
"QMenu::item:selected { background: #414141}");
statusOnline = new QAction(tr("online"), this);
statusOnline->setIcon(QIcon(":ui/statusButton/dot_online.png"));
connect(statusOnline, SIGNAL(triggered()), this, SLOT(setStatusOnline()));
statusAway = new QAction(tr("away"), this);
statusAway->setIcon(QIcon(":ui/statusButton/dot_idle.png"));
connect(statusAway, SIGNAL(triggered()), this, SLOT(setStatusAway()));
statusBusy = new QAction(tr("busy"), this);
connect(statusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy()));
statusBusy->setIcon(QIcon(":ui/statusButton/dot_busy.png"));
actionQuit = new QAction(tr("&Quit"), this);
connect(actionQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
trayMenu->addAction(new QAction(tr("Change status to:"), this));
trayMenu->addAction(statusOnline);
trayMenu->addAction(statusAway);
trayMenu->addAction(statusBusy);
trayMenu->addSeparator();
trayMenu->addAction(actionQuit);
icon->setContextMenu(trayMenu);
connect(icon,
SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this,
SLOT(onIconClick(QSystemTrayIcon::ActivationReason)));
icon->show();
if(Settings::getInstance().getAutostartInTray() == false)
this->show();
}
else
{
qWarning() << "No system tray detected!";
this->show();
}
ui->statusbar->hide(); ui->statusbar->hide();
ui->menubar->hide(); ui->menubar->hide();
@ -148,7 +193,6 @@ void Widget::init()
filesForm = new FilesForm(); filesForm = new FilesForm();
addFriendForm = new AddFriendForm; addFriendForm = new AddFriendForm;
settingsWidget = new SettingsWidget(); settingsWidget = new SettingsWidget();
connect(core, &Core::connected, this, &Widget::onConnected); connect(core, &Core::connected, this, &Widget::onConnected);
connect(core, &Core::disconnected, this, &Widget::onDisconnected); connect(core, &Core::disconnected, this, &Widget::onDisconnected);
@ -233,12 +277,19 @@ Widget::~Widget()
for (Group* g : GroupList::groupList) for (Group* g : GroupList::groupList)
delete g; delete g;
GroupList::groupList.clear(); GroupList::groupList.clear();
delete statusAway;
delete statusBusy;
delete statusOnline;
delete actionQuit;
delete trayMenu;
delete icon;
delete ui; delete ui;
instance = nullptr; instance = nullptr;
} }
Widget* Widget::getInstance() Widget* Widget::getInstance()
{ {
if (!instance) if (!instance)
{ {
instance = new Widget(); instance = new Widget();
@ -254,10 +305,30 @@ QThread* Widget::getCoreThread()
void Widget::closeEvent(QCloseEvent *event) void Widget::closeEvent(QCloseEvent *event)
{ {
Settings::getInstance().setWindowGeometry(saveGeometry()); if(Settings::getInstance().getCloseToTray() == true)
Settings::getInstance().setWindowState(saveState()); {
Settings::getInstance().setSplitterState(ui->mainSplitter->saveState()); event->ignore();
QWidget::closeEvent(event); this->hide();
}
else
{
Settings::getInstance().setWindowGeometry(saveGeometry());
Settings::getInstance().setWindowState(saveState());
Settings::getInstance().setSplitterState(ui->mainSplitter->saveState());
QWidget::closeEvent(event);
}
}
void Widget::changeEvent(QEvent *event)
{
if (event->type() == QEvent::WindowStateChange)
{
if(isMinimized() == true
&& Settings::getInstance().getMinimizeToTray() == true)
{
this->hide();
}
}
} }
QString Widget::detectProfile() QString Widget::detectProfile()
@ -454,12 +525,21 @@ void Widget::onTransferClicked()
activeChatroomWidget = nullptr; activeChatroomWidget = nullptr;
} }
void Widget::onIconClick() void Widget::onIconClick(QSystemTrayIcon::ActivationReason reason)
{ {
if(this->isHidden() == true) switch (reason) {
this->show(); case QSystemTrayIcon::Trigger:
else if(this->isHidden() == true)
this->hide(); this->show();
else
this->hide();
case QSystemTrayIcon::DoubleClick:
break;
case QSystemTrayIcon::MiddleClick:
break;
default:
;
}
} }
void Widget::onSettingsClicked() void Widget::onSettingsClicked()
@ -750,14 +830,19 @@ void Widget::onGroupMessageReceived(int groupnumber, const QString& message, con
if (!g) if (!g)
return; return;
g->chatForm->addMessage(author, message); QString name = core->getUsername();
bool targeted = (author != name) && message.contains(name, Qt::CaseInsensitive);
if (targeted)
g->chatForm->addAlertMessage(author, message);
else
g->chatForm->addMessage(author, message);
if ((static_cast<GenericChatroomWidget*>(g->widget) != activeChatroomWidget) || isMinimized() || !isActiveWindow()) if ((static_cast<GenericChatroomWidget*>(g->widget) != activeChatroomWidget) || isMinimized() || !isActiveWindow())
{ {
g->hasNewMessages = 1; g->hasNewMessages = 1;
newMessageAlert(); // sound alert on any message, not just naming user if (targeted)
if (message.contains(core->getUsername(), Qt::CaseInsensitive))
{ {
newMessageAlert();
g->userWasMentioned = 1; // useful for highlighting line or desktop notifications g->userWasMentioned = 1; // useful for highlighting line or desktop notifications
} }
g->widget->updateStatusLight(); g->widget->updateStatusLight();
@ -773,17 +858,23 @@ void Widget::onGroupNamelistChanged(int groupnumber, int peernumber, uint8_t Cha
g = createGroup(groupnumber); g = createGroup(groupnumber);
} }
QString name = core->getGroupPeerName(groupnumber, peernumber);
TOX_CHAT_CHANGE change = static_cast<TOX_CHAT_CHANGE>(Change); TOX_CHAT_CHANGE change = static_cast<TOX_CHAT_CHANGE>(Change);
if (change == TOX_CHAT_CHANGE_PEER_ADD) if (change == TOX_CHAT_CHANGE_PEER_ADD)
{ {
QString name = core->getGroupPeerName(groupnumber, peernumber);
if (name.isEmpty()) if (name.isEmpty())
name = tr("<Unknown>", "Placeholder when we don't know someone's name in a group chat"); name = tr("<Unknown>", "Placeholder when we don't know someone's name in a group chat");
g->addPeer(peernumber,name); g->addPeer(peernumber,name);
//g->chatForm->addSystemInfoMessage(tr("%1 has joined the chat").arg(name), "green");
// we can't display these messages until irungentoo fixes peernumbers
// https://github.com/irungentoo/toxcore/issues/1128
} }
else if (change == TOX_CHAT_CHANGE_PEER_DEL) else if (change == TOX_CHAT_CHANGE_PEER_DEL)
{
g->removePeer(peernumber); g->removePeer(peernumber);
else if (change == TOX_CHAT_CHANGE_PEER_NAME) //g->chatForm->addSystemInfoMessage(tr("%1 has left the chat").arg(name), "silver");
}
else if (change == TOX_CHAT_CHANGE_PEER_NAME) // core overwrites old name before telling us it changed...
g->updatePeer(peernumber,core->getGroupPeerName(groupnumber, peernumber)); g->updatePeer(peernumber,core->getGroupPeerName(groupnumber, peernumber));
} }

View File

@ -18,6 +18,7 @@
#define WIDGET_H #define WIDGET_H
#include <QMainWindow> #include <QMainWindow>
#include <QSystemTrayIcon>
#include "form/addfriendform.h" #include "form/addfriendform.h"
#include "form/settingswidget.h" #include "form/settingswidget.h"
#include "form/settings/identityform.h" #include "form/settings/identityform.h"
@ -65,6 +66,11 @@ public:
~Widget(); ~Widget();
virtual void closeEvent(QCloseEvent *event); virtual void closeEvent(QCloseEvent *event);
virtual void changeEvent(QEvent *event);
public slots:
void onSettingsClicked();
signals: signals:
void friendRequestAccepted(const QString& userId); void friendRequestAccepted(const QString& userId);
@ -82,7 +88,6 @@ private slots:
void onAddClicked(); void onAddClicked();
void onGroupClicked(); void onGroupClicked();
void onTransferClicked(); void onTransferClicked();
void onSettingsClicked();
void onFailedToStartCore(); void onFailedToStartCore();
void onBadProxyCore(); void onBadProxyCore();
void onAvatarClicked(); void onAvatarClicked();
@ -112,7 +117,7 @@ private slots:
void onMessageSendResult(int friendId, const QString& message, int messageId); void onMessageSendResult(int friendId, const QString& message, int messageId);
void onGroupSendResult(int groupId, const QString& message, int result); void onGroupSendResult(int groupId, const QString& message, int result);
void playRingtone(); void playRingtone();
void onIconClick(); void onIconClick(QSystemTrayIcon::ActivationReason);
void onUserAway(); void onUserAway();
private: private:
@ -124,6 +129,12 @@ private:
void removeGroup(Group* g); void removeGroup(Group* g);
QString askProfiles(); QString askProfiles();
QString detectProfile(); QString detectProfile();
QSystemTrayIcon *icon;
QMenu *trayMenu;
QAction *statusOnline,
*statusAway,
*statusBusy,
*actionQuit;
Ui::MainWindow *ui; Ui::MainWindow *ui;
QSplitter *centralLayout; QSplitter *centralLayout;

Binary file not shown.

View File

@ -3,11 +3,6 @@
<TS version="2.1" language="fr_FR"> <TS version="2.1" language="fr_FR">
<context> <context>
<name>AVForm</name> <name>AVForm</name>
<message>
<location filename="../src/widget/form/settings/avform.cpp" line="22"/>
<source>Audio/Video settings</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Hide video preview</source> <source>Hide video preview</source>
<comment>On a button</comment> <comment>On a button</comment>
@ -18,6 +13,11 @@
<comment>On a button</comment> <comment>On a button</comment>
<translation type="obsolete">Montrer l&apos;aperçu vidéo</translation> <translation type="obsolete">Montrer l&apos;aperçu vidéo</translation>
</message> </message>
<message>
<location filename="../src/widget/form/settings/avform.cpp" line="22"/>
<source>Audio/Video</source>
<translation>Audio/Vidéo</translation>
</message>
</context> </context>
<context> <context>
<name>AVPage</name> <name>AVPage</name>
@ -41,57 +41,52 @@
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="14"/> <location filename="../src/widget/form/settings/avsettings.ui" line="14"/>
<source>Form</source> <source>Form</source>
<translation type="unfinished"></translation> <translation>qTox</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="20"/> <location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Video Settings</source>
<translation>Options vidéo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="49"/>
<source>Resolution</source>
<translation>Résolution</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="148"/>
<source>Volume Settings (Stubs)</source> <source>Volume Settings (Stubs)</source>
<translation type="unfinished"></translation> <translation>Options du volume (Fictif)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="26"/> <location filename="../src/widget/form/settings/avsettings.ui" line="154"/>
<source>Playback</source> <source>Playback</source>
<translation type="unfinished"></translation> <translation>Haut-parleurs</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="40"/> <location filename="../src/widget/form/settings/avsettings.ui" line="168"/>
<source>Microphone</source> <source>Microphone</source>
<translation type="unfinished"></translation> <translation>Microphone</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="57"/>
<source>Video settings</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/> <location filename="../src/widget/form/settings/avsettings.ui" line="66"/>
<source>Modes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="83"/>
<source>Hue</source> <source>Hue</source>
<translation type="unfinished"></translation> <translation>Teinte</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="97"/> <location filename="../src/widget/form/settings/avsettings.ui" line="80"/>
<source>Brightness</source> <source>Brightness</source>
<translation type="unfinished"></translation> <translation>Luminosité</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="111"/> <location filename="../src/widget/form/settings/avsettings.ui" line="94"/>
<source>Saturation</source> <source>Saturation</source>
<translation type="unfinished"></translation> <translation>Saturation</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="125"/> <location filename="../src/widget/form/settings/avsettings.ui" line="108"/>
<source>Contrast</source> <source>Contrast</source>
<translation type="unfinished"></translation> <translation>Contraste</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="139"/>
<source>Preview</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Show video preview</source> <source>Show video preview</source>
@ -192,7 +187,7 @@
<context> <context>
<name>ChatForm</name> <name>ChatForm</name>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="105"/> <location filename="../src/widget/form/chatform.cpp" line="106"/>
<source>Send a file</source> <source>Send a file</source>
<translation>Envoyer un fichier</translation> <translation>Envoyer un fichier</translation>
</message> </message>
@ -211,33 +206,44 @@
<context> <context>
<name>Core</name> <name>Core</name>
<message> <message>
<location filename="../src/core.cpp" line="1104"/> <location filename="../src/core.cpp" line="231"/>
<source>Encrypted profile</source> <source>Toxing on qTox</source>
<translation type="unfinished"></translation> <translation>Toxer avec qTox</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1105"/> <location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>Utilisateur de qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source>
<translation>Profil chiffré</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it <source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source> Do you want to erase this profile ?</source>
<translation type="unfinished"></translation> <translation>Votre profil tox semble être chiffré, qTox ne peut pas l&apos;ouvrir
Voulez-vous effacer ce profil ?</translation>
</message> </message>
</context> </context>
<context> <context>
<name>FileTransferInstance</name> <name>FileTransferInstance</name>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="209"/> <location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source> <source>Save a file</source>
<comment>Title of the file saving dialog</comment> <comment>Title of the file saving dialog</comment>
<translation>Sauvegarder un fichier</translation> <translation>Sauvegarder un fichier</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="220"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source> <source>Location not writable</source>
<comment>Title of permissions popup</comment> <comment>Title of permissions popup</comment>
<translation>Impossible d&apos;écrire ici</translation> <translation>Impossible d&apos;écrire ici</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="220"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source> <source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment> <comment>text of permissions popup</comment>
<translation>Vous n&apos;avez pas la permission d&apos;écrire ici. Choisissez un audre endroit, ou annulez.</translation> <translation>Vous n&apos;avez pas la permission d&apos;écrire ici. Choisissez un audre endroit, ou annulez.</translation>
@ -309,19 +315,55 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>FriendWidget</name> <name>FriendWidget</name>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="48"/> <location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Inviter au groupe</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source> <source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment> <comment>Menu to copy the Tox ID of that friend</comment>
<translation>Copier l&apos;ID ami</translation> <translation>Copier l&apos;ID ami</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="49"/> <location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Invite in group</source> <source>Auto accept files from this friend</source>
<comment>Menu to invite a friend in a groupchat</comment> <comment>context menu entry</comment>
<translation>Inviter dans un groupe</translation> <translation>Automatiquement accepter les fichiers de ce contact</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="59"/> <location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Accepter les fichiers de ce contact manuellement</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Accepter les fichiers de tous les contacts automatiquement</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translation>Désactiver l&apos;acceptation automatique de fichier</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source>
<comment>popup title</comment>
<translation>Choisir un dossier de téléchargement</translation>
</message>
<message>
<source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment>
<translation type="vanished">Inviter dans un groupe</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source> <source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment> <comment>Menu to remove the friend from our friendlist</comment>
<translation>Supprimer ami</translation> <translation>Supprimer ami</translation>
@ -330,9 +372,13 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>GeneralForm</name> <name>GeneralForm</name>
<message> <message>
<location filename="../src/widget/form/settings/generalform.cpp" line="27"/>
<source>General Settings</source> <source>General Settings</source>
<translation type="unfinished">Options Générales</translation> <translation type="obsolete">Options Générales</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalform.cpp" line="30"/>
<source>General</source>
<translation>Général</translation>
</message> </message>
</context> </context>
<context> <context>
@ -375,95 +421,110 @@ Do you want to erase this profile ?</source>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="14"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="14"/>
<source>Form</source> <source>Form</source>
<translation type="unfinished"></translation> <translation>qTox</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="29"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="29"/>
<source>General Settings</source> <source>General Settings</source>
<translation type="unfinished">Options Générales</translation> <translation>Options Générales</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="35"/>
<source>Use translations</source> <source>Use translations</source>
<extracomment>Text on a checkbox to enable translations</extracomment> <extracomment>Text on a checkbox to enable translations</extracomment>
<translation type="unfinished">Utiliser les traductions</translation> <translation type="obsolete">Utiliser les traductions</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="42"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="37"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="53"/>
<source>The translation may not load until qTox restarts.</source>
<translation>La translation peut ne pas se charger jusqu&apos;à ce que qTox redémarre.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="40"/>
<source>Translation:</source>
<translation>Traduction:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="62"/>
<source>Save settings to the working directory instead of the usual conf dir</source> <source>Save settings to the working directory instead of the usual conf dir</source>
<extracomment>describes makeToxPortable checkbox</extracomment> <extracomment>describes makeToxPortable checkbox</extracomment>
<translation type="unfinished">Sauvegarde les options dans le dossier courant au lieu du dossier de configuration habituel</translation> <translation>Sauvegarde les options dans le dossier courant au lieu du dossier de configuration habituel</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="45"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="65"/>
<source>Make Tox portable</source> <source>Make Tox portable</source>
<translation type="unfinished">Rendre Tox portable</translation> <translation>Rendre Tox portable</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="52"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="72"/>
<source>Start in tray</source> <source>Start in tray</source>
<translation type="unfinished"></translation> <translation>Démarrer dans la barre d&apos;état</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="59"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Show contacts&apos; status changes</source> <source>Show contacts&apos; status changes</source>
<translation type="unfinished"></translation> <translation>Montrer les changements de status des contacts</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="68"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="88"/>
<source>Provided in minutes</source> <source>Provided in minutes</source>
<translation type="unfinished"></translation> <translation>En minutes</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="74"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="94"/>
<source>Auto away after (0 to disable):</source> <source>Auto away after (0 to disable):</source>
<translation type="unfinished"></translation> <translation>Auto-absent après (0 pour désactiver):</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="87"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="107"/>
<source> minutes</source> <source>Set to 0 to disable</source>
<translation type="unfinished"></translation> <translation>Mettre à 0 pour désactiver</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="105"/>
<source>Theme</source>
<translation type="unfinished">Thème</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="113"/>
<source> minutes</source>
<translation> minutes</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="131"/>
<source>Theme</source>
<translation>Thème</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="139"/>
<source>Smiley Pack:</source> <source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment> <extracomment>Text on smiley pack label</extracomment>
<translation type="unfinished"></translation> <translation>Pack de smileys:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="134"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="160"/>
<source>:)</source> <source>:)</source>
<translation type="unfinished"></translation> <translation>:)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="144"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="170"/>
<source>;)</source> <source>;)</source>
<translation type="unfinished"></translation> <translation>:)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="154"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="180"/>
<source>:p</source> <source>:p</source>
<translation type="unfinished"></translation> <translation>:p</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="164"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="190"/>
<source>:O</source> <source>:O</source>
<translation type="unfinished"></translation> <translation>:O</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="174"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="200"/>
<source>:&apos;(</source> <source>:&apos;(</source>
<translation type="unfinished"></translation> <translation>:&apos;(</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="188"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>Style:</source> <source>Style:</source>
<translation type="unfinished"></translation> <translation>Style:</translation>
</message> </message>
<message> <message>
<source>Smiley Pack</source> <source>Smiley Pack</source>
@ -471,51 +532,51 @@ Do you want to erase this profile ?</source>
<translation type="obsolete">Pack de smileys</translation> <translation type="obsolete">Pack de smileys</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="210"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="236"/>
<source>Connection Settings</source> <source>Connection Settings</source>
<translation type="unfinished"></translation> <translation>Options de réseau</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="216"/>
<source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation type="unfinished">Activer IPv6 (recommandé)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="223"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="226"/>
<source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="233"/>
<source>Use proxy (SOCKS5)</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="242"/>
<source>Address</source> <source>Enable IPv6 (recommended)</source>
<extracomment>Text on proxy addr label</extracomment> <extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation type="unfinished"></translation> <translation>Activer IPv6 (recommandé)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="249"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment>
<translation>Permet par exemple d&apos;utiliser Tox à travers Tor, mais ce n&apos;est à utiliser que si nécessaire, car cela ralenti le réseau Tox.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="252"/>
<source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Désactiver UDP (non recommandé)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="259"/>
<source>Use proxy (SOCKS5)</source>
<translation>Utiliser un proxy (SOCKS5)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="268"/>
<source>Address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation>Addresse</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="278"/>
<source>Port</source> <source>Port</source>
<extracomment>Text on proxy port label</extracomment> <extracomment>Text on proxy port label</extracomment>
<translation type="unfinished"></translation> <translation>Port</translation>
</message> </message>
</context> </context>
<context> <context>
<name>GenericChatForm</name> <name>GenericChatForm</name>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="154"/> <location filename="../src/widget/form/genericchatform.cpp" line="150"/>
<location filename="../src/widget/form/genericchatform.cpp" line="160"/> <location filename="../src/widget/form/genericchatform.cpp" line="156"/>
<source>Save chat log</source> <source>Save chat log</source>
<translation>Sauvegarder l&apos;historique de conversation</translation> <translation>Sauvegarder l&apos;historique de conversation</translation>
</message> </message>
@ -523,7 +584,7 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>GroupChatForm</name> <name>GroupChatForm</name>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="47"/> <location filename="../src/widget/form/groupchatform.cpp" line="45"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<comment>Number of users in chat</comment> <comment>Number of users in chat</comment>
<translation>%1 personnes</translation> <translation>%1 personnes</translation>
@ -533,7 +594,7 @@ Do you want to erase this profile ?</source>
<translation type="vanished">&lt;Inconnu&gt;</translation> <translation type="vanished">&lt;Inconnu&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="85"/> <location filename="../src/widget/form/groupchatform.cpp" line="77"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<translation>%1 personnes</translation> <translation>%1 personnes</translation>
</message> </message>
@ -545,19 +606,19 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>GroupWidget</name> <name>GroupWidget</name>
<message> <message>
<location filename="../src/widget/groupwidget.cpp" line="39"/> <location filename="../src/widget/groupwidget.cpp" line="42"/>
<location filename="../src/widget/groupwidget.cpp" line="59"/> <location filename="../src/widget/groupwidget.cpp" line="64"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<translation>%1 personnes</translation> <translation>%1 personnes</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/groupwidget.cpp" line="41"/> <location filename="../src/widget/groupwidget.cpp" line="44"/>
<location filename="../src/widget/groupwidget.cpp" line="61"/> <location filename="../src/widget/groupwidget.cpp" line="66"/>
<source>0 users in chat</source> <source>0 users in chat</source>
<translation>0 personnes</translation> <translation>0 personnes</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/groupwidget.cpp" line="48"/> <location filename="../src/widget/groupwidget.cpp" line="53"/>
<source>Quit group</source> <source>Quit group</source>
<comment>Menu to quit a groupchat</comment> <comment>Menu to quit a groupchat</comment>
<translation>Quitter le groupe</translation> <translation>Quitter le groupe</translation>
@ -566,87 +627,111 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>IdentityForm</name> <name>IdentityForm</name>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="33"/> <location filename="../src/widget/form/settings/identityform.cpp" line="34"/>
<source>Your identity</source> <source>Identity</source>
<translation type="unfinished"></translation> <translation>Identité</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="114"/> <location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source> <source>Call active</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation type="unfinished"></translation> <translation>Appel en cours</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="115"/> <location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source> <source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation type="unfinished"></translation> <translation>Vous ne pouvez pas changer de profil quand un appel est en cours!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="125"/> <location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source> <source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment> <comment>renaming a profile</comment>
<translation type="unfinished"></translation> <translation>Renommer &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="140"/> <location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Ce profil existe déjà</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Un profil appelé &quot;%1&quot; existe déjà. Voulez-vous le supprimer ?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source> <source>Export profile</source>
<comment>save dialog title</comment> <comment>save dialog title</comment>
<translation type="unfinished"></translation> <translation>Exporter le profil</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="142"/> <location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment> <comment>save dialog filter</comment>
<translation type="unfinished"></translation> <translation>Fichier sauvegarde Tox (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source> <source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment> <comment>current profile deletion warning title</comment>
<translation type="unfinished"></translation> <translation>Profil en cours d&apos;utilisation</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source> <source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment> <comment>current profile deletion warning text</comment>
<translation type="unfinished"></translation> <translation>Ce profil est en cours d&apos;utilisation. Merci de choisir un autre profil avant de supprimer celui-ci.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/> <location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source> <source>Deletion imminent!</source>
<comment>deletion confirmation title</comment> <comment>deletion confirmation title</comment>
<translation type="unfinished"></translation> <translation>Suppression imminente!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/> <location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source> <source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment> <comment>deletion confirmation text</comment>
<translation type="unfinished"></translation> <translation>Êtes-vous sur de vouloir supprimer ce profil ?</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source> <source>Import profile</source>
<comment>import dialog title</comment> <comment>import dialog title</comment>
<translation type="unfinished"></translation> <translation>Importer un profil</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment> <comment>import dialog filter</comment>
<translation type="unfinished"></translation> <translation>Fichier sauvegarde Tox (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source> <source>Ignoring non-Tox file</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation type="unfinished"></translation> <translation>Fichier non-Tox ignoré</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source> <source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation type="unfinished"></translation> <translation>Attention: Vous avez sélectionné un fichier qui n&apos;est pas une sauvegarde Tox: il sera ignoré.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Ce profil existe déjà</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Un profil appelé &quot;%1&quot; existe déjà. Voulez-vous le supprimer ?</translation>
</message> </message>
</context> </context>
<context> <context>
@ -679,78 +764,84 @@ Do you want to erase this profile ?</source>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="14"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="14"/>
<source>Form</source> <source>Form</source>
<translation type="unfinished"></translation> <translation>qTox</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="20"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="20"/>
<source>Public Information</source> <source>Public Information</source>
<translation type="unfinished">Informations Publiques</translation> <translation>Informations Publiques</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="26"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="26"/>
<source>Name</source> <source>Name</source>
<translation type="unfinished">Nom</translation> <translation>Nom</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="36"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="36"/>
<source>Status</source> <source>Status</source>
<translation type="unfinished">Status</translation> <translation>Status</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="49"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="49"/>
<source>Tox ID</source> <source>Tox ID</source>
<translation type="unfinished">ID Tox</translation> <translation>ID Tox</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="55"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="55"/>
<source>Your Tox ID (click to copy)</source> <source>Your Tox ID (click to copy)</source>
<translation type="unfinished"></translation> <translation>Votre ID Tox (cliquez pour copier)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="65"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="65"/>
<source>Profiles</source> <source>Profiles</source>
<translation type="unfinished"></translation> <translation>Profils</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="73"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="73"/>
<source>Available profiles:</source> <source>Available profiles:</source>
<translation type="unfinished"></translation> <translation>Profils disponibles:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="94"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="94"/>
<source>Load</source> <source>Load</source>
<comment>load profile button</comment> <comment>load profile button</comment>
<translation type="unfinished"></translation> <translation>Charger</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="101"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="101"/>
<source>Rename</source> <source>Rename</source>
<comment>rename profile button</comment> <comment>rename profile button</comment>
<translation type="unfinished"></translation> <translation>Renommer</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="108"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="108"/>
<source>Export</source> <source>Export</source>
<comment>export profile button</comment> <comment>export profile button</comment>
<translation type="unfinished"></translation> <translation>Exporter</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="115"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="115"/>
<source>Delete</source> <source>Delete</source>
<comment>delete profile button</comment> <comment>delete profile button</comment>
<translation type="unfinished"></translation> <translation>Supprimer</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="118"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="118"/>
<source>This is useful to remain safe on public computers</source> <source>This is useful to remain safe on public computers</source>
<comment>delete profile button tooltip</comment> <comment>delete profile button tooltip</comment>
<translation type="unfinished"></translation> <translation>Util pour sécuriser sur un ordinateur public</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source> <source>Import a profile</source>
<comment>import profile button</comment> <comment>import profile button</comment>
<translation type="unfinished"></translation> <translation>Importer un profil</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Nouvel ID Tox</translation>
</message> </message>
</context> </context>
<context> <context>
@ -805,8 +896,8 @@ Do you want to erase this profile ?</source>
<name>PrivacyForm</name> <name>PrivacyForm</name>
<message> <message>
<location filename="../src/widget/form/settings/privacyform.cpp" line="21"/> <location filename="../src/widget/form/settings/privacyform.cpp" line="21"/>
<source>Privacy settings</source> <source>Privacy</source>
<translation type="unfinished"></translation> <translation>Vie privée</translation>
</message> </message>
</context> </context>
<context> <context>
@ -903,103 +994,103 @@ Do you want to erase this profile ?</source>
<translation type="vanished">Ctrl+Q</translation> <translation type="vanished">Ctrl+Q</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="101"/> <location filename="../src/widget/widget.cpp" line="109"/>
<source>Online</source> <source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment> <comment>Button to set your status to &apos;Online&apos;</comment>
<translation>Connecté</translation> <translation>Connecté</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="103"/> <location filename="../src/widget/widget.cpp" line="111"/>
<source>Away</source> <source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment> <comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Indisponnible</translation> <translation>Indisponible</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="105"/> <location filename="../src/widget/widget.cpp" line="113"/>
<source>Busy</source> <source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment> <comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Occupé</translation> <translation>Occupé</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="282"/> <location filename="../src/widget/widget.cpp" line="310"/>
<source>Choose a profile</source> <source>Choose a profile</source>
<translation type="unfinished"></translation> <translation>Choisir un profil</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="283"/> <location filename="../src/widget/widget.cpp" line="311"/>
<source>Please choose which identity to use</source> <source>Please choose which identity to use</source>
<translation type="unfinished"></translation> <translation>Merci de choisir l&apos;identité à utiliser</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="309"/> <location filename="../src/widget/widget.cpp" line="337"/>
<source>Choose a profile picture</source> <source>Choose a profile picture</source>
<translation type="unfinished"></translation> <translation>Choisissez une image de profil</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="316"/>
<location filename="../src/widget/widget.cpp" line="323"/>
<location filename="../src/widget/widget.cpp" line="344"/> <location filename="../src/widget/widget.cpp" line="344"/>
<location filename="../src/widget/widget.cpp" line="351"/>
<location filename="../src/widget/widget.cpp" line="372"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation>Erreur</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="316"/>
<source>Unable to open this file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="323"/>
<source>Unable to read this image</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="344"/> <location filename="../src/widget/widget.cpp" line="344"/>
<source>Unable to open this file</source>
<translation>Impossible d&apos;ouvrir ce fichier</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="351"/>
<source>Unable to read this image</source>
<translation>Impossible de lire cette image</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="372"/>
<source>This image is too big</source> <source>This image is too big</source>
<translation type="unfinished"></translation> <translation>Cette image est trop volumineuse</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="371"/> <location filename="../src/widget/widget.cpp" line="399"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source> <source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation type="unfinished"></translation> <translation>Toxcore n&apos;as pas pu démarrer correctement, l&apos;application va quitter quand vous fermerez ce message.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="380"/> <location filename="../src/widget/widget.cpp" line="408"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source> <source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation type="unfinished"></translation> <translation>Toxcore n&apos;as pas pu démarrer avec ces paramètres de proxy, qTox ne peut pas continuer; merci de modifier vos paramètres et redémarrer.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="549"/> <location filename="../src/widget/widget.cpp" line="579"/>
<source>away</source> <source>away</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>indisponnible</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="551"/> <location filename="../src/widget/widget.cpp" line="581"/>
<source>busy</source> <source>busy</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>occupé</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="553"/> <location filename="../src/widget/widget.cpp" line="583"/>
<source>offline</source> <source>offline</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>déconnecté</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="555"/> <location filename="../src/widget/widget.cpp" line="585"/>
<source>online</source> <source>online</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>connecté</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="561"/> <location filename="../src/widget/widget.cpp" line="587"/>
<source>%1 is now %2</source> <source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment> <comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation type="unfinished"></translation> <translation>%1 est maintenant %2</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="752"/> <location filename="../src/widget/widget.cpp" line="780"/>
<source>&lt;Unknown&gt;</source> <source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment> <comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Inconnu&gt;</translation> <translation>&lt;Inconnu&gt;</translation>

Binary file not shown.

View File

@ -17,47 +17,47 @@
<translation>Form</translation> <translation>Form</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/> <location filename="../src/widget/form/settings/avsettings.ui" line="75"/>
<source>Video Settings</source> <source>Video Settings</source>
<translation>Impostazioni Video</translation> <translation>Impostazioni Video</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="49"/> <location filename="../src/widget/form/settings/avsettings.ui" line="86"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Risoluzione</translation> <translation>Risoluzione</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="148"/> <location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Volume Settings (Stubs)</source> <source>Volume Settings (Stubs)</source>
<translation>Impostazioni Volume (Stub)</translation> <translation>Impostazioni Audio (Stub)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="154"/> <location filename="../src/widget/form/settings/avsettings.ui" line="51"/>
<source>Playback</source> <source>Playback</source>
<translation>Altoparlanti</translation> <translation>Altoparlanti</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="168"/> <location filename="../src/widget/form/settings/avsettings.ui" line="44"/>
<source>Microphone</source> <source>Microphone</source>
<translation>Microfono</translation> <translation>Microfono</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/> <location filename="../src/widget/form/settings/avsettings.ui" line="103"/>
<source>Hue</source> <source>Hue</source>
<translation>Colore</translation> <translation>Colore</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="80"/> <location filename="../src/widget/form/settings/avsettings.ui" line="117"/>
<source>Brightness</source> <source>Brightness</source>
<translation>Luminoistà</translation> <translation>Luminoistà</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="94"/> <location filename="../src/widget/form/settings/avsettings.ui" line="131"/>
<source>Saturation</source> <source>Saturation</source>
<translation>Saturazione</translation> <translation>Saturazione</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="108"/> <location filename="../src/widget/form/settings/avsettings.ui" line="145"/>
<source>Contrast</source> <source>Contrast</source>
<translation>Contrasto</translation> <translation>Contrasto</translation>
</message> </message>
@ -153,12 +153,22 @@
<context> <context>
<name>Core</name> <name>Core</name>
<message> <message>
<location filename="../src/core.cpp" line="1100"/> <location filename="../src/core.cpp" line="231"/>
<source>Toxing on qTox</source>
<translation>Toxing on qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>qTox User</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source> <source>Encrypted profile</source>
<translation>Profilo criptato</translation> <translation>Profilo criptato</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1101"/> <location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it <source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source> Do you want to erase this profile ?</source>
<translation>Il tuo profilo Tox sembra essere criptato, qTox non può aprirlo\nVuoi eliminare questo profilo?</translation> <translation>Il tuo profilo Tox sembra essere criptato, qTox non può aprirlo\nVuoi eliminare questo profilo?</translation>
@ -167,19 +177,19 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>FileTransferInstance</name> <name>FileTransferInstance</name>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="233"/> <location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source> <source>Save a file</source>
<comment>Title of the file saving dialog</comment> <comment>Title of the file saving dialog</comment>
<translation>Salva file</translation> <translation>Salva file</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="241"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source> <source>Location not writable</source>
<comment>Title of permissions popup</comment> <comment>Title of permissions popup</comment>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="241"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source> <source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment> <comment>text of permissions popup</comment>
<translation>Non hai sufficienti permessi per scrivere in questa locazione. Scegli un&apos;altra posizione, o annulla il salvataggio.</translation> <translation>Non hai sufficienti permessi per scrivere in questa locazione. Scegli un&apos;altra posizione, o annulla il salvataggio.</translation>
@ -243,37 +253,50 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>FriendWidget</name> <name>FriendWidget</name>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="53"/> <location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source> <source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment> <comment>Menu to copy the Tox ID of that friend</comment>
<translation>Copia Tox ID del contatto</translation> <translation>Copia Tox ID del contatto</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="54"/> <location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment>
<translation>Invita nel gruppo</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="63"/>
<source>Auto accept files from this friend</source> <source>Auto accept files from this friend</source>
<comment>context menu entry</comment> <comment>context menu entry</comment>
<translation>Accetta automaticamente i files inviati da questo contatto</translation> <translation>Accetta automaticamente i files inviati da questo contatto</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="64"/> <location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Diasble auto accepting files</source> <source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Invita nel gruppo</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment> <comment>context menu entry</comment>
<translation>Non accettare automaticamente i files inviati da questo contatto</translation> <translation>Accetta manualmente i files inviati da questo contatto</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Accetta automaticamente i files inviati da tutti i contatti</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="68"/> <location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translation>Accetta manualmente i files inviati da tutti i contatti</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source> <source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment> <comment>Menu to remove the friend from our friendlist</comment>
<translation>Rimuovi contatto</translation> <translation>Rimuovi contatto</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="90"/> <location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source> <source>Choose an auto accept directory</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation>Scegli dove salvare i files accettati automaticamente</translation> <translation>Scegli dove salvare i files accettati automaticamente</translation>
@ -311,33 +334,33 @@ Do you want to erase this profile ?</source>
<translation>Lingua:</translation> <translation>Lingua:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="94"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="108"/>
<source>Auto away after (0 to disable):</source> <source>Auto away after (0 to disable):</source>
<translation>Imposta assenza dopo:</translation> <translation>Imposta assenza dopo:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="107"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="121"/>
<source>Set to 0 to disable</source> <source>Set to 0 to disable</source>
<translation>Imposta 0 per disabilitare</translation> <translation>Imposta 0 per disabilitare</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="139"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="153"/>
<source>Smiley Pack:</source> <source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment> <extracomment>Text on smiley pack label</extracomment>
<translation>Emoticons:</translation> <translation>Emoticons:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="228"/>
<source>Style:</source> <source>Style:</source>
<translation>Stile:</translation> <translation>Stile:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="236"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="250"/>
<source>Connection Settings</source> <source>Connection Settings</source>
<translation>Impostazioni Connessione</translation> <translation>Impostazioni Connessione</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="256"/>
<source>Enable IPv6 (recommended)</source> <source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment> <extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Abilita IPv6 (consigliato)</translation> <translation>Abilita IPv6 (consigliato)</translation>
@ -356,78 +379,88 @@ Do you want to erase this profile ?</source>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="72"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="72"/>
<source>Start in tray</source> <source>Start in tray</source>
<translation>Avvia minimizzato</translation> <translation>Avvia minimizzato nella traybar</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="79"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Close to tray</source>
<translation>Chiudi nella traybar</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="86"/>
<source>Minimize to tray</source>
<translation>Minimizza nella traybar</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="93"/>
<source>Show contacts&apos; status changes</source> <source>Show contacts&apos; status changes</source>
<translation>Mostra quando i contatti cambiano stato</translation> <translation>Mostra quando i contatti cambiano stato</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="88"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="102"/>
<source>Provided in minutes</source> <source>Provided in minutes</source>
<translation>Espresso in minuti</translation> <translation>Espresso in minuti</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="127"/>
<source> minutes</source> <source> minutes</source>
<translation> minuti</translation> <translation> minuti</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="131"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="145"/>
<source>Theme</source> <source>Theme</source>
<translation>Impostazioni Tema</translation> <translation>Impostazioni Tema</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="160"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="174"/>
<source>:)</source> <source>:)</source>
<translation>:)</translation> <translation>:)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="170"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="184"/>
<source>;)</source> <source>;)</source>
<translation>;)</translation> <translation>;)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="180"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="194"/>
<source>:p</source> <source>:p</source>
<translation>:p</translation> <translation>:p</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="190"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="204"/>
<source>:O</source> <source>:O</source>
<translation>:O</translation> <translation>:O</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="200"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>:&apos;(</source> <source>:&apos;(</source>
<translation>:&apos;(</translation> <translation>:&apos;(</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="259"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="273"/>
<source>Use proxy (SOCKS5)</source> <source>Use proxy (SOCKS5)</source>
<translation>Usa proxy (SOCKS5)</translation> <translation>Usa proxy (SOCKS5)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="268"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="282"/>
<source>Address</source> <source>Address</source>
<extracomment>Text on proxy addr label</extracomment> <extracomment>Text on proxy addr label</extracomment>
<translation>IP</translation> <translation>IP</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="278"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="292"/>
<source>Port</source> <source>Port</source>
<extracomment>Text on proxy port label</extracomment> <extracomment>Text on proxy port label</extracomment>
<translation>Porta</translation> <translation>Porta</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="266"/>
<source>Disable UDP (not recommended)</source> <source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment> <extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Disabilita connessioni UDP (non raccomandato)</translation> <translation>Disabilita connessioni UDP (non raccomandato)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="249"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="263"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source> <source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment> <extracomment>force tcp checkbox tooltip</extracomment>
<translation>Questo permette di usare qTox con Tor; tuttavia aggiunge carico alla rete Tox, quindi usalo solo se necessario.</translation> <translation>Questo permette di usare qTox con Tor; tuttavia aggiunge carico alla rete Tox, quindi usalo solo se necessario.</translation>
@ -436,8 +469,8 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>GenericChatForm</name> <name>GenericChatForm</name>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="150"/> <location filename="../src/widget/form/genericchatform.cpp" line="151"/>
<location filename="../src/widget/form/genericchatform.cpp" line="156"/> <location filename="../src/widget/form/genericchatform.cpp" line="157"/>
<source>Save chat log</source> <source>Save chat log</source>
<translation>Salva il log della chat</translation> <translation>Salva il log della chat</translation>
</message> </message>
@ -445,13 +478,13 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>GroupChatForm</name> <name>GroupChatForm</name>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="45"/> <location filename="../src/widget/form/groupchatform.cpp" line="48"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<comment>Number of users in chat</comment> <comment>Number of users in chat</comment>
<translation>%1 utenti in chat</translation> <translation>%1 utenti in chat</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="77"/> <location filename="../src/widget/form/groupchatform.cpp" line="82"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<translation>%1 utenti in chat</translation> <translation>%1 utenti in chat</translation>
</message> </message>
@ -485,83 +518,107 @@ Do you want to erase this profile ?</source>
<translation>Identità</translation> <translation>Identità</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="111"/> <location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source> <source>Call active</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation>Chiamata in corso</translation> <translation>Chiamata in corso</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/> <location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source> <source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Non puoi cambiare profilo durante una chiamata!</translation> <translation>Non puoi cambiare profilo durante una chiamata!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="122"/> <location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source> <source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment> <comment>renaming a profile</comment>
<translation>Rinomina &quot;%1&quot;</translation> <translation>Rinomina &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="137"/> <location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Profilo già esistente</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Un profilo chiamato &quot;%1&quot; esiste già. Vuoi sovrascriverlo?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source> <source>Export profile</source>
<comment>save dialog title</comment> <comment>save dialog title</comment>
<translation>Esporta profilo</translation> <translation>Esporta profilo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="139"/> <location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment> <comment>save dialog filter</comment>
<translation>Tox save file (*.tox)</translation> <translation>Tox save file (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source> <source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment> <comment>current profile deletion warning title</comment>
<translation>Profilo attualmente in uso</translation> <translation>Profilo attualmente in uso</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source> <source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment> <comment>current profile deletion warning text</comment>
<translation>Questo profilo è attualmente in uso. Per favore carica un profilo differente prima di eliminare questo.</translation> <translation>Questo profilo è attualmente in uso. Per favore carica un profilo differente prima di eliminare questo.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/> <location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source> <source>Deletion imminent!</source>
<comment>deletion confirmation title</comment> <comment>deletion confirmation title</comment>
<translation>Eliminazione imminente!</translation> <translation>Eliminazione imminente!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/> <location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source> <source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment> <comment>deletion confirmation text</comment>
<translation>Sei sicuro di voler eliminare questo profilo?</translation> <translation>Sei sicuro di voler eliminare questo profilo?</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source> <source>Import profile</source>
<comment>import dialog title</comment> <comment>import dialog title</comment>
<translation>Importa profilo</translation> <translation>Importa profilo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment> <comment>import dialog filter</comment>
<translation>Tox save file (*.tox)</translation> <translation>Tox save file (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source> <source>Ignoring non-Tox file</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation>File ignorato</translation> <translation>File ignorato</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source> <source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Attenzione: hai scelto un file che non contiente un profilo Tox.\nQuesto file verrà ignorato.</translation> <translation>Attenzione: hai scelto un file che non contiente un profilo Tox.\nQuesto file verrà ignorato.</translation>
</message> </message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Profilo già esistente</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Un profilo chiamato &quot;%1&quot; esiste già. Vuoi sovrascriverlo?</translation>
</message>
</context> </context>
<context> <context>
<name>IdentitySettings</name> <name>IdentitySettings</name>
@ -636,10 +693,16 @@ Do you want to erase this profile ?</source>
<translation>Utile per preservare la tua sicurezza su computer pubblici</translation> <translation>Utile per preservare la tua sicurezza su computer pubblici</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source> <source>Import a profile</source>
<comment>import profile button</comment> <comment>import profile button</comment>
<translation>Importa un profilo</translation> <translation>Importa profilo</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Nuovo profilo</translation>
</message> </message>
</context> </context>
<context> <context>
@ -701,103 +764,128 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>Widget</name> <name>Widget</name>
<message> <message>
<location filename="../src/widget/widget.cpp" line="109"/> <location filename="../src/widget/widget.cpp" line="75"/>
<source>online</source>
<translation>online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="78"/>
<source>away</source>
<translation>assente</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="81"/>
<source>busy</source>
<translation>occupato</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="84"/>
<source>&amp;Quit</source>
<translation>&amp;Esci</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="87"/>
<source>Change status to:</source>
<translation>Cambia stato in:</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="154"/>
<source>Online</source> <source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment> <comment>Button to set your status to &apos;Online&apos;</comment>
<translation>Online</translation> <translation>Online</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="111"/> <location filename="../src/widget/widget.cpp" line="156"/>
<source>Away</source> <source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment> <comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Assente</translation> <translation>Assente</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="113"/> <location filename="../src/widget/widget.cpp" line="158"/>
<source>Busy</source> <source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment> <comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Occupato</translation> <translation>Occupato</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="311"/> <location filename="../src/widget/widget.cpp" line="382"/>
<source>Choose a profile</source> <source>Choose a profile</source>
<translation>Scegli un profilo</translation> <translation>Scegli un profilo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="312"/> <location filename="../src/widget/widget.cpp" line="383"/>
<source>Please choose which identity to use</source> <source>Please choose which identity to use</source>
<translation>Per favore scegli quale identità usare</translation> <translation>Per favore scegli quale identità usare</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="338"/> <location filename="../src/widget/widget.cpp" line="409"/>
<source>Choose a profile picture</source> <source>Choose a profile picture</source>
<translation>Scegli un&apos;immagine per il profilo</translation> <translation>Scegli un&apos;immagine per il profilo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="345"/> <location filename="../src/widget/widget.cpp" line="416"/>
<location filename="../src/widget/widget.cpp" line="352"/> <location filename="../src/widget/widget.cpp" line="423"/>
<location filename="../src/widget/widget.cpp" line="373"/> <location filename="../src/widget/widget.cpp" line="444"/>
<source>Error</source> <source>Error</source>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="345"/> <location filename="../src/widget/widget.cpp" line="416"/>
<source>Unable to open this file</source> <source>Unable to open this file</source>
<translation>Impossibile aprire il file</translation> <translation>Impossibile aprire il file</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="352"/> <location filename="../src/widget/widget.cpp" line="423"/>
<source>Unable to read this image</source> <source>Unable to read this image</source>
<translation>Impossibile leggere l&apos;immagine</translation> <translation>Impossibile leggere l&apos;immagine</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="373"/> <location filename="../src/widget/widget.cpp" line="444"/>
<source>This image is too big</source> <source>This image is too big</source>
<translation>L&apos;immagine è troppo grande</translation> <translation>L&apos;immagine è troppo grande</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="400"/> <location filename="../src/widget/widget.cpp" line="471"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source> <source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Impossibile avviare Toxcore.\nqTox terminerà dopo che avrai chiuso questo messaggio.</translation> <translation>Impossibile avviare Toxcore.\nqTox terminerà dopo che avrai chiuso questo messaggio.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="409"/> <location filename="../src/widget/widget.cpp" line="480"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source> <source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Impossibile avviare Toxcore con le tue impostazione proxy.\nqTox non può funzionare correttamente, per favore modifica le impostazioni e riavvia il programma.</translation> <translation>Impossibile avviare Toxcore con le tue impostazione proxy.\nqTox non può funzionare correttamente, per favore modifica le impostazioni e riavvia il programma.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="580"/> <location filename="../src/widget/widget.cpp" line="660"/>
<source>away</source> <source>away</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>assente</translation> <translation>assente</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="582"/> <location filename="../src/widget/widget.cpp" line="662"/>
<source>busy</source> <source>busy</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>occupato</translation> <translation>occupato</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="584"/> <location filename="../src/widget/widget.cpp" line="664"/>
<source>offline</source> <source>offline</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>offline</translation> <translation>offline</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="586"/> <location filename="../src/widget/widget.cpp" line="666"/>
<source>online</source> <source>online</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>online</translation> <translation>online</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="588"/> <location filename="../src/widget/widget.cpp" line="668"/>
<source>%1 is now %2</source> <source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment> <comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation>%1 è ora %2</translation> <translation>%1 è ora %2</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="781"/> <location filename="../src/widget/widget.cpp" line="866"/>
<source>&lt;Unknown&gt;</source> <source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment> <comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Sconosciuto&gt;</translation> <translation>&lt;Sconosciuto&gt;</translation>

Binary file not shown.

View File

@ -48,27 +48,27 @@
<translation>Ustawienia</translation> <translation>Ustawienia</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="38"/> <location filename="../src/widget/form/settings/avsettings.ui" line="75"/>
<source>Video Settings</source> <source>Video Settings</source>
<translation>Ustawienia wideo</translation> <translation>Ustawienia wideo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="49"/> <location filename="../src/widget/form/settings/avsettings.ui" line="86"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Rozdzielczość</translation> <translation>Rozdzielczość</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="148"/> <location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Volume Settings (Stubs)</source> <source>Volume Settings (Stubs)</source>
<translation>Ustawienia dźwięku</translation> <translation>Ustawienia dźwięku</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="154"/> <location filename="../src/widget/form/settings/avsettings.ui" line="51"/>
<source>Playback</source> <source>Playback</source>
<translation>Odtwarzanie</translation> <translation>Odtwarzanie</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="168"/> <location filename="../src/widget/form/settings/avsettings.ui" line="44"/>
<source>Microphone</source> <source>Microphone</source>
<translation>Mikrofon</translation> <translation>Mikrofon</translation>
</message> </message>
@ -81,22 +81,22 @@
<translation type="obsolete">Tryby</translation> <translation type="obsolete">Tryby</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/> <location filename="../src/widget/form/settings/avsettings.ui" line="103"/>
<source>Hue</source> <source>Hue</source>
<translation>Odcień</translation> <translation>Odcień</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="80"/> <location filename="../src/widget/form/settings/avsettings.ui" line="117"/>
<source>Brightness</source> <source>Brightness</source>
<translation>Jasność</translation> <translation>Jasność</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="94"/> <location filename="../src/widget/form/settings/avsettings.ui" line="131"/>
<source>Saturation</source> <source>Saturation</source>
<translation>Nasycenie</translation> <translation>Nasycenie</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="108"/> <location filename="../src/widget/form/settings/avsettings.ui" line="145"/>
<source>Contrast</source> <source>Contrast</source>
<translation>Kontrast</translation> <translation>Kontrast</translation>
</message> </message>
@ -200,12 +200,23 @@
<context> <context>
<name>Core</name> <name>Core</name>
<message> <message>
<location filename="../src/core.cpp" line="1100"/> <location filename="../src/core.cpp" line="231"/>
<source>Toxing on qTox</source>
<translatorcomment>better translation?</translatorcomment>
<translation>Toxuję na qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>Użytkownik qToxa</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source> <source>Encrypted profile</source>
<translation>Zaszyfrowany profil</translation> <translation>Zaszyfrowany profil</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1101"/> <location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it <source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source> Do you want to erase this profile ?</source>
<translation>Twój profil zdaje się być zaszyfrowany, qTox nie jest w stanie go otworzyć <translation>Twój profil zdaje się być zaszyfrowany, qTox nie jest w stanie go otworzyć
@ -215,19 +226,19 @@ Czy chcesz usunąć ten profil ?</translation>
<context> <context>
<name>FileTransferInstance</name> <name>FileTransferInstance</name>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="233"/> <location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source> <source>Save a file</source>
<comment>Title of the file saving dialog</comment> <comment>Title of the file saving dialog</comment>
<translation>Zapisz plik</translation> <translation>Zapisz plik</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="241"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source> <source>Location not writable</source>
<comment>Title of permissions popup</comment> <comment>Title of permissions popup</comment>
<translation>Nie można zapisać w lokacji</translation> <translation>Nie można zapisać w lokacji</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="241"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source> <source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment> <comment>text of permissions popup</comment>
<translation>Nie masz uprawnienia by zapisać w tej lokacji. Wybierz inną lub anuluj zapis.</translation> <translation>Nie masz uprawnienia by zapisać w tej lokacji. Wybierz inną lub anuluj zapis.</translation>
@ -291,37 +302,61 @@ Czy chcesz usunąć ten profil ?</translation>
<context> <context>
<name>FriendWidget</name> <name>FriendWidget</name>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="53"/> <location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source> <source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment> <comment>Menu to copy the Tox ID of that friend</comment>
<translation>Kopiuj ID kontaktu</translation> <translation>Kopiuj ID kontaktu</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite in group</source> <source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment> <comment>Menu to invite a friend in a groupchat</comment>
<translation>Zaproś do grupy</translation> <translation type="obsolete">Zaproś do grupy</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="63"/> <location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Auto accept files from this friend</source> <source>Auto accept files from this friend</source>
<comment>context menu entry</comment> <comment>context menu entry</comment>
<translation>Odbieraj pliki automatycznie</translation> <translation>Odbieraj pliki automatycznie</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="64"/>
<source>Diasble auto accepting files</source> <source>Diasble auto accepting files</source>
<comment>context menu entry</comment> <comment>context menu entry</comment>
<translation>Nie odbieraj plików automatycznie</translation> <translation type="obsolete">Nie odbieraj plików automatycznie</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Zaproś do grupy</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Ręcznie akceptuj pliki od tego znajomego</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Automatycznie akceptuj pliki od wszystkich znajomych</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="68"/> <location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translatorcomment>better translation?</translatorcomment>
<translation>Wyłącz globalnie automatyczną akceptację</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source> <source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment> <comment>Menu to remove the friend from our friendlist</comment>
<translation>Usuń kontakt</translation> <translation>Usuń kontakt</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="90"/> <location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source> <source>Choose an auto accept directory</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation>Wybierz domyślną ścieżkę dla plików</translation> <translation>Wybierz domyślną ścieżkę dla plików</translation>
@ -390,7 +425,7 @@ Czy chcesz usunąć ten profil ?</translation>
<message> <message>
<source>Use translations</source> <source>Use translations</source>
<extracomment>Text on a checkbox to enable translations</extracomment> <extracomment>Text on a checkbox to enable translations</extracomment>
<translation type="vanished">Użyj tłumaczenia</translation> <translation type="obsolete">Użyj tłumaczenia</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="37"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="37"/>
@ -422,33 +457,43 @@ Czy chcesz usunąć ten profil ?</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="79"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Close to tray</source>
<translation>Zamknij do traya</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="86"/>
<source>Minimize to tray</source>
<translation>Minimalizuj do traya</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="93"/>
<source>Show contacts&apos; status changes</source> <source>Show contacts&apos; status changes</source>
<translation>Pokazuj zmiany statusów</translation> <translation>Pokazuj zmiany statusów</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="88"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="102"/>
<source>Provided in minutes</source> <source>Provided in minutes</source>
<translation>Podane w minutach</translation> <translation>Podane w minutach</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="94"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="108"/>
<source>Auto away after (0 to disable):</source> <source>Auto away after (0 to disable):</source>
<translation>Zmiana statusu na &quot;Nieobecny&quot; (0 by wyłączyć):</translation> <translation>Zmiana statusu na &quot;Nieobecny&quot; (0 by wyłączyć):</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="107"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="121"/>
<source>Set to 0 to disable</source> <source>Set to 0 to disable</source>
<translation>Ustaw na 0 by wyłączyć</translation> <translation>Ustaw na 0 by wyłączyć</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="139"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="153"/>
<source>Smiley Pack:</source> <source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment> <extracomment>Text on smiley pack label</extracomment>
<translatorcomment>better translation? anyone?</translatorcomment> <translatorcomment>better translation? anyone?</translatorcomment>
<translation>Paczka uśmiechów:</translation> <translation>Paczka uśmiechów:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="228"/>
<source>Style:</source> <source>Style:</source>
<translation>Styl:</translation> <translation>Styl:</translation>
</message> </message>
@ -457,12 +502,12 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">Automatyczna zmiana statusu na &quot;Nieobecny&quot; po:</translation> <translation type="obsolete">Automatyczna zmiana statusu na &quot;Nieobecny&quot; po:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="127"/>
<source> minutes</source> <source> minutes</source>
<translation> min</translation> <translation> min</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="131"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="145"/>
<source>Theme</source> <source>Theme</source>
<translation>Motyw</translation> <translation>Motyw</translation>
</message> </message>
@ -473,27 +518,27 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">Paczka uśmiechów</translation> <translation type="obsolete">Paczka uśmiechów</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="160"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="174"/>
<source>:)</source> <source>:)</source>
<translation>:)</translation> <translation>:)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="170"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="184"/>
<source>;)</source> <source>;)</source>
<translation>;)</translation> <translation>;)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="180"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="194"/>
<source>:p</source> <source>:p</source>
<translation>:p</translation> <translation>:p</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="190"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="204"/>
<source>:O</source> <source>:O</source>
<translation>:O</translation> <translation>:O</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="200"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>:&apos;(</source> <source>:&apos;(</source>
<translation>:&apos;(</translation> <translation>:&apos;(</translation>
</message> </message>
@ -502,41 +547,41 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">Styl</translation> <translation type="obsolete">Styl</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="236"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="250"/>
<source>Connection Settings</source> <source>Connection Settings</source>
<translation>Ustawienia połączenia</translation> <translation>Ustawienia połączenia</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="256"/>
<source>Enable IPv6 (recommended)</source> <source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment> <extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Użyj IPv6 (zalecane)</translation> <translation>Użyj IPv6 (zalecane)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="249"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="263"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source> <source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment> <extracomment>force tcp checkbox tooltip</extracomment>
<translation>To pozwala np. na toxowanie przez Tora. Niestety obciąża to sieć Tox, więc używaj tylko w razie potrzeby.</translation> <translation>To pozwala np. na toxowanie przez Tora. Niestety obciąża to sieć Tox, więc używaj tylko w razie potrzeby.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="266"/>
<source>Disable UDP (not recommended)</source> <source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment> <extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Wyłącz UDP (nie zalecane)</translation> <translation>Wyłącz UDP (nie zalecane)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="259"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="273"/>
<source>Use proxy (SOCKS5)</source> <source>Use proxy (SOCKS5)</source>
<translation>Użyj proxy (SOCKS5)</translation> <translation>Użyj proxy (SOCKS5)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="268"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="282"/>
<source>Address</source> <source>Address</source>
<extracomment>Text on proxy addr label</extracomment> <extracomment>Text on proxy addr label</extracomment>
<translation>Adres</translation> <translation>Adres</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="278"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="292"/>
<source>Port</source> <source>Port</source>
<extracomment>Text on proxy port label</extracomment> <extracomment>Text on proxy port label</extracomment>
<translation>Port</translation> <translation>Port</translation>
@ -545,8 +590,8 @@ Czy chcesz usunąć ten profil ?</translation>
<context> <context>
<name>GenericChatForm</name> <name>GenericChatForm</name>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="150"/> <location filename="../src/widget/form/genericchatform.cpp" line="151"/>
<location filename="../src/widget/form/genericchatform.cpp" line="156"/> <location filename="../src/widget/form/genericchatform.cpp" line="157"/>
<source>Save chat log</source> <source>Save chat log</source>
<translation>Zapisz historię rozmowy</translation> <translation>Zapisz historię rozmowy</translation>
</message> </message>
@ -554,7 +599,7 @@ Czy chcesz usunąć ten profil ?</translation>
<context> <context>
<name>GroupChatForm</name> <name>GroupChatForm</name>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="45"/> <location filename="../src/widget/form/groupchatform.cpp" line="48"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<comment>Number of users in chat</comment> <comment>Number of users in chat</comment>
<translation>%1 użytkowników w czacie</translation> <translation>%1 użytkowników w czacie</translation>
@ -564,7 +609,7 @@ Czy chcesz usunąć ten profil ?</translation>
<translation type="obsolete">&lt;Nieznany/a&gt;</translation> <translation type="obsolete">&lt;Nieznany/a&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="77"/> <location filename="../src/widget/form/groupchatform.cpp" line="82"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<translation>%1 użytkowników w czacie</translation> <translation>%1 użytkowników w czacie</translation>
</message> </message>
@ -602,83 +647,107 @@ Czy chcesz usunąć ten profil ?</translation>
<translation>Tożsamość</translation> <translation>Tożsamość</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="111"/> <location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source> <source>Call active</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation>Rozmowa w trakcie</translation> <translation>Rozmowa w trakcie</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="112"/> <location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source> <source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Nie można zmienić profilu podczas aktywnego połączenia!</translation> <translation>Nie można zmienić profilu podczas aktywnego połączenia!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="122"/> <location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source> <source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment> <comment>renaming a profile</comment>
<translation>Zmień nazwę &quot;%1&quot;</translation> <translation>Zmień nazwę &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="137"/> <location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Profil już istnieje</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Profil pod nazwą &quot;%1&quot; już istnieje. Czy chcesz go usunąć?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source> <source>Export profile</source>
<comment>save dialog title</comment> <comment>save dialog title</comment>
<translation>Eksportuj profil</translation> <translation>Eksportuj profil</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="139"/> <location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment> <comment>save dialog filter</comment>
<translation>Plik zapisu Tox (*.tox)</translation> <translation>Plik zapisu Tox (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source> <source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment> <comment>current profile deletion warning title</comment>
<translation>Profil obecnie załadowany</translation> <translation>Profil obecnie załadowany</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="148"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source> <source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment> <comment>current profile deletion warning text</comment>
<translation>Ten profil jest obecnie w użyciu. Proszę załaduj inny profil przed usunięciem tego.</translation> <translation>Ten profil jest obecnie w użyciu. Proszę załaduj inny profil przed usunięciem tego.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/> <location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source> <source>Deletion imminent!</source>
<comment>deletion confirmation title</comment> <comment>deletion confirmation title</comment>
<translation>Usuwanie profilu!</translation> <translation>Usuwanie profilu!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="153"/> <location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source> <source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment> <comment>deletion confirmation text</comment>
<translation>Czy na pewno chcesz usunąć ten profil?</translation> <translation>Czy na pewno chcesz usunąć ten profil?</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source> <source>Import profile</source>
<comment>import dialog title</comment> <comment>import dialog title</comment>
<translation>Importuj profil</translation> <translation>Importuj profil</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="165"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment> <comment>import dialog filter</comment>
<translation>Plik zapisu Tox (*.tox)</translation> <translation>Plik zapisu Tox (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source> <source>Ignoring non-Tox file</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation>Zignorowano niepoprawny plik profilu</translation> <translation>Zignorowano niepoprawny plik profilu</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="173"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source> <source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Ostrzeżenie: Wybrano plik który nie jest plikiem zapisu Tox; zignorowano.</translation> <translation>Ostrzeżenie: Wybrano plik który nie jest plikiem zapisu Tox; zignorowano.</translation>
</message> </message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Profil już istnieje</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Profil pod nazwą &quot;%1&quot; już istnieje. Czy chcesz go usunąć?</translation>
</message>
</context> </context>
<context> <context>
<name>IdentityPage</name> <name>IdentityPage</name>
@ -778,11 +847,17 @@ Czy chcesz usunąć ten profil ?</translation>
<translation>Użyteczne by pozostać bezpiecznym na publicznych komputerach</translation> <translation>Użyteczne by pozostać bezpiecznym na publicznych komputerach</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source> <source>Import a profile</source>
<comment>import profile button</comment> <comment>import profile button</comment>
<translation>Importuj profil</translation> <translation>Importuj profil</translation>
</message> </message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Nowy Tox ID</translation>
</message>
</context> </context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
@ -891,103 +966,128 @@ Czy chcesz usunąć ten profil ?</translation>
<context> <context>
<name>Widget</name> <name>Widget</name>
<message> <message>
<location filename="../src/widget/widget.cpp" line="109"/> <location filename="../src/widget/widget.cpp" line="75"/>
<source>online</source>
<translation>online</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="78"/>
<source>away</source>
<translation>nieobecna/y</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="81"/>
<source>busy</source>
<translation>zajęta/y</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="84"/>
<source>&amp;Quit</source>
<translation>&amp;Wyjdź</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="87"/>
<source>Change status to:</source>
<translation>Zmień status na:</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="154"/>
<source>Online</source> <source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment> <comment>Button to set your status to &apos;Online&apos;</comment>
<translation>Online</translation> <translation>Online</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="111"/> <location filename="../src/widget/widget.cpp" line="156"/>
<source>Away</source> <source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment> <comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Nieobecny/a</translation> <translation>Nieobecny/a</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="113"/> <location filename="../src/widget/widget.cpp" line="158"/>
<source>Busy</source> <source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment> <comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Zajęty/a</translation> <translation>Zajęty/a</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="290"/> <location filename="../src/widget/widget.cpp" line="382"/>
<source>Choose a profile</source> <source>Choose a profile</source>
<translation>Wybierz profil</translation> <translation>Wybierz profil</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="291"/> <location filename="../src/widget/widget.cpp" line="383"/>
<source>Please choose which identity to use</source> <source>Please choose which identity to use</source>
<translation>Proszę wybierz która tożsamość ma być użyta</translation> <translation>Proszę wybierz która tożsamość ma być użyta</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="317"/> <location filename="../src/widget/widget.cpp" line="409"/>
<source>Choose a profile picture</source> <source>Choose a profile picture</source>
<translation>Wybierz obrazek profilu</translation> <translation>Wybierz obrazek profilu</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="324"/> <location filename="../src/widget/widget.cpp" line="416"/>
<location filename="../src/widget/widget.cpp" line="331"/> <location filename="../src/widget/widget.cpp" line="423"/>
<location filename="../src/widget/widget.cpp" line="352"/> <location filename="../src/widget/widget.cpp" line="444"/>
<source>Error</source> <source>Error</source>
<translation>Błąd</translation> <translation>Błąd</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="324"/> <location filename="../src/widget/widget.cpp" line="416"/>
<source>Unable to open this file</source> <source>Unable to open this file</source>
<translation>Nie można otworzyć tego pliku</translation> <translation>Nie można otworzyć tego pliku</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="331"/> <location filename="../src/widget/widget.cpp" line="423"/>
<source>Unable to read this image</source> <source>Unable to read this image</source>
<translation>Nie można odczytać tego obrazka</translation> <translation>Nie można odczytać tego obrazka</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="352"/> <location filename="../src/widget/widget.cpp" line="444"/>
<source>This image is too big</source> <source>This image is too big</source>
<translation>Ten obrazek jest zbyt wielki</translation> <translation>Ten obrazek jest zbyt wielki</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="379"/> <location filename="../src/widget/widget.cpp" line="471"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source> <source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Nie udało się uruchomić Toxcore, aplikacja zamknie się po zamknięciu tej wiadomości.</translation> <translation>Nie udało się uruchomić Toxcore, aplikacja zamknie się po zamknięciu tej wiadomości.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="388"/> <location filename="../src/widget/widget.cpp" line="480"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source> <source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Nie udało się uruchomić toxcore z twoimi ustawieniami proxy. qTox nie może działać, proszę zmodyfikuj ustawienia i zrestartuj.</translation> <translation>Nie udało się uruchomić toxcore z twoimi ustawieniami proxy. qTox nie może działać, proszę zmodyfikuj ustawienia i zrestartuj.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="559"/> <location filename="../src/widget/widget.cpp" line="660"/>
<source>away</source> <source>away</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>nieobecna/y</translation> <translation>nieobecna/y</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="561"/> <location filename="../src/widget/widget.cpp" line="662"/>
<source>busy</source> <source>busy</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>zajęta/y</translation> <translation>zajęta/y</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="563"/> <location filename="../src/widget/widget.cpp" line="664"/>
<source>offline</source> <source>offline</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>offline</translation> <translation>offline</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="565"/> <location filename="../src/widget/widget.cpp" line="666"/>
<source>online</source> <source>online</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>online</translation> <translation>online</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="567"/> <location filename="../src/widget/widget.cpp" line="668"/>
<source>%1 is now %2</source> <source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment> <comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation>%1 jest teraz %2</translation> <translation>%1 jest teraz %2</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="760"/> <location filename="../src/widget/widget.cpp" line="866"/>
<source>&lt;Unknown&gt;</source> <source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment> <comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Nieznany/a&gt;</translation> <translation>&lt;Nieznany/a&gt;</translation>

Binary file not shown.

View File

@ -5,18 +5,8 @@
<name>AVForm</name> <name>AVForm</name>
<message> <message>
<location filename="../src/widget/form/settings/avform.cpp" line="22"/> <location filename="../src/widget/form/settings/avform.cpp" line="22"/>
<source>Audio/Video settings</source> <source>Audio/Video</source>
<translation>Настройки аудио/видео</translation> <translation>Аудио/Видео</translation>
</message>
<message>
<source>Hide video preview</source>
<comment>On a button</comment>
<translation type="vanished">Спрятать видео-превью</translation>
</message>
<message>
<source>Show video preview</source>
<comment>On a button</comment>
<translation type="vanished">Посмотреть видео-превью</translation>
</message> </message>
</context> </context>
<context> <context>
@ -27,58 +17,49 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="20"/> <location filename="../src/widget/form/settings/avsettings.ui" line="75"/>
<source>Volume Settings (Stubs)</source> <source>Video Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="26"/>
<source>Playback</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="40"/>
<source>Microphone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="57"/>
<source>Video settings</source>
<translation>Настройки видео</translation> <translation>Настройки видео</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="66"/> <location filename="../src/widget/form/settings/avsettings.ui" line="86"/>
<source>Modes</source> <source>Resolution</source>
<translation type="unfinished"></translation> <translation>Разрешение</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="83"/> <location filename="../src/widget/form/settings/avsettings.ui" line="38"/>
<source>Volume Settings (Stubs)</source>
<translation>Настройки звука (заглушка)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="51"/>
<source>Playback</source>
<translation>Воспроизведение</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="44"/>
<source>Microphone</source>
<translation>Микрофон</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="103"/>
<source>Hue</source> <source>Hue</source>
<translation type="unfinished"></translation> <translation>Тон</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="97"/> <location filename="../src/widget/form/settings/avsettings.ui" line="117"/>
<source>Brightness</source> <source>Brightness</source>
<translation type="unfinished"></translation> <translation>Яркость</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="111"/> <location filename="../src/widget/form/settings/avsettings.ui" line="131"/>
<source>Saturation</source> <source>Saturation</source>
<translation type="unfinished"></translation> <translation>Насыщенность</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="125"/> <location filename="../src/widget/form/settings/avsettings.ui" line="145"/>
<source>Contrast</source> <source>Contrast</source>
<translation type="unfinished"></translation> <translation>Контраст</translation>
</message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="139"/>
<source>Preview</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show video preview</source>
<translation type="vanished">Посмотреть видео-превью</translation>
</message> </message>
</context> </context>
<context> <context>
@ -166,7 +147,7 @@
<context> <context>
<name>ChatForm</name> <name>ChatForm</name>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="105"/> <location filename="../src/widget/form/chatform.cpp" line="106"/>
<source>Send a file</source> <source>Send a file</source>
<translation>Отправить файл</translation> <translation>Отправить файл</translation>
</message> </message>
@ -174,12 +155,23 @@
<context> <context>
<name>Core</name> <name>Core</name>
<message> <message>
<location filename="../src/core.cpp" line="1104"/> <location filename="../src/core.cpp" line="231"/>
<source>Toxing on qTox</source>
<translatorcomment>Как-то так. Может, можно ещё что-нибудь придумать?</translatorcomment>
<translation type="unfinished">Всем привет из qTox&apos;а</translation>
</message>
<message>
<location filename="../src/core.cpp" line="232"/>
<source>qTox User</source>
<translation>Пользователь qTox</translation>
</message>
<message>
<location filename="../src/core.cpp" line="1106"/>
<source>Encrypted profile</source> <source>Encrypted profile</source>
<translation>Зашифрованный профиль</translation> <translation>Зашифрованный профиль</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1105"/> <location filename="../src/core.cpp" line="1107"/>
<source>Your tox profile seems to be encrypted, qTox can&apos;t open it <source>Your tox profile seems to be encrypted, qTox can&apos;t open it
Do you want to erase this profile ?</source> Do you want to erase this profile ?</source>
<translation>Похоже, ваш tox-профиль зашифрован, qTox не может открыть его <translation>Похоже, ваш tox-профиль зашифрован, qTox не может открыть его
@ -189,19 +181,19 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>FileTransferInstance</name> <name>FileTransferInstance</name>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="209"/> <location filename="../src/filetransferinstance.cpp" line="234"/>
<source>Save a file</source> <source>Save a file</source>
<comment>Title of the file saving dialog</comment> <comment>Title of the file saving dialog</comment>
<translation>Сохранить файл</translation> <translation>Сохранить файл</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="220"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>Location not writable</source> <source>Location not writable</source>
<comment>Title of permissions popup</comment> <comment>Title of permissions popup</comment>
<translation>Непригодная для записи локация</translation> <translation>Непригодная для записи локация</translation>
</message> </message>
<message> <message>
<location filename="../src/filetransferinstance.cpp" line="220"/> <location filename="../src/filetransferinstance.cpp" line="242"/>
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source> <source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
<comment>text of permissions popup</comment> <comment>text of permissions popup</comment>
<translation>У вас нет прав записи в эту локацию. Выберете другую или закройте диалог сохранения.</translation> <translation>У вас нет прав записи в эту локацию. Выберете другую или закройте диалог сохранения.</translation>
@ -267,40 +259,71 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>FriendWidget</name> <name>FriendWidget</name>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="48"/> <location filename="../src/widget/friendwidget.cpp" line="55"/>
<source>Copy friend ID</source> <source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment> <comment>Menu to copy the Tox ID of that friend</comment>
<translation>Копировать ID друга</translation> <translation>Копировать ID друга</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="49"/>
<source>Invite in group</source> <source>Invite in group</source>
<comment>Menu to invite a friend in a groupchat</comment> <comment>Menu to invite a friend in a groupchat</comment>
<translation type="obsolete">Пригласить в группу</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="65"/>
<source>Auto accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Автоматически принимать файлы от этого друга</translation>
</message>
<message>
<source>Diasble auto accepting files</source>
<comment>context menu entry</comment>
<translation type="obsolete">Запретить принимать файлы автоматически</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="54"/>
<source>Invite to group</source>
<comment>Menu to invite a friend to a groupchat</comment>
<translation>Пригласить в группу</translation> <translation>Пригласить в группу</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="59"/> <location filename="../src/widget/friendwidget.cpp" line="66"/>
<source>Manually accept files from this friend</source>
<comment>context menu entry</comment>
<translation>Вручную принимать файлы от этого друга</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="67"/>
<source>Auto accept files from all friends</source>
<comment>context menu entry</comment>
<translation>Автоматически принимать файлы от всех друзей</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="68"/>
<source>Disable global auto accept</source>
<comment>context menu entry</comment>
<translation>Выключить глобальное автопринятие</translation>
</message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="74"/>
<source>Remove friend</source> <source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment> <comment>Menu to remove the friend from our friendlist</comment>
<translation>Удалить друга</translation> <translation>Удалить друга</translation>
</message> </message>
<message>
<location filename="../src/widget/friendwidget.cpp" line="96"/>
<location filename="../src/widget/friendwidget.cpp" line="111"/>
<source>Choose an auto accept directory</source>
<comment>popup title</comment>
<translation>Выбрать папку для автоматического приёма</translation>
</message>
</context> </context>
<context> <context>
<name>GeneralForm</name> <name>GeneralForm</name>
<message> <message>
<location filename="../src/widget/form/settings/generalform.cpp" line="27"/> <location filename="../src/widget/form/settings/generalform.cpp" line="30"/>
<source>General Settings</source> <source>General</source>
<translation>Общие настройки</translation> <translation>Общие</translation>
</message>
<message>
<source>Bad port</source>
<comment>title of bad port popup</comment>
<translation type="vanished">Неправильный порт</translation>
</message>
<message>
<source>The port you entered is invalid; please enter another.</source>
<comment>text of bad port popup</comment>
<translation type="vanished">Введёный порт неверен; введите другой.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -316,153 +339,154 @@ Do you want to erase this profile ?</source>
<translation>Общие настройки</translation> <translation>Общие настройки</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="113"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="37"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="53"/>
<source>The translation may not load until qTox restarts.</source>
<translation>Перевод не изменится до перезапуска qTox.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="40"/>
<source>Translation:</source>
<translation>Перевод:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="79"/>
<source>Close to tray</source>
<translation>Сворачивать в трей при закрытии</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="86"/>
<source>Minimize to tray</source>
<translation>Сворачивать в трей</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="121"/>
<source>Set to 0 to disable</source>
<translation>Укажите 0, чтобы отключить</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="153"/>
<source>Smiley Pack:</source> <source>Smiley Pack:</source>
<extracomment>Text on smiley pack label</extracomment> <extracomment>Text on smiley pack label</extracomment>
<translation type="unfinished"></translation> <translation>Набор смайликов:</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="134"/>
<source>:)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="144"/>
<source>;)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="154"/>
<source>:p</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="164"/>
<source>:O</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="174"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="174"/>
<source>:)</source>
<translation>:)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="184"/>
<source>;)</source>
<translation>;)</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="194"/>
<source>:p</source>
<translation>:p</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="204"/>
<source>:O</source>
<translation>:O</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="214"/>
<source>:&apos;(</source> <source>:&apos;(</source>
<translation type="unfinished"></translation> <translation>:&apos;(</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="188"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="228"/>
<source>Style:</source> <source>Style:</source>
<translation type="unfinished"></translation> <translation>Стиль:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="210"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="250"/>
<source>Connection Settings</source> <source>Connection Settings</source>
<translation type="unfinished"></translation> <translation>Настройки соединения</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="216"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="256"/>
<source>Enable IPv6 (recommended)</source> <source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment> <extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Включить IPv6 (рекомендуется)</translation> <translation>Включить IPv6 (рекомендуется)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="233"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="273"/>
<source>Use proxy (SOCKS5)</source> <source>Use proxy (SOCKS5)</source>
<translation type="unfinished"></translation> <translation>Использовать прокси (SOCKS5)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="242"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="282"/>
<source>Address</source> <source>Address</source>
<extracomment>Text on proxy addr label</extracomment> <extracomment>Text on proxy addr label</extracomment>
<translation type="unfinished"></translation> <translation>Адрес</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="292"/>
<source>Port</source> <source>Port</source>
<extracomment>Text on proxy port label</extracomment> <extracomment>Text on proxy port label</extracomment>
<translation type="unfinished"></translation> <translation>Порт</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="35"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="62"/>
<source>Use translations</source>
<extracomment>Text on a checkbox to enable translations</extracomment>
<translation>Использовать перевод</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="42"/>
<source>Save settings to the working directory instead of the usual conf dir</source> <source>Save settings to the working directory instead of the usual conf dir</source>
<extracomment>describes makeToxPortable checkbox</extracomment> <extracomment>describes makeToxPortable checkbox</extracomment>
<translation>Сохранять настройки в рабочую директорию вместо страндартной папки настроек</translation> <translation>Сохранять настройки в рабочую директорию вместо страндартной папки настроек</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="45"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="65"/>
<source>Make Tox portable</source> <source>Make Tox portable</source>
<translation>Портативный режим</translation> <translation>Портативный режим</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="52"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="72"/>
<source>Start in tray</source> <source>Start in tray</source>
<translation type="unfinished"></translation> <translation>Запускать в системном лотке</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="59"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="93"/>
<source>Show contacts&apos; status changes</source> <source>Show contacts&apos; status changes</source>
<translation type="unfinished"></translation> <translation>Показывать изменения статусов контактов</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="68"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="102"/>
<source>Provided in minutes</source> <source>Provided in minutes</source>
<translation type="unfinished"></translation> <translation>Выставлено в минутах</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="74"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="108"/>
<source>Auto away after (0 to disable):</source> <source>Auto away after (0 to disable):</source>
<translation type="unfinished"></translation> <translation>Автоматически отсутствовать после (0 для отключения):</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="87"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="127"/>
<source> minutes</source> <source> minutes</source>
<translation type="unfinished"></translation> <translation> минут</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="105"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="145"/>
<source>Theme</source> <source>Theme</source>
<translation>Тема</translation> <translation>Тема</translation>
</message> </message>
<message> <message>
<source>Smiley Pack</source> <location filename="../src/widget/form/settings/generalsettings.ui" line="266"/>
<extracomment>Text on smiley pack label</extracomment>
<translation type="vanished">Набор смайликов</translation>
</message>
<message>
<source>Proxy settings</source>
<translation type="vanished">Настройки прокси</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="226"/>
<source>Disable UDP (not recommended)</source> <source>Disable UDP (not recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment> <extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Выключить UDP (не рекомендуется)</translation> <translation>Выключить UDP (не рекомендуется)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="223"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="263"/>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source> <source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment> <extracomment>force tcp checkbox tooltip</extracomment>
<translation>Это позволяет, например, использовать tox поверх Tor. Однако это добавляет нагрузку на сеть Tox, так что используйте только в случае необходимости.</translation> <translation>Это позволяет, например, использовать tox поверх Tor. Однако это добавляет нагрузку на сеть Tox, так что используйте только в случае необходимости.</translation>
</message> </message>
<message>
<source>Proxy address</source>
<extracomment>Text on proxy addr label</extracomment>
<translation type="vanished">Адрес прокси</translation>
</message>
<message>
<source>Proxy port</source>
<extracomment>Text on proxy port label</extracomment>
<translation type="vanished">Порт прокси</translation>
</message>
</context> </context>
<context> <context>
<name>GenericChatForm</name> <name>GenericChatForm</name>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="154"/> <location filename="../src/widget/form/genericchatform.cpp" line="151"/>
<location filename="../src/widget/form/genericchatform.cpp" line="160"/> <location filename="../src/widget/form/genericchatform.cpp" line="157"/>
<source>Save chat log</source> <source>Save chat log</source>
<translation>Сохранить лог чата</translation> <translation>Сохранить лог чата</translation>
</message> </message>
@ -470,13 +494,13 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>GroupChatForm</name> <name>GroupChatForm</name>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="47"/> <location filename="../src/widget/form/groupchatform.cpp" line="48"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<comment>Number of users in chat</comment> <comment>Number of users in chat</comment>
<translation>%1 пользователей в чате</translation> <translation>%1 пользователей в чате</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/groupchatform.cpp" line="85"/> <location filename="../src/widget/form/groupchatform.cpp" line="82"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<translation>%1 пользователей в чате</translation> <translation>%1 пользователей в чате</translation>
</message> </message>
@ -484,20 +508,20 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>GroupWidget</name> <name>GroupWidget</name>
<message> <message>
<location filename="../src/widget/groupwidget.cpp" line="48"/> <location filename="../src/widget/groupwidget.cpp" line="53"/>
<source>Quit group</source> <source>Quit group</source>
<comment>Menu to quit a groupchat</comment> <comment>Menu to quit a groupchat</comment>
<translation>Покинуть группу</translation> <translation>Покинуть группу</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/groupwidget.cpp" line="39"/> <location filename="../src/widget/groupwidget.cpp" line="42"/>
<location filename="../src/widget/groupwidget.cpp" line="59"/> <location filename="../src/widget/groupwidget.cpp" line="64"/>
<source>%1 users in chat</source> <source>%1 users in chat</source>
<translation>%1 пользователей в чате</translation> <translation>%1 пользователей в чате</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/groupwidget.cpp" line="41"/> <location filename="../src/widget/groupwidget.cpp" line="44"/>
<location filename="../src/widget/groupwidget.cpp" line="61"/> <location filename="../src/widget/groupwidget.cpp" line="66"/>
<source>0 users in chat</source> <source>0 users in chat</source>
<translation>Ни одного пользователя в чате</translation> <translation>Ни одного пользователя в чате</translation>
</message> </message>
@ -505,87 +529,111 @@ Do you want to erase this profile ?</source>
<context> <context>
<name>IdentityForm</name> <name>IdentityForm</name>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="33"/> <location filename="../src/widget/form/settings/identityform.cpp" line="34"/>
<source>Your identity</source> <source>Identity</source>
<translation>Ваша идентификация</translation> <translation>Личность</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="114"/> <location filename="../src/widget/form/settings/identityform.cpp" line="112"/>
<source>Call active</source> <source>Call active</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation type="unfinished"></translation> <translation>Идёт звонок</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="115"/> <location filename="../src/widget/form/settings/identityform.cpp" line="113"/>
<source>You can&apos;t switch profiles while a call is active!</source> <source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation type="unfinished"></translation> <translation>Вы не можете переключить профиль, пока идёт звонок!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="125"/> <location filename="../src/widget/form/settings/identityform.cpp" line="123"/>
<source>Rename &quot;%1&quot;</source> <source>Rename &quot;%1&quot;</source>
<comment>renaming a profile</comment> <comment>renaming a profile</comment>
<translation type="unfinished"></translation> <translation>Переименовать «%1»</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="140"/> <location filename="../src/widget/form/settings/identityform.cpp" line="131"/>
<source>Profile already exists</source>
<comment>rename confirm title</comment>
<translation>Профиль уже существует</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="132"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>rename confirm text</comment>
<translation>Профиль с именем «%1» уже существует. Желаете его стереть?</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="145"/>
<source>Export profile</source> <source>Export profile</source>
<comment>save dialog title</comment> <comment>save dialog title</comment>
<translation type="unfinished"></translation> <translation>Экспортировать профиль</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="142"/> <location filename="../src/widget/form/settings/identityform.cpp" line="147"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>save dialog filter</comment> <comment>save dialog filter</comment>
<translation type="unfinished"></translation> <translation>Файл сохранения Tox (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>Profile currently loaded</source> <source>Profile currently loaded</source>
<comment>current profile deletion warning title</comment> <comment>current profile deletion warning title</comment>
<translation type="unfinished"></translation> <translation>Профиль в настоящее время загружен</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="151"/> <location filename="../src/widget/form/settings/identityform.cpp" line="156"/>
<source>This profile is currently in use. Please load a different profile before deleting this one.</source> <source>This profile is currently in use. Please load a different profile before deleting this one.</source>
<comment>current profile deletion warning text</comment> <comment>current profile deletion warning text</comment>
<translation type="unfinished"></translation> <translation>Этот профиль используется. Загрузите другой профиль, прежде чем удалять этот.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/> <location filename="../src/widget/form/settings/identityform.cpp" line="160"/>
<source>Deletion imminent!</source> <source>Deletion imminent!</source>
<comment>deletion confirmation title</comment> <comment>deletion confirmation title</comment>
<translation type="unfinished"></translation> <translation>Необратимое удаление!</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="156"/> <location filename="../src/widget/form/settings/identityform.cpp" line="161"/>
<source>Are you sure you want to delete this profile?</source> <source>Are you sure you want to delete this profile?</source>
<comment>deletion confirmation text</comment> <comment>deletion confirmation text</comment>
<translation type="unfinished"></translation> <translation>Вы действительно хотите удалить этот профиль?</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Import profile</source> <source>Import profile</source>
<comment>import dialog title</comment> <comment>import dialog title</comment>
<translation type="unfinished"></translation> <translation>Импортировать профиль</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="168"/> <location filename="../src/widget/form/settings/identityform.cpp" line="172"/>
<source>Tox save file (*.tox)</source> <source>Tox save file (*.tox)</source>
<comment>import dialog filter</comment> <comment>import dialog filter</comment>
<translation type="unfinished"></translation> <translation>Файл сохранения Tox (*.tox)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Ignoring non-Tox file</source> <source>Ignoring non-Tox file</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation type="unfinished"></translation> <translation>Игнорирование не-Tox файла</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="176"/> <location filename="../src/widget/form/settings/identityform.cpp" line="181"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source> <source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation type="unfinished"></translation> <translation>Внимание: вы выбрали не файл сохранения Tox; игнорирование.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="185"/>
<source>Profile already exists</source>
<comment>import confirm title</comment>
<translation>Профиль уже существует</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>A profile named &quot;%1&quot; already exists. Do you want to erase it?</source>
<comment>import confirm text</comment>
<translation>Профиль с именем «%1» уже существует. Желаете его стереть?</translation>
</message> </message>
</context> </context>
<context> <context>
@ -623,48 +671,54 @@ Do you want to erase this profile ?</source>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="65"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="65"/>
<source>Profiles</source> <source>Profiles</source>
<translation type="unfinished"></translation> <translation>Профили</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="73"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="73"/>
<source>Available profiles:</source> <source>Available profiles:</source>
<translation type="unfinished"></translation> <translation>Доступные профили:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="94"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="94"/>
<source>Load</source> <source>Load</source>
<comment>load profile button</comment> <comment>load profile button</comment>
<translation type="unfinished"></translation> <translation>Загрузить</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="101"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="101"/>
<source>Rename</source> <source>Rename</source>
<comment>rename profile button</comment> <comment>rename profile button</comment>
<translation type="unfinished"></translation> <translation>Переименовать</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="108"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="108"/>
<source>Export</source> <source>Export</source>
<comment>export profile button</comment> <comment>export profile button</comment>
<translation type="unfinished"></translation> <translation>Экспортировать</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="115"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="115"/>
<source>Delete</source> <source>Delete</source>
<comment>delete profile button</comment> <comment>delete profile button</comment>
<translation type="unfinished"></translation> <translation>Удалить</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="118"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="118"/>
<source>This is useful to remain safe on public computers</source> <source>This is useful to remain safe on public computers</source>
<comment>delete profile button tooltip</comment> <comment>delete profile button tooltip</comment>
<translation type="unfinished"></translation> <translation>Это полезно, чтобы оставаться в безопасности за общими компьютерами</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="127"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="129"/>
<source>Import a profile</source> <source>Import a profile</source>
<comment>import profile button</comment> <comment>import profile button</comment>
<translation type="unfinished"></translation> <translation>Импортировать профиль</translation>
</message>
<message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="136"/>
<source>New Tox ID</source>
<comment>new profile button</comment>
<translation>Новый Tox ID</translation>
</message> </message>
</context> </context>
<context> <context>
@ -719,122 +773,139 @@ Do you want to erase this profile ?</source>
<name>PrivacyForm</name> <name>PrivacyForm</name>
<message> <message>
<location filename="../src/widget/form/settings/privacyform.cpp" line="21"/> <location filename="../src/widget/form/settings/privacyform.cpp" line="21"/>
<source>Privacy settings</source> <source>Privacy</source>
<translation>Настройки приватности</translation> <translation>Защищённость</translation>
</message>
</context>
<context>
<name>SelfCamView</name>
<message>
<source>Tox video test</source>
<comment>Title of the window to test the video/webcam</comment>
<translation type="vanished">Проверка видео</translation>
</message> </message>
</context> </context>
<context> <context>
<name>Widget</name> <name>Widget</name>
<message> <message>
<location filename="../src/widget/widget.cpp" line="101"/> <location filename="../src/widget/widget.cpp" line="75"/>
<source>online</source>
<translation>в сети</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="78"/>
<source>away</source>
<translation>отошёл</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="81"/>
<source>busy</source>
<translation>занят</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="84"/>
<source>&amp;Quit</source>
<translation>В&amp;ыход</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="87"/>
<source>Change status to:</source>
<translation>Сменить статус на:</translation>
</message>
<message>
<location filename="../src/widget/widget.cpp" line="154"/>
<source>Online</source> <source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment> <comment>Button to set your status to &apos;Online&apos;</comment>
<translation>В сети</translation> <translation>В сети</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="103"/> <location filename="../src/widget/widget.cpp" line="156"/>
<source>Away</source> <source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment> <comment>Button to set your status to &apos;Away&apos;</comment>
<translatorcomment>Вероятно, это не столь долгое путешествие</translatorcomment> <translatorcomment>Вероятно, это не столь долгое путешествие</translatorcomment>
<translation>Отошёл</translation> <translation>Отошёл</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="105"/> <location filename="../src/widget/widget.cpp" line="158"/>
<source>Busy</source> <source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment> <comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Занят</translation> <translation>Занят</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="282"/> <location filename="../src/widget/widget.cpp" line="382"/>
<source>Choose a profile</source> <source>Choose a profile</source>
<translation type="unfinished"></translation> <translation>Выберите профиль</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="283"/> <location filename="../src/widget/widget.cpp" line="383"/>
<source>Please choose which identity to use</source> <source>Please choose which identity to use</source>
<translation type="unfinished"></translation> <translation>Выберите личность, которую хотите использовать</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="309"/> <location filename="../src/widget/widget.cpp" line="409"/>
<source>Choose a profile picture</source> <source>Choose a profile picture</source>
<translation>Выбрать картинку для профиля</translation> <translation>Выбрать картинку для профиля</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="316"/> <location filename="../src/widget/widget.cpp" line="416"/>
<location filename="../src/widget/widget.cpp" line="323"/> <location filename="../src/widget/widget.cpp" line="423"/>
<location filename="../src/widget/widget.cpp" line="344"/> <location filename="../src/widget/widget.cpp" line="444"/>
<source>Error</source> <source>Error</source>
<translation>Ошибка</translation> <translation>Ошибка</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="316"/> <location filename="../src/widget/widget.cpp" line="416"/>
<source>Unable to open this file</source> <source>Unable to open this file</source>
<translation>Невозможно открыть файл</translation> <translation>Невозможно открыть файл</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="323"/> <location filename="../src/widget/widget.cpp" line="423"/>
<source>Unable to read this image</source> <source>Unable to read this image</source>
<translation>Невозможно прочесть это изображение</translation> <translation>Невозможно прочесть это изображение</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="344"/> <location filename="../src/widget/widget.cpp" line="444"/>
<source>This image is too big</source> <source>This image is too big</source>
<translation>Это изображение слишком большое</translation> <translation>Это изображение слишком большое</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="371"/> <location filename="../src/widget/widget.cpp" line="471"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source> <source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Не удалось запустить toxcore, приложение будет завершено после того как вы закроете это сообщение.</translation> <translation>Не удалось запустить toxcore, приложение будет завершено после того как вы закроете это сообщение.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="380"/> <location filename="../src/widget/widget.cpp" line="480"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source> <source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Не удалось запустить toxcore с вашими настройками прокси, qTox не может работать; измените ваши настройки и перезапустите его.</translation> <translation>Не удалось запустить toxcore с вашими настройками прокси, qTox не может работать; измените ваши настройки и перезапустите его.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="549"/> <location filename="../src/widget/widget.cpp" line="660"/>
<source>away</source> <source>away</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>отсутствует</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="551"/> <location filename="../src/widget/widget.cpp" line="662"/>
<source>busy</source> <source>busy</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>занят</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="553"/> <location filename="../src/widget/widget.cpp" line="664"/>
<source>offline</source> <source>offline</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>офлайн</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="555"/> <location filename="../src/widget/widget.cpp" line="666"/>
<source>online</source> <source>online</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation type="unfinished"></translation> <translation>в сети</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="561"/> <location filename="../src/widget/widget.cpp" line="668"/>
<source>%1 is now %2</source> <source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment> <comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation type="unfinished"></translation> <translation>%1 сейчас %2</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="752"/> <location filename="../src/widget/widget.cpp" line="866"/>
<source>&lt;Unknown&gt;</source> <source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment> <comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Неизвестно&gt;</translation> <translation>&lt;Неизвестный&gt;</translation>
</message> </message>
</context> </context>
</TS> </TS>

View File

@ -38,8 +38,8 @@ span.quote {
} }
div.green { div.green {
margin-top: 12px; margin-top: 6px;
margin-bottom: 12px; margin-bottom: 6px;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
color: @white; color: @white;
@ -48,8 +48,8 @@ div.green {
} }
div.silver { div.silver {
margin-top: 12px; margin-top: 6px;
margin-bottom: 12px; margin-bottom: 6px;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
color: @black; color: @black;
@ -58,8 +58,8 @@ div.silver {
} }
div.red { div.red {
margin-top: 12px; margin-top: 6px;
margin-bottom: 12px; margin-bottom: 6px;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
color: @white; color: @white;
@ -67,6 +67,20 @@ div.red {
font: @small; font: @small;
} }
div.alert {
margin-left: 0px;
margin-right: 0px;
color: @black;
background-color: @orange;
font: @big;
}
div.alert_name {
color: @black;
background-color: @orange;
font: @bigBold;
}
div.button { div.button {
margin-top: 0px; margin-top: 0px;
margin-bottom: 0px; margin-bottom: 0px;