summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure4
-rw-r--r--doc/src/known-issues.qdoc7
-rw-r--r--projects.pro7
-rw-r--r--src/gui/dialogs/qinputdialog.cpp6
-rw-r--r--src/gui/itemviews/qitemeditorfactory.cpp16
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp2
-rw-r--r--src/gui/painting/qpathclipper.cpp69
-rw-r--r--src/gui/painting/qrasterizer.cpp2
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp3
-rw-r--r--src/svg/qsvghandler.cpp1
-rw-r--r--tests/auto/qinputdialog/tst_qinputdialog.cpp25
-rw-r--r--tests/auto/qitemeditorfactory/tst_qitemeditorfactory.cpp38
-rw-r--r--tests/auto/qpainter/tst_qpainter.cpp19
-rw-r--r--tests/auto/qpathclipper/tst_qpathclipper.cpp20
-rw-r--r--tests/auto/qsqlquery/tst_qsqlquery.cpp41
-rw-r--r--tools/assistant/tools/assistant/bookmarkmanager.cpp203
-rw-r--r--tools/assistant/tools/assistant/bookmarkmanager.h16
-rw-r--r--tools/assistant/translations/qt_help.pro1
-rw-r--r--tools/assistant/translations/translations.pro1
-rw-r--r--tools/assistant/translations/translations_adp.pro1
-rw-r--r--tools/configure/configureapp.cpp1
-rw-r--r--tools/linguist/linguist/linguist.pro1
-rw-r--r--tools/linguist/phrasebooks/russian.qph127
-rw-r--r--tools/porting/src/qt3headers0.resourcebin547809 -> 548362 bytes
-rw-r--r--tools/porting/src/qt3headers1.resourcebin512251 -> 512882 bytes
-rw-r--r--tools/porting/src/qt3headers2.resourcebin392439 -> 393093 bytes
-rw-r--r--tools/porting/src/qt3headers3.resourcebin553089 -> 553753 bytes
-rw-r--r--translations/assistant_adp_ru.ts780
-rw-r--r--translations/assistant_ru.ts1063
-rw-r--r--translations/linguist_ru.ts2002
-rw-r--r--translations/qt_help_ru.ts361
-rw-r--r--translations/translations.pri38
-rw-r--r--translations/translations.pro50
33 files changed, 4648 insertions, 257 deletions
diff --git a/configure b/configure
index 6f0b6e7..e0b8b3e 100755
--- a/configure
+++ b/configure
@@ -7086,9 +7086,6 @@ FNR == 1 {
if ( \$3 == "moc" || \$3 ~ /^Qt/ ) {
target_file = first
matched_target = 1
- } else if ( \$3 == "lrelease" || \$3 == "qm_phony_target" ) {
- target_file = second
- matched_target = 1
}
}
@@ -7173,7 +7170,6 @@ for part in $CFG_BUILD_PARTS; do
case "$part" in
tools) PART_ROOTS="$PART_ROOTS tools" ;;
libs) PART_ROOTS="$PART_ROOTS src" ;;
- translations) PART_ROOTS="$PART_ROOTS tools/linguist/lrelease translations" ;;
examples) PART_ROOTS="$PART_ROOTS examples demos" ;;
*) ;;
esac
diff --git a/doc/src/known-issues.qdoc b/doc/src/known-issues.qdoc
index e005b14..9c90908 100644
--- a/doc/src/known-issues.qdoc
+++ b/doc/src/known-issues.qdoc
@@ -58,13 +58,6 @@
\section1 Issues with Third Party Software
- \section2 Intel Compiler Support
-
- Although it is possible to build applications against Qt 4.5.x using Intel
- CC 10, these applications will crash when run. We recommend that developers
- who rely on this compiler wait until a fix is available before upgrading to
- the Qt 4.5.x series of releases.
-
\section2 X11 Hardware Support
\list
diff --git a/projects.pro b/projects.pro
index 2d8e7f4..953eae8 100644
--- a/projects.pro
+++ b/projects.pro
@@ -41,12 +41,7 @@ for(PROJECT, $$list($$lower($$unique(QT_BUILD_PARTS)))) {
} else:isEqual(PROJECT, docs) {
contains(QT_BUILD_PARTS, tools):include(doc/doc.pri)
} else:isEqual(PROJECT, translations) {
- contains(QT_BUILD_PARTS, tools) {
- include(translations/translations.pri) # ts targets
- } else {
- SUBDIRS += tools/linguist/lrelease
- }
- SUBDIRS += translations # qm build step
+ contains(QT_BUILD_PARTS, tools):include(translations/translations.pri)
} else:isEqual(PROJECT, qmake) {
# SUBDIRS += qmake
} else {
diff --git a/src/gui/dialogs/qinputdialog.cpp b/src/gui/dialogs/qinputdialog.cpp
index 8c0c2c7..e2c5742 100644
--- a/src/gui/dialogs/qinputdialog.cpp
+++ b/src/gui/dialogs/qinputdialog.cpp
@@ -1128,8 +1128,8 @@ void QInputDialog::done(int result)
is \a parent. The dialog will be modal and uses the specified widget
\a flags.
- This function returns the text which has been entered in the line
- edit. It will not return an empty string.
+ If the dialog is accepted, this function returns the text in the dialog's
+ line edit. If the dialog is rejected, a null QString is returned.
Use this static function like this:
@@ -1158,7 +1158,7 @@ QString QInputDialog::getText(QWidget *parent, const QString &title, const QStri
if (ret) {
return dialog.textValue();
} else {
- return text;
+ return QString();
}
}
diff --git a/src/gui/itemviews/qitemeditorfactory.cpp b/src/gui/itemviews/qitemeditorfactory.cpp
index c576e40..480a472 100644
--- a/src/gui/itemviews/qitemeditorfactory.cpp
+++ b/src/gui/itemviews/qitemeditorfactory.cpp
@@ -158,6 +158,10 @@ QByteArray QItemEditorFactory::valuePropertyName(QVariant::Type type) const
*/
QItemEditorFactory::~QItemEditorFactory()
{
+ //we make sure we delete all the QItemEditorCreatorBase
+ //this has to be done only once, hence the QSet
+ QSet<QItemEditorCreatorBase*> set = creatorMap.values().toSet();
+ qDeleteAll(set);
}
/*!
@@ -170,8 +174,16 @@ QItemEditorFactory::~QItemEditorFactory()
*/
void QItemEditorFactory::registerEditor(QVariant::Type type, QItemEditorCreatorBase *creator)
{
- delete creatorMap.value(type, 0);
- creatorMap[type] = creator;
+ QHash<QVariant::Type, QItemEditorCreatorBase *>::iterator it = creatorMap.find(type);
+ if (it != creatorMap.end()) {
+ QItemEditorCreatorBase *oldCreator = it.value();
+ Q_ASSERT(oldCreator);
+ creatorMap.erase(it);
+ if (!creatorMap.values().contains(oldCreator))
+ delete oldCreator; // if it is no more in use we can delete it
+ }
+
+ creatorMap[type] = creator;
}
class QDefaultItemEditorFactory : public QItemEditorFactory
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 1d3e38e..78515ac 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -3996,7 +3996,7 @@ void QRasterPaintEnginePrivate::initializeRasterizer(QSpanData *data)
const QClipData *c = clip();
if (c) {
const QRect r(QPoint(c->xmin, c->ymin),
- QPoint(c->xmax, c->ymax));
+ QSize(c->xmax - c->xmin, c->ymax - c->ymin));
clipRect = clipRect.intersected(r);
blend = data->blend;
} else {
diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp
index 9625b28..053955c 100644
--- a/src/gui/painting/qpathclipper.cpp
+++ b/src/gui/painting/qpathclipper.cpp
@@ -45,9 +45,6 @@
#include <private/qdatabuffer_p.h>
#include <qmath.h>
-#include <QImage>
-#include <QPainter>
-
/**
The algorithm is as follows:
@@ -68,6 +65,20 @@
QT_BEGIN_NAMESPACE
+static inline bool fuzzyIsNull(qreal d)
+{
+ if (sizeof(qreal) == sizeof(double))
+ return qAbs(d) <= 1e-12;
+ else
+ return qAbs(d) <= 1e-5f;
+}
+
+static inline bool comparePoints(const QPointF &a, const QPointF &b)
+{
+ return fuzzyIsNull(a.x() - b.x())
+ && fuzzyIsNull(a.y() - b.y());
+}
+
//#define QDEBUG_CLIPPER
static qreal dot(const QPointF &a, const QPointF &b)
{
@@ -105,8 +116,10 @@ private:
bool QIntersectionFinder::beziersIntersect(const QBezier &one, const QBezier &two) const
{
- return (one.pt1() == two.pt1() && one.pt2() == two.pt2() && one.pt3() == two.pt3() && one.pt4() == two.pt4())
- || (one.pt1() == two.pt4() && one.pt2() == two.pt3() && one.pt3() == two.pt2() && one.pt4() == two.pt1())
+ return (comparePoints(one.pt1(), two.pt1()) && comparePoints(one.pt2(), two.pt2())
+ && comparePoints(one.pt3(), two.pt3()) && comparePoints(one.pt4(), two.pt4()))
+ || (comparePoints(one.pt1(), two.pt4()) && comparePoints(one.pt2(), two.pt3())
+ && comparePoints(one.pt3(), two.pt2()) && comparePoints(one.pt4(), two.pt1()))
|| QBezier::findIntersections(one, two, 0);
}
@@ -118,17 +131,17 @@ bool QIntersectionFinder::linesIntersect(const QLineF &a, const QLineF &b) const
const QPointF q1 = b.p1();
const QPointF q2 = b.p2();
- if (p1 == p2 || q1 == q2)
+ if (comparePoints(p1, p2) || comparePoints(q1, q2))
return false;
- const bool p1_equals_q1 = (p1 == q1);
- const bool p2_equals_q2 = (p2 == q2);
+ const bool p1_equals_q1 = comparePoints(p1, q1);
+ const bool p2_equals_q2 = comparePoints(p2, q2);
if (p1_equals_q1 && p2_equals_q2)
return true;
- const bool p1_equals_q2 = (p1 == q2);
- const bool p2_equals_q1 = (p2 == q1);
+ const bool p1_equals_q2 = comparePoints(p1, q2);
+ const bool p2_equals_q1 = comparePoints(p2, q1);
if (p1_equals_q2 && p2_equals_q1)
return true;
@@ -184,8 +197,10 @@ bool QIntersectionFinder::linesIntersect(const QLineF &a, const QLineF &b) const
void QIntersectionFinder::intersectBeziers(const QBezier &one, const QBezier &two, QVector<QPair<qreal, qreal> > &t, QDataBuffer<QIntersection> &intersections)
{
- if ((one.pt1() == two.pt1() && one.pt2() == two.pt2() && one.pt3() == two.pt3() && one.pt4() == two.pt4())
- || (one.pt1() == two.pt4() && one.pt2() == two.pt3() && one.pt3() == two.pt2() && one.pt4() == two.pt1())) {
+ if ((comparePoints(one.pt1(), two.pt1()) && comparePoints(one.pt2(), two.pt2())
+ && comparePoints(one.pt3(), two.pt3()) && comparePoints(one.pt4(), two.pt4()))
+ || (comparePoints(one.pt1(), two.pt4()) && comparePoints(one.pt2(), two.pt3())
+ && comparePoints(one.pt3(), two.pt2()) && comparePoints(one.pt4(), two.pt1()))) {
return;
}
@@ -230,17 +245,17 @@ void QIntersectionFinder::intersectLines(const QLineF &a, const QLineF &b, QData
const QPointF q1 = b.p1();
const QPointF q2 = b.p2();
- if (p1 == p2 || q1 == q2)
+ if (comparePoints(p1, p2) || comparePoints(q1, q2))
return;
- const bool p1_equals_q1 = (p1 == q1);
- const bool p2_equals_q2 = (p2 == q2);
+ const bool p1_equals_q1 = comparePoints(p1, q1);
+ const bool p2_equals_q2 = comparePoints(p2, q2);
if (p1_equals_q1 && p2_equals_q2)
return;
- const bool p1_equals_q2 = (p1 == q2);
- const bool p2_equals_q1 = (p2 == q1);
+ const bool p1_equals_q2 = comparePoints(p1, q2);
+ const bool p2_equals_q1 = comparePoints(p2, q1);
if (p1_equals_q2 && p2_equals_q1)
return;
@@ -624,11 +639,11 @@ public:
const qreal pivot = pivotComponents[depth & 1];
const qreal value = pointComponents[depth & 1];
- if (qFuzzyCompare(pivot, value)) {
+ if (fuzzyIsNull(pivot - value)) {
const qreal pivot2 = pivotComponents[(depth + 1) & 1];
const qreal value2 = pointComponents[(depth + 1) & 1];
- if (qFuzzyCompare(pivot2, value2)) {
+ if (fuzzyIsNull(pivot2 - value2)) {
if (node.id < 0)
node.id = m_tree->nextId();
@@ -802,15 +817,15 @@ QWingedEdge::TraversalStatus QWingedEdge::next(const QWingedEdge::TraversalStatu
static bool isLine(const QBezier &bezier)
{
- const bool equal_1_2 = bezier.pt1() == bezier.pt2();
- const bool equal_2_3 = bezier.pt2() == bezier.pt3();
- const bool equal_3_4 = bezier.pt3() == bezier.pt4();
+ const bool equal_1_2 = comparePoints(bezier.pt1(), bezier.pt2());
+ const bool equal_2_3 = comparePoints(bezier.pt2(), bezier.pt3());
+ const bool equal_3_4 = comparePoints(bezier.pt3(), bezier.pt4());
// point?
if (equal_1_2 && equal_2_3 && equal_3_4)
return true;
- if (bezier.pt1() == bezier.pt4())
+ if (comparePoints(bezier.pt1(), bezier.pt4()))
return equal_1_2 || equal_3_4;
return (equal_1_2 && equal_3_4) || (equal_1_2 && equal_2_3) || (equal_2_3 && equal_3_4);
@@ -844,14 +859,14 @@ void QPathSegments::addPath(const QPainterPath &path)
else
currentPoint = path.elementAt(i);
- if (i > 0 && m_points.at(lastMoveTo) == currentPoint)
+ if (i > 0 && comparePoints(m_points.at(lastMoveTo), currentPoint))
current = lastMoveTo;
else
m_points << currentPoint;
switch (path.elementAt(i).type) {
case QPainterPath::MoveToElement:
- if (hasMoveTo && last != lastMoveTo && m_points.at(last) != m_points.at(lastMoveTo))
+ if (hasMoveTo && last != lastMoveTo && !comparePoints(m_points.at(last), m_points.at(lastMoveTo)))
m_segments << Segment(m_pathId, last, lastMoveTo);
hasMoveTo = true;
last = lastMoveTo = current;
@@ -879,7 +894,7 @@ void QPathSegments::addPath(const QPainterPath &path)
}
}
- if (hasMoveTo && last != lastMoveTo && m_points.at(last) != m_points.at(lastMoveTo))
+ if (hasMoveTo && last != lastMoveTo && !comparePoints(m_points.at(last), m_points.at(lastMoveTo)))
m_segments << Segment(m_pathId, last, lastMoveTo);
for (int i = firstSegment; i < m_segments.size(); ++i) {
@@ -1357,7 +1372,7 @@ void QWingedEdge::addBezierEdge(const QBezier *bezier, const QPointF &a, const Q
if (qFuzzyCompare(alphaA, alphaB))
return;
- if (a == b) {
+ if (comparePoints(a, b)) {
int v = insert(a);
addBezierEdge(bezier, v, v, alphaA, alphaB, path);
diff --git a/src/gui/painting/qrasterizer.cpp b/src/gui/painting/qrasterizer.cpp
index 629b38e..58e4b4e 100644
--- a/src/gui/painting/qrasterizer.cpp
+++ b/src/gui/painting/qrasterizer.cpp
@@ -703,7 +703,7 @@ static inline qreal qRoundF(qreal v)
void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width, bool squareCap)
{
- if (a == b || width == 0)
+ if (a == b || width == 0 || d->clipRect.isEmpty())
return;
QPointF pa = a;
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index cfce735..f0c694d 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -1020,7 +1020,8 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply)
for (int i = 0; i < channelCount; ++i) {
if (channels[i].reply == reply) {
channels[i].reply = 0;
- closeChannel(i);
+ if (reply->d_func()->connectionCloseEnabled())
+ closeChannel(i);
QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection);
return;
}
diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp
index 44477e5..e2c1312 100644
--- a/src/svg/qsvghandler.cpp
+++ b/src/svg/qsvghandler.cpp
@@ -3378,6 +3378,7 @@ void QSvgHandler::init()
{
m_doc = 0;
m_style = 0;
+ m_animEnd = 0;
m_defaultCoords = LT_PX;
m_defaultPen = QPen(Qt::black, 1, Qt::NoPen, Qt::FlatCap, Qt::SvgMiterJoin);
m_defaultPen.setMiterLimit(4);
diff --git a/tests/auto/qinputdialog/tst_qinputdialog.cpp b/tests/auto/qinputdialog/tst_qinputdialog.cpp
index a658aeb..7e4b828 100644
--- a/tests/auto/qinputdialog/tst_qinputdialog.cpp
+++ b/tests/auto/qinputdialog/tst_qinputdialog.cpp
@@ -56,6 +56,7 @@ class tst_QInputDialog : public QObject
{
Q_OBJECT
QWidget *parent;
+ QDialog::DialogCode doneCode;
void (*testFunc)(QInputDialog *);
static void testFuncGetInteger(QInputDialog *dialog);
static void testFuncGetDouble(QInputDialog *dialog);
@@ -72,6 +73,7 @@ private slots:
void getText();
void getItem_data();
void getItem();
+ void task256299_getTextReturnNullStringOnRejected();
};
QString stripFraction(const QString &s)
@@ -245,8 +247,9 @@ void tst_QInputDialog::timerEvent(QTimerEvent *event)
killTimer(event->timerId());
QInputDialog *dialog = qFindChild<QInputDialog *>(parent);
Q_ASSERT(dialog);
- testFunc(dialog);
- dialog->done(QDialog::Accepted); // cause static function call to return
+ if (testFunc)
+ testFunc(dialog);
+ dialog->done(doneCode); // cause static function call to return
}
void tst_QInputDialog::getInteger_data()
@@ -266,6 +269,7 @@ void tst_QInputDialog::getInteger()
QFETCH(int, max);
Q_ASSERT(min < max);
parent = new QWidget;
+ doneCode = QDialog::Accepted;
testFunc = &tst_QInputDialog::testFuncGetInteger;
startTimer(0);
bool ok = false;
@@ -305,6 +309,7 @@ void tst_QInputDialog::getDouble()
QFETCH(int, decimals);
Q_ASSERT(min < max && decimals >= 0 && decimals <= 13);
parent = new QWidget;
+ doneCode = QDialog::Accepted;
testFunc = &tst_QInputDialog::testFuncGetDouble;
startTimer(0);
bool ok = false;
@@ -322,6 +327,7 @@ void tst_QInputDialog::getDouble()
void tst_QInputDialog::task255502getDouble()
{
parent = new QWidget;
+ doneCode = QDialog::Accepted;
testFunc = &tst_QInputDialog::testFuncGetDouble;
startTimer(0);
bool ok = false;
@@ -347,6 +353,7 @@ void tst_QInputDialog::getText()
{
QFETCH(QString, text);
parent = new QWidget;
+ doneCode = QDialog::Accepted;
testFunc = &tst_QInputDialog::testFuncGetText;
startTimer(0);
bool ok = false;
@@ -356,6 +363,19 @@ void tst_QInputDialog::getText()
delete parent;
}
+void tst_QInputDialog::task256299_getTextReturnNullStringOnRejected()
+{
+ parent = new QWidget;
+ doneCode = QDialog::Rejected;
+ testFunc = 0;
+ startTimer(0);
+ bool ok = true;
+ const QString result = QInputDialog::getText(parent, "", "", QLineEdit::Normal, "foobar", &ok);
+ QVERIFY(!ok);
+ QVERIFY(result.isNull());
+ delete parent;
+}
+
void tst_QInputDialog::getItem_data()
{
QTest::addColumn<QStringList>("items");
@@ -373,6 +393,7 @@ void tst_QInputDialog::getItem()
QFETCH(QStringList, items);
QFETCH(bool, editable);
parent = new QWidget;
+ doneCode = QDialog::Accepted;
testFunc = &tst_QInputDialog::testFuncGetItem;
startTimer(0);
bool ok = false;
diff --git a/tests/auto/qitemeditorfactory/tst_qitemeditorfactory.cpp b/tests/auto/qitemeditorfactory/tst_qitemeditorfactory.cpp
index 5540b38..d9a7d56 100644
--- a/tests/auto/qitemeditorfactory/tst_qitemeditorfactory.cpp
+++ b/tests/auto/qitemeditorfactory/tst_qitemeditorfactory.cpp
@@ -61,16 +61,40 @@ void tst_QItemEditorFactory::createEditor()
void tst_QItemEditorFactory::createCustomEditor()
{
- QItemEditorFactory editorFactory;
+ //we make it inherit from QObject so that we can use QPointer
+ class MyEditor : public QObject, public QStandardItemEditorCreator<QDoubleSpinBox>
+ {
+ };
- QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<QDoubleSpinBox>();
- editorFactory.registerEditor(QVariant::Rect, creator);
+ QPointer<MyEditor> creator = new MyEditor;
+ QPointer<MyEditor> creator2 = new MyEditor;
- QWidget parent;
+ {
+ QItemEditorFactory editorFactory;
+
+ editorFactory.registerEditor(QVariant::Rect, creator);
+ editorFactory.registerEditor(QVariant::RectF, creator);
+
+ //creator should not be deleted as a result of calling the next line
+ editorFactory.registerEditor(QVariant::Rect, creator2);
+ QVERIFY(creator);
+
+ //this should erase creator2
+ editorFactory.registerEditor(QVariant::Rect, creator);
+ QVERIFY(creator2.isNull());
+
+
+ QWidget parent;
+
+ QWidget *w = editorFactory.createEditor(QVariant::Rect, &parent);
+ QCOMPARE(w->metaObject()->className(), "QDoubleSpinBox");
+ QCOMPARE(w->metaObject()->userProperty().type(), QVariant::Double);
+ }
- QWidget *w = editorFactory.createEditor(QVariant::Rect, &parent);
- QCOMPARE(w->metaObject()->className(), "QDoubleSpinBox");
- QCOMPARE(w->metaObject()->userProperty().type(), QVariant::Double);
+ //editorFactory has been deleted, so should be creator
+ //because editorFActory has the ownership
+ QVERIFY(creator.isNull());
+ QVERIFY(creator2.isNull());
delete creator;
}
diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp
index 3f36729..7e42da8 100644
--- a/tests/auto/qpainter/tst_qpainter.cpp
+++ b/tests/auto/qpainter/tst_qpainter.cpp
@@ -228,6 +228,7 @@ private slots:
void zeroOpacity();
void clippingBug();
+ void emptyClip();
private:
void fillData();
@@ -4218,5 +4219,23 @@ void tst_QPainter::clippingBug()
QCOMPARE(img, expected);
}
+void tst_QPainter::emptyClip()
+{
+ QImage img(64, 64, QImage::Format_ARGB32_Premultiplied);
+ QPainter p(&img);
+ p.setRenderHints(QPainter::Antialiasing);
+ p.setClipRect(0, 32, 64, 0);
+ p.fillRect(0, 0, 64, 64, Qt::white);
+
+ QPainterPath path;
+ path.lineTo(64, 0);
+ path.lineTo(64, 64);
+ path.lineTo(40, 64);
+ path.lineTo(40, 80);
+ path.lineTo(0, 80);
+
+ p.fillPath(path, Qt::green);
+}
+
QTEST_MAIN(tst_QPainter)
#include "tst_qpainter.moc"
diff --git a/tests/auto/qpathclipper/tst_qpathclipper.cpp b/tests/auto/qpathclipper/tst_qpathclipper.cpp
index f3077ee..6e6b632 100644
--- a/tests/auto/qpathclipper/tst_qpathclipper.cpp
+++ b/tests/auto/qpathclipper/tst_qpathclipper.cpp
@@ -93,6 +93,7 @@ private slots:
void task204301();
void task209056();
+ void task251909();
};
Q_DECLARE_METATYPE(QPainterPath)
@@ -1397,6 +1398,25 @@ void tst_QPathClipper::task209056()
QVERIFY(p3 != QPainterPath());
}
+void tst_QPathClipper::task251909()
+{
+ QPainterPath p1;
+ p1.moveTo(0, -10);
+ p1.lineTo(10, -10);
+ p1.lineTo(10, 0);
+ p1.lineTo(0, 0);
+
+ QPainterPath p2;
+ p2.moveTo(0, 8e-14);
+ p2.lineTo(10, -8e-14);
+ p2.lineTo(10, 10);
+ p2.lineTo(0, 10);
+
+ QPainterPath result = p1.united(p2);
+
+ QVERIFY(result.elementCount() <= 5);
+}
+
QTEST_APPLESS_MAIN(tst_QPathClipper)
diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp
index d17706b..825db6c 100644
--- a/tests/auto/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp
@@ -177,9 +177,10 @@ private slots:
#ifdef NOT_READY_YET
void task_217003_data() { generic_data(); }
void task_217003();
-
void task_229811();
void task_229811_data() { generic_data(); }
+ void task_234422_data() { generic_data(); }
+ void task_234422();
#endif
void task_250026_data() { generic_data("QODBC"); }
void task_250026();
@@ -2775,6 +2776,44 @@ void tst_QSqlQuery::task_229811()
q.exec("DROP TABLE " + tableName );
}
+
+void tst_QSqlQuery::task_234422()
+{
+ QFETCH( QString, dbName );
+ QSqlDatabase db = QSqlDatabase::database( dbName );
+ CHECK_DATABASE( db );
+
+ QSqlQuery query(db);
+ QStringList m_airlines;
+ QStringList m_countries;
+
+ m_airlines << "Lufthansa" << "SAS" << "United" << "KLM" << "Aeroflot";
+ m_countries << "DE" << "SE" << "US" << "NL" << "RU";
+
+ QString tableName = qTableName( "task_234422" );
+
+ query.exec("DROP TABLE " + tableName);
+ QVERIFY_SQL(query,exec("CREATE TABLE " + tableName + " (id int primary key, "
+ "name varchar(20), homecountry varchar(2))"));
+ for (int i = 0; i < m_airlines.count(); ++i) {
+ QVERIFY(query.exec(QString("INSERT INTO " + tableName + " values(%1, '%2', '%3')")
+ .arg(i).arg(m_airlines[i], m_countries[i])));
+ }
+
+ QVERIFY_SQL(query, exec("SELECT name FROM " + tableName));
+ QVERIFY(query.isSelect());
+ QVERIFY(query.first());
+ QVERIFY(query.next());
+ QCOMPARE(query.at(), 1);
+
+ QSqlQuery query2(query);
+
+ QVERIFY_SQL(query2,exec());
+ QVERIFY(query2.first());
+ QCOMPARE(query2.at(), 0);
+ QCOMPARE(query.at(), 1);
+}
+
#endif
QTEST_MAIN( tst_QSqlQuery )
diff --git a/tools/assistant/tools/assistant/bookmarkmanager.cpp b/tools/assistant/tools/assistant/bookmarkmanager.cpp
index fbd9923..3bca573 100644
--- a/tools/assistant/tools/assistant/bookmarkmanager.cpp
+++ b/tools/assistant/tools/assistant/bookmarkmanager.cpp
@@ -63,7 +63,7 @@
QT_BEGIN_NAMESPACE
BookmarkDialog::BookmarkDialog(BookmarkManager *manager, const QString &title,
- const QString &url, QWidget *parent)
+ const QString &url, QWidget *parent)
: QDialog(parent)
, m_url(url)
, m_title(title)
@@ -95,21 +95,21 @@ BookmarkDialog::BookmarkDialog(BookmarkManager *manager, const QString &title,
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(addAccepted()));
connect(ui.newFolderButton, SIGNAL(clicked()), this, SLOT(addNewFolder()));
connect(ui.toolButton, SIGNAL(clicked()), this, SLOT(toolButtonClicked()));
- connect(ui.bookmarkEdit, SIGNAL(textChanged(const QString&)), this,
- SLOT(textChanged(const QString&)));
+ connect(ui.bookmarkEdit, SIGNAL(textChanged(QString)), this,
+ SLOT(textChanged(QString)));
- connect(bookmarkManager->treeBookmarkModel(), SIGNAL(itemChanged(QStandardItem*)),
+ connect(bookmarkManager->treeBookmarkModel(),
+ SIGNAL(itemChanged(QStandardItem*)),
this, SLOT(itemChanged(QStandardItem*)));
- connect(ui.bookmarkFolders, SIGNAL(currentIndexChanged(const QString&)), this,
- SLOT(selectBookmarkFolder(const QString&)));
+ connect(ui.bookmarkFolders, SIGNAL(currentIndexChanged(QString)), this,
+ SLOT(selectBookmarkFolder(QString)));
- connect(ui.treeView, SIGNAL(customContextMenuRequested(const QPoint&)), this,
- SLOT(customContextMenuRequested(const QPoint&)));
+ connect(ui.treeView, SIGNAL(customContextMenuRequested(QPoint)), this,
+ SLOT(customContextMenuRequested(QPoint)));
- connect(ui.treeView->selectionModel(),
- SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),
- this, SLOT(currentChanged(const QModelIndex&, const QModelIndex&)));
+ connect(ui.treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,
+ QModelIndex)), this, SLOT(currentChanged(QModelIndex)));
}
BookmarkDialog::~BookmarkDialog()
@@ -118,8 +118,8 @@ BookmarkDialog::~BookmarkDialog()
void BookmarkDialog::addAccepted()
{
- const QItemSelection selection = ui.treeView->selectionModel()->selection();
- const QModelIndexList list = selection.indexes();
+ QItemSelectionModel *model = ui.treeView->selectionModel();
+ const QModelIndexList &list = model->selection().indexes();
QModelIndex index;
if (!list.isEmpty())
@@ -131,8 +131,8 @@ void BookmarkDialog::addAccepted()
void BookmarkDialog::addNewFolder()
{
- const QItemSelection selection = ui.treeView->selectionModel()->selection();
- const QModelIndexList list = selection.indexes();
+ QItemSelectionModel *model = ui.treeView->selectionModel();
+ const QModelIndexList &list = model->selection().indexes();
QModelIndex index;
if (!list.isEmpty())
@@ -143,13 +143,12 @@ void BookmarkDialog::addNewFolder()
if (newFolder.isValid()) {
ui.treeView->expand(index);
const QModelIndex &index = proxyModel->mapFromSource(newFolder);
- ui.treeView->selectionModel()->setCurrentIndex(index,
- QItemSelectionModel::ClearAndSelect);
+ model->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect);
ui.bookmarkFolders->clear();
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
- const QString name = index.data().toString();
+ const QString &name = index.data().toString();
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(name));
}
ui.treeView->setFocus();
@@ -183,14 +182,14 @@ void BookmarkDialog::itemChanged(QStandardItem *item)
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
QString name = tr("Bookmarks");
- const QModelIndex& index = ui.treeView->currentIndex();
+ const QModelIndex &index = ui.treeView->currentIndex();
if (index.isValid())
name = index.data().toString();
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(name));
}
}
-void BookmarkDialog::textChanged(const QString& string)
+void BookmarkDialog::textChanged(const QString &string)
{
ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!string.isEmpty());
}
@@ -209,9 +208,12 @@ void BookmarkDialog::selectBookmarkFolder(const QString &folderName)
QList<QStandardItem*> list = model->findItems(folderName,
Qt::MatchCaseSensitive | Qt::MatchRecursive, 0);
if (!list.isEmpty()) {
- QModelIndex index = model->indexFromItem(list.at(0));
- ui.treeView->selectionModel()->setCurrentIndex(
- proxyModel->mapFromSource(index), QItemSelectionModel::ClearAndSelect);
+ const QModelIndex &index = model->indexFromItem(list.at(0));
+ QItemSelectionModel *model = ui.treeView->selectionModel();
+ if (model) {
+ model->setCurrentIndex(proxyModel->mapFromSource(index),
+ QItemSelectionModel::ClearAndSelect);
+ }
}
}
@@ -226,13 +228,13 @@ void BookmarkDialog::customContextMenuRequested(const QPoint &point)
QAction *removeItem = menu.addAction(tr("Delete Folder"));
QAction *renameItem = menu.addAction(tr("Rename Folder"));
- QAction *picked_action = menu.exec(ui.treeView->mapToGlobal(point));
- if (!picked_action)
+ QAction *picked = menu.exec(ui.treeView->mapToGlobal(point));
+ if (!picked)
return;
- if (picked_action == removeItem) {
- bookmarkManager->removeBookmarkItem(ui.treeView,
- proxyModel->mapToSource(index));
+ const QModelIndex &proxyIndex = proxyModel->mapToSource(index);
+ if (picked == removeItem) {
+ bookmarkManager->removeBookmarkItem(ui.treeView, proxyIndex);
ui.bookmarkFolders->clear();
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
@@ -242,10 +244,9 @@ void BookmarkDialog::customContextMenuRequested(const QPoint &point)
name = index.data().toString();
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(name));
}
- else if (picked_action == renameItem) {
- QStandardItem *item = bookmarkManager->treeBookmarkModel()->
- itemFromIndex(proxyModel->mapToSource(index));
- if (item) {
+ else if (picked == renameItem) {
+ BookmarkModel *model = bookmarkManager->treeBookmarkModel();
+ if (QStandardItem *item = model->itemFromIndex(proxyIndex)) {
item->setEditable(true);
ui.treeView->edit(index);
item->setEditable(false);
@@ -253,19 +254,12 @@ void BookmarkDialog::customContextMenuRequested(const QPoint &point)
}
}
-void BookmarkDialog::currentChanged(const QModelIndex& current,
- const QModelIndex& previous)
+void BookmarkDialog::currentChanged(const QModelIndex &current)
{
- Q_UNUSED(previous)
-
- if (!current.isValid()) {
- ui.bookmarkFolders->setCurrentIndex(
- ui.bookmarkFolders->findText(tr("Bookmarks")));
- return;
- }
-
- ui.bookmarkFolders->setCurrentIndex(
- ui.bookmarkFolders->findText(current.data().toString()));
+ QString text = tr("Bookmarks");
+ if (current.isValid())
+ text = current.data().toString();
+ ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(text));
}
bool BookmarkDialog::eventFilter(QObject *object, QEvent *e)
@@ -276,7 +270,7 @@ bool BookmarkDialog::eventFilter(QObject *object, QEvent *e)
QModelIndex index = ui.treeView->currentIndex();
switch (ke->key()) {
case Qt::Key_F2: {
- const QModelIndex& source = proxyModel->mapToSource(index);
+ const QModelIndex &source = proxyModel->mapToSource(index);
QStandardItem *item =
bookmarkManager->treeBookmarkModel()->itemFromIndex(source);
if (item) {
@@ -307,10 +301,11 @@ bool BookmarkDialog::eventFilter(QObject *object, QEvent *e)
}
+// #pragma mark -- BookmarkWidget
BookmarkWidget::BookmarkWidget(BookmarkManager *manager, QWidget *parent,
- bool showButtons)
+ bool showButtons)
: QWidget(parent)
, addButton(0)
, removeButton(0)
@@ -326,7 +321,7 @@ BookmarkWidget::~BookmarkWidget()
void BookmarkWidget::removeClicked()
{
- const QModelIndex& index = treeView->currentIndex();
+ const QModelIndex &index = treeView->currentIndex();
if (searchField->text().isEmpty()) {
bookmarkManager->removeBookmarkItem(treeView,
filterBookmarkModel->mapToSource(index));
@@ -360,10 +355,11 @@ void BookmarkWidget::filterChanged()
expandItems();
}
-void BookmarkWidget::expand(const QModelIndex& index)
+void BookmarkWidget::expand(const QModelIndex &index)
{
- const QModelIndex& source = filterBookmarkModel->mapToSource(index);
- QStandardItem *item = bookmarkManager->treeBookmarkModel()->itemFromIndex(source);
+ const QModelIndex &source = filterBookmarkModel->mapToSource(index);
+ QStandardItem *item =
+ bookmarkManager->treeBookmarkModel()->itemFromIndex(source);
if (item)
item->setData(treeView->isExpanded(index), Qt::UserRole + 11);
}
@@ -404,22 +400,22 @@ void BookmarkWidget::customContextMenuRequested(const QPoint &point)
}
}
- QAction *picked_action = menu.exec(treeView->mapToGlobal(point));
- if (!picked_action)
+ QAction *pickedAction = menu.exec(treeView->mapToGlobal(point));
+ if (!pickedAction)
return;
- if (picked_action == showItem) {
+ if (pickedAction == showItem) {
emit requestShowLink(data);
}
- else if (picked_action == showItemNewTab) {
+ else if (pickedAction == showItemNewTab) {
CentralWidget::instance()->setSourceInNewTab(data);
}
- else if (picked_action == removeItem) {
+ else if (pickedAction == removeItem) {
bookmarkManager->removeBookmarkItem(treeView,
filterBookmarkModel->mapToSource(index));
}
- else if (picked_action == renameItem) {
- const QModelIndex& source = filterBookmarkModel->mapToSource(index);
+ else if (pickedAction == renameItem) {
+ const QModelIndex &source = filterBookmarkModel->mapToSource(index);
QStandardItem *item =
bookmarkManager->treeBookmarkModel()->itemFromIndex(source);
if (item) {
@@ -443,7 +439,7 @@ void BookmarkWidget::setup(bool showButtons)
searchField = new QLineEdit(this);
vlayout->addWidget(searchField);
- connect(searchField, SIGNAL(textChanged(const QString &)), this,
+ connect(searchField, SIGNAL(textChanged(QString)), this,
SLOT(filterChanged()));
treeView = new TreeView(this);
@@ -490,17 +486,14 @@ void BookmarkWidget::setup(bool showButtons)
treeView->viewport()->installEventFilter(this);
treeView->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(treeView, SIGNAL(expanded(const QModelIndex&)), this,
- SLOT(expand(const QModelIndex&)));
-
- connect(treeView, SIGNAL(collapsed(const QModelIndex&)), this,
- SLOT(expand(const QModelIndex&)));
-
- connect(treeView, SIGNAL(activated(const QModelIndex&)), this,
- SLOT(activated(const QModelIndex&)));
-
- connect(treeView, SIGNAL(customContextMenuRequested(const QPoint&)),
- this, SLOT(customContextMenuRequested(const QPoint&)));
+ connect(treeView, SIGNAL(expanded(QModelIndex)), this,
+ SLOT(expand(QModelIndex)));
+ connect(treeView, SIGNAL(collapsed(QModelIndex)), this,
+ SLOT(expand(QModelIndex)));
+ connect(treeView, SIGNAL(activated(QModelIndex)), this,
+ SLOT(activated(QModelIndex)));
+ connect(treeView, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(customContextMenuRequested(QPoint)));
filterBookmarkModel->setFilterKeyColumn(0);
filterBookmarkModel->setDynamicSortFilter(true);
@@ -514,8 +507,8 @@ void BookmarkWidget::expandItems()
QStandardItemModel *model = bookmarkManager->treeBookmarkModel();
QList<QStandardItem*>list = model->findItems(QLatin1String("*"),
Qt::MatchWildcard | Qt::MatchRecursive, 0);
- foreach (const QStandardItem* item, list) {
- const QModelIndex& index = model->indexFromItem(item);
+ foreach (const QStandardItem *item, list) {
+ const QModelIndex &index = model->indexFromItem(item);
treeView->setExpanded(filterBookmarkModel->mapFromSource(index),
item->data(Qt::UserRole + 11).toBool());
}
@@ -541,17 +534,17 @@ bool BookmarkWidget::eventFilter(QObject *object, QEvent *e)
if (e->type() == QEvent::KeyPress) {
QKeyEvent *ke = static_cast<QKeyEvent*>(e);
if (index.isValid() && searchField->text().isEmpty()) {
+ const QModelIndex &src = filterBookmarkModel->mapToSource(index);
if (ke->key() == Qt::Key_F2) {
- QStandardItem *item = bookmarkManager->treeBookmarkModel()
- ->itemFromIndex(filterBookmarkModel->mapToSource(index));
+ QStandardItem *item =
+ bookmarkManager->treeBookmarkModel()->itemFromIndex(src);
if (item) {
item->setEditable(true);
treeView->edit(index);
item->setEditable(false);
}
} else if (ke->key() == Qt::Key_Delete) {
- bookmarkManager->removeBookmarkItem(treeView,
- filterBookmarkModel->mapToSource(index));
+ bookmarkManager->removeBookmarkItem(treeView, src);
}
}
@@ -559,7 +552,7 @@ bool BookmarkWidget::eventFilter(QObject *object, QEvent *e)
default: break;
case Qt::Key_Up: {
case Qt::Key_Down:
- treeView->subclassKeyPressEvent(ke);
+ treeView->subclassKeyPressEvent(ke);
} break;
case Qt::Key_Enter: {
@@ -593,9 +586,10 @@ bool BookmarkWidget::eventFilter(QObject *object, QEvent *e)
}
+// #pragma mark -- BookmarkModel
-BookmarkModel::BookmarkModel(int rows, int columns, QObject * parent)
+BookmarkModel::BookmarkModel(int rows, int columns, QObject *parent)
: QStandardItemModel(rows, columns, parent)
{
}
@@ -612,23 +606,23 @@ Qt::DropActions BookmarkModel::supportedDropActions() const
Qt::ItemFlags BookmarkModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags defaultFlags = QStandardItemModel::flags(index);
- if (index.data(Qt::UserRole + 10).toString() == QLatin1String("Folder"))
+ if ((!index.isValid()) // can only happen for the invisible root item
+ || index.data(Qt::UserRole + 10).toString() == QLatin1String("Folder"))
return (Qt::ItemIsDropEnabled | defaultFlags) &~ Qt::ItemIsDragEnabled;
return (Qt::ItemIsDragEnabled | defaultFlags) &~ Qt::ItemIsDropEnabled;
}
+// #pragma mark -- BookmarkManager
-BookmarkManager::BookmarkManager(QHelpEngineCore* _helpEngine)
+BookmarkManager::BookmarkManager(QHelpEngineCore *_helpEngine)
: treeModel(new BookmarkModel(0, 1, this))
, listModel(new BookmarkModel(0, 1, this))
, helpEngine(_helpEngine)
{
folderIcon = QApplication::style()->standardIcon(QStyle::SP_DirClosedIcon);
- treeModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Bookmark"));
- listModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Bookmark"));
connect(treeModel, SIGNAL(itemChanged(QStandardItem*)), this,
SLOT(itemChanged(QStandardItem*)));
@@ -652,22 +646,10 @@ BookmarkModel* BookmarkManager::listBookmarkModel()
void BookmarkManager::saveBookmarks()
{
- qint32 depth = 0;
QByteArray bookmarks;
QDataStream stream(&bookmarks, QIODevice::WriteOnly);
- QStandardItem *root = treeModel->invisibleRootItem();
-
- for (int i = 0; i < root->rowCount(); ++i) {
- const QStandardItem *item = root->child(i);
- stream << depth; // root
- stream << item->data(Qt::DisplayRole).toString();
- stream << item->data(Qt::UserRole + 10).toString();
- stream << item->data(Qt::UserRole + 11).toBool();
- if (item->rowCount() > 0) {
- readBookmarksRecursive(item, stream, (depth +1));
- }
- }
+ readBookmarksRecursive(treeModel->invisibleRootItem(), stream, 0);
helpEngine->setCustomValue(QLatin1String("Bookmarks"), bookmarks);
}
@@ -687,7 +669,7 @@ QStringList BookmarkManager::bookmarkFolders() const
return folders;
}
-QModelIndex BookmarkManager::addNewFolder(const QModelIndex& index)
+QModelIndex BookmarkManager::addNewFolder(const QModelIndex &index)
{
QStandardItem *item = new QStandardItem(uniqueFolderName());
item->setEditable(false);
@@ -703,16 +685,17 @@ QModelIndex BookmarkManager::addNewFolder(const QModelIndex& index)
return treeModel->indexFromItem(item);
}
-void BookmarkManager::removeBookmarkItem(QTreeView *treeView, const QModelIndex& index)
+void BookmarkManager::removeBookmarkItem(QTreeView *treeView,
+ const QModelIndex &index)
{
QStandardItem *item = treeModel->itemFromIndex(index);
if (item) {
QString data = index.data(Qt::UserRole + 10).toString();
if (data == QLatin1String("Folder") && item->rowCount() > 0) {
int value = QMessageBox::question(treeView, tr("Remove"),
- tr("You are going to delete a Folder, this will also<br>"
- "remove it's content. Are you sure to continue?"),
- QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);
+ tr("You are going to delete a Folder, this will also<br>"
+ "remove it's content. Are you sure to continue?"),
+ QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);
if (value == QMessageBox::Cancel)
return;
@@ -733,28 +716,26 @@ void BookmarkManager::removeBookmarkItem(QTreeView *treeView, const QModelIndex&
}
}
-void BookmarkManager::showBookmarkDialog(QWidget* parent, const QString &name,
- const QString &url)
+void BookmarkManager::showBookmarkDialog(QWidget *parent, const QString &name,
+ const QString &url)
{
BookmarkDialog dialog(this, name, url, parent);
dialog.exec();
}
-void BookmarkManager::addNewBookmark(const QModelIndex& index,
- const QString &name, const QString &url)
+void BookmarkManager::addNewBookmark(const QModelIndex &index,
+ const QString &name, const QString &url)
{
QStandardItem *item = new QStandardItem(name);
item->setEditable(false);
item->setData(false, Qt::UserRole + 11);
item->setData(url, Qt::UserRole + 10);
- if (index.isValid()) {
+ if (index.isValid())
treeModel->itemFromIndex(index)->appendRow(item);
- listModel->appendRow(item->clone());
- } else {
+ else
treeModel->appendRow(item);
- listModel->appendRow(item->clone());
- }
+ listModel->appendRow(item->clone());
}
void BookmarkManager::itemChanged(QStandardItem *item)
@@ -785,7 +766,8 @@ void BookmarkManager::setupBookmarkModels()
QList<int> lastDepths;
QList<QStandardItem*> parents;
- QByteArray ba = helpEngine->customValue(QLatin1String("Bookmarks")).toByteArray();
+ QByteArray ba =
+ helpEngine->customValue(QLatin1String("Bookmarks")).toByteArray();
QDataStream stream(ba);
while (!stream.atEnd()) {
stream >> depth >> name >> type >> expanded;
@@ -855,8 +837,7 @@ void BookmarkManager::removeBookmarkFolderItems(QStandardItem *item)
}
void BookmarkManager::readBookmarksRecursive(const QStandardItem *item,
- QDataStream &stream,
- const qint32 depth) const
+ QDataStream &stream, const qint32 depth) const
{
for (int j = 0; j < item->rowCount(); ++j) {
const QStandardItem *child = item->child(j);
diff --git a/tools/assistant/tools/assistant/bookmarkmanager.h b/tools/assistant/tools/assistant/bookmarkmanager.h
index 29da5f3..bf7af41 100644
--- a/tools/assistant/tools/assistant/bookmarkmanager.h
+++ b/tools/assistant/tools/assistant/bookmarkmanager.h
@@ -74,7 +74,7 @@ class BookmarkDialog : public QDialog
Q_OBJECT
public:
- BookmarkDialog(BookmarkManager *manager, const QString &title,
+ BookmarkDialog(BookmarkManager *manager, const QString &title,
const QString &url, QWidget *parent = 0);
~BookmarkDialog();
@@ -86,8 +86,8 @@ private slots:
void textChanged(const QString& string);
void selectBookmarkFolder(const QString &folderName);
void customContextMenuRequested(const QPoint &point);
- void currentChanged(const QModelIndex& current, const QModelIndex& previous);
-
+ void currentChanged(const QModelIndex& current);
+
private:
bool eventFilter(QObject *object, QEvent *e);
@@ -177,14 +177,16 @@ public:
QStringList bookmarkFolders() const;
QModelIndex addNewFolder(const QModelIndex& index);
void removeBookmarkItem(QTreeView *treeView, const QModelIndex& index);
- void showBookmarkDialog(QWidget* parent, const QString &name, const QString &url);
- void addNewBookmark(const QModelIndex& index, const QString &name, const QString &url);
+ void showBookmarkDialog(QWidget* parent, const QString &name,
+ const QString &url);
+ void addNewBookmark(const QModelIndex& index, const QString &name,
+ const QString &url);
void setupBookmarkModels();
private slots:
void itemChanged(QStandardItem *item);
-private:
+private:
QString uniqueFolderName() const;
void removeBookmarkFolderItems(QStandardItem *item);
void readBookmarksRecursive(const QStandardItem *item, QDataStream &stream,
@@ -193,7 +195,7 @@ private:
private:
QString oldText;
QIcon folderIcon;
-
+
BookmarkModel *treeModel;
BookmarkModel *listModel;
QStandardItem *renameItem;
diff --git a/tools/assistant/translations/qt_help.pro b/tools/assistant/translations/qt_help.pro
index e6208a6..9f4d7d8 100644
--- a/tools/assistant/translations/qt_help.pro
+++ b/tools/assistant/translations/qt_help.pro
@@ -42,6 +42,7 @@ HEADERS += ../lib/qhelpcollectionhandler_p.h \
TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/qt_help_de.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_ja.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_pl.ts \
+ $$[QT_INSTALL_TRANSLATIONS]/qt_help_ru.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_untranslated.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_zh_CN.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_zh_TW.ts \
diff --git a/tools/assistant/translations/translations.pro b/tools/assistant/translations/translations.pro
index 8572123..4b836e6 100644
--- a/tools/assistant/translations/translations.pro
+++ b/tools/assistant/translations/translations.pro
@@ -43,6 +43,7 @@ HEADERS += ../tools/assistant/aboutdialog.h \
TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/assistant_de.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_ja.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_pl.ts \
+ $$[QT_INSTALL_TRANSLATIONS]/assistant_ru.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_untranslated.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_zh_CN.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_zh_TW.ts \
diff --git a/tools/assistant/translations/translations_adp.pro b/tools/assistant/translations/translations_adp.pro
index e3edca4..c6f3e81 100644
--- a/tools/assistant/translations/translations_adp.pro
+++ b/tools/assistant/translations/translations_adp.pro
@@ -34,6 +34,7 @@ HEADERS += ../compat/helpwindow.h \
TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/assistant_adp_de.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_adp_ja.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_adp_pl.ts \
+ $$[QT_INSTALL_TRANSLATIONS]/assistant_adp_ru.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_adp_untranslated.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_adp_zh_CN.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_adp_zh_TW.ts
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index dcc955b..e8fb282 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -3087,7 +3087,6 @@ void Configure::buildHostTools()
<< "src/tools/moc"
<< "src/tools/rcc"
<< "src/tools/uic"
- << "tools/linguist/lrelease"
<< "tools/checksdk";
if (dictionary[ "CETEST" ] == "yes")
diff --git a/tools/linguist/linguist/linguist.pro b/tools/linguist/linguist/linguist.pro
index 234b0b1..890b252 100644
--- a/tools/linguist/linguist/linguist.pro
+++ b/tools/linguist/linguist/linguist.pro
@@ -101,6 +101,7 @@ RESOURCES += linguist.qrc
TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/linguist_ja.ts \
$$[QT_INSTALL_TRANSLATIONS]/linguist_pl.ts \
+ $$[QT_INSTALL_TRANSLATIONS]/linguist_ru.ts \
$$[QT_INSTALL_TRANSLATIONS]/linguist_untranslated.ts \
$$[QT_INSTALL_TRANSLATIONS]/linguist_zh_CN.ts \
$$[QT_INSTALL_TRANSLATIONS]/linguist_zh_TW.ts \
diff --git a/tools/linguist/phrasebooks/russian.qph b/tools/linguist/phrasebooks/russian.qph
index 0b06cea..629c60b 100644
--- a/tools/linguist/phrasebooks/russian.qph
+++ b/tools/linguist/phrasebooks/russian.qph
@@ -1,4 +1,5 @@
-<!DOCTYPE QPH><QPH language="ru">
+<!DOCTYPE QPH>
+<QPH language="ru">
<phrase>
<source>About</source>
<target>О программе</target>
@@ -68,10 +69,6 @@
<target>авто-прокрутка</target>
</phrase>
<phrase>
- <source>Back</source>
- <target>Назад</target>
-</phrase>
-<phrase>
<source>boxed edit</source>
<target>окно редактирования</target>
</phrase>
@@ -117,11 +114,11 @@
</phrase>
<phrase>
<source>Close button</source>
- <target>кнопка закрытия</target>
+ <target>Кнопка закрытия</target>
</phrase>
<phrase>
<source>collapse</source>
- <target>крах</target>
+ <target>свернуть</target>
</phrase>
<phrase>
<source>column heading</source>
@@ -257,7 +254,7 @@
</phrase>
<phrase>
<source>expand</source>
- <target>расширять</target>
+ <target>развернуть</target>
</phrase>
<phrase>
<source>Explore</source>
@@ -285,15 +282,15 @@
</phrase>
<phrase>
<source>Find Next</source>
- <target>Продолжить поиск</target>
+ <target>Найти далее</target>
</phrase>
<phrase>
<source>Find What</source>
- <target>Поиск</target>
+ <target>Искать</target>
</phrase>
<phrase>
<source>folder</source>
- <target>каталог</target>
+ <target>папка</target>
</phrase>
<phrase>
<source>font</source>
@@ -385,7 +382,7 @@
</phrase>
<phrase>
<source>landscape</source>
- <target>альбом</target>
+ <target>альбомная</target>
</phrase>
<phrase>
<source>link</source>
@@ -513,7 +510,7 @@
</phrase>
<phrase>
<source>OK</source>
- <target>OK</target>
+ <target>Готово</target>
</phrase>
<phrase>
<source>OLE</source>
@@ -525,7 +522,7 @@
</phrase>
<phrase>
<source>OLE embedded object</source>
- <target>внедренный OLE-объект</target>
+ <target>внедрённый OLE-объект</target>
</phrase>
<phrase>
<source>OLE linked object</source>
@@ -533,7 +530,7 @@
</phrase>
<phrase>
<source>OLE nondefault drag and drop</source>
- <target>предопределенный OLE-механизм</target>
+ <target>предопределённый OLE-механизм</target>
</phrase>
<phrase>
<source>Open</source>
@@ -557,7 +554,7 @@
</phrase>
<phrase>
<source>Page Setup</source>
- <target>шаг установки</target>
+ <target>Параметры страницы</target>
</phrase>
<phrase>
<source>palette window</source>
@@ -625,11 +622,11 @@
</phrase>
<phrase>
<source>portrait</source>
- <target>портрет</target>
+ <target>книжная</target>
</phrase>
<phrase>
<source>press</source>
- <target>нажимать</target>
+ <target>нажать</target>
</phrase>
<phrase>
<source>primary container</source>
@@ -757,7 +754,7 @@
</phrase>
<phrase>
<source>secondary window</source>
- <target>подчиненное окно</target>
+ <target>подчинённое окно</target>
</phrase>
<phrase>
<source>select</source>
@@ -765,7 +762,7 @@
</phrase>
<phrase>
<source>Select All</source>
- <target>Выделить все</target>
+ <target>Выделить всё</target>
</phrase>
<phrase>
<source>selection</source>
@@ -861,11 +858,11 @@
</phrase>
<phrase>
<source>status bar</source>
- <target>статусная строка</target>
+ <target>строка состояния</target>
</phrase>
<phrase>
<source>Stop</source>
- <target>Стоп</target>
+ <target>Остановить</target>
</phrase>
<phrase>
<source>tab control</source>
@@ -897,7 +894,7 @@
</phrase>
<phrase>
<source>toggle key</source>
- <target>кнопка-выключатель</target>
+ <target>кнопка-переключатель</target>
</phrase>
<phrase>
<source>toolbar</source>
@@ -979,4 +976,88 @@
<source>Yes</source>
<target>Да</target>
</phrase>
+<phrase>
+ <source>No</source>
+ <target>Нет</target>
+</phrase>
+<phrase>
+ <source>Options</source>
+ <target>Параметры</target>
+</phrase>
+<phrase>
+ <source>directory</source>
+ <target>каталог</target>
+</phrase>
+<phrase>
+ <source>Finish</source>
+ <target>Завершить</target>
+</phrase>
+<phrase>
+ <source>Continue</source>
+ <target>Продолжить</target>
+</phrase>
+<phrase>
+ <source>advanced</source>
+ <target>расширенный</target>
+</phrase>
+<phrase>
+ <source>layout</source>
+ <target>компоновка</target>
+</phrase>
+<phrase>
+ <source>layout</source>
+ <target>компоновщик</target>
+</phrase>
+<phrase>
+ <source>plugin</source>
+ <target>модуль</target>
+</phrase>
+<phrase>
+ <source>script</source>
+ <target>сценарий</target>
+</phrase>
+<phrase>
+ <source>spacer</source>
+ <target>разделитель</target>
+</phrase>
+<phrase>
+ <source>tabbar</source>
+ <target>панель вкладок</target>
+</phrase>
+<phrase>
+ <source>whitespace</source>
+ <target>символ пробела</target>
+</phrase>
+<phrase>
+ <source>Forward</source>
+ <target>Вперёд</target>
+</phrase>
+<phrase>
+ <source>Back</source>
+ <target>Назад</target>
+</phrase>
+<phrase>
+ <source>Search wrapped</source>
+ <target>Поиск с начала</target>
+</phrase>
+<phrase>
+ <source>OK</source>
+ <target>Выбрать</target>
+</phrase>
+<phrase>
+ <source>OK</source>
+ <target>Закрыть</target>
+</phrase>
+<phrase>
+ <source>Match case</source>
+ <target>С учётом регистра</target>
+</phrase>
+<phrase>
+ <source>Case Sensitive</source>
+ <target>Регистрозависимо</target>
+</phrase>
+<phrase>
+ <source>Whole words</source>
+ <target>Слова полностью</target>
+</phrase>
</QPH>
diff --git a/tools/porting/src/qt3headers0.resource b/tools/porting/src/qt3headers0.resource
index 13be468..8e24385 100644
--- a/tools/porting/src/qt3headers0.resource
+++ b/tools/porting/src/qt3headers0.resource
Binary files differ
diff --git a/tools/porting/src/qt3headers1.resource b/tools/porting/src/qt3headers1.resource
index e06d270..8da4b9a 100644
--- a/tools/porting/src/qt3headers1.resource
+++ b/tools/porting/src/qt3headers1.resource
Binary files differ
diff --git a/tools/porting/src/qt3headers2.resource b/tools/porting/src/qt3headers2.resource
index e44c81d..62bdb8e 100644
--- a/tools/porting/src/qt3headers2.resource
+++ b/tools/porting/src/qt3headers2.resource
Binary files differ
diff --git a/tools/porting/src/qt3headers3.resource b/tools/porting/src/qt3headers3.resource
index 6d259f2..6a096e8 100644
--- a/tools/porting/src/qt3headers3.resource
+++ b/tools/porting/src/qt3headers3.resource
Binary files differ
diff --git a/translations/assistant_adp_ru.ts b/translations/assistant_adp_ru.ts
new file mode 100644
index 0000000..a587a91
--- /dev/null
+++ b/translations/assistant_adp_ru.ts
@@ -0,0 +1,780 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru">
+<context>
+ <name>AssistantServer</name>
+ <message>
+ <source>Failed to bind to port %1</source>
+ <translation>Не удалось открыть порт %1</translation>
+ </message>
+ <message>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+</context>
+<context>
+ <name>FontPanel</name>
+ <message>
+ <source>&amp;Family</source>
+ <translation>Се&amp;мейство</translation>
+ </message>
+ <message>
+ <source>&amp;Style</source>
+ <translation>&amp;Стиль</translation>
+ </message>
+ <message>
+ <source>Font</source>
+ <translation>Шрифт</translation>
+ </message>
+ <message>
+ <source>&amp;Writing system</source>
+ <translation>Система &amp;письма</translation>
+ </message>
+ <message>
+ <source>&amp;Point size</source>
+ <translation>&amp;Размер в пикселях</translation>
+ </message>
+</context>
+<context>
+ <name>FontSettingsDialog</name>
+ <message>
+ <source>Application</source>
+ <translation>Приложение</translation>
+ </message>
+ <message>
+ <source>Browser</source>
+ <translation>Обозреватель</translation>
+ </message>
+ <message>
+ <source>Font settings for:</source>
+ <translation>Настройки шрифта для:</translation>
+ </message>
+ <message>
+ <source>Use custom settings</source>
+ <translation>Использование индивидуальных настроек</translation>
+ </message>
+ <message>
+ <source>Font Settings</source>
+ <translation>Настройки шрифта</translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <source>&amp;Index</source>
+ <translation>&amp;Указатель</translation>
+ </message>
+ <message>
+ <source>&amp;Look For:</source>
+ <translation>&amp;Искать:</translation>
+ </message>
+ <message>
+ <source>&amp;New</source>
+ <translation>&amp;Создать</translation>
+ </message>
+ <message>
+ <source>&amp;Search</source>
+ <translation>&amp;Поиск</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Enter a keyword.&lt;/b&gt;&lt;p&gt;The list will select an item that matches the entered string best.&lt;/p&gt;</source>
+ <translation>&lt;b&gt;Ввод слова.&lt;/b&gt;&lt;p&gt;В список попадет то, что лучше соответствует введенной строке.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Enter search word(s).&lt;/b&gt;&lt;p&gt;Enter here the word(s) you are looking for. The words may contain wildcards (*). For a sequence of words quote them.&lt;/p&gt;</source>
+ <translation>&lt;b&gt;Ввод одного или более слов для поиска.&lt;/b&gt;&lt;p&gt;Сюда следует ввести одно или несколько слов, которые требуется найти. Слова могут содержкать символы-заменители (*). Если требуется найти словосочетание, то его нужно заключить в кавычки.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Found documents&lt;/b&gt;&lt;p&gt;This list contains all found documents from the last search. The documents are ordered, i.e. the first document has the most matches.&lt;/p&gt;</source>
+ <translation>&lt;b&gt;Найденные документы&lt;/b&gt;&lt;p&gt;В этом списке представлены все найденные при последнем поиске документы. Документы упорядочены по релевантности, т.е. чем выше, тем чаще в нём встречаются указанные слова.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Help topics organized by category.&lt;/b&gt;&lt;p&gt;Double-click an item to see the topics in that category. To view a topic, just double-click it.&lt;/p&gt;</source>
+ <translation>&lt;b&gt;Статьи справки распределённые по разделам.&lt;/b&gt;&lt;p&gt;Дважды кликните по одному из пунктов, чтобы увидеть какие статьи содержатся в данном разделе. Для открытия статьи просто дважды щелкните на ней.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Help&lt;/b&gt;&lt;p&gt;Choose the topic you want help on from the contents list, or search the index for keywords.&lt;/p&gt;</source>
+ <translation>&lt;b&gt;Справка&lt;/b&gt;&lt;p&gt;Выберите необходимую статью справки из списка разделов или воспользуйтесь поиском по предметному указателю.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;List of available help topics.&lt;/b&gt;&lt;p&gt;Double-click on an item to open its help page. If more than one is found, you must specify which page you want.&lt;/p&gt;</source>
+ <translation>&lt;b&gt;Список доступных статей справки.&lt;/b&gt;&lt;p&gt;Дважды щёлкните на пункте для открытия страницы помощи. Если найдено более одной, то потребуется выбрать желаемую страницу.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Add new bookmark</source>
+ <translation>Добавить новую закладку</translation>
+ </message>
+ <message>
+ <source>Add the currently displayed page as a new bookmark.</source>
+ <translation>Добавление текущей открытой страницы в закладки.</translation>
+ </message>
+ <message>
+ <source>Cannot open the index file %1</source>
+ <translation>Не удаётся открыть файл индекса %1</translation>
+ </message>
+ <message>
+ <source>Con&amp;tents</source>
+ <translation>Содер&amp;жание</translation>
+ </message>
+ <message>
+ <source>Delete bookmark</source>
+ <translation>Удалить закладку</translation>
+ </message>
+ <message>
+ <source>Delete the selected bookmark.</source>
+ <translation>Удаление выбранной закладки.</translation>
+ </message>
+ <message>
+ <source>Display the help page for the full text search.</source>
+ <translation>Открытие справки по полнотекстовому поиску.</translation>
+ </message>
+ <message>
+ <source>Display the help page.</source>
+ <translation>Открыть страницу справки.</translation>
+ </message>
+ <message>
+ <source>Displays help topics organized by category, index or bookmarks. Another tab inherits the full text search.</source>
+ <translation>Здесь отображается список тем, распределенных по разделам, указатель или закладки. Последняя вкладка содержит полнотекстовый поиск.</translation>
+ </message>
+ <message>
+ <source>Displays the list of bookmarks.</source>
+ <translation>Отображает список закладок.</translation>
+ </message>
+ <message>
+ <source>Documentation file %1 does not exist!
+Skipping file.</source>
+ <translation>Файл документации %1 не существует!
+Пропущен.</translation>
+ </message>
+ <message>
+ <source>Documentation file %1 is not compatible!
+Skipping file.</source>
+ <translation>Файл документации %1 не совместим!
+Пропущен.</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>Готово</translation>
+ </message>
+ <message>
+ <source>Enter keyword</source>
+ <translation>Введите ключевое слово</translation>
+ </message>
+ <message>
+ <source>Enter searchword(s).</source>
+ <translation>Введите одно или более слов для поиска.</translation>
+ </message>
+ <message>
+ <source>Failed to load keyword index file
+Assistant will not work!</source>
+ <translation>Не удалось загрузить файл индекса ключевых слов
+Assistant не будет работать!</translation>
+ </message>
+ <message>
+ <source>Failed to save fulltext search index
+Assistant will not work!</source>
+ <translation>Не удалось сохранить индекс полнотекстового поиска
+Assistant не будет работать!</translation>
+ </message>
+ <message>
+ <source>Found &amp;Documents:</source>
+ <translation>Найденные &amp;документы:</translation>
+ </message>
+ <message>
+ <source>Full Text Search</source>
+ <translation>Полнотекстовый поиск</translation>
+ </message>
+ <message>
+ <source>He&amp;lp</source>
+ <translation>&amp;Справка</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Справка</translation>
+ </message>
+ <message>
+ <source>Indexing files...</source>
+ <translation>Индексирование файлов...</translation>
+ </message>
+ <message>
+ <source>Open Link in New Tab</source>
+ <translation>Открыть ссылку в новой вкладке</translation>
+ </message>
+ <message>
+ <source>Open Link in New Window</source>
+ <translation>Открыть ссылку в новом окне</translation>
+ </message>
+ <message>
+ <source>Parse Error</source>
+ <translation>Ошибка обработки</translation>
+ </message>
+ <message>
+ <source>Prepare...</source>
+ <translation>Подготовка...</translation>
+ </message>
+ <message>
+ <source>Preparing...</source>
+ <translation>Подготовка...</translation>
+ </message>
+ <message>
+ <source>Pressing this button starts the search.</source>
+ <translation>Нажатие на эту кнопку запустит процесс поиска.</translation>
+ </message>
+ <message>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <source>Reading dictionary...</source>
+ <translation>Чтение каталога...</translation>
+ </message>
+ <message>
+ <source>Searching f&amp;or:</source>
+ <translation>&amp;Искать:</translation>
+ </message>
+ <message>
+ <source>Start searching.</source>
+ <translation>Начать поиск.</translation>
+ </message>
+ <message>
+ <source>The closing quotation mark is missing.</source>
+ <translation>Пропущена закрывающая кавычка.</translation>
+ </message>
+ <message>
+ <source>Using a wildcard within phrases is not allowed.</source>
+ <translation>Использование символов-заменителей внутри фраз не допустимо.</translation>
+ </message>
+ <message>
+ <source>Warning</source>
+ <translation>Предупреждение</translation>
+ </message>
+ <message>
+ <source>column 1</source>
+ <translation>столбец 1</translation>
+ </message>
+ <message>
+ <source>Open Link in Current Tab</source>
+ <translation>Открыть ссылку в текущей вкладке</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n document(s) found.</source>
+ <translation>
+ <numerusform>Найден %n документ.</numerusform>
+ <numerusform>Найдено %n документа.</numerusform>
+ <numerusform>Найдено %n документов.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>&amp;Bookmarks</source>
+ <translation>&amp;Закладки</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>&amp;Удалить</translation>
+ </message>
+</context>
+<context>
+ <name>HelpWindow</name>
+ <message>
+ <source>&lt;div align=&quot;center&quot;&gt;&lt;h1&gt;The page could not be found&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</source>
+ <translation>&lt;div align=&quot;center&quot;&gt;&lt;h1&gt;Страница не найдена&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Link Location</source>
+ <translation>Копировать &amp;адрес ссылки</translation>
+ </message>
+ <message>
+ <source>Error...</source>
+ <translation>Ошибка...</translation>
+ </message>
+ <message>
+ <source>Failed to open link: &apos;%1&apos;</source>
+ <translation>Не удалось открыть ссылку: &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Справка</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>Закрыть</translation>
+ </message>
+ <message>
+ <source>Open Link in New Tab</source>
+ <translation>Открыть ссылку в новой вкладке</translation>
+ </message>
+ <message>
+ <source>Open Link in New Window Shift+LMB</source>
+ <translation>Открыть ссылку в новом окне Shift+LMB</translation>
+ </message>
+ <message>
+ <source>Unable to launch web browser.
+</source>
+ <translation>Невозможно запустить вэб-браузер.
+</translation>
+ </message>
+</context>
+<context>
+ <name>Index</name>
+ <message>
+ <source>Untitled</source>
+ <translation>Неозаглавлено</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&quot;What&apos;s This?&quot; context sensitive help.</source>
+ <translation>&quot;Что это?&quot; - контекстная справка.</translation>
+ </message>
+ <message>
+ <source>&amp;Add Bookmark</source>
+ <translation>&amp;Добавление закладки</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Закрыть</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Копировать</translation>
+ </message>
+ <message>
+ <source>&amp;Edit</source>
+ <translation>&amp;Правка</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Файл</translation>
+ </message>
+ <message>
+ <source>&amp;Find in Text...</source>
+ <translation>П&amp;оиск по тексту...</translation>
+ </message>
+ <message>
+ <source>&amp;Go</source>
+ <translation>&amp;Перейти</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>&amp;Справка</translation>
+ </message>
+ <message>
+ <source>&amp;Home</source>
+ <translation>&amp;Домой</translation>
+ </message>
+ <message>
+ <source>&amp;Next</source>
+ <translation>&amp;Вперёд</translation>
+ </message>
+ <message>
+ <source>&amp;Previous</source>
+ <translation>&amp;Назад</translation>
+ </message>
+ <message>
+ <source>&amp;Print...</source>
+ <translation>&amp;Печать...</translation>
+ </message>
+ <message>
+ <source>&amp;View</source>
+ <translation>&amp;Вид</translation>
+ </message>
+ <message>
+ <source>&amp;Window</source>
+ <translation>&amp;Окно</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>About Qt</source>
+ <translation>О Qt</translation>
+ </message>
+ <message>
+ <source>About Qt Assistant</source>
+ <translation>О Qt Assistant</translation>
+ </message>
+ <message>
+ <source>Add Tab</source>
+ <translation>Добавить вкладку</translation>
+ </message>
+ <message>
+ <source>Add the currently displayed page as a new bookmark.</source>
+ <translation>Добавление текущей открытой страницы в закладки.</translation>
+ </message>
+ <message>
+ <source>Boo&amp;kmarks</source>
+ <translation>&amp;Закладки</translation>
+ </message>
+ <message>
+ <source>Cannot open file for writing!</source>
+ <translation>Не удается открыть файл для записи!</translation>
+ </message>
+ <message>
+ <source>Close Tab</source>
+ <translation>Закрыть вкладку</translation>
+ </message>
+ <message>
+ <source>Close the current window.</source>
+ <translation>Закрыть текущее окно.</translation>
+ </message>
+ <message>
+ <source>Display further information about Qt Assistant.</source>
+ <translation>Показать дополнительную информацию о Qt Assistant.</translation>
+ </message>
+ <message>
+ <source>Displays the main page of a specific documentation set.</source>
+ <translation>Открывает главную страницу выбранного набора документации.</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>Вы&amp;ход</translation>
+ </message>
+ <message>
+ <source>Failed to open about application contents in file: &apos;%1&apos;</source>
+ <translation>Не удалось получить информацию о приложении из файла: &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <source>Find &amp;Next</source>
+ <translation>Продолжить п&amp;оиск</translation>
+ </message>
+ <message>
+ <source>Find &amp;Previous</source>
+ <translation>Найти &amp;предыдущее</translation>
+ </message>
+ <message>
+ <source>Font Settings...</source>
+ <translation>Настройки шрифта...</translation>
+ </message>
+ <message>
+ <source>Go</source>
+ <translation>Перейти</translation>
+ </message>
+ <message>
+ <source>Go to the home page. Qt Assistant&apos;s home page is the Qt Reference Documentation.</source>
+ <translation>Перейти на домашнюю страницу. Домашная страница Qt Assistant - Справочная документация по Qt.</translation>
+ </message>
+ <message>
+ <source>Go to the next page.</source>
+ <translation>Переход на следующую страницу.</translation>
+ </message>
+ <message>
+ <source>Initializing Qt Assistant...</source>
+ <translation>Инициализация Qt Assistant...</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>Свернуть</translation>
+ </message>
+ <message>
+ <source>New Window</source>
+ <translation>Новое окно</translation>
+ </message>
+ <message>
+ <source>Next Tab</source>
+ <translation>Следующая вкладка</translation>
+ </message>
+ <message>
+ <source>Open a new window.</source>
+ <translation>Открыть новое окно.</translation>
+ </message>
+ <message>
+ <source>Open the Find dialog. Qt Assistant will search the currently displayed page for the text you enter.</source>
+ <translation>Открыть окно поиска. Qt Assistant произведёт поиск введённого текста на текущей открытой странице.</translation>
+ </message>
+ <message>
+ <source>Previous Tab</source>
+ <translation>Предыдущая вкладка</translation>
+ </message>
+ <message>
+ <source>Print the currently displayed page.</source>
+ <translation>Печать текущей открытой страницы.</translation>
+ </message>
+ <message>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <source>Qt Assistant Manual</source>
+ <translation>Руководство по Qt Assistant</translation>
+ </message>
+ <message>
+ <source>Qt Assistant by Nokia</source>
+ <translation>Qt Assistant от Nokia</translation>
+ </message>
+ <message>
+ <source>Quit Qt Assistant.</source>
+ <translation>Выйти из Qt Assistant.</translation>
+ </message>
+ <message>
+ <source>Save Page</source>
+ <translation>Сохранить страницу</translation>
+ </message>
+ <message>
+ <source>Save Page As...</source>
+ <translation>Сохранить страницу как...</translation>
+ </message>
+ <message>
+ <source>Select the page in contents tab.</source>
+ <translation>Выбор страницы в оглавлении.</translation>
+ </message>
+ <message>
+ <source>Sidebar</source>
+ <translation>Боковая панель</translation>
+ </message>
+ <message>
+ <source>Sync with Table of Contents</source>
+ <translation>Синхронизировать с оглавлением</translation>
+ </message>
+ <message>
+ <source>Toolbar</source>
+ <translation>Панель инструментов</translation>
+ </message>
+ <message>
+ <source>Views</source>
+ <translation>Виды</translation>
+ </message>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>Что это?</translation>
+ </message>
+ <message>
+ <source>Zoom &amp;in</source>
+ <translation>У&amp;величить</translation>
+ </message>
+ <message>
+ <source>Zoom &amp;out</source>
+ <translation>У&amp;меньшить</translation>
+ </message>
+ <message>
+ <source>Zoom in on the document, i.e. increase the font size.</source>
+ <translation>Увеличение масштаба документа, т.е. увеличение размера шрифта.</translation>
+ </message>
+ <message>
+ <source>Zoom out on the document, i.e. decrease the font size.</source>
+ <translation>Уменьшение масштаба документа, т.е. уменьшение размера шрифта.</translation>
+ </message>
+ <message>
+ <source>Ctrl+M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SHIFT+CTRL+=</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+T</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+I</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+[</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+P</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy the selected text to the clipboard.</source>
+ <translation>Скопировать выделенный текст в буфер обмена.</translation>
+ </message>
+ <message>
+ <source>Ctrl+C</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Shift+F3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Go to the previous page.</source>
+ <translation>Переход на предыдущую страницу.</translation>
+ </message>
+ <message>
+ <source>Alt+Left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Alt+Right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl++</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+-</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+N</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+W</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Shift+F1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+N</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+Right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+Left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+S</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>Qt Assistant by Nokia</source>
+ <translation>Qt Assistant от Nokia</translation>
+ </message>
+</context>
+<context>
+ <name>TabbedBrowser</name>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Поиск с начала</translation>
+ </message>
+ <message>
+ <source>Add page</source>
+ <translation>Добавить страницу</translation>
+ </message>
+ <message>
+ <source>Case Sensitive</source>
+ <translation>Регистрозависимо</translation>
+ </message>
+ <message>
+ <source>Close Other Tabs</source>
+ <translation>Закрыть остальные вкладки</translation>
+ </message>
+ <message>
+ <source>Close Tab</source>
+ <translation>Закрыть вкладку</translation>
+ </message>
+ <message>
+ <source>Close page</source>
+ <translation>Закрыть страницу</translation>
+ </message>
+ <message>
+ <source>New Tab</source>
+ <translation>Новая вкладка</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation>Следующий</translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translation>Предыдущий</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>Безымянный</translation>
+ </message>
+ <message>
+ <source>Whole words</source>
+ <translation>Слова полностью</translation>
+ </message>
+ <message>
+ <source>TabbedBrowser</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TopicChooser</name>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Закрыть</translation>
+ </message>
+ <message>
+ <source>&amp;Display</source>
+ <translation>&amp;Показать</translation>
+ </message>
+ <message>
+ <source>&amp;Topics</source>
+ <translation>&amp;Статьи</translation>
+ </message>
+ <message>
+ <source>Choose Topic</source>
+ <translation>Выбор статьи</translation>
+ </message>
+ <message>
+ <source>Choose a topic for &lt;b&gt;%1&lt;/b&gt;</source>
+ <translation>Выберите статью для &lt;b&gt;%1&lt;/b&gt;</translation>
+ </message>
+ <message>
+ <source>Close the Dialog.</source>
+ <translation>Закрытие окна.</translation>
+ </message>
+ <message>
+ <source>Displays a list of available help topics for the keyword.</source>
+ <translation>Показывает список доступных статей справки, соответствующих ключевому слову.</translation>
+ </message>
+ <message>
+ <source>Open the topic selected in the list.</source>
+ <translation>Открытие выбранной в списке темы.</translation>
+ </message>
+ <message>
+ <source>Select a topic from the list and click the &lt;b&gt;Display&lt;/b&gt;-button to open the online help.</source>
+ <translation>Выберите статью из списка и нажмите на кнопку &lt;b&gt;Показать&lt;/b&gt; для открытия онлайн справки.</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts
new file mode 100644
index 0000000..32aa739
--- /dev/null
+++ b/translations/assistant_ru.ts
@@ -0,0 +1,1063 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+110"/>
+ <source>&amp;Close</source>
+ <translation>&amp;Закрыть</translation>
+ </message>
+</context>
+<context>
+ <name>AboutLabel</name>
+ <message>
+ <location line="-14"/>
+ <source>Warning</source>
+ <translation>Предупреждение</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Unable to launch external application.
+</source>
+ <translation>Невозможно запустить внешнее приложение.
+</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>OK</source>
+ <translation>Закрыть</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkDialog</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui" line="+19"/>
+ <source>Add Bookmark</source>
+ <translation>Добавление закладки</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Bookmark:</source>
+ <translation>Закладка:</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Add in Folder:</source>
+ <translation>Добавить в папку:</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message>
+ <location line="+28"/>
+ <source>New Folder</source>
+ <translation>Новая папка</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+185"/>
+ <location line="+18"/>
+ <location line="+36"/>
+ <location line="+24"/>
+ <location line="+32"/>
+ <source>Bookmarks</source>
+ <translation>Закладки</translation>
+ </message>
+ <message>
+ <location line="-69"/>
+ <source>Delete Folder</source>
+ <translation>Удалить папку</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Rename Folder</source>
+ <translation>Переименовать папку</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkManager</name>
+ <message>
+ <location line="+449"/>
+ <source>Bookmarks</source>
+ <translation>Закладки</translation>
+ </message>
+ <message>
+ <location line="+36"/>
+ <source>Remove</source>
+ <translation>Удалить</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>You are going to delete a Folder, this will also&lt;br&gt;remove it&apos;s content. Are you sure to continue?</source>
+ <translation>Удаление папки приведёт к удалению её содержимого.&lt;br&gt;Желаете продолжить?</translation>
+ </message>
+ <message>
+ <location line="+109"/>
+ <location line="+9"/>
+ <source>New Folder</source>
+ <translation>Новая папка</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkWidget</name>
+ <message>
+ <location line="-436"/>
+ <source>Delete Folder</source>
+ <translation>Удалить папку</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Rename Folder</source>
+ <translation>Переименовать папку</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Show Bookmark</source>
+ <translation>Открыть закладку</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Show Bookmark in New Tab</source>
+ <translation>Открыть закладку в новой вкладке</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Delete Bookmark</source>
+ <translation>Удалить закладку</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Rename Bookmark</source>
+ <translation>Переименовать закладку</translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>Filter:</source>
+ <translation>Фильтр:</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Add</source>
+ <translation>Добавить</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Remove</source>
+ <translation>Удалить</translation>
+ </message>
+</context>
+<context>
+ <name>CentralWidget</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+237"/>
+ <source>Add new page</source>
+ <translation>Открыть новую страницу</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Close current page</source>
+ <translation>Закрыть текущую страницу</translation>
+ </message>
+ <message>
+ <location line="+284"/>
+ <source>Print Document</source>
+ <translation>Печать документа</translation>
+ </message>
+ <message>
+ <location line="+148"/>
+ <location line="+2"/>
+ <source>unknown</source>
+ <translation>безымянная вкладка</translation>
+ </message>
+ <message>
+ <location line="+91"/>
+ <source>Add New Page</source>
+ <translation>Открыть новую страницу</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Close This Page</source>
+ <translation>Закрыть данную страницу</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Close Other Pages</source>
+ <translation>Закрыть остальные страницы</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Add Bookmark for this Page...</source>
+ <translation>Добавить закладку для этой страницы...</translation>
+ </message>
+ <message>
+ <location line="+255"/>
+ <source>Search</source>
+ <translation>Поиск</translation>
+ </message>
+</context>
+<context>
+ <name>ContentWindow</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+158"/>
+ <source>Open Link</source>
+ <translation>Открыть ссылку</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Open Link in New Tab</source>
+ <translation>Открыть ссылку в новой вкладке</translation>
+ </message>
+</context>
+<context>
+ <name>FilterNameDialogClass</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/filternamedialog.ui" line="+13"/>
+ <source>Add Filter Name</source>
+ <translation>Добавление фильтра</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Filter Name:</source>
+ <translation>Название фильтра:</translation>
+ </message>
+</context>
+<context>
+ <name>FindWidget</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-925"/>
+ <source>Previous</source>
+ <translation>Предыдущее совпадение</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Next</source>
+ <translation>Следующее совпадение</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Case Sensitive</source>
+ <translation>Регистрозависимо</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Whole words</source>
+ <translation>Слова полностью</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Поиск с начала</translation>
+ </message>
+</context>
+<context>
+ <name>FontPanel</name>
+ <message>
+ <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/>
+ <source>Font</source>
+ <translation>Шрифт</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Writing system</source>
+ <translation>Система &amp;письма</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Family</source>
+ <translation>Се&amp;мейство</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>&amp;Style</source>
+ <translation>&amp;Стиль</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>&amp;Point size</source>
+ <translation>&amp;Размер в точках</translation>
+ </message>
+</context>
+<context>
+ <name>HelpViewer</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+284"/>
+ <source>Open Link in New Tab</source>
+ <translation>Открыть ссылку в новой вкладке</translation>
+ </message>
+ <message>
+ <location line="+147"/>
+ <source>&lt;title&gt;Error 404...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;The page could not be found&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</source>
+ <translation>&lt;title&gt;Ошибка 404...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Страница не найдена&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</translation>
+ </message>
+ <message>
+ <location line="+61"/>
+ <source>Help</source>
+ <translation>Справка</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Unable to launch external application.
+</source>
+ <translation>Невозможно запустить внешнее приложение.
+</translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>OK</source>
+ <translation>Закрыть</translation>
+ </message>
+ <message>
+ <location line="+63"/>
+ <source>Copy &amp;Link Location</source>
+ <translation>Копировать &amp;адрес ссылки</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Open Link in New Tab Ctrl+LMB</source>
+ <translation>Открыть ссылку в новой вкладке Ctrl+LMB</translation>
+ </message>
+</context>
+<context>
+ <name>IndexWindow</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+66"/>
+ <source>&amp;Look for:</source>
+ <translation>&amp;Искать:</translation>
+ </message>
+ <message>
+ <location line="+68"/>
+ <source>Open Link</source>
+ <translation>Открыть ссылку</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Open Link in New Tab</source>
+ <translation>Открыть ссылку в новой вкладке</translation>
+ </message>
+</context>
+<context>
+ <name>InstallDialog</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+75"/>
+ <location filename="../tools/assistant/tools/assistant/installdialog.ui" line="+13"/>
+ <source>Install Documentation</source>
+ <translation>Установка документации</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Downloading documentation info...</source>
+ <translation>Загрузка информации о документации...</translation>
+ </message>
+ <message>
+ <location line="+48"/>
+ <source>Download canceled.</source>
+ <translation>Загрузка отменена.</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <location line="+78"/>
+ <location line="+27"/>
+ <source>Done.</source>
+ <translation>Готово.</translation>
+ </message>
+ <message>
+ <location line="-90"/>
+ <source>The file %1 already exists. Do you want to overwrite it?</source>
+ <translation>Файл %1 уже существует. Желаете перезаписать его?</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Unable to save the file %1: %2.</source>
+ <translation>Невозможно сохранить файл %1: %2.</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Downloading %1...</source>
+ <translation>Загрузка %1...</translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <location line="+42"/>
+ <location line="+38"/>
+ <source>Download failed: %1.</source>
+ <translation>Загрузка не удалась: %1.</translation>
+ </message>
+ <message>
+ <location line="-70"/>
+ <source>Documentation info file is corrupt!</source>
+ <translation>Файл информации о документации повреждён!</translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>Download failed: Downloaded file is corrupted.</source>
+ <translation>Загрузка не удалась: загруженный файл повреждён.</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Installing documentation %1...</source>
+ <translation>Установка документации %1...</translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <source>Error while installing documentation:
+%1</source>
+ <translation>При установке документации возникла ошибка:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/installdialog.ui" line="+6"/>
+ <source>Available Documentation:</source>
+ <translation>Доступная документация:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Install</source>
+ <translation>Установить</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Cancel</source>
+ <translation>Отмена</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Close</source>
+ <translation>Закрыть</translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>Installation Path:</source>
+ <translation>Путь установки:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+108"/>
+ <location line="+354"/>
+ <source>Index</source>
+ <translation>Индекс</translation>
+ </message>
+ <message>
+ <location line="-348"/>
+ <location line="+346"/>
+ <source>Contents</source>
+ <translation>Содержание</translation>
+ </message>
+ <message>
+ <location line="-341"/>
+ <location line="+345"/>
+ <source>Bookmarks</source>
+ <translation>Закладки</translation>
+ </message>
+ <message>
+ <location line="-333"/>
+ <location line="+208"/>
+ <location line="+476"/>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <location line="-508"/>
+ <location line="+5"/>
+ <source>Unfiltered</source>
+ <translation>Без фильтрации</translation>
+ </message>
+ <message>
+ <location line="+21"/>
+ <source>Looking for Qt Documentation...</source>
+ <translation type="unfinished">Поиск по документации Qt...</translation>
+ </message>
+ <message>
+ <location line="+61"/>
+ <source>&amp;File</source>
+ <translation>&amp;Файл</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Page Set&amp;up...</source>
+ <translation>Параметры &amp;страницы...</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Print Preview...</source>
+ <translation>Предпросмотр печати...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Print...</source>
+ <translation>&amp;Печать...</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>New &amp;Tab</source>
+ <translation>Новая &amp;вкладка</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Close Tab</source>
+ <translation>&amp;Закрыть вкладку</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>&amp;Quit</source>
+ <translation>В&amp;ыход</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>CTRL+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Edit</source>
+ <translation>&amp;Правка</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>&amp;Copy selected Text</source>
+ <translation>&amp;Копировать выделенный текст</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>&amp;Find in Text...</source>
+ <translation>П&amp;оиск в тексте...</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Find &amp;Next</source>
+ <translation>Найти &amp;следующее</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Find &amp;Previous</source>
+ <translation>Найти &amp;предыдущее</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Preferences...</source>
+ <translation>Настройки...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;View</source>
+ <translation>&amp;Вид</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Zoom &amp;in</source>
+ <translation>У&amp;величить</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Zoom &amp;out</source>
+ <translation>У&amp;меньшить</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Normal &amp;Size</source>
+ <translation>Нормальный р&amp;азмер</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>ALT+C</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>ALT+I</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>ALT+O</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Search</source>
+ <translation>Поиск</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>ALT+S</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>&amp;Go</source>
+ <translation>&amp;Перейти</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>&amp;Home</source>
+ <translation>&amp;Домой</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>ALT+Home</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Back</source>
+ <translation>&amp;Назад</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&amp;Forward</source>
+ <translation>&amp;Вперёд</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Sync with Table of Contents</source>
+ <translation>Синхронизировать с содержанием</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Next Page</source>
+ <translation>Следующая страница</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+Alt+Right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Previous Page</source>
+ <translation>Предыдущая страница</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+Alt+Left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Bookmarks</source>
+ <translation>&amp;Закладки</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Add Bookmark...</source>
+ <translation>Добавить закладку...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>CTRL+D</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>&amp;Help</source>
+ <translation>&amp;Справка</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>About...</source>
+ <translation>О программе...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Navigation Toolbar</source>
+ <translation>Панель навигации</translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <source>&amp;Window</source>
+ <translation>&amp;Окно</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Zoom</source>
+ <translation>Масштаб</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Minimize</source>
+ <translation>Свернуть</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+50"/>
+ <source>Toolbars</source>
+ <translation>Панели инструментов</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Filter Toolbar</source>
+ <translation>Панель фильтров</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Filtered by:</source>
+ <translation>Отфильтровано по:</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Address Toolbar</source>
+ <translation>Панель адреса</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Address:</source>
+ <translation>Адрес:</translation>
+ </message>
+ <message>
+ <location line="+114"/>
+ <source>Could not find the associated content item.</source>
+ <translation type="unfinished">Не удалось найти элемент, связанный с содержанием.</translation>
+ </message>
+ <message>
+ <location line="+81"/>
+ <source>About %1</source>
+ <translation type="unfinished">О %1</translation>
+ </message>
+ <message>
+ <location line="+114"/>
+ <source>Updating search index</source>
+ <translation>Обновление поискового индекса</translation>
+ </message>
+</context>
+<context>
+ <name>PreferencesDialog</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+256"/>
+ <location line="+43"/>
+ <source>Add Documentation</source>
+ <translation>Добавить документацию</translation>
+ </message>
+ <message>
+ <location line="-43"/>
+ <source>Qt Compressed Help Files (*.qch)</source>
+ <translation>Сжатые файлы справки Qt (*.qch)</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>The namespace %1 is already registered!</source>
+ <translation>Пространство имён %1 уже зарегистрировано!</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>The specified file is not a valid Qt Help File!</source>
+ <translation>Указанный файл не является корректным файлом справки Qt!</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Remove Documentation</source>
+ <translation>Удалить документацию</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source>
+ <translation>Некоторые открытые в Qt Assistant документы ссылаются на документацию, которую вы пытаетесь удалить. Удаление данной документации приведёт к закрытию таких документов.</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Cancel</source>
+ <translation>Отмена</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>OK</source>
+ <translation>Удалить</translation>
+ </message>
+ <message>
+ <location line="+86"/>
+ <source>Use custom settings</source>
+ <translation>Использовать индивидуальные настройки</translation>
+ </message>
+</context>
+<context>
+ <name>PreferencesDialogClass</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui" line="+14"/>
+ <source>Preferences</source>
+ <translation>Настройки</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Fonts</source>
+ <translation>Шрифты</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Font settings:</source>
+ <translation>Настройки шрифта:</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Browser</source>
+ <translation>Обозреватель</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Application</source>
+ <translation>Приложение</translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>Filters</source>
+ <translation>Фильтры</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Filter:</source>
+ <translation>Фильтр:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Attributes:</source>
+ <translation>Атрибуты:</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Add</source>
+ <translation>Добавить</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <location line="+51"/>
+ <source>Remove</source>
+ <translation>Удалить</translation>
+ </message>
+ <message>
+ <location line="-43"/>
+ <source>Documentation</source>
+ <translation>Документация</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Registered Documentation:</source>
+ <translation>Зарегистрированная документация:</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Add...</source>
+ <translation>Добавить...</translation>
+ </message>
+ <message>
+ <location line="+32"/>
+ <source>Options</source>
+ <translation>Параметры</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Homepage</source>
+ <translation>Домашная страница</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Current Page</source>
+ <translation>Текущая страница</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Restore to default</source>
+ <translation type="unfinished">Восстановить по умолчанию</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+157"/>
+ <location line="+1"/>
+ <source>Bookmark</source>
+ <translation>Закладка</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/>
+ <source>The specified collection file does not exist!</source>
+ <translation type="unfinished">Указанный файл набора отсутствует!</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Missing collection file!</source>
+ <translation type="unfinished">Отсутствует файл набора!</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Invalid URL!</source>
+ <translation>Некорректный URL!</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Missing URL!</source>
+ <translation>Отсутствует URL!</translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <location line="+19"/>
+ <location line="+19"/>
+ <source>Unknown widget: %1</source>
+ <translation>Неизвестный виджет: %1</translation>
+ </message>
+ <message>
+ <location line="-34"/>
+ <location line="+19"/>
+ <location line="+19"/>
+ <source>Missing widget!</source>
+ <translation>Отсутствует виджет!</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <location line="+12"/>
+ <source>The specified Qt help file does not exist!</source>
+ <translation>Указанный файл справки Qt отсутствует!</translation>
+ </message>
+ <message>
+ <location line="-7"/>
+ <location line="+12"/>
+ <source>Missing help file!</source>
+ <translation>Отсутствует файл справки!</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Missing filter argument!</source>
+ <translation>Отсутствует параметр фильтра!</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Unknown option: %1</source>
+ <translation>Неизвестный параметр: %1</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <location line="+2"/>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/main.cpp" line="+203"/>
+ <source>Could not register documentation file
+%1
+
+Reason:
+%2</source>
+ <translation>Не удалось зарегистрировать файл документации
+%1
+
+Причина:
+%2</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Documentation successfully registered.</source>
+ <translation>Документация успешно зарегистрирована.</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Documentation successfully unregistered.</source>
+ <translation>Документация успешно дерегистрирована.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Could not unregister documentation file
+%1
+
+Reason:
+%2</source>
+ <translation>Не удалось дерегистрировать файл документации
+%1
+
+Причина:
+%2</translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>Cannot load sqlite database driver!</source>
+ <translation>Не удалось загрузить драйвер базы данных sqlite!</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>The specified collection file could not be read!</source>
+ <translation type="unfinished">Не удалось прочитать указанный файл набора!</translation>
+ </message>
+</context>
+<context>
+ <name>RemoteControl</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+157"/>
+ <source>Debugging Remote Control</source>
+ <translation>Отладочное удалённое управление</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Received Command: %1 %2</source>
+ <translation>Получена команда: %1 %2</translation>
+ </message>
+</context>
+<context>
+ <name>SearchWidget</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+195"/>
+ <source>&amp;Copy</source>
+ <translation>&amp;Копировать</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Copy &amp;Link Location</source>
+ <translation>Копировать &amp;адрес ссылки</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Open Link in New Tab</source>
+ <translation>Открыть ссылку в новой вкладке</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Select All</source>
+ <translation>Выделить всё</translation>
+ </message>
+</context>
+<context>
+ <name>TopicChooser</name>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+54"/>
+ <source>Choose a topic for &lt;b&gt;%1&lt;/b&gt;:</source>
+ <translation>Выберите статью для &lt;b&gt;%1&lt;/b&gt;:</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/tools/assistant/topicchooser.ui" line="+16"/>
+ <source>Choose Topic</source>
+ <translation>Выбор статьи</translation>
+ </message>
+ <message>
+ <location line="+21"/>
+ <source>&amp;Topics</source>
+ <translation>&amp;Статьи</translation>
+ </message>
+ <message>
+ <location line="+51"/>
+ <source>&amp;Display</source>
+ <translation>&amp;Показать</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>&amp;Close</source>
+ <translation>&amp;Закрыть</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/linguist_ru.ts b/translations/linguist_ru.ts
new file mode 100644
index 0000000..058d86a
--- /dev/null
+++ b/translations/linguist_ru.ts
@@ -0,0 +1,2002 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru">
+<context>
+ <name></name>
+ <message>
+ <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="+59"/>
+ <source>(New Entry)</source>
+ <translation>(Новая запись)</translation>
+ </message>
+</context>
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1357"/>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+</context>
+<context>
+ <name>BatchTranslationDialog</name>
+ <message>
+ <location filename="../tools/linguist/linguist/batchtranslation.ui" line="+54"/>
+ <source>Qt Linguist - Batch Translation</source>
+ <translation>Qt Linguist - Пакетный перевод</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>Options</source>
+ <translation>Параметры</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>Set translated entries to finished</source>
+ <translation>Помечать переведенные записи как завершённые</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Retranslate entries with existing translation</source>
+ <translation>Переводить записи, уже имеющие перевод</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Note that the modified entries will be reset to unfinished if &apos;Set translated entries to finished&apos; above is unchecked.</source>
+ <translation>Имейте в виду, что изменённые записи будут отмечены как незавершённые, если не включен параметр &quot;Помечать переведенные записи как завершённые&quot;.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Translate also finished entries</source>
+ <translation>Также переводить записи с завершёнными переводами</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>Phrase book preference</source>
+ <translation>Предпочитаемые разговорники</translation>
+ </message>
+ <message>
+ <location line="+35"/>
+ <source>Move up</source>
+ <translation>Поднять</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Move down</source>
+ <translation>Опустить</translation>
+ </message>
+ <message>
+ <location line="+24"/>
+ <source>The batch translator will search through the selected phrase books in the order given above.</source>
+ <translation>Пакетный переводчик будет искать в выбранных разговорниках в указанном выше порядке.</translation>
+ </message>
+ <message>
+ <location line="+34"/>
+ <source>&amp;Run</source>
+ <translation>&amp;Выполнить</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Cancel</source>
+ <translation>Отмена</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/linguist/batchtranslationdialog.cpp" line="+79"/>
+ <source>Batch Translation of &apos;%1&apos; - Qt Linguist</source>
+ <translation>Пакетный перевод &apos;%1&apos; - Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>Searching, please wait...</source>
+ <translation>Идёт поиск, ждите...</translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Отмена</translation>
+ </message>
+ <message>
+ <location line="+42"/>
+ <source>Linguist batch translator</source>
+ <translation>Пакетный переводчик Qt Linguist</translation>
+ </message>
+ <message numerus="yes">
+ <location line="+1"/>
+ <source>Batch translated %n entries</source>
+ <translation>
+ <numerusform>Автоматически переведена %n запись</numerusform>
+ <numerusform>Автоматически переведены %n записи</numerusform>
+ <numerusform>Автоматически переведено %n записей</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>DataModel</name>
+ <message>
+ <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+214"/>
+ <source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
+ <translation>&lt;qt&gt;В &apos;%1&apos; обнаружены повторяющиеся сообщения:</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>&lt;p&gt;[more duplicates omitted]</source>
+ <translation>&lt;p&gt;[остальные повторы не указаны]</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&lt;p&gt;* Context: %1&lt;br&gt;* Source: %2</source>
+ <translation>&lt;p&gt;* Контекст: %1&lt;br&gt;* Источник: %2</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&lt;br&gt;* Comment: %3</source>
+ <translation>&lt;br&gt;* Комментарий: %3</translation>
+ </message>
+ <message>
+ <location line="+70"/>
+ <source>Linguist does not know the plural rules for &apos;%1&apos;.
+Will assume a single universal form.</source>
+ <translation>Qt Linguist не знает правила множественных форм для &apos;%1&apos;.
+Будет использована универсальная единичная форма.</translation>
+ </message>
+ <message>
+ <location line="+56"/>
+ <source>Cannot create &apos;%2&apos;: %1</source>
+ <translation>Не удалось создать &apos;%2&apos;: %1</translation>
+ </message>
+ <message>
+ <location line="+56"/>
+ <source>Universal Form</source>
+ <translation>Универсальная форма</translation>
+ </message>
+</context>
+<context>
+ <name>ErrorsView</name>
+ <message>
+ <location filename="../tools/linguist/linguist/errorsview.cpp" line="+76"/>
+ <source>Accelerator possibly superfluous in translation.</source>
+ <translation>Возможно, лишний акселератор в переводе.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Accelerator possibly missing in translation.</source>
+ <translation>Возможно, пропущен акселератор в переводе.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Translation does not end with the same punctuation as the source text.</source>
+ <translation>Перевод не заканчивается тем же знаком препинания, что и исходный текст.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>A phrase book suggestion for &apos;%1&apos; was ignored.</source>
+ <translation>Предложение разговорника для &apos;%1&apos; пропущено.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Translation does not refer to the same place markers as in the source text.</source>
+ <translation>Перевод не содержит тех же маркеров форматирования, что и исходный текст.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Translation does not contain the necessary %n place marker.</source>
+ <translation>Перевод не содержит необходимого маркера форматирования %n.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Unknown error</source>
+ <translation>Неизвестная ошибка</translation>
+ </message>
+</context>
+<context>
+ <name>FindDialog</name>
+ <message>
+ <location filename="../tools/linguist/linguist/finddialog.cpp" line="+42"/>
+ <source></source>
+ <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/linguist/finddialog.ui" line="+60"/>
+ <source>Find</source>
+ <translation>Поиск</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>This window allows you to search for some text in the translation source file.</source>
+ <translation>Данное окно позволяет искать текст в файле перевода.</translation>
+ </message>
+ <message>
+ <location line="+28"/>
+ <source>&amp;Find what:</source>
+ <translation>&amp;Искать:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Type in the text to search for.</source>
+ <translation>Введите искомый текст.</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Options</source>
+ <translation>Параметры</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Source texts are searched when checked.</source>
+ <translation>Если отмечено, поиск будет вестись в исходных текстах.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Source texts</source>
+ <translation>&amp;Исходные тексты</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Translations are searched when checked.</source>
+ <translation>Если отмечено, поиск будет вестись в переведённых текстах.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Translations</source>
+ <translation>&amp;Переводы</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
+ <translation>Если отмечено, строки &quot;ПрИмЕр&quot; и &quot;пример&quot; будет считаться разными.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Match case</source>
+ <translation>С учётом &amp;регистра</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Comments and contexts are searched when checked.</source>
+ <translation>Если отмечено, поиск будет вестись по контекстам и комментариям.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Comments</source>
+ <translation>&amp;Комментарии</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Ignore &amp;accelerators</source>
+ <translation>Пропускать &amp;акселераторы</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Click here to find the next occurrence of the text you typed in.</source>
+ <translation>Найти следующее совпадение для введённого текста.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Find Next</source>
+ <translation>Найти далее</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>Click here to close this window.</source>
+ <translation>Закрыть окно.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Cancel</source>
+ <translation>Отмена</translation>
+ </message>
+</context>
+<context>
+ <name>LRelease</name>
+ <message numerus="yes">
+ <location filename="../tools/linguist/shared/qm.cpp" line="+715"/>
+ <source> Generated %n translation(s) (%1 finished and %2 unfinished)
+</source>
+ <translation>
+ <numerusform> Создан %n перевод (%1 завершённых и %2 незавершённых)
+</numerusform>
+ <numerusform> Создано %n перевода (%1 завершённых и %2 незавершённых)
+</numerusform>
+ <numerusform> Создано %n переводов (%1 завершённых и %2 незавершённых)
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location line="+4"/>
+ <source> Ignored %n untranslated source text(s)
+</source>
+ <translation>
+ <numerusform> Пропущен %n непереведённый исходный текст
+</numerusform>
+ <numerusform> Пропущено %n непереведённых исходных текста
+</numerusform>
+ <numerusform> Пропущено %n непереведённых исходных текстов
+</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1315"/>
+ <source></source>
+ <comment>This is the application&apos;s main window.</comment>
+ <translatorcomment>Основное окно программы.</translatorcomment>
+ <translation></translation>
+ </message>
+ <message>
+ <location line="+165"/>
+ <source>Source text</source>
+ <translation>Исходный текст</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <location line="+25"/>
+ <source>Index</source>
+ <translation>Индекс</translation>
+ </message>
+ <message>
+ <location line="-2"/>
+ <location line="+61"/>
+ <source>Context</source>
+ <translation>Контекст</translation>
+ </message>
+ <message>
+ <location line="-60"/>
+ <source>Items</source>
+ <translation>Записи</translation>
+ </message>
+ <message>
+ <location line="+77"/>
+ <source>This panel lists the source contexts.</source>
+ <translation>В данной панели перечислены исходные контексты.</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Strings</source>
+ <translation>Строки</translation>
+ </message>
+ <message>
+ <location line="+39"/>
+ <source>Phrases and guesses</source>
+ <translation>Фразы и похожие переводы</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Sources and Forms</source>
+ <translation>Исходники и формы</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Warnings</source>
+ <translation>Предупреждения</translation>
+ </message>
+ <message>
+ <location line="+59"/>
+ <source> MOD </source>
+ <comment>status bar: file(s) modified</comment>
+ <translation> ИЗМ </translation>
+ </message>
+ <message>
+ <location line="+125"/>
+ <source>Loading...</source>
+ <translation>Загрузка...</translation>
+ </message>
+ <message>
+ <location line="+32"/>
+ <location line="+22"/>
+ <source>Loading File - Qt Linguist</source>
+ <translation>Загрузка файла - Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="-21"/>
+ <source>The file &apos;%1&apos; does not seem to be related to the currently open file(s) &apos;%2&apos;.
+
+Close the open file(s) first?</source>
+ <translation>Файл &apos;%1&apos;, похоже, не связан с открытым файлом(ами) &apos;%2&apos;.
+
+Закрыть открытые файлы?</translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <source>The file &apos;%1&apos; does not seem to be related to the file &apos;%2&apos; which is being loaded as well.
+
+Skip loading the first named file?</source>
+ <translation>Файл &apos;%1&apos;, похоже, не связан с загруженным файлом &apos;%2&apos;.
+
+Пропустить загрузку файла?</translation>
+ </message>
+ <message numerus="yes">
+ <location line="+61"/>
+ <source>%n translation unit(s) loaded.</source>
+ <translation>
+ <numerusform>Загружена %n запись.</numerusform>
+ <numerusform>Загружено %n записи.</numerusform>
+ <numerusform>Загружено %n записей.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location line="+93"/>
+ <source>Related files (%1);;</source>
+ <translation>Связанные файлы (%1);;</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Open Translation Files</source>
+ <translation>Открыть файлы перевода</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <location line="+31"/>
+ <source>File saved.</source>
+ <translation>Файл сохранён.</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <location line="+1164"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+246"/>
+ <source>Release</source>
+ <translation>Компиляция</translation>
+ </message>
+ <message>
+ <location line="-1163"/>
+ <source>Qt message files for released applications (*.qm)
+All files (*)</source>
+ <translation>Скомпилированные файлы перевода для приложений Qt (*.qm)
+Все файлы (*)</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <location line="+12"/>
+ <source>File created.</source>
+ <translation>Файл создан.</translation>
+ </message>
+ <message>
+ <location line="+27"/>
+ <location line="+355"/>
+ <source>Printing...</source>
+ <translation>Печать...</translation>
+ </message>
+ <message>
+ <location line="-347"/>
+ <source>Context: %1</source>
+ <translation>Контекст: %1</translation>
+ </message>
+ <message>
+ <location line="+32"/>
+ <source>finished</source>
+ <translation>завершён</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>unresolved</source>
+ <translation>неразрешённый</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>obsolete</source>
+ <translation>устаревший</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <location line="+307"/>
+ <source>Printing... (page %1)</source>
+ <translation>Печать... (страница %1)</translation>
+ </message>
+ <message>
+ <location line="-300"/>
+ <location line="+307"/>
+ <source>Printing completed</source>
+ <translation>Печать завершена</translation>
+ </message>
+ <message>
+ <location line="-305"/>
+ <location line="+307"/>
+ <source>Printing aborted</source>
+ <translation>Печать прервана</translation>
+ </message>
+ <message>
+ <location line="-232"/>
+ <source>Search wrapped.</source>
+ <translation>Поиск с начала.</translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <location line="+278"/>
+ <location line="+40"/>
+ <location line="+24"/>
+ <location line="+22"/>
+ <location line="+516"/>
+ <location line="+1"/>
+ <location line="+274"/>
+ <location line="+40"/>
+ <location line="+10"/>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="-1204"/>
+ <location line="+102"/>
+ <source>Cannot find the string &apos;%1&apos;.</source>
+ <translation>Не удалось найти строку &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location line="-82"/>
+ <source>Search And Translate in &apos;%1&apos; - Qt Linguist</source>
+ <translation>Поиск и перевод &apos;%1&apos; - Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="+34"/>
+ <location line="+23"/>
+ <location line="+24"/>
+ <source>Translate - Qt Linguist</source>
+ <translation>Перевод - Qt Linguist</translation>
+ </message>
+ <message numerus="yes">
+ <location line="-46"/>
+ <source>Translated %n entry(s)</source>
+ <translation>
+ <numerusform>Переведена %n запись</numerusform>
+ <numerusform>Переведено %n записи</numerusform>
+ <numerusform>Переведено %n записей</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>No more occurrences of &apos;%1&apos;. Start over?</source>
+ <translation>Нет больше совпадений с &apos;%1&apos;. Начать заново?</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Create New Phrase Book</source>
+ <translation>Создать разговорник</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Qt phrase books (*.qph)
+All files (*)</source>
+ <translation>Разговорники Qt (*.qph)
+Все файлы (*)</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Phrase book created.</source>
+ <translation>Разговорник создан.</translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <source>Open Phrase Book</source>
+ <translation>Открыть разговорник</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Qt phrase books (*.qph);;All files (*)</source>
+ <translation>Разговорники Qt (*.qph);;Все файлы (*)</translation>
+ </message>
+ <message numerus="yes">
+ <location line="+7"/>
+ <source>%n phrase(s) loaded.</source>
+ <translation>
+ <numerusform>Загружена %n фраза.</numerusform>
+ <numerusform>Загружено %n фразы.</numerusform>
+ <numerusform>Загружено %n фраз.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location line="+93"/>
+ <location line="+3"/>
+ <location line="+7"/>
+ <source>Add to phrase book</source>
+ <translation>Добавить в разговорник</translation>
+ </message>
+ <message>
+ <location line="-9"/>
+ <source>No appropriate phrasebook found.</source>
+ <translation>Подходящий разговорник не найден.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Adding entry to phrasebook %1</source>
+ <translation>Добавление записи в разговорник %1</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Select phrase book to add to</source>
+ <translation>Выберите разговорник, в который желаете добавить фразу</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>Unable to launch Qt Assistant (%1)</source>
+ <translation>Не удалось запустить Qt Assistant (%1)</translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <source>Version %1</source>
+ <translation>Версия %1</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist is a tool for adding translations to Qt applications.&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.&lt;/p&gt;</source>
+ <translation type="unfinished">&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist - инструмент для добавления переводов в приложения на основе Qt.&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Корпорация Nokia и/или её дочерние подразделения.&lt;/p&gt;&lt;p&gt;Программа предоставляется &quot;как есть&quot; без гарантий любого рода, включая гарантии дизайна, коммерческой ценности и пригодности для определённой цели.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location line="+41"/>
+ <source>Do you want to save the modified files?</source>
+ <translation>Желаете сохранить изменённые файлы?</translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <source>Do you want to save &apos;%1&apos;?</source>
+ <translation>Желаете сохранить &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location line="+43"/>
+ <source>Qt Linguist[*]</source>
+ <translation>Qt Linguist[*]</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>%1[*] - Qt Linguist</source>
+ <translation>%1[*] - Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="+267"/>
+ <location line="+12"/>
+ <source>No untranslated translation units left.</source>
+ <translation>Непереведённых записей не осталось.</translation>
+ </message>
+ <message>
+ <location line="+176"/>
+ <source>&amp;Window</source>
+ <translation>&amp;Окно</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Minimize</source>
+ <translation>Свернуть</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Display the manual for %1.</source>
+ <translation>Показать руководство для %1.</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Display information about %1.</source>
+ <translation>Показать информацию о %1.</translation>
+ </message>
+ <message>
+ <location line="+70"/>
+ <source>&amp;Save &apos;%1&apos;</source>
+ <translation>&amp;Сохранить&apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Save &apos;%1&apos; &amp;As...</source>
+ <translation>Сохранить&apos;%1&apos; &amp;как...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Release &apos;%1&apos;</source>
+ <translation>Скомпилировать &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Release &apos;%1&apos; As...</source>
+ <translation>Скомпилировать &apos;%1&apos; как...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>&amp;Close &apos;%1&apos;</source>
+ <translation>&amp;Закрыть &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <location line="+15"/>
+ <source>&amp;Save</source>
+ <translation>&amp;Сохранить</translation>
+ </message>
+ <message>
+ <location line="-14"/>
+ <location line="+11"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="-11"/>
+ <source>Save &amp;As...</source>
+ <translation>Сохранить &amp;как...</translation>
+ </message>
+ <message>
+ <location line="-9"/>
+ <location line="+10"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+508"/>
+ <location line="+3"/>
+ <source>Release As...</source>
+ <translation>Скомпилировать как...</translation>
+ </message>
+ <message>
+ <location line="-9"/>
+ <location line="+13"/>
+ <source>&amp;Close</source>
+ <translation>&amp;Закрыть</translation>
+ </message>
+ <message>
+ <location line="-10"/>
+ <source>Save All</source>
+ <translation>Сохранить все</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+118"/>
+ <source>&amp;Release All</source>
+ <translation>С&amp;компилировать все</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Close All</source>
+ <translation>Закрыть все</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>&amp;Release</source>
+ <translation>С&amp;компилировать</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>Translation File &amp;Settings for &apos;%1&apos;...</source>
+ <translation>&amp;Параметры файла перевода для &apos;%1&apos;...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>&amp;Batch Translation of &apos;%1&apos;...</source>
+ <translation>Пак&amp;етный перевод &apos;%1&apos;...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Search And &amp;Translate in &apos;%1&apos;...</source>
+ <translation>&amp;Найти и перевести в &apos;%1&apos;...</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="-32"/>
+ <source>Translation File &amp;Settings...</source>
+ <translation>&amp;Параметры файла перевода...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="-100"/>
+ <source>&amp;Batch Translation...</source>
+ <translation>Пак&amp;етный перевод...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Search And &amp;Translate...</source>
+ <translation>&amp;Найти и перевести...</translation>
+ </message>
+ <message>
+ <location line="+51"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+28"/>
+ <source>File</source>
+ <translation>Файл</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+11"/>
+ <source>Edit</source>
+ <translation>Правка</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+11"/>
+ <source>Translation</source>
+ <translation>Перевод</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+11"/>
+ <source>Validation</source>
+ <translation>Проверка</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="+11"/>
+ <source>Help</source>
+ <translation>Справка</translation>
+ </message>
+ <message>
+ <location line="+84"/>
+ <source>Cannot read from phrase book &apos;%1&apos;.</source>
+ <translation>Не удалось прочитать из разговорника &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Close this phrase book.</source>
+ <translation>Закрыть разговорник.</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Enables you to add, modify, or delete entries in this phrase book.</source>
+ <translation>Позволяет добавлять, изменять и удалять записи в разговорнике.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Print the entries in this phrase book.</source>
+ <translation>Печать записей фраз разговорника.</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>Cannot create phrase book &apos;%1&apos;.</source>
+ <translation>Не удалось создать разговорник &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Do you want to save phrase book &apos;%1&apos;?</source>
+ <translation>Желаете сохранить разговорник &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location line="+314"/>
+ <source>All</source>
+ <translation>Все</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/linguist/mainwindow.ui" line="-750"/>
+ <source>MainWindow</source>
+ <translation>Главное окно</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>&amp;Phrases</source>
+ <translation>Фра&amp;зы</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>&amp;Close Phrase Book</source>
+ <translation>&amp;Закрыть разговорник</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&amp;Edit Phrase Book</source>
+ <translation>&amp;Редактироваь разговорник</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&amp;Print Phrase Book</source>
+ <translation>&amp;Печатать разговорник</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>V&amp;alidation</source>
+ <translation>П&amp;роверка</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>&amp;View</source>
+ <translation>&amp;Вид</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Vie&amp;ws</source>
+ <translation>Вид&amp;ы</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&amp;Toolbars</source>
+ <translation>Пан&amp;ели инструментов</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>&amp;Help</source>
+ <translation>&amp;Справка</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>&amp;Translation</source>
+ <translation>П&amp;еревод</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;File</source>
+ <translation>&amp;Файл</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Recently Opened &amp;Files</source>
+ <translation>Недавно открытые &amp;файлы</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>&amp;Edit</source>
+ <translation>&amp;Правка</translation>
+ </message>
+ <message>
+ <location line="+27"/>
+ <source>&amp;Open...</source>
+ <translation>&amp;Открыть...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Open a Qt translation source file (TS file) for editing</source>
+ <translation>Открыть исходный файл переводов Qt (файл TS) для изменения</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+O</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>E&amp;xit</source>
+ <translation>В&amp;ыход</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Close this window and exit.</source>
+ <translation>Закрыть окно и выйти.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Save</source>
+ <translation>Сохранить</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Save changes made to this Qt translation source file</source>
+ <translation>Сохранить изменения в данном исходном файле перевода Qt</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Save As...</source>
+ <translation>Сохранить как...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Save changes made to this Qt translation source file into a new file.</source>
+ <translation>Сохранить изменения в данном исходном файле перевода Qt в новый файл.</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Create a Qt message file suitable for released applications from the current message file.</source>
+ <translation>Скомпилировать файл перевода Qt из текущего файла.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&amp;Print...</source>
+ <translation>&amp;Печать...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Print a list of all the translation units in the current translation source file.</source>
+ <translation>Печать списка всех записей перевода из текущего файла.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+P</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>&amp;Undo</source>
+ <translation>&amp;Отменить</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Undo the last editing operation performed on the current translation.</source>
+ <translation>Отменить последнее изменение текущего перевода.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+Z</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Redo</source>
+ <translation>&amp;Повторить</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Redo an undone editing operation performed on the translation.</source>
+ <translation>Повторить отменённую правку перевода.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+Y</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Cu&amp;t</source>
+ <translation>Выр&amp;езать</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Copy the selected translation text to the clipboard and deletes it.</source>
+ <translation>Скопировать отмеченный текст в буфер обмена и удалить его из оригинала.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Copy</source>
+ <translation>&amp;Копировать</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Copy the selected translation text to the clipboard.</source>
+ <translation>Скопировать отмеченный текст в буфер обмена.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+C</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Paste</source>
+ <translation>&amp;Вставить</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Paste the clipboard text into the translation.</source>
+ <translation>Вставить текст из буфера обмена в перевод.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+V</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Select &amp;All</source>
+ <translation>В&amp;ыделить всё</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Select the whole translation text.</source>
+ <translation>Выделить весь текст перевода.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+A</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Find...</source>
+ <translation>&amp;Найти...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Search for some text in the translation source file.</source>
+ <translation>Найти текст в исходном файле перевода.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+F</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Find &amp;Next</source>
+ <translation>Найти д&amp;алее</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Continue the search where it was left.</source>
+ <translation>Продолжить поиск с места, где он был остановлен.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>F3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>&amp;Prev Unfinished</source>
+ <translation>&amp;Пред. незавершённый</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Previous unfinished item.</source>
+ <translation>Предыдущий незавершённый перевод.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Move to the previous unfinished item.</source>
+ <translation>Перейти к предыдущему незавершённому переводу.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+K</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>&amp;Next Unfinished</source>
+ <translation>&amp;След. незавершённый</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Next unfinished item.</source>
+ <translation>Следующий незавершённый перевод.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Move to the next unfinished item.</source>
+ <translation>Перейти к следующему незавершённому переводу.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+J</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>P&amp;rev</source>
+ <translation>Пр&amp;едыдущий</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Move to previous item.</source>
+ <translation>Предыдущий перевод.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Move to the previous item.</source>
+ <translation>Перейти к предыдущему переводу.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+Shift+K</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Ne&amp;xt</source>
+ <translation>С&amp;ледующий</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Next item.</source>
+ <translation>Следующий перевод.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Move to the next item.</source>
+ <translation>Перейти к следующему переводу.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+Shift+J</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Done and Next</source>
+ <translation>&amp;Готово и далее</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Mark item as done and move to the next unfinished item.</source>
+ <translation>Пометить перевод как завершённый и перейти к следующему незавершённому.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Mark this item as done and move to the next unfinished item.</source>
+ <translation>Пометить перевод как завершённый и перейти к следующему незавершённому.</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <location line="+3"/>
+ <source>Copy from source text</source>
+ <translation>Скопировать из исходного текста</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <location line="+3"/>
+ <source>Copies the source text into the translation field.</source>
+ <translation>Скопировать исходный текст в поле перевода.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Accelerators</source>
+ <translation>&amp;Акселераторы</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle the validity check of accelerators.</source>
+ <translation>Переключение проверки акселераторов.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source>
+ <translation>Переключение проверки акселераторов, т.е. совпадает ли количество амперсандов в исходном и переведённом текстах. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Ending Punctuation</source>
+ <translation>&amp;Знаки препинания</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle the validity check of ending punctuation.</source>
+ <translation>Переключение проверки знаков препинания в конце текста.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source>
+ <translation>Переключение проверки знаков препинания в конце текста. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Phrase matches</source>
+ <translation>Совпадение &amp;фраз</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle checking that phrase suggestions are used.</source>
+ <translation>Переключение проверки использования предложений для фраз. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source>
+ <translation>Переключение проверки использования предложений для фраз. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Place &amp;Marker Matches</source>
+ <translation>Совпадение &amp;маркеров</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle the validity check of place markers.</source>
+ <translation>Переключение проверки маркеров форматирования.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source>
+ <translation>Переключение проверки маркеров форматирования, т.е. все ли маркеры (%1, %2, ...) исходного текста присутствуют в переведённом. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>&amp;New Phrase Book...</source>
+ <translation>&amp;Новый разговорник...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Create a new phrase book.</source>
+ <translation>Создать разговорник.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+N</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>&amp;Open Phrase Book...</source>
+ <translation>&amp;Открыть разговорник...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Open a phrase book to assist translation.</source>
+ <translation>Открыть разговорник для помощи в переводе.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+H</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>&amp;Reset Sorting</source>
+ <translation>&amp;Сброс сортировки</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Sort the items back in the same order as in the message file.</source>
+ <translation>Упорядочить элементы в той последовательности, в которой они находятся в файле.</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>&amp;Display guesses</source>
+ <translation>&amp;Предлагать похожие</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Set whether or not to display translation guesses.</source>
+ <translation>Определяет необходимо или нет отображать похожие переводы.</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>&amp;Statistics</source>
+ <translation>&amp;Статистика</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Display translation statistics.</source>
+ <translation>Показать статистику перевода.</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>&amp;Manual</source>
+ <translation>&amp;Руководство</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>F1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>About Qt Linguist</source>
+ <translation>О Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>About Qt</source>
+ <translation>О Qt</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Display information about the Qt toolkit by Trolltech.</source>
+ <translation>Показать информацию об инструментарии Qt от Nokia.</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>&amp;What&apos;s This?</source>
+ <translation>&amp;Что это?</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <location line="+3"/>
+ <source>What&apos;s This?</source>
+ <translation>Что это?</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Enter What&apos;s This? mode.</source>
+ <translation>Переход в режим &quot;Что это?&quot;.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Shift+F1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Search And Translate...</source>
+ <translation>&amp;Найти и перевести...</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Replace the translation on all entries that matches the search source text.</source>
+ <translation>Заменить перевод всех записей, которые совпадают с искомым исходным текстом.</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Batch translate all entries using the information in the phrase books.</source>
+ <translation>Перевести все записи в пакетном режиме, используя информацию из разговорника.</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the .ts file.</source>
+ <translation>Создание готового файла перевода Qt из текущего файла. Имя файла будет автоматически определено из имени .ts файла.</translation>
+ </message>
+ <message>
+ <location line="+63"/>
+ <source>Open/Refresh Form &amp;Preview</source>
+ <translation>Открыть/обновить предпрос&amp;мотр формы</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <location line="+3"/>
+ <source>Form Preview Tool</source>
+ <translation>Инструмент предпросмотра форм</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>F5</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <source>&amp;Add to Phrase Book</source>
+ <translation>&amp;Добавить в разговорник</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+T</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Open Read-O&amp;nly...</source>
+ <translation>Открыть только для &amp;чтения...</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&amp;Save All</source>
+ <translation>&amp;Сохранить все</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Close</source>
+ <translation>Закрыть</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&amp;Close All</source>
+ <translation>&amp;Закрыть все</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Ctrl+W</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MessageEditor</name>
+ <message>
+ <location filename="../tools/linguist/linguist/messageeditor.cpp" line="+42"/>
+ <source></source>
+ <comment>This is the right panel of the main window.</comment>
+ <translatorcomment>Правая панель основного окна</translatorcomment>
+ <translation></translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>German</source>
+ <translation>Немецкий</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Japanese</source>
+ <translation>Японский</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>French</source>
+ <translation>Французский</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Polish</source>
+ <translation>Польский</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Chinese</source>
+ <translation>Китайский</translation>
+ </message>
+ <message>
+ <location line="+50"/>
+ <source>This whole panel allows you to view and edit the translation of some source text.</source>
+ <translation>Данная панель позволяет просматривать и редактировать перевод исходного текста.</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>Source text</source>
+ <translation>Исходный текст</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>This area shows the source text.</source>
+ <translation>В данной области отображается исходный текст.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Source text (Plural)</source>
+ <translation>Исходный текст (множественная форма)</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>This area shows the plural form of the source text.</source>
+ <translation>В данной области отображается исходный текст во множественной форме.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Developer comments</source>
+ <translation>Комментарии разработчика</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>This area shows a comment that may guide you, and the context in which the text occurs.</source>
+ <translation>В данной области отображается комментарий, который поможет определить в каком контексте встречается переводимый текст.</translation>
+ </message>
+ <message>
+ <location line="+59"/>
+ <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source>
+ <translation>Здесь вы можете оставить комментарий для собственного использования. Комментарии не влияют на перевод приложений.</translation>
+ </message>
+ <message>
+ <location line="+205"/>
+ <source>%1 translation (%2)</source>
+ <translation>%1 перевод (%2)</translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>This is where you can enter or modify the translation of the above source text.</source>
+ <translation>Здесь вы можете ввести или изменить перевод текста, представленного выше.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>%1 translation</source>
+ <translation>%1 перевод</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>%1 translator comments</source>
+ <translation>Комментарий переводчика на %1</translation>
+ </message>
+ <message>
+ <location line="+140"/>
+ <source>&apos;%1&apos;
+Line: %2</source>
+ <translation>&apos;%1&apos;
+Строка: %2</translation>
+ </message>
+</context>
+<context>
+ <name>MessageModel</name>
+ <message>
+ <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+832"/>
+ <source>Completion status for %1</source>
+ <translation>Состояние завершённости для %1</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>&lt;file header&gt;</source>
+ <translation>&lt;заголовок файла&gt;</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>&lt;context comment&gt;</source>
+ <translation>&lt;контекстный комментарий&gt;</translation>
+ </message>
+ <message>
+ <location line="+71"/>
+ <source>&lt;unnamed context&gt;</source>
+ <translation>&lt;безымянный контекст&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>MsgEdit</name>
+ <message>
+ <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-544"/>
+ <source></source>
+ <comment>This is the right panel of the main window.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PhraseBookBox</name>
+ <message>
+ <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="-17"/>
+ <source></source>
+ <comment>Go to Phrase &gt; Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment>
+ <translation></translation>
+ </message>
+ <message>
+ <location line="+25"/>
+ <source>%1[*] - Qt Linguist</source>
+ <translation>%1[*] - Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="+90"/>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Cannot save phrase book &apos;%1&apos;.</source>
+ <translation>Не удалось сохранить разговорник &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/linguist/phrasebookbox.ui" line="+54"/>
+ <source>Edit Phrase Book</source>
+ <translation>Правка разговорника</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>This window allows you to add, modify, or delete entries in a phrase book.</source>
+ <translation>Данное окно позволяет добавлять, изменять и удалять записи в разговорнике.</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>&amp;Translation:</source>
+ <translation>&amp;Перевод:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>This is the phrase in the target language corresponding to the source phrase.</source>
+ <translation>Перевод, соответствующий исходной фразе.</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>S&amp;ource phrase:</source>
+ <translation>&amp;Исходная фраза:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>This is a definition for the source phrase.</source>
+ <translation>Определение исходной фразы.</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>This is the phrase in the source language.</source>
+ <translation>Фраза на исходном языке.</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>&amp;Definition:</source>
+ <translation>&amp;Определение:</translation>
+ </message>
+ <message>
+ <location line="+35"/>
+ <source>Click here to add the phrase to the phrase book.</source>
+ <translation>Добавить фразу в разговорник.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;New Entry</source>
+ <translation>Новая &amp;запись</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Click here to remove the entry from the phrase book.</source>
+ <translation>Удалить фразу из разговорника.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Remove Entry</source>
+ <translation>&amp;Удалить</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Settin&amp;gs...</source>
+ <translation>&amp;Настройки...</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Click here to save the changes made.</source>
+ <translation>Сохранить изменения.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Save</source>
+ <translation>&amp;Сохранить</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Click here to close this window.</source>
+ <translation>Закрыть окно.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Close</source>
+ <translation>Закрыть</translation>
+ </message>
+</context>
+<context>
+ <name>PhraseModel</name>
+ <message>
+ <location filename="../tools/linguist/linguist/phrasemodel.cpp" line="+117"/>
+ <source>Source phrase</source>
+ <translation>Исходная фраза</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Translation</source>
+ <translation>Перевод</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Definition</source>
+ <translation>Определение</translation>
+ </message>
+</context>
+<context>
+ <name>PhraseView</name>
+ <message>
+ <location filename="../tools/linguist/linguist/phraseview.cpp" line="+121"/>
+ <source>Insert</source>
+ <translation>Вставить</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Edit</source>
+ <translation>Правка</translation>
+ </message>
+ <message>
+ <location line="+113"/>
+ <source>Guess (%1)</source>
+ <translation>Похожая (%1)</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Guess</source>
+ <translation>Похожая</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1806"/>
+ <source>Translation files (%1);;</source>
+ <translation>Файлы перевода (%1);;</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>All files (*)</source>
+ <translation>Все файлы (*)</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/>
+ <location line="+18"/>
+ <location line="+67"/>
+ <location line="+39"/>
+ <location line="+17"/>
+ <location line="+15"/>
+ <location filename="../tools/linguist/linguist/phrase.cpp" line="+196"/>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/po.cpp" line="+651"/>
+ <source>GNU Gettext localization files</source>
+ <translation>Файлы локализации GNU Gettext</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/qm.cpp" line="+12"/>
+ <source>Compiled Qt translations</source>
+ <translation>Скомпилированные переводы Qt</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/qph.cpp" line="+192"/>
+ <source>Qt Linguist &apos;Phrase Book&apos;</source>
+ <translation>&apos;Разговорник&apos; Qt Linguist</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/ts.cpp" line="+752"/>
+ <source>Qt translation sources (format 1.1)</source>
+ <translation>Исходные файлы перевода Qt (формат 1.1)</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Qt translation sources (format 2.0)</source>
+ <translation>Исходные файлы перевода Qt (формат 2.0)</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Qt translation sources (latest format)</source>
+ <translation>Исходные файлы перевода Qt (последний формат)</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/xliff.cpp" line="+817"/>
+ <source>XLIFF localization files</source>
+ <translation>Файлы локализации XLIFF</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/cpp.cpp" line="+1089"/>
+ <source>C++ source files</source>
+ <translation>Исходные коды C++</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/java.cpp" line="+652"/>
+ <source>Java source files</source>
+ <translation>Исходные коды Java</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/qscript.cpp" line="+2399"/>
+ <source>Qt Script source files</source>
+ <translation>Исходные коды Qt Script</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/shared/ui.cpp" line="+213"/>
+ <source>Qt Designer form files</source>
+ <translation>Формы Qt Designer</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Qt Jambi form files</source>
+ <translation>Формы Qt Jambi</translation>
+ </message>
+</context>
+<context>
+ <name>SourceCodeView</name>
+ <message>
+ <location filename="../tools/linguist/linguist/sourcecodeview.cpp" line="+70"/>
+ <source>&lt;i&gt;Source code not available&lt;/i&gt;</source>
+ <translation>&lt;i&gt;Исходный код недоступен&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <location line="+33"/>
+ <source>&lt;i&gt;File %1 not available&lt;/i&gt;</source>
+ <translation>&lt;i&gt;Файл %1 недоступен&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&lt;i&gt;File %1 not readable&lt;/i&gt;</source>
+ <translation>&lt;i&gt;Невозможно прочитать файл %1&lt;/i&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>Statistics</name>
+ <message>
+ <location filename="../tools/linguist/linguist/statistics.ui" line="+54"/>
+ <source>Statistics</source>
+ <translation>Статистика</translation>
+ </message>
+ <message>
+ <location line="+24"/>
+ <source>Close</source>
+ <translation>Закрыть</translation>
+ </message>
+ <message>
+ <location line="+34"/>
+ <source>Translation</source>
+ <translation>Перевод</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Source</source>
+ <translation>Источник</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <location line="+7"/>
+ <location line="+14"/>
+ <location line="+7"/>
+ <location line="+21"/>
+ <location line="+7"/>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <location line="-42"/>
+ <source>Words:</source>
+ <translation>Слов:</translation>
+ </message>
+ <message>
+ <location line="+21"/>
+ <source>Characters:</source>
+ <translation>Символов:</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Characters (with spaces):</source>
+ <translation>Символов (с пробелами):</translation>
+ </message>
+</context>
+<context>
+ <name>TranslateDialog</name>
+ <message>
+ <location filename="../tools/linguist/linguist/translatedialog.ui" line="+60"/>
+ <source>This window allows you to search for some text in the translation source file.</source>
+ <translation>Данное окно позволяет искать текст в файле перевода.</translation>
+ </message>
+ <message>
+ <location line="+28"/>
+ <location line="+27"/>
+ <source>Type in the text to search for.</source>
+ <translation>Введите искомый текст.</translation>
+ </message>
+ <message>
+ <location line="-20"/>
+ <source>Find &amp;source text:</source>
+ <translation>&amp;Найти текст:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>&amp;Translate to:</source>
+ <translation>&amp;Перевести как:</translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>Search options</source>
+ <translation>Параметры поиска</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
+ <translation>Если отмечено, строки &quot;ПрИмЕр&quot; и &quot;пример&quot; будет считаться разными.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Match &amp;case</source>
+ <translation>С учётом &amp;регистра</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Mark new translation as &amp;finished</source>
+ <translation>Помечать перевод как завер&amp;шённый</translation>
+ </message>
+ <message>
+ <location line="+33"/>
+ <source>Click here to find the next occurrence of the text you typed in.</source>
+ <translation>Найти следующее совпадение для введённого текста.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Find Next</source>
+ <translation>Найти далее</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>Translate</source>
+ <translation>Перевести</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Translate All</source>
+ <translation>Перевести все</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Click here to close this window.</source>
+ <translation>Закрыть окно.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Cancel</source>
+ <translation>Отмена</translation>
+ </message>
+</context>
+<context>
+ <name>TranslationSettingsDialog</name>
+ <message>
+ <location filename="../tools/linguist/linguist/translationsettings.ui" line="+20"/>
+ <source>Source language</source>
+ <translation>Исходный язык</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <location line="+38"/>
+ <source>Language</source>
+ <translation>Язык</translation>
+ </message>
+ <message>
+ <location line="-25"/>
+ <location line="+38"/>
+ <source>Country/Region</source>
+ <translation>Страна/Регион</translation>
+ </message>
+ <message>
+ <location line="-28"/>
+ <source>Target language</source>
+ <translation>Язык перевода</translation>
+ </message>
+ <message>
+ <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+68"/>
+ <source>Any Country</source>
+ <translation>Любая страна</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <location line="+8"/>
+ <source>Settings for &apos;%1&apos; - Qt Linguist</source>
+ <translation>Настройки для &apos;%1&apos; - Qt Linguist</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qt_help_ru.ts b/translations/qt_help_ru.ts
new file mode 100644
index 0000000..16748fb
--- /dev/null
+++ b/translations/qt_help_ru.ts
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru">
+<context>
+ <name>QCLuceneResultWidget</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+110"/>
+ <source>Search Results</source>
+ <translation>Результаты поиска</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Note:</source>
+ <translation>Замечание:</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>The search results may not be complete since the documentation is still being indexed!</source>
+ <translation>Могли быть показаны не все результаты, так как документация ещё индексируется!</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Your search did not match any documents.</source>
+ <translation>По вашему запросу не найдено ни одного документа.</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>(The reason for this might be that the documentation is still being indexed.)</source>
+ <translation>(Причиной этого может быть то, что документация ещё индексируется.)</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpCollectionHandler</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/>
+ <source>The collection file is not set up yet!</source>
+ <translation type="unfinished">Файл набора ещё не установлен!</translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <source>Cannot load sqlite database driver!</source>
+ <translation>Не удалось загрузить драйвер базы данных sqlite!</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <location line="+48"/>
+ <source>Cannot open collection file: %1</source>
+ <translation>Не удалось открыть файл набора: %1</translation>
+ </message>
+ <message>
+ <location line="-39"/>
+ <source>Cannot create tables in file %1!</source>
+ <translation>Не удалось создать таблицы в файле %1!</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>The specified collection file already exists!</source>
+ <translation type="unfinished">Указанный файла набора уже существует!</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Cannot create directory: %1</source>
+ <translation>Не удалось создать каталог: %1</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Cannot copy collection file: %1</source>
+ <translation type="unfinished">Не удалось скопировать файл набора: %1</translation>
+ </message>
+ <message>
+ <location line="+119"/>
+ <source>Unknown filter!</source>
+ <translation>Неизвестный фильтр!</translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Cannot register filter %1!</source>
+ <translation>Не удалось зарегистрировать фильтр %1!</translation>
+ </message>
+ <message>
+ <location line="+44"/>
+ <source>Cannot open documentation file %1!</source>
+ <translation>Не удалось открыть файл документации %1!</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Invalid documentation file!</source>
+ <translation>Некорректный файл документации!</translation>
+ </message>
+ <message>
+ <location line="+34"/>
+ <source>The namespace %1 was not registered!</source>
+ <translation>Пространство имён %1 не зарегистрировано!</translation>
+ </message>
+ <message>
+ <location line="+120"/>
+ <source>Namespace %1 already exists!</source>
+ <translation>Пространство имён %1 уже существует!</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>Cannot register namespace!</source>
+ <translation>Не удалось зарегистрировать пространство имён!</translation>
+ </message>
+ <message>
+ <location line="+24"/>
+ <source>Cannot open database to optimize!</source>
+ <translation>Не удалось открыть базу данных для оптимизации!</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpDBReader</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpdbreader.cpp" line="+98"/>
+ <source>Cannot open database &apos;%1&apos; &apos;%2&apos;: %3</source>
+ <extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string</extracomment>
+ <translation>Не удалось открыть базу данных &apos;%1&apos; &apos;%2&apos;: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpEngineCore</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+516"/>
+ <source>The specified namespace does not exist!</source>
+ <translation>Указанное пространство имён не существует!</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpEngineCorePrivate</name>
+ <message>
+ <location line="-394"/>
+ <source>Cannot open documentation file %1: %2!</source>
+ <translation>Не удалось открыть файл документации %1: %2!</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+157"/>
+ <source>Invalid help data!</source>
+ <translation>Некорректные данные справки!</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>No output file name specified!</source>
+ <translation>Не указано имя результирующего файла!</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Building up file structure...</source>
+ <translation>Создание структуры файла...</translation>
+ </message>
+ <message>
+ <location line="-7"/>
+ <source>The file %1 cannot be overwritten!</source>
+ <translation>Невозможно перезаписать файл %1!</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>Cannot open data base file %1!</source>
+ <translation>Не удалось открыть файл базы данных %1!</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Cannot register namespace %1!</source>
+ <translation>Не удалось зарегистрировать пространство имён %1!</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Insert custom filters...</source>
+ <translation>Вставка индивидуальных фильтров...</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Insert help data for filter section (%1 of %2)...</source>
+ <translation>Вставка данных справки для секции фильтра (%1 из %2)...</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>Documentation successfully generated.</source>
+ <translation>Документация успешно создана.</translation>
+ </message>
+ <message>
+ <location line="+76"/>
+ <source>Some tables already exist!</source>
+ <translation>Некоторые таблицы уже существуют!</translation>
+ </message>
+ <message>
+ <location line="+61"/>
+ <source>Cannot create tables!</source>
+ <translation>Не удалось создать таблицы!</translation>
+ </message>
+ <message>
+ <location line="+86"/>
+ <source>Cannot register virtual folder!</source>
+ <translation>Не удалось зарегистрировать виртуальный каталог!</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Insert files...</source>
+ <translation>Вставка файлов...</translation>
+ </message>
+ <message>
+ <location line="+42"/>
+ <source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source>
+ <translation>Файл %1 должен быть в каталоге &apos;%2&apos; или в его подкаталоге. Пропускаем.</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>The file %1 does not exist! Skipping it.</source>
+ <translation>Файл %1 не существует! Пропускаем.</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Cannot open file %1! Skipping it.</source>
+ <translation>Не удалось открыть файл %1! Пропускаем.</translation>
+ </message>
+ <message>
+ <location line="+131"/>
+ <source>The filter %1 is already registered!</source>
+ <translation>Фильтр %1 уже зарегистрирован!</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Cannot register filter %1!</source>
+ <translation>Не удалось зарегистрировать фильтр %1!</translation>
+ </message>
+ <message>
+ <location line="+24"/>
+ <source>Insert indices...</source>
+ <translation>Вставка указателей...</translation>
+ </message>
+ <message>
+ <location line="+80"/>
+ <source>Insert contents...</source>
+ <translation>Вставка оглавления...</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Cannot insert contents!</source>
+ <translation>Не удаётся вставить оглавление!</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Cannot register contents!</source>
+ <translation>Не удаётся зарегистрировать оглавление!</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpSearchQueryWidget</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+200"/>
+ <source>Search for:</source>
+ <translation>Искать:</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Search</source>
+ <translation>Поиск</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>Advanced search</source>
+ <translation>Расширенный поиск</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>words &lt;B&gt;similar&lt;/B&gt; to:</source>
+ <translation>&lt;B&gt;похожие&lt;/B&gt; слова:</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>&lt;B&gt;without&lt;/B&gt; the words:</source>
+ <translation>&lt;B&gt;не содержит&lt;/B&gt; слова:</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>with &lt;B&gt;exact phrase&lt;/B&gt;:</source>
+ <translation>содержит &lt;B&gt;фразу полностью&lt;/B&gt;:</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>with &lt;B&gt;all&lt;/B&gt; of the words:</source>
+ <translation>содержит &lt;B&gt;все&lt;/B&gt; слова:</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>with &lt;B&gt;at least one&lt;/B&gt; of the words:</source>
+ <translation>содержит &lt;B&gt; минимум одно&lt;/B&gt; из слов:</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpSearchResultWidget</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+235"/>
+ <source>0 - 0 of 0 Hits</source>
+ <translation>0 - 0 из 0 соответствий</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpSearchResultWidgetPrivate</name>
+ <message>
+ <location line="-61"/>
+ <source>%1 - %2 of %3 Hits</source>
+ <translation>%1 - %2 из %3 соответствий</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../tools/assistant/lib/qhelp_global.h" line="+83"/>
+ <source>Untitled</source>
+ <translation>Безымянный</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+80"/>
+ <source>Unknown token.</source>
+ <translation type="unfinished">Неизвестный токен.</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>Unknown token. Expected &quot;QtHelpProject&quot;!</source>
+ <translation type="unfinished">Неизвестный токен. Ожидается &quot;QtHelpProject&quot;!</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Error in line %1: %2</source>
+ <translation>Ошибка в строке %1: %2</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>A virtual folder must not contain a &apos;/&apos; character!</source>
+ <translation>Виртуальный каталог не должен содержать символ &apos;/&apos;!</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>A namespace must not contain a &apos;/&apos; character!</source>
+ <translation>Пространство имён не должно содержать символ &apos;/&apos;!</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>Missing namespace in QtHelpProject.</source>
+ <translation>Отсутствует пространство имён в QtHelpProject.</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Missing virtual folder in QtHelpProject</source>
+ <translation>Отсутствует виртуальный каталог в QtHelpProject</translation>
+ </message>
+ <message>
+ <location line="+88"/>
+ <source>Missing attribute in keyword at line %1.</source>
+ <translation>Отсутствует атрибут у ключевого слова в строке %1.</translation>
+ </message>
+ <message>
+ <location line="+83"/>
+ <source>The input file %1 could not be opened!</source>
+ <translation>Невозможно открыть исходный файл %1!</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/translations.pri b/translations/translations.pri
index cdb157e..480849f 100644
--- a/translations/translations.pri
+++ b/translations/translations.pri
@@ -8,8 +8,16 @@ defineReplace(prependAll) {
return ($$result)
}
-LUPDATE = $$QT_BUILD_TREE/bin/lupdate -locations relative -no-ui-lines
-win32:LUPDATE ~= s|/|\|g
+defineReplace(fixPath) {
+WIN {
+ return ($$replace($$1, /, \))
+} ELSE {
+ return ($$1)
+}
+}
+
+LUPDATE = $$fixPath($$QT_BUILD_TREE/bin/lupdate) -locations relative -no-ui-lines
+LRELEASE = $$fixPath($$QT_BUILD_TREE/bin/lrelease)
###### Qt Libraries
@@ -34,18 +42,27 @@ ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
-ts $$prependAll($$[QT_INSTALL_TRANSLATIONS]/qt_,$$QT_TS,.ts))
ts-qt.depends = sub-tools
+qm-qt.commands = $$LRELEASE $$prependAll($$[QT_INSTALL_TRANSLATIONS]/qt_,$$QT_TS,.ts)
+qm-qt.depends = sub-tools
+
###### Designer
ts-designer.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/designer/translations/translations.pro)
ts-designer.depends = sub-tools
+qm-designer.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/designer/translations/translations.pro
+qm-designer.depends = sub-tools
+
###### Linguist
ts-linguist.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/linguist/linguist/linguist.pro)
ts-linguist.depends = sub-tools
+qm-linguist.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/linguist/linguist/linguist.pro
+qm-linguist.depends = sub-tools
+
###### Assistant
ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
@@ -56,21 +73,36 @@ ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/assistant/translations/translations_adp.pro)
ts-assistant.depends = sub-tools
+qm-assistant.commands = ($$LRELEASE $$QT_SOURCE_TREE/tools/assistant/translations/translations.pro \
+ && $$LRELEASE \
+ $$QT_SOURCE_TREE/tools/assistant/translations/qt_help.pro \
+ && $$LRELEASE \
+ $$QT_SOURCE_TREE/tools/assistant/translations/translations_adp.pro)
+qm-assistant.depends = sub-tools
+
###### Qtconfig
ts-qtconfig.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/qtconfig/translations/translations.pro)
ts-qtconfig.depends = sub-tools
+qm-qtconfig.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qtconfig/translations/translations.pro
+qm-qtconfig.depends = sub-tools
+
###### Qvfp
ts-qvfb.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/qvfb/translations/translations.pro)
ts-qvfb.depends = sub-tools
+qm-qvfb.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qvfb/translations/translations.pro
+qm-qvfb.depends = sub-tools
+
###### Overall Rules
ts.depends = ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb
+qm.depends = qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb
QMAKE_EXTRA_TARGETS += ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb \
- ts
+ qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb \
+ ts qm
diff --git a/translations/translations.pro b/translations/translations.pro
deleted file mode 100644
index 6f14108..0000000
--- a/translations/translations.pro
+++ /dev/null
@@ -1,50 +0,0 @@
-TRANSLATIONS = $$files(*.ts)
-
-LRELEASE = $$QT_BUILD_TREE/bin/lrelease
-win32 {
- LRELEASE ~= s|/|\|g
-} else:!static {
- path = $$QT_BUILD_TREE/lib
- !macx:var = LD_LIBRARY_PATH
- else:qt_no_framework:var = DYLD_LIBRARY_PATH
- else:var = DYLD_FRAMEWORK_PATH
-
- LRELEASE = test -z \"\$\$$$var\" && $$var=$$path || $$var=$$path:\$\$$$var; export $$var; $$LRELEASE
-}
-
-contains(TEMPLATE_PREFIX, vc):vcproj = 1
-
-TEMPLATE = app
-TARGET = qm_phony_target
-CONFIG -= qt separate_debug_info
-QT =
-LIBS =
-
-updateqm.input = TRANSLATIONS
-updateqm.output = ${QMAKE_FILE_BASE}.qm
-isEmpty(vcproj):updateqm.variable_out = PRE_TARGETDEPS
-updateqm.commands = @echo lrelease ${QMAKE_FILE_IN}; $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
-updateqm.name = LRELEASE ${QMAKE_FILE_IN}
-updateqm.CONFIG += no_link
-QMAKE_EXTRA_COMPILERS += updateqm
-
-isEmpty(vcproj) {
- QMAKE_LINK = @: IGNORE THIS LINE
- OBJECTS_DIR =
- win32:CONFIG -= embed_manifest_exe
-} else {
- CONFIG += console
- PHONY_DEPS = .
- phony_src.input = PHONY_DEPS
- phony_src.output = phony.c
- phony_src.variable_out = GENERATED_SOURCES
- phony_src.commands = echo int main() { return 0; } > phony.c
- phony_src.name = CREATE phony.c
- phony_src.CONFIG += combine
- QMAKE_EXTRA_COMPILERS += phony_src
-}
-
-translations.path = $$[QT_INSTALL_TRANSLATIONS]
-translations.files = $$TRANSLATIONS
-translations.files ~= s,\\.ts$,.qm,g
-INSTALLS += translations