Import upstream version 1.3.1
Debian Janitor
1 year, 4 months ago
0 | 0 | cmake_minimum_required(VERSION 3.16.0) |
1 | 1 | |
2 | 2 | # Configure project |
3 | project(cutemaze VERSION 1.3.0 LANGUAGES CXX) | |
3 | project(cutemaze VERSION 1.3.1 LANGUAGES CXX) | |
4 | 4 | |
5 | 5 | set(CMAKE_CXX_STANDARD 17) |
6 | 6 | set(CMAKE_CXX_STANDARD_REQUIRED ON) |
13 | 13 | include(GNUInstallDirs) |
14 | 14 | endif() |
15 | 15 | |
16 | add_compile_definitions( | |
17 | QT_STRICT_ITERATORS | |
18 | QT_NO_NARROWING_CONVERSIONS_IN_CONNECT | |
19 | QT_DISABLE_DEPRECATED_BEFORE=0x060000 | |
20 | ) | |
16 | if(CMAKE_BUILD_TYPE STREQUAL "Debug") | |
17 | add_compile_definitions( | |
18 | QT_STRICT_ITERATORS | |
19 | QT_NO_NARROWING_CONVERSIONS_IN_CONNECT | |
20 | QT_DISABLE_DEPRECATED_BEFORE=0x060300 | |
21 | ) | |
22 | endif() | |
21 | 23 | |
22 | 24 | # Create translations |
23 | 25 | file(GLOB translations_SRCS translations/*.ts) |
76 | 78 | QT_TARGET_VERSION "${PROJECT_VERSION}" |
77 | 79 | QT_TARGET_COMPANY_NAME "Graeme Gott" |
78 | 80 | QT_TARGET_DESCRIPTION "Simple maze game" |
79 | QT_TARGET_COPYRIGHT "Copyright (C) 2021 Graeme Gott" | |
81 | QT_TARGET_COPYRIGHT "Copyright (C) 2022 Graeme Gott" | |
80 | 82 | QT_TARGET_PRODUCT_NAME "CuteMaze" |
81 | 83 | QT_TARGET_RC_ICONS ${CMAKE_SOURCE_DIR}/icons/cutemaze.ico |
82 | 84 | ) |
0 | 1.3.1 | |
1 | ----- | |
2 | * Switched to Qt 6. | |
3 | * Translation updates: Dutch, Turkish. | |
4 | ||
0 | 5 | 1.3.0 |
1 | 6 | ----- |
2 | 7 | * Added pausing when menus are shown. |
0 | !versionAtLeast(QT_VERSION, 5.12) { | |
1 | error("CuteMaze requires Qt 5.12 or greater") | |
2 | } | |
3 | ||
4 | TEMPLATE = app | |
5 | QT += svg widgets | |
6 | CONFIG += c++17 | |
7 | ||
8 | CONFIG(debug, debug|release) { | |
9 | CONFIG += warn_on | |
10 | DEFINES += QT_DEPRECATED_WARNINGS | |
11 | DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 | |
12 | DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT | |
13 | } | |
14 | ||
15 | # Allow in-tree builds | |
16 | MOC_DIR = build | |
17 | OBJECTS_DIR = build | |
18 | RCC_DIR = build | |
19 | ||
20 | # Set program version | |
21 | VERSION = 1.3.0 | |
22 | DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" | |
23 | ||
24 | # Set program name | |
25 | unix: !macx { | |
26 | TARGET = cutemaze | |
27 | } else { | |
28 | TARGET = CuteMaze | |
29 | } | |
30 | ||
31 | # Specify program sources | |
32 | HEADERS = src/board.h \ | |
33 | src/cell.h \ | |
34 | src/locale_dialog.h \ | |
35 | src/maze.h \ | |
36 | src/new_game_dialog.h \ | |
37 | src/path.h \ | |
38 | src/scores_dialog.h \ | |
39 | src/settings.h \ | |
40 | src/solver.h \ | |
41 | src/theme.h \ | |
42 | src/window.h | |
43 | ||
44 | SOURCES = src/board.cpp \ | |
45 | src/cell.cpp \ | |
46 | src/locale_dialog.cpp \ | |
47 | src/main.cpp \ | |
48 | src/maze.cpp \ | |
49 | src/new_game_dialog.cpp \ | |
50 | src/path.cpp \ | |
51 | src/scores_dialog.cpp \ | |
52 | src/settings.cpp \ | |
53 | src/solver.cpp \ | |
54 | src/theme.cpp \ | |
55 | src/window.cpp | |
56 | ||
57 | # Generate translations | |
58 | TRANSLATIONS = $$files(translations/cutemaze_*.ts) | |
59 | qtPrepareTool(LRELEASE, lrelease) | |
60 | updateqm.input = TRANSLATIONS | |
61 | updateqm.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm | |
62 | updateqm.commands = $$LRELEASE -silent ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} | |
63 | updateqm.CONFIG += no_link target_predeps | |
64 | QMAKE_EXTRA_COMPILERS += updateqm | |
65 | ||
66 | # Install program data | |
67 | RESOURCES = icons/icons.qrc themes/theme.qrc preview/preview.qrc | |
68 | macx { | |
69 | ICON = icons/cutemaze.icns | |
70 | } else:win32 { | |
71 | RC_ICONS = icons/cutemaze.ico | |
72 | QMAKE_TARGET_DESCRIPTION = "Simple maze game" | |
73 | QMAKE_TARGET_COPYRIGHT = "Copyright (C) 2021 Graeme Gott" | |
74 | } else:unix { | |
75 | RESOURCES += icons/icon.qrc | |
76 | ||
77 | isEmpty(PREFIX) { | |
78 | PREFIX = /usr/local | |
79 | } | |
80 | isEmpty(BINDIR) { | |
81 | BINDIR = bin | |
82 | } | |
83 | ||
84 | target.path = $$PREFIX/$$BINDIR/ | |
85 | ||
86 | icon.files = icons/hicolor/* | |
87 | icon.path = $$PREFIX/share/icons/hicolor/ | |
88 | ||
89 | desktop.files = icons/cutemaze.desktop | |
90 | desktop.path = $$PREFIX/share/applications/ | |
91 | ||
92 | appdata.files = icons/cutemaze.appdata.xml | |
93 | appdata.path = $$PREFIX/share/metainfo/ | |
94 | ||
95 | qm.files = $$replace(TRANSLATIONS, .ts, .qm) | |
96 | qm.path = $$PREFIX/share/cutemaze/translations | |
97 | qm.CONFIG += no_check_exist | |
98 | ||
99 | man.files = doc/cutemaze.6 | |
100 | man.path = $$PREFIX/share/man/man6 | |
101 | ||
102 | INSTALLS += target icon desktop appdata qm man | |
103 | } |
30 | 30 | <summary xml:lang="pl">Znajdź cele w labiryncie</summary> |
31 | 31 | <summary xml:lang="pt">Procura alvos num labirinto</summary> |
32 | 32 | <summary xml:lang="ro">Căutaţi ţintele într-un labirint</summary> |
33 | <summary xml:lang="tr">Labirentte hedefleri bul</summary> | |
33 | 34 | <summary xml:lang="zh">在迷宫中寻找目标</summary> |
34 | 35 | |
35 | 36 | <description> |
76 | 77 | <content_rating type="oars-1.1"/> |
77 | 78 | |
78 | 79 | <releases> |
80 | <release version="1.3.1" date="2022-05-03"> | |
81 | <description> | |
82 | <ul> | |
83 | <li>Switched to Qt 6</li> | |
84 | <li>Translation updates: Dutch, Turkish</li> | |
85 | </ul> | |
86 | </description> | |
87 | </release> | |
79 | 88 | <release version="1.3.0" date="2021-05-06"> |
80 | 89 | <description> |
81 | 90 | <ul> |
43 | 43 | Comment[pl]=Znajdź cele w labiryncie |
44 | 44 | Comment[pt]=Procura alvos num labirinto |
45 | 45 | Comment[ro]=Căutaţi ţintele într-un labirint |
46 | Comment[tr]=Labirentte hedefleri bul | |
46 | 47 | Comment[zh]=在迷宫中寻找目标 |
48 | TryExec=cutemaze | |
47 | 49 | Exec=cutemaze |
48 | 50 | Icon=cutemaze |
49 | 51 | Terminal=false |
10 | 10 | "Project-Id-Version: CuteMaze\n" |
11 | 11 | "Report-Msgid-Bugs-To: \n" |
12 | 12 | "POT-Creation-Date: 2018-05-27 19:05-0400\n" |
13 | "PO-Revision-Date: 2018-05-27 23:12+0000\n" | |
14 | "Last-Translator: Graeme Gott <graeme@gottcode.org>\n" | |
13 | "PO-Revision-Date: 2018-09-26 19:18+0000\n" | |
14 | "Last-Translator: RobertBorst <webmaster@fam-borst.nl>\n" | |
15 | 15 | "Language-Team: Dutch (http://www.transifex.com/gottcode/cutemaze/language/" |
16 | 16 | "nl/)\n" |
17 | 17 | "Language: nl\n" |
2 | 2 | # This file is distributed under the same license as the CuteMaze package. |
3 | 3 | # |
4 | 4 | # Translators: |
5 | # Cuneyt Oktay <cuneytoktay@gmail.com>, 2021 | |
5 | 6 | msgid "" |
6 | 7 | msgstr "" |
7 | 8 | "Project-Id-Version: CuteMaze\n" |
8 | 9 | "Report-Msgid-Bugs-To: \n" |
9 | 10 | "POT-Creation-Date: 2018-05-27 19:05-0400\n" |
10 | "PO-Revision-Date: 2018-05-27 23:15+0000\n" | |
11 | "Last-Translator: Graeme Gott <graeme@gottcode.org>\n" | |
11 | "PO-Revision-Date: 2014-11-13 16:22+0000\n" | |
12 | "Last-Translator: Cuneyt Oktay <cuneytoktay@gmail.com>, 2021\n" | |
12 | 13 | "Language-Team: Turkish (http://www.transifex.com/gottcode/cutemaze/language/" |
13 | 14 | "tr/)\n" |
14 | 15 | "Language: tr\n" |
23 | 24 | |
24 | 25 | #: ../cutemaze.appdata.xml.in:7 ../cutemaze.desktop.in:5 |
25 | 26 | msgid "Find targets in a maze" |
26 | msgstr "" | |
27 | msgstr "Labirentte hedefleri bul" | |
27 | 28 | |
28 | 29 | #: ../cutemaze.appdata.xml.in:10 |
29 | 30 | msgid "" |
1 | 1 | |
2 | 2 | APP='CuteMaze' |
3 | 3 | BUNDLE="$APP.app" |
4 | VERSION='1.3.0' | |
4 | VERSION='1.3.1' | |
5 | 5 | |
6 | 6 | # Remove any previous disk folder or DMG |
7 | 7 | echo -n 'Preparing... ' |
94 | 94 | if (translator.load(m_appname + locale, m_path)) { |
95 | 95 | QCoreApplication::installTranslator(&translator); |
96 | 96 | |
97 | #if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) | |
98 | 97 | const QString path = QLibraryInfo::path(QLibraryInfo::TranslationsPath); |
99 | #else | |
100 | const QString path = QLibraryInfo::location(QLibraryInfo::TranslationsPath); | |
101 | #endif | |
102 | 98 | |
103 | 99 | static QTranslator qtbase_translator; |
104 | 100 | if (qtbase_translator.load("qtbase_" + locale, m_path) || qtbase_translator.load("qtbase_" + locale, path)) { |
12 | 12 | |
13 | 13 | int main(int argc, char** argv) |
14 | 14 | { |
15 | #if (QT_VERSION < QT_VERSION_CHECK(6,0,0)) | |
16 | #if !defined(Q_OS_MAC) | |
17 | if (!qEnvironmentVariableIsSet("QT_DEVICE_PIXEL_RATIO") | |
18 | && !qEnvironmentVariableIsSet("QT_AUTO_SCREEN_SCALE_FACTOR") | |
19 | && !qEnvironmentVariableIsSet("QT_SCALE_FACTOR") | |
20 | && !qEnvironmentVariableIsSet("QT_SCREEN_SCALE_FACTORS")) { | |
21 | QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); | |
22 | } | |
23 | #endif | |
24 | QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); | |
25 | #endif | |
26 | 15 | QApplication app(argc, argv); |
27 | 16 | app.setApplicationName("CuteMaze"); |
28 | 17 | app.setApplicationVersion(VERSIONSTR); |
15 | 15 | |
16 | 16 | void HuntAndKillMaze::generate() |
17 | 17 | { |
18 | m_visited = QVector<QVector<bool>>(columns(), QVector<bool>(rows())); | |
18 | m_visited = QList<QList<bool>>(columns(), QList<bool>(rows())); | |
19 | 19 | m_unvisited = columns() * rows(); |
20 | 20 | |
21 | 21 | QPoint current(0, randomInt(rows())); |
84 | 84 | void KruskalMaze::generate() |
85 | 85 | { |
86 | 86 | // Generate sets |
87 | m_set_ids = QVector<QVector<Set*>>(columns(), QVector<Set*>(rows())); | |
87 | m_set_ids = QList<QList<Set*>>(columns(), QList<Set*>(rows())); | |
88 | 88 | for (int c = 0; c < columns(); ++c) { |
89 | 89 | for (int r = 0; r < rows(); ++r) { |
90 | 90 | m_sets.push_back(QList<QPoint>() << QPoint(c, r)); |
137 | 137 | void PrimMaze::generate() |
138 | 138 | { |
139 | 139 | // Generate cell lists |
140 | m_regions = QVector<QVector<int>>(columns(), QVector<int>(rows(), 0)); | |
140 | m_regions = QList<QList<int>>(columns(), QList<int>(rows(), 0)); | |
141 | 141 | |
142 | 142 | // Move first cell |
143 | 143 | QPoint cell(0, randomInt(columns())); |
214 | 214 | |
215 | 215 | void RecursiveBacktrackerMaze::generate() |
216 | 216 | { |
217 | m_visited = QVector<QVector<bool>>(columns(), QVector<bool>(rows())); | |
217 | m_visited = QList<QList<bool>>(columns(), QList<bool>(rows())); | |
218 | 218 | |
219 | 219 | QPoint start(0, randomInt(rows())); |
220 | 220 | m_visited[start.x()][start.y()] = true; |
242 | 242 | void StackMaze::generate() |
243 | 243 | { |
244 | 244 | // Generate cell lists |
245 | m_visited = QVector<QVector<bool>>(columns(), QVector<bool>(rows())); | |
245 | m_visited = QList<QList<bool>>(columns(), QList<bool>(rows())); | |
246 | 246 | QList<QPoint> active; |
247 | 247 | |
248 | 248 | // Start maze |
326 | 326 | m_random = random; |
327 | 327 | m_columns = columns; |
328 | 328 | m_rows = rows; |
329 | m_cells = QVector<QVector<Cell>>(m_columns, QVector<Cell>(m_rows)); | |
329 | m_cells = QList<QList<Cell>>(m_columns, QList<Cell>(m_rows)); | |
330 | 330 | generate(); |
331 | 331 | random = m_random; |
332 | 332 | } |
348 | 348 | } |
349 | 349 | |
350 | 350 | // Deserialize data |
351 | #if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) | |
352 | 351 | QDataStream stream(&data, QDataStream::ReadOnly); |
353 | #else | |
354 | QDataStream stream(&data, QIODevice::ReadOnly); | |
355 | #endif | |
356 | 352 | stream.setVersion(QDataStream::Qt_5_12); |
357 | 353 | for (int c = 0; c < m_columns; ++c) { |
358 | 354 | for (int r = 0; r < m_rows; ++r) { |
376 | 372 | { |
377 | 373 | // Serialize data |
378 | 374 | QByteArray data; |
379 | #if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) | |
380 | 375 | QDataStream stream(&data, QDataStream::WriteOnly); |
381 | #else | |
382 | QDataStream stream(&data, QIODevice::WriteOnly); | |
383 | #endif | |
384 | 376 | stream.setVersion(QDataStream::Qt_5_12); |
385 | 377 | for (int c = 0; c < m_columns; ++c) { |
386 | 378 | for (int r = 0; r < m_rows; ++r) { |
420 | 412 | |
421 | 413 | //----------------------------------------------------------------------------- |
422 | 414 | |
423 | QPoint Maze::randomNeighbor(QVector<QVector<bool>>& visited, const QPoint& cell) | |
415 | QPoint Maze::randomNeighbor(QList<QList<bool>>& visited, const QPoint& cell) | |
424 | 416 | { |
425 | 417 | // Find unvisited neighbors |
426 | 418 | QPoint neighbors[4]; |
10 | 10 | |
11 | 11 | #include <QList> |
12 | 12 | #include <QPoint> |
13 | #include <QVector> | |
14 | 13 | |
15 | 14 | #include <list> |
16 | 15 | #include <random> |
55 | 54 | return gen(m_random); |
56 | 55 | } |
57 | 56 | |
58 | QPoint randomNeighbor(QVector<QVector<bool>>& visited, const QPoint& cell); | |
57 | QPoint randomNeighbor(QList<QList<bool>>& visited, const QPoint& cell); | |
59 | 58 | |
60 | 59 | private: |
61 | 60 | virtual void generate() = 0; |
64 | 63 | std::mt19937 m_random; |
65 | 64 | int m_columns; |
66 | 65 | int m_rows; |
67 | QVector<QVector<Cell>> m_cells; | |
66 | QList<QList<Cell>> m_cells; | |
68 | 67 | }; |
69 | 68 | |
70 | 69 | |
75 | 74 | QPoint hunt(); |
76 | 75 | |
77 | 76 | private: |
78 | QVector<QVector<bool>> m_visited; | |
77 | QList<QList<bool>> m_visited; | |
79 | 78 | int m_unvisited; |
80 | 79 | }; |
81 | 80 | |
88 | 87 | private: |
89 | 88 | typedef QList<QPoint> Set; |
90 | 89 | std::list<Set> m_sets; |
91 | QVector<QVector<Set*>> m_set_ids; | |
90 | QList<QList<Set*>> m_set_ids; | |
92 | 91 | }; |
93 | 92 | |
94 | 93 | |
102 | 101 | |
103 | 102 | private: |
104 | 103 | QList<QPoint> m_frontier; |
105 | QVector<QVector<int>> m_regions; | |
104 | QList<QList<int>> m_regions; | |
106 | 105 | }; |
107 | 106 | |
108 | 107 | |
113 | 112 | void makePath(const QPoint& current); |
114 | 113 | |
115 | 114 | private: |
116 | QVector<QVector<bool>> m_visited; | |
115 | QList<QList<bool>> m_visited; | |
117 | 116 | }; |
118 | 117 | |
119 | 118 | |
124 | 123 | virtual int nextActive(int size); |
125 | 124 | |
126 | 125 | private: |
127 | QVector<QVector<bool>> m_visited; | |
126 | QList<QList<bool>> m_visited; | |
128 | 127 | }; |
129 | 128 | |
130 | 129 |
13 | 13 | : m_maze(maze) |
14 | 14 | , m_start(start) |
15 | 15 | , m_end(end) |
16 | , m_cells(maze->columns(), QVector<bool>(maze->rows(), false)) | |
16 | , m_cells(maze->columns(), QList<bool>(maze->rows(), false)) | |
17 | 17 | { |
18 | 18 | // Fill in dead ends |
19 | 19 | for (int r = 0; r < m_maze->rows(); ++r) { |
11 | 11 | |
12 | 12 | #include <QList> |
13 | 13 | #include <QPoint> |
14 | #include <QVector> | |
15 | 14 | |
16 | 15 | class Path |
17 | 16 | { |
43 | 42 | Maze* m_maze; |
44 | 43 | QPoint m_start; |
45 | 44 | QPoint m_end; |
46 | QVector<QVector<bool>> m_cells; | |
45 | QList<QList<bool>> m_cells; | |
47 | 46 | QList<QPoint> m_solution; |
48 | 47 | }; |
49 | 48 |
79 | 79 | divider->setFrameStyle(QFrame::HLine | QFrame::Sunken); |
80 | 80 | m_scores_layout->addWidget(divider, 2, 0, 1, TotalColumns); |
81 | 81 | |
82 | QVector<Qt::Alignment> alignments(TotalColumns, Qt::AlignTrailing); | |
82 | QList<Qt::Alignment> alignments(TotalColumns, Qt::AlignTrailing); | |
83 | 83 | alignments[NameColumn] = Qt::AlignLeading; |
84 | 84 | alignments[AlgorithmColumn] = Qt::AlignHCenter; |
85 | 85 | for (int r = 0; r < 10; ++r) { |
160 | 160 | settings.beginWriteArray("Scores_Cutemaze"); |
161 | 161 | int index = 0; |
162 | 162 | for (const QString& score : scores) { |
163 | #if (QT_VERSION >= QT_VERSION_CHECK(5,14,0)) | |
164 | 163 | const QStringList values = score.split(":", Qt::SkipEmptyParts); |
165 | #else | |
166 | const QStringList values = score.split(":", QString::SkipEmptyParts); | |
167 | #endif | |
168 | 164 | if (values.size() != 5) { |
169 | 165 | continue; |
170 | 166 | } |
83 | 83 | QDir dir("", "*.svg"); |
84 | 84 | for (const QString& path : m_locations) { |
85 | 85 | if (dir.cd(path)) { |
86 | #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) | |
87 | 86 | const QStringList entries = dir.entryList(); |
88 | 87 | files += QSet<QString>(entries.begin(), entries.end()); |
89 | #else | |
90 | files += dir.entryList(QDir::Files).toSet(); | |
91 | #endif | |
92 | 88 | } |
93 | 89 | } |
94 | 90 | |
95 | #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) | |
96 | 91 | QStringList list(files.begin(), files.end()); |
97 | #else | |
98 | QStringList list = QStringList::fromSet(files); | |
99 | #endif | |
100 | 92 | int count = list.count(); |
101 | 93 | for (int i = 0; i < count; ++i) { |
102 | 94 | QString& theme = list[i]; |
0 | 0 | /* |
1 | SPDX-FileCopyrightText: 2007-2021 Graeme Gott <graeme@gottcode.org> | |
1 | // SPDX-FileCopyrightText: 2007-2022 Graeme Gott <graeme@gottcode.org> | |
2 | 2 | |
3 | 3 | SPDX-License-Identifier: GPL-3.0-or-later |
4 | 4 | */ |
149 | 149 | QMessageBox::about(this, tr("About"), QString("<p><center><big><b>%1 %2</b></big><br/>%3<br/><small>%4<br/>%5</small></center></p><p><center>%6<br/><small>%7</small></center></p>") |
150 | 150 | .arg(tr("CuteMaze"), QCoreApplication::applicationVersion(), |
151 | 151 | tr("A top-down maze game"), |
152 | tr("Copyright © 2007-%1 Graeme Gott").arg("2021"), | |
152 | tr("Copyright © 2007-%1 Graeme Gott").arg("2022"), | |
153 | 153 | tr("Released under the <a href=%1>GPL 3</a> license").arg("\"http://www.gnu.org/licenses/gpl.html\""), |
154 | 154 | tr("Icons are from the <a href=%1>Oxygen</a> theme").arg("\"http://www.oxygen-icons.org/\""), |
155 | 155 | tr("Used under the <a href=%1>LGPL 3</a> license").arg("\"http://www.gnu.org/licenses/lgpl.html\"")) |
8 | 8 | </message> |
9 | 9 | <message> |
10 | 10 | <source>Unable to load previous game. A new game will be started.</source> |
11 | <translation>Het vorige spel kan niet worden gestart; er zal een nieuw spel worden gestart.</translation> | |
11 | <translation>Het vorige spel kan niet worden gestart - er zal een nieuw spel worden gestart.</translation> | |
12 | 12 | </message> |
13 | 13 | <message> |
14 | 14 | <source>%1 elapsed</source> |
16 | 16 | </message> |
17 | 17 | <message> |
18 | 18 | <source>%1 steps taken</source> |
19 | <translation>%1 genomen stappen</translation> | |
19 | <translation>%1 stappen genomen</translation> | |
20 | 20 | </message> |
21 | 21 | <message> |
22 | 22 | <source>%1 of %2 targets remain</source> |
28 | 28 | </message> |
29 | 29 | <message> |
30 | 30 | <source>Paused</source> |
31 | <translation>Gepauzeerd</translation> | |
31 | <translation>Onderbroken</translation> | |
32 | 32 | </message> |
33 | 33 | </context> |
34 | 34 | <context> |
74 | 74 | <name>LocaleDialog</name> |
75 | 75 | <message> |
76 | 76 | <source>Select application language:</source> |
77 | <translation>Selecteer de applicatietaal:</translation> | |
77 | <translation>Kies de programmataal:</translation> | |
78 | 78 | </message> |
79 | 79 | <message> |
80 | 80 | <source><System Language></source> |
211 | 211 | </message> |
212 | 212 | <message> |
213 | 213 | <source>Show where you've been</source> |
214 | <translation>Laat zien waar je geweest bent</translation> | |
214 | <translation>Genomen route tonen</translation> | |
215 | 215 | </message> |
216 | 216 | <message> |
217 | 217 | <source>Show number of steps taken</source> |
334 | 334 | </message> |
335 | 335 | <message> |
336 | 336 | <source>&Pause</source> |
337 | <translation>&Pauzeren</translation> | |
337 | <translation>&Onderbreken</translation> | |
338 | 338 | </message> |
339 | 339 | <message> |
340 | 340 | <source>&Hint</source> |
362 | 362 | </message> |
363 | 363 | <message> |
364 | 364 | <source>Application &Language...</source> |
365 | <translation>Programmataa&l...</translation> | |
365 | <translation>Programmataa&l…</translation> | |
366 | 366 | </message> |
367 | 367 | <message> |
368 | 368 | <source>&Preferences...</source> |
394 | 394 | </message> |
395 | 395 | <message> |
396 | 396 | <source>Used under the <a href=%1>LGPL 3</a> license</source> |
397 | <translation>Gebruikt onder de <a href=%1>LGPL 3</a> licentie</translation> | |
397 | <translation>Gebruikt onder de <a href=%1>LGPL 3</a>-licentie</translation> | |
398 | 398 | </message> |
399 | 399 | <message> |
400 | 400 | <source>Ctrl+H</source> |
82 | 82 | </message> |
83 | 83 | <message> |
84 | 84 | <source>Note</source> |
85 | <translation>Önemli</translation> | |
85 | <translation>Not</translation> | |
86 | 86 | </message> |
87 | 87 | <message> |
88 | 88 | <source>Please restart this application for the change in language to take effect.</source> |