diff --git a/.clang-format b/.clang-format index b0e8ca9f..c8785537 100644 --- a/.clang-format +++ b/.clang-format @@ -142,4 +142,7 @@ StatementMacros: - QT_REQUIRE_VERSION UseCRLF: false UseTab: Never +--- +Language: ObjC +BasedOnStyle: WebKit ... diff --git a/.clang-tidy b/.clang-tidy index 42075503..1447cfea 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -17,7 +17,6 @@ Checks: > portability-*, readability-*, -bugprone-easily-swappable-parameters, - -bugprone-reserved-identifier, -cppcoreguidelines-owning-memory, -cppcoreguidelines-prefer-member-initializer, -cppcoreguidelines-pro-bounds-array-to-pointer-decay, @@ -26,6 +25,7 @@ Checks: > -google-default-arguments, -google-readability-casting, -hicpp-deprecated-headers, + -hicpp-no-array-decay, -misc-const-correctness, -misc-include-cleaner, -misc-non-private-member-variables-in-classes, @@ -43,5 +43,11 @@ CheckOptions: value: 1 - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors value: 1 + - key: modernize-avoid-c-arrays.AllowStringArrays + value: 1 + - key: cppcoreguidelines-avoid-c-arrays.AllowStringArrays + value: 1 + - key: hicpp-avoid-c-arrays.AllowStringArrays + value: 1 ... diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 51783c17..7c8ff110 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -12,3 +12,9 @@ b5349478cfb0dc2dd0de8c8e8aeebdd24cf7ac6b # mass apply clang-tidy's readability-braces-around-statements a11c9e3aeca4329e1982d8fe26bacbb21ab50ddf + +# mass apply clang-tidy's modernize-use-using +d15081e723756eef053550dc9e06e31d7828dec3 + +# remove gd::toWString +c8af0450f1f7f8188004db96e3f53e7e33e2ccad \ No newline at end of file diff --git a/.github/workflows/Release-all.yml b/.github/workflows/Release-all.yml index 1dc40f02..18ca0d3f 100644 --- a/.github/workflows/Release-all.yml +++ b/.github/workflows/Release-all.yml @@ -21,7 +21,7 @@ jobs: strategy: matrix: os: [macos-13,macos-14] - qt_ver: [ 6.6.3, 6.7.3 ] + qt_ver: [ 6.6.3, 6.7.2 ] steps: - uses: actions/checkout@v4 with: @@ -73,7 +73,7 @@ jobs: strategy: matrix: os: [windows-2022] - qt_ver: [ 6.6.3, 6.7.3 ] + qt_ver: [ 6.6.3, 6.7.2 ] steps: - uses: jurplel/install-qt-action@v4 with: @@ -147,7 +147,7 @@ jobs: if [[ '${{env.prerelease}}' == 'true' ]] then echo "This is a pre-release" - previousTag=$(git tag --sort=-creatordate | grep "^v" | head -n 1) + previousTag=$(git tag --sort=-creatordate | grep "^v" | grep -v "Release" | head -n 1) else echo "This is not a pre-release" previousTag=$(git tag --sort=-creatordate | grep "^v" | grep -v "alpha" | head -n 1) diff --git a/.github/workflows/auto format.yml b/.github/workflows/auto format.yml index 2cc5467d..68fade99 100644 --- a/.github/workflows/auto format.yml +++ b/.github/workflows/auto format.yml @@ -29,8 +29,7 @@ jobs: eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" brew install clang-format (/home/linuxbrew/.linuxbrew/opt/clang-format/bin/git-clang-format --binary=/home/linuxbrew/.linuxbrew/opt/clang-format/bin/clang-format --style=file HEAD^) || true - - - uses: autofix-ci/action@89762f9c25dd85f6b78cd40e521232e403357ec0 + - uses: autofix-ci/action@ff86a557419858bb967097bfc916833f5647fa8c css-js-html-format: @@ -39,16 +38,6 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 2 - - uses: actions/setup-node@v4 - with: - node-version: 16 - - run: npm ci - - run: npx prettier --write src/stylesheets src/scripts/gd-*.js - # Optimize all PNGs with https://pngquant.org/ - # - run: sudo apt-get update && sudo apt-get install -y pngquant - # - name: Run pngquant - # run: | - # shopt -s globstar - # pngquant -f --ext .png --skip-if-larger -- **/*.png - - uses: autofix-ci/action@89762f9c25dd85f6b78cd40e521232e403357ec0 + - run: npx prettier . --write + - uses: autofix-ci/action@ff86a557419858bb967097bfc916833f5647fa8c diff --git a/.prettierignore b/.prettierignore index 1d1644cd..f019d35d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,12 @@ -**/.clang-format +# ignore all +/**/*.* +# unignore js and cssfiles +!**/*.js +!**/*.css + +# reignore other js files +**/*.min.js +**/iframe-defer.js +**/mark.js +**/darkreader.js diff --git a/.prettierrc.json b/.prettierrc.json index 8b137891..9e26dfee 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1 +1 @@ - +{} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index f459721a..c0be571c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,6 +192,12 @@ endif () #### Compile definitions +# Disable deprecated staffs for Qt<=6.7 (Bump this if ever consider bump Qt version) +target_compile_definitions(${GOLDENDICT} PRIVATE + QT_DISABLE_DEPRECATED_UP_TO=0x060700 + QT_NO_DEPRECATED_WARNINGS +) + target_compile_definitions(${GOLDENDICT} PUBLIC CMAKE_USED_HACK # temporal hack to avoid breaking qmake build MAKE_QTMULTIMEDIA_PLAYER @@ -266,15 +272,25 @@ if (APPLE) set(Assembling_Dir "${CMAKE_BINARY_DIR}/redist") set(App_Name "${GOLDENDICT}.app") set(Redistributable_APP "${Assembling_Dir}/${App_Name}") - + + # if anything wrong, delete this and affect lines, and see what's Qt will generate by default. + set(QtConfPath "${Redistributable_APP}/Contents/Resources/qt.conf") + qt_generate_deploy_script( TARGET ${GOLDENDICT} OUTPUT_SCRIPT deploy_script - CONTENT "qt_deploy_runtime_dependencies( + CONTENT " + set(QT_DEPLOY_PREFIX \"${Redistributable_APP}\") + set(QT_DEPLOY_TRANSLATIONS_DIR \"Contents/Resources/translations\") + qt_deploy_runtime_dependencies( EXECUTABLE \"${Redistributable_APP}\" GENERATE_QT_CONF - NO_APP_STORE_COMPLIANCE - )" + NO_APP_STORE_COMPLIANCE) + qt_deploy_translations() + qt_deploy_qt_conf(\"${QtConfPath}\" + PLUGINS_DIR PlugIns + TRANSLATIONS_DIR Resources/translations) + " ) install(TARGETS ${GOLDENDICT} BUNDLE DESTINATION "${Assembling_Dir}") diff --git a/README.md b/README.md index b5923383..81622f53 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,7 @@ [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=xiaoyifang_goldendict&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=xiaoyifang_goldendict) [![Build](https://github.com/xiaoyifang/goldendict-ng/actions/workflows/PR-check-cmake.yml/badge.svg)](https://github.com/xiaoyifang/goldendict-ng/actions/workflows/PR-check-cmake.yml) -The Next Generation GoldenDict. A feature-rich open-source dictionary lookup program, -supporting [multiple dictionary formats](https://xiaoyifang.github.io/goldendict-ng/dictformats/) and online -dictionaries. +GoldenDict-ng is an advanced dictionary lookup program, supporting [many formats](https://xiaoyifang.github.io/goldendict-ng/dictformats/). | Linux | Windows | macOS | |--|--|--| @@ -20,7 +18,7 @@ dictionaries. [General discussions](https://github.com/xiaoyifang/goldendict-ng/discussions) -# Some significant features of this fork +# Some features compared to the original GoldenDict - webengine with latest html/css feature support - support >4GB dictionary diff --git a/icons/readme.txt b/icons/README.txt similarity index 93% rename from icons/readme.txt rename to icons/README.txt index c58cb372..50171de8 100644 --- a/icons/readme.txt +++ b/icons/README.txt @@ -1,79 +1,79 @@ -issue: https://github.com/goldendict/goldendict/issues/1441 - -http://tango.freedesktop.org/Tango_Desktop_Project GPLv3 -list: -internet.svg -home.svg -configure.svg -fileopen.svg -addtab.svg -wizard.svg -fulltext -text2speech -reload -icons/print.svg -icons/programs.svg -error -star.svg -star_blue.svg -network.svg -hotkeys -previous -next -advanced -windows-list -filesave -playsound_color -interface -webdict -transliteration -closetab -folder -reload -menu.svg - -https://packages.debian.org/bullseye/gnome-icon-theme GPLv3 -lists: -clear - -https://commons.wikimedia.org/wiki/File:Accessories-dictionary.svg -lists: -icon32_sdict.svg - - -https://freesvg.org/pushpin-vector-image public domain -lists: -pushbin - - -https://commons.wikimedia.org/wiki/File:Arrow_bottom_svg.svg license:public domain -lists: -1downarrow - - -these two icons from sertoli @ https://forum.freemdict.com/u/sertoli/summary -playsound.png -playsound_full.png - - -LGPL -icon32_zoombase.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-page-zoom-icon.png -icon32_zoomout.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-zoom-out-icon.png -icon32_zoomin.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-zoom-in-icon.png -reload.png https://iconarchive.com/show/oxygen-icons-by-oxygen-icons.org/Actions-edit-redo-icon.html -advanced.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-system-run-icon.png -sources.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Apps-plasma-icon.png - -book.svg https://github.com/johnfactotum/foliate - - -lingualibre.svg https://en.m.wikipedia.org/wiki/File:Lingualibre-logo-no-text.svg - - -Apache License Version 2.0 -1downarrow.svg -system-search.svg -Modified from https://github.com/google/material-design-icons - -add-anki-icon.svg MIT license +issue: https://github.com/goldendict/goldendict/issues/1441 + +http://tango.freedesktop.org/Tango_Desktop_Project GPLv3 +list: +internet.svg +home.svg +configure.svg +fileopen.svg +addtab.svg +wizard.svg +fulltext +text2speech +reload +icons/print.svg +icons/programs.svg +error +star.svg +star_blue.svg +network.svg +hotkeys +previous +next +advanced +windows-list +filesave +playsound_color +interface +webdict +transliteration +closetab +folder +reload +menu.svg + +https://packages.debian.org/bullseye/gnome-icon-theme GPLv3 +lists: +clear + +https://commons.wikimedia.org/wiki/File:Accessories-dictionary.svg +lists: +icon32_sdict.svg + + +https://freesvg.org/pushpin-vector-image public domain +lists: +pushbin + + +https://commons.wikimedia.org/wiki/File:Arrow_bottom_svg.svg license:public domain +lists: +1downarrow + + +these two icons from sertoli @ https://forum.freemdict.com/u/sertoli/summary +playsound.png +playsound_full.png + + +LGPL +icon32_zoombase.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-page-zoom-icon.png +icon32_zoomout.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-zoom-out-icon.png +icon32_zoomin.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-zoom-in-icon.png +reload.png https://iconarchive.com/show/oxygen-icons-by-oxygen-icons.org/Actions-edit-redo-icon.html +advanced.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Actions-system-run-icon.png +sources.png https://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/128/Apps-plasma-icon.png + +book.svg https://github.com/johnfactotum/foliate + + +lingualibre.svg https://en.m.wikipedia.org/wiki/File:Lingualibre-logo-no-text.svg + + +Apache License Version 2.0 +1downarrow.svg +system-search.svg +Modified from https://github.com/google/material-design-icons + +add-anki-icon.svg MIT license https://www.svgrepo.com/svg/435992/add-card \ No newline at end of file diff --git a/icons/flags/00readme.txt b/icons/flags/README.md similarity index 100% rename from icons/flags/00readme.txt rename to icons/flags/README.md diff --git a/locale/Readme.md b/locale/Readme.md deleted file mode 100644 index e4c6dfb2..00000000 --- a/locale/Readme.md +++ /dev/null @@ -1,3 +0,0 @@ -qtwebengine_zh_CN.ts is used to fixed some right context menu on webengine. - -The previous qt_* rename to qt_extra_* to distinguish between the locale language.These qt_extra*.ts are also used to fix GUI translation issues as qt has not provided an update version about these language. diff --git a/locale/ar_SA.ts b/locale/ar_SA.ts index 90e035a0..3d2c1bdb 100644 --- a/locale/ar_SA.ts +++ b/locale/ar_SA.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - حرّر القاموس - Open index folder افتح مجلد الفهرس @@ -651,11 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled تم تعطيل البحث عن النص الكامل - - Edit the dictionary via command: -%1 - حرّر القاموس بالأمر: %1 - DictListModel @@ -748,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder افتح مجلد القاموس - - Edit dictionary - حرّر القاموس - EditDictionaries @@ -2426,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar أظهر الأسماء في &شريط القواميس - - Show Small Icons in &Toolbars - أظهر رموز صغيرة في شريط الأد&وات - &Menubar شريط ال&قوائم @@ -2446,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward تقدّم - - Enable Scanning - تمكين المسح - Pronounce Word (Alt+S) انطق الكلمة (Alt+S) @@ -2544,10 +2523,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites إزالة علامة التبويب الحالية من المفضلة - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. فشل تهيئة تقنية مراقبة المفاتيح الساخنة.<br>تأكد من أن امتداد RECORD في XServer ممكّن. @@ -2700,10 +2675,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder افتح مجلد القاموس - - Edit dictionary - حرّر القاموس - Now indexing for full-text search: الآن الفهرسة للبحث عن النص الكامل: @@ -2712,6 +2683,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? إزالة الكلمة الرئيسية "%1" من المفضلة؟ + + Show &Small Icons in Toolbars + Show &Small Icons in Toolbars + + + Show &Large Icons in Toolbars + Show &Large Icons in Toolbars + + + Show &Normal Icons in Toolbars + Show &Normal Icons in Toolbars + + + Toggle clipboard monitoring + Toggle clipboard monitoring + Mdx::MdxArticleRequest @@ -3054,16 +3041,6 @@ the application. &Popup منبثقة الا&ستكشاف - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - يحدّد إن كان وضع منبثقة الاستكشاف ممكّن افتراضيًّا أو لا. إن عُلِّم، -سيبدأ البرنامج دائمًا ومنبثقة الاستكشاف نشطة. - - - Start with popup turned on - ابدأ و منبثقة الاستكشاف تعمل - Send translated word to main window instead of to show it in popup window أرسل الكلمة المترجمة إلى النافذة الرئيسية بدلًا من إظهارها في نافذة منبثقة @@ -3178,10 +3155,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window انطق تلقائيًّا الكلمات في النافذة الرئيسية - - Auto-pronounce words in popup - انطق تلقائيًّا الكلمات في منبثقة الاستكشاف - Playback التشغيل @@ -3571,6 +3544,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed إعادة التشغيل مطلوبة + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Start with clipboard monitoring turned on + + + Auto-pronounce words in the popup + Auto-pronounce words in the popup + ProgramTypeEditor @@ -3812,10 +3797,6 @@ could be resized or managed in other ways. استخدم هذا لتثبيت النافذة فتبقى على الشاشة، يمكن تغيير حجمها أو إدارتها بطرق عدّة. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 تحذير: %1 diff --git a/locale/ay_BO.ts b/locale/ay_BO.ts index a453d362..65614fc7 100644 --- a/locale/ay_BO.ts +++ b/locale/ay_BO.ts @@ -598,10 +598,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Aru-pirwa askichaña - Open index folder Jisk’a carpeta índice uka jist’araña @@ -654,12 +650,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Phuqat qillqat thaqhañax ch’amanchatawa - - Edit the dictionary via command: -%1 - Aru-pirwa askichaña lurayaña ukampi: -%1 - DictListModel @@ -752,10 +742,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Aru-pirwa ukat q'ipi jist'araña - - Edit dictionary - Aru-pirwa askichaña - EditDictionaries @@ -2468,10 +2454,6 @@ Añadir la pestaña actual a favoritos Show Names in Dictionary &Bar Aru-pirwanak wak'an &sutinak uñachayaña - - Show Small Icons in &Toolbars - Irnaqañatak &wak'an jisk'a saltanak uñachayaña - &Menubar &Menú uka wak'a @@ -2492,10 +2474,6 @@ Anterior Posterior - - Enable Scanning - Escáner ukax ch’amanchatawa - Pronounce Word (Alt+S) Aru arst'aña (Alt+S) @@ -2601,10 +2579,6 @@ Abrir lista de pestañas Eliminar la pestaña actual de favoritos - - %1 - %2 - %1 - %2Ukaxa mä juk’a pachanakwa lurasi - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Pantjiw teclas jank'aki uñjañataki.<br>Uñjam XServer naqañapaw RECORD.<br> @@ -2767,10 +2741,6 @@ Error de importación: datos incorrectos en el fichero. Open dictionary folder Aru-pirwa ukat q'ipi jist'araña - - Edit dictionary - Aru-pirwa askichaña - Now indexing for full-text search: Taqpach qillqat thaqhawix ullasiskiwa: @@ -2781,6 +2751,22 @@ Error de importación: datos incorrectos en el fichero. ¿Eliminar la palabra "%1" de favoritos? + + Show &Small Icons in Toolbars + Uñacht’ayaña &Jisk’a Iconos ukanakax Barras de Herramientas ukan uñacht’ayatawa + + + Show &Large Icons in Toolbars + Uñacht’ayaña &Jach’a Iconos Barras de Herramientas ukan + + + Show &Normal Icons in Toolbars + Uñacht’ayaña &Normal Iconos ukanakax Barras de Herramientas ukan uñacht’ayatawa + + + Toggle clipboard monitoring + Toggle portapapeles uñakipaña + Mdx::MdxArticleRequest @@ -3139,18 +3125,6 @@ Aka jakhu mayjacham jach'a menus jithiqañataki. &Popup &Uñstir wintanampi ullaña - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Habilitar escaneo en una ventana emergente cuando inicia. - -Jisa uskum thaqhañataki jan walikitaki janiwa. -Akasti marcado, thaqhawi ist'araskaniwa. - - - Start with popup turned on - Mä uñstiri wintananxa escaneo uk naktayaña, qalltkis ukja - Send translated word to main window instead of to show it in popup window Enviar palabra traducida a la ventana principal @@ -3273,10 +3247,6 @@ Uñstir wintana uñachañatakixa salta ukan mä klik luram. Auto-pronounce words in main window Nayrir wintanan justupak arunak arst'awi - - Auto-pronounce words in popup - Uñstiri wintanan justupak arunak arst'awi - Playback Arst'awi @@ -3696,6 +3666,18 @@ Activar esta opción para realizar búsquedas adicionales con listas de sinónim Restart needed Wasitat qalltañaw wakisi + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Ajlliñawa, portapapeles uñakipañaxa wakichawi's qalltawipanxa nayraqata uñakipatawa. + + + Start with clipboard monitoring turned on + Qalltañatakix portapapeles ukan uñjañax ch’amanchatawa + + + Auto-pronounce words in the popup + Uka popup ukanx arunakax auto-pronunciar sañ muni + ProgramTypeEditor @@ -3941,10 +3923,6 @@ could be resized or managed in other ways. Utilice esto para fijar la ventana en la pantalla, redimensionarla o gerenciarla en otra manera. - - %1 - GoldenDict-ng - %1 - QuriDict-ng - WARNING: %1 AKHAM LURASMA: %1 diff --git a/locale/be_BY.ts b/locale/be_BY.ts index 31cf39cd..cdac58fa 100644 --- a/locale/be_BY.ts +++ b/locale/be_BY.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Рэдагаваць слоўнік - Open index folder Адкрыць індэксны каталог @@ -652,11 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Паўнатэкставы пошук адключаны - - Edit the dictionary via command: -%1 - Рэдагаваць слоўнік з дапамогай каманды: %1 - DictListModel @@ -749,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Адкрыць каталог слоўніка - - Edit dictionary - Рэдагаваць слоўнік - EditDictionaries @@ -823,7 +810,7 @@ between classic and school orthography in cyrillic) Support xapian search syntax, such as AND OR +/- etc. - Падтрымка сінтаксісу пошуку xapian, напрыклад І АБО +/- і г.д. + Падтрымка сінтаксісу пошуку xapian. Напрыклад: І АБО +/- і г.д. Articles found: @@ -2156,7 +2143,7 @@ between classic and school orthography in cyrillic) Hungarian - венгерскі + Венгерская English @@ -2427,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Паказваць &назвы на панэлі слоўнікаў - - Show Small Icons in &Toolbars - Паказваць малыя значкі на панэлі &інструментаў - &Menubar Панэль &меню @@ -2447,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward Далей - - Enable Scanning - Уключыць сканаванне - Pronounce Word (Alt+S) Вымавіць слова (Alt+S) @@ -2545,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Выдаліць бягучую ўкладку з улюбёнага - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Не ўдалося ініцыялізаваць механізм назірання за спалучэннямі клавіш.<br>Пераканайцеся, што ў XServer уключана пашырэнне RECORD. @@ -2701,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Адкрыць каталог слоўніка - - Edit dictionary - Рэдагаваць слоўнік - Now indexing for full-text search: Зараз індэксуюцца для паўнатэкставага пошуку: @@ -2713,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Выдаліць загалоўнае слова "%1" з улюбёнана? + + Show &Small Icons in Toolbars + Паказваць &маленькія значкі на панэлі інструментаў + + + Show &Large Icons in Toolbars + Паказваць &вялікія значкі на панэлі інструментаў + + + Show &Normal Icons in Toolbars + Паказваць &звычайныя значкі на панэлі інструментаў + + + Toggle clipboard monitoring + Пераключыць маніторынг буфера абмену + Mdx::MdxArticleRequest @@ -3048,16 +3035,6 @@ the application. &Popup &Апрацоўванне ў выплыўных вокнах - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Вызначае, ці будзе прадвызначана ўключаная функцыя апрацоўвання ў выплыўных вокнах. Калі адзначана, -праграма заўсёды будзе запускацца з актываванай функцыяй. - - - Start with popup turned on - Запускаць з уключанай функцыяй апрацоўвання ў выплыўных вокнах - Send translated word to main window instead of to show it in popup window Адпраўляць слова для перакладу ў галоўнае акно замест выплыўнога @@ -3171,10 +3148,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Аўтаматычна вымаўляць словы ў галоўным акне - - Auto-pronounce words in popup - Аўтаматычна вымаўляць словы ў выплыўных вокнах - Playback Прайграванне @@ -3561,6 +3534,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Патрабуецца перазапуск + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Выбірае, ці будзе маніторынг буфера абмену ўключацца па змаўчанні пры запуску праграмы'. + + + Start with clipboard monitoring turned on + Пачніце з уключанага маніторынгу буфера абмену + + + Auto-pronounce words in the popup + Аўтаматычнае вымаўленне слоў ва ўсплываючым акне + ProgramTypeEditor @@ -3801,10 +3786,6 @@ from Stardict, Babylon and GLS dictionaries could be resized or managed in other ways. Выкарыстоўвайце, каб замацаваць акно на экране, змяніць памер і інш. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 УВАГА: %1 diff --git a/locale/bg_BG.ts b/locale/bg_BG.ts index 4e9bcd01..a0a4a335 100644 --- a/locale/bg_BG.ts +++ b/locale/bg_BG.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Редактирай речника - Open index folder Отворете индексната папка @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Търсенето в пълен текст е деактивирано - - Edit the dictionary via command: -%1 - Редакция на речник чрез команда: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Отвори папката на речника - - Edit dictionary - Редактирай речника - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar По&казвай името в панел речници - - Show Small Icons in &Toolbars - &Малки икони в панел инструменти - &Menubar &Главно меню @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward Напред - - Enable Scanning - Активиране на сканирането - Pronounce Word (Alt+S) Произнасяне на думата (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Изтрий текущия подпрозорец от Любими - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Грешка при инициализирането на механизма за наблюдение на бързи клавиши.<br>Уверете се, че вашият XServer е с включено разширение RECORD. @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Отвори папката на речника - - Edit dictionary - Редактирай речник - Now indexing for full-text search: Индексират се за Цялотекстово търсене: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Да изтрие заглавието "%1" от Любими? + + Show &Small Icons in Toolbars + Показване на &малки икони в лентите с инструменти + + + Show &Large Icons in Toolbars + Показване на &големи икони в лентите с инструменти + + + Show &Normal Icons in Toolbars + Показване на &нормални икони в лентите с инструменти + + + Toggle clipboard monitoring + Превключване на наблюдението на клипборда + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ the application. &Popup &Изскачащ прозорец - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Избран ли е, Изкачащ прозорец по подразб. или не. Ако е проверено, -програмата винаги ще стартира с активен Изкачащ прозорец. - - - Start with popup turned on - Пускане с включен изскачащ прозорец - Send translated word to main window instead of to show it in popup window Изпрати превежданата дума в главния окно прозорец вместо превод в изскачащ @@ -3180,10 +3156,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Автоматично произнасяне на думите в главния прозорец - - Auto-pronounce words in popup - Автоматично произнасяне на думите в изскачащия прозорец - Playback Възпроизвеждане @@ -3573,6 +3545,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Необходимо е рестартиране + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Избира дали наблюдението на клипборда да бъде включено по подразбиране при стартиране на програмата'. + + + Start with clipboard monitoring turned on + Започнете с включен мониторинг на клипборда + + + Auto-pronounce words in the popup + Автоматично произнасяне на думи в изскачащия прозорец + ProgramTypeEditor @@ -3814,10 +3798,6 @@ could be resized or managed in other ways. Използвайте да закрепи отдолу прозореца, да бъде на екрана, като променен или аранжиран по друг начин. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ПРЕДУПРЕЖДЕНИЕ: %1 diff --git a/locale/crowdin.ts b/locale/crowdin.ts index 258ce97f..af023220 100644 --- a/locale/crowdin.ts +++ b/locale/crowdin.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - - Open index folder @@ -651,11 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled - - Edit the dictionary via command: -%1 - - DictListModel @@ -746,10 +737,6 @@ between classic and school orthography in cyrillic) Open dictionary folder - - Edit dictionary - - EditDictionaries @@ -2424,10 +2411,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar - - Show Small Icons in &Toolbars - - &Menubar @@ -2444,10 +2427,6 @@ between classic and school orthography in cyrillic) Forward - - Enable Scanning - - Pronounce Word (Alt+S) @@ -2541,10 +2520,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites - - %1 - %2 - - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. @@ -2697,10 +2672,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder - - Edit dictionary - - Now indexing for full-text search: @@ -2709,6 +2680,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? + + Show &Small Icons in Toolbars + + + + Show &Large Icons in Toolbars + + + + Show &Normal Icons in Toolbars + + + + Toggle clipboard monitoring + + Mdx::MdxArticleRequest @@ -3040,15 +3027,6 @@ the application. &Popup - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - - - - Start with popup turned on - - Send translated word to main window instead of to show it in popup window @@ -3162,10 +3140,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window - - Auto-pronounce words in popup - - Playback @@ -3543,6 +3517,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + + Start with clipboard monitoring turned on + + + + Auto-pronounce words in the popup + + ProgramTypeEditor @@ -3783,10 +3769,6 @@ from Stardict, Babylon and GLS dictionaries could be resized or managed in other ways. - - %1 - GoldenDict-ng - - WARNING: %1 diff --git a/locale/cs_CZ.ts b/locale/cs_CZ.ts index 6a1a0960..43aaaba1 100644 --- a/locale/cs_CZ.ts +++ b/locale/cs_CZ.ts @@ -596,10 +596,6 @@ a školní ortografií v cyrilici) DictInfo - - Edit dictionary - Upravit slovník - Open index folder Otevřete složku indexu @@ -652,12 +648,6 @@ a školní ortografií v cyrilici) Full-text search disabled Fulltextové vyhledávání zakázáno - - Edit the dictionary via command: -%1 - Upravit slovník příkazem: -%1 - DictListModel @@ -750,10 +740,6 @@ a školní ortografií v cyrilici) Open dictionary folder Otevřít složku slovníků - - Edit dictionary - Upravit slovník - EditDictionaries @@ -2428,10 +2414,6 @@ a školní ortografií v cyrilici) Show Names in Dictionary &Bar Zo&brazit názvy v pruhu slovníků - - Show Small Icons in &Toolbars - Zobrazi&t malé ikony v nástrojových lištách - &Menubar Pruh &nabídky @@ -2448,10 +2430,6 @@ a školní ortografií v cyrilici) Forward Vpřed - - Enable Scanning - Povolit skenování - Pronounce Word (Alt+S) Vyslovit slovo (Alt+S) @@ -2546,10 +2524,6 @@ Pro zjištění '*', '?', '[', ']' symbo Remove current tab from Favorites Odstranit aktuální kartu z oblíbených - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Nepovedlo se inicializovat klávesové zkratky monitorujícícho mechanismu.<br>Ujistěte se, že má XServer zapnuto rozšíření RECORD. @@ -2702,10 +2676,6 @@ Pro zjištění '*', '?', '[', ']' symbo Open dictionary folder Otevřít složku slovníků - - Edit dictionary - Upravit slovník - Now indexing for full-text search: Indexování pro fulltextové vyhledávání: @@ -2714,6 +2684,22 @@ Pro zjištění '*', '?', '[', ']' symbo Remove headword "%1" from Favorites? Odstranit headword "%1" z oblíbených položek? + + Show &Small Icons in Toolbars + Zobrazit &malé ikony na lištách nástrojů + + + Show &Large Icons in Toolbars + Zobrazit &velké ikony na lištách nástrojů + + + Show &Normal Icons in Toolbars + Zobrazit &normální ikony na lištách nástrojů + + + Toggle clipboard monitoring + Přepnout sledování schránky + Mdx::MdxArticleRequest @@ -3054,16 +3040,6 @@ ukončení aplikace. &Popup Vy&skakovací okno - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Určuje, zda je vyskakovací okno automaticky povoleno nebo zakázáno. Pokud -zaškrtnuto, program bude automaticky startovat s aktivovaným vyskakovacím oknem. - - - Start with popup turned on - Spouštět s povoleným vyskakovacím oknem - Send translated word to main window instead of to show it in popup window Poslat přeložené slovo do hlavního okna namísto zobrazení ve vyskakovacím okně @@ -3178,10 +3154,6 @@ zvolené klávesy stisknuty při změně výběru. Auto-pronounce words in main window Automaticky vyslovovat slova v hlavním okně - - Auto-pronounce words in popup - Automaticky vyslovovat slova ve vyskakovacím okně - Playback Přehrání @@ -3571,6 +3543,18 @@ ze Stardict, Babylon a GLS slovníků Restart needed Je potřeba restart + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Určuje, zda bude při startu programu'standardně zapnuto sledování schránky. + + + Start with clipboard monitoring turned on + Začněte se zapnutým sledováním schránky + + + Auto-pronounce words in the popup + Automaticky vyslovovat slova ve vyskakovacím okně + ProgramTypeEditor @@ -3812,10 +3796,6 @@ could be resized or managed in other ways. Toto použijte pro připíchnutí okna, aby zůstalo na obrazovce. Lze měnit jeho velikost a může s ním být i jinak manipulováno. - - %1 - GoldenDict-ng - %1 – GoldenDict-ng - WARNING: %1 UPOZORNĚNÍ: %1 diff --git a/locale/de_CH.ts b/locale/de_CH.ts index 9f61720a..64cc6f90 100644 --- a/locale/de_CH.ts +++ b/locale/de_CH.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Wörterbuch bearbeiten - Open index folder Index Ordner öffnen @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Volltextsuche deaktiviert - - Edit the dictionary via command: -%1 - Das Wörterbuch mit folgendem Zeilenkommando bearbeiten: -%1 - DictListModel @@ -747,10 +737,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Wörterbuch-Ordner öffnen - - Edit dictionary - Wörterbuch bearbeiten - EditDictionaries @@ -2425,10 +2411,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Namen in &Wörterbuchleiste anzeigen - - Show Small Icons in &Toolbars - Kleine Symbole in der &Toolbar anzeigen - &Menubar &Menüleiste @@ -2445,10 +2427,6 @@ between classic and school orthography in cyrillic) Forward Vorwärts - - Enable Scanning - Scannen aktivieren - Pronounce Word (Alt+S) Wort aussprechen (ALT+S) @@ -2543,10 +2521,6 @@ Um folgende Symbole zu finden '*', '?', '[', &apos Remove current tab from Favorites Aktuellen Tab von Lesezeichen entfernen - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Der Mechanismus für die Tastenkürzel konnte nicht initialisiert werden.<br>Vergewissern Sie sich, dass der XServer die RECORD Erweiterung aktiviert hat. @@ -2699,10 +2673,6 @@ Um folgende Symbole zu finden '*', '?', '[', &apos Open dictionary folder Wörterbuch-Ordner öffnen - - Edit dictionary - Wörterbuch bearbeiten - Now indexing for full-text search: Indexiere Volltextsuche: @@ -2711,6 +2681,22 @@ Um folgende Symbole zu finden '*', '?', '[', &apos Remove headword "%1" from Favorites? Entferne Überschrift "%1" von Lesezeichen ? + + Show &Small Icons in Toolbars + Show &Small Icons in Toolbars + + + Show &Large Icons in Toolbars + Show &Large Icons in Toolbars + + + Show &Normal Icons in Toolbars + Show &Normal Icons in Toolbars + + + Toggle clipboard monitoring + Toggle clipboard monitoring + Mdx::MdxArticleRequest @@ -3048,16 +3034,6 @@ the application. &Popup Popup &scannen - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Gibt an, ob der Popup Modus standardmässig aktiviert ist oder nicht. -Falls aktiviert, wird das Programm immer mit aktiviertem Modus gestartet. - - - Start with popup turned on - Mit aktiviertem Popup starten - Send translated word to main window instead of to show it in popup window Übersetzte Wörter ans Hauptfenster senden, anstatt sie im Popup-Fenster anzuzeigen. @@ -3171,10 +3147,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Wörter im Hauptfenster automatisch aussprechen - - Auto-pronounce words in popup - Wörter im Popup automatisch aussprechen - Playback Abspielen @@ -3560,6 +3532,18 @@ Stardict, Babylon und GLS Wörterbüchern wünschen. Restart needed Neustart erforderlich + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Start with clipboard monitoring turned on + + + Auto-pronounce words in the popup + Auto-pronounce words in the popup + ProgramTypeEditor @@ -3801,10 +3785,6 @@ could be resized or managed in other ways. Hiermit kann das Fenster fixiert werden, damit es am Bildschirm bleibt, es in der Grösse verändert, oder andersweitig verwaltet werden kann. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 WARNUNG: %1 diff --git a/locale/de_DE.ts b/locale/de_DE.ts index 13fb98d5..ebcf1327 100644 --- a/locale/de_DE.ts +++ b/locale/de_DE.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Wörterbuch bearbeiten - Open index folder Indexordner öffnen @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Volltextsuche deaktiviert - - Edit the dictionary via command: -%1 - Das Wörterbuch mit folgendem Kommando bearbeiten: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Wörterbuch-Ordner öffnen - - Edit dictionary - Wörterbuch bearbeiten - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Namen in &Wörterbuchleiste anzeigen - - Show Small Icons in &Toolbars - Kleine Icons in der &Toolbar anzeigen - &Menubar &Menüleiste @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward Vorwärts - - Enable Scanning - Scannen aktivieren - Pronounce Word (Alt+S) Wort aussprechen (Alt+S) @@ -2545,10 +2523,6 @@ Um '*', 'zu finden?', '[', ']' Symbole v Remove current tab from Favorites Aktuellen Tab von Lesezeichen entfernen - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Der Mechanismus für die Tastenkürzel konnte nicht initialisiert werden.<br>Vergewissern Sie sich, dass der XServer die RECORD Erweiterung aktiviert hat. @@ -2701,10 +2675,6 @@ Um '*', 'zu finden?', '[', ']' Symbole v Open dictionary folder Wörterbuch-Ordner öffnen - - Edit dictionary - Wörterbuch bearbeiten - Now indexing for full-text search: Indexierung für Volltextsuche: @@ -2713,6 +2683,22 @@ Um '*', 'zu finden?', '[', ']' Symbole v Remove headword "%1" from Favorites? Schlagwort "%1" aus den Favoriten entfernen? + + Show &Small Icons in Toolbars + Kleine Symbole in Symbolleisten anzeigen + + + Show &Large Icons in Toolbars + Große Symbole in Symbolleisten anzeigen + + + Show &Normal Icons in Toolbars + &Normale Symbole in Symbolleisten anzeigen + + + Toggle clipboard monitoring + Zwischenablageüberwachung ein-/ausschalten + Mdx::MdxArticleRequest @@ -3052,16 +3038,6 @@ the application. &Popup Popup &scannen - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Gibt an, ob der Popup Modus standardmäßig aktiviert ist oder nicht. Falls aktiviert, -wird das Programm immer mit aktiviertem Modus gestartet. - - - Start with popup turned on - Mit aktiviertem Popup starten - Send translated word to main window instead of to show it in popup window Übersetzte Wörter ans Hauptfenster senden, anstatt sie im Popup-Fenster anzuzeigen @@ -3175,10 +3151,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Wörter im Hauptfenster automatisch aussprechen - - Auto-pronounce words in popup - Wörter im Popup automatisch aussprechen - Playback Abspielen @@ -3566,6 +3538,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Neustart erforderlich + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Wählt, ob die Zwischenablageüberwachung beim Start des Programms'standardmäßig aktiviert wird. + + + Start with clipboard monitoring turned on + Beginnen Sie mit aktivierter Zwischenablageüberwachung + + + Auto-pronounce words in the popup + Wörter im Popup automatisch aussprechen + ProgramTypeEditor @@ -3807,10 +3791,6 @@ could be resized or managed in other ways. Hiermit kann das Fenster fixiert werden, damit es am Bildschirm bleibt, es in der Größe verändert, oder andersweitig verwaltet werden kann. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 WARNUNG: %1 diff --git a/locale/el_GR.ts b/locale/el_GR.ts index 1fc08a82..a68db228 100644 --- a/locale/el_GR.ts +++ b/locale/el_GR.ts @@ -598,10 +598,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Επεξεργασία λεξικού - Open index folder Άνοιγμα φακέλου ευρετηρίου @@ -654,11 +650,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Η αναζήτηση πλήρους κειμένου απενεργοποιήθηκε - - Edit the dictionary via command: -%1 - Επεξεργασία του λεξικού με χρήση της εντολής: %1 - DictListModel @@ -751,10 +742,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Άνοιγμα φακέλου λεξικού - - Edit dictionary - Επεξεργασία λεξικού - EditDictionaries @@ -2429,10 +2416,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Εμφάνιση &ονομάτων λεξικών - - Show Small Icons in &Toolbars - Μι&κρά εικονίδια - &Menubar Γραμμή &μενού @@ -2449,10 +2432,6 @@ between classic and school orthography in cyrillic) Forward Μπροστά - - Enable Scanning - Ενεργοποίηση Σάρωσης - Pronounce Word (Alt+S) Εκφώνηση λήμματος (Alt+S) @@ -2547,10 +2526,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Αφαίρεση τρέχουσας καρτέλας από τα αγαπημένα - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Απέτυχε η φόρτωση του μηχανισμού παρακολούθησης πλήκτρων συντομεύσεων.<br>Βεβαιωθείτε ότι η επέκταση RECORD του XServer είναι ενεργοποιημένη. @@ -2703,10 +2678,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Άνοιγμα φακέλου λεξικού - - Edit dictionary - Επεξεργασία λεξικού - Now indexing for full-text search: Τώρα ευρετηρίαση για αναζήτηση πλήρους κειμένου: @@ -2715,6 +2686,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Αφαίρεση κεφαλίδας "%1" από τα Αγαπημένα? + + Show &Small Icons in Toolbars + Εμφάνιση &μικρών εικονιδίων στις γραμμές εργαλείων + + + Show &Large Icons in Toolbars + Εμφάνιση &μεγάλων εικονιδίων στις γραμμές εργαλείων + + + Show &Normal Icons in Toolbars + Εμφάνιση &Κανονικών εικονιδίων στις γραμμές εργαλείων + + + Toggle clipboard monitoring + Εναλλαγή παρακολούθησης προχείρου + Mdx::MdxArticleRequest @@ -3056,17 +3043,6 @@ the application. &Popup Ανα&δυόμενο παράθυρο - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Καθορίζει αν θα είναι προεπιλεγμένη η λειτουργία αναδυόμενου παραθύρου. -Αν σημειώσετε την επιλογή, η εφαρμογή θα εκκινείται πάντα με το αναδυόμενο -παράθυρο ενεργοποιημένο. - - - Start with popup turned on - Εκκίνηση με το αναδυόμενο παράθυρο ενεργοποιημένο - Send translated word to main window instead of to show it in popup window Εμφάνιση της μετάφρασης στο κύριο παράθυρο αντί για το αναδυόμενο @@ -3181,10 +3157,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Αυτόματη εκφώνηση λημμάτων στο κύριο παράθυρο - - Auto-pronounce words in popup - Αυτόματη εκφώνηση λημμάτων στο αναδυόμενο παράθυρο - Playback Αναπαραγωγή @@ -3576,6 +3548,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Απαιτείται επανεκκίνηση + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Επιλέγει εάν η παρακολούθηση του προχείρου θα ενεργοποιείται από προεπιλογή κατά την εκκίνηση του προγράμματος'. + + + Start with clipboard monitoring turned on + Ξεκινήστε με ενεργοποιημένη την παρακολούθηση του προχείρου + + + Auto-pronounce words in the popup + Αυτόματη προφορά λέξεων στο αναδυόμενο παράθυρο + ProgramTypeEditor @@ -3816,10 +3800,6 @@ from Stardict, Babylon and GLS dictionaries could be resized or managed in other ways. Χρησιμοποιήστε το για να μετατρέψετε το αναδυόμενο σε κανονικό παράθυρο, που δεν εξαφανίζεται από την οθόνη και μπορεί π.χ. να αλλάξει μέγεθος. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ΠΡΟΕΙΔΟΠΟΙΗΣΗ: %1 diff --git a/locale/eo_UY.ts b/locale/eo_UY.ts index 7507f233..057a5183 100644 --- a/locale/eo_UY.ts +++ b/locale/eo_UY.ts @@ -596,10 +596,6 @@ inter klasika kaj lerneja ortografio en cirila) DictInfo - - Edit dictionary - Redakti vortaron - Open index folder Malfermu indeksan dosierujon @@ -652,12 +648,6 @@ inter klasika kaj lerneja ortografio en cirila) Full-text search disabled Plenteksta serĉo malŝaltita - - Edit the dictionary via command: -%1 - Redaktu la vortaron per komando: -%1 - DictListModel @@ -750,10 +740,6 @@ inter klasika kaj lerneja ortografio en cirila) Open dictionary folder Malfermu vortaran dosierujon - - Edit dictionary - Redakti vortaron - EditDictionaries @@ -2428,10 +2414,6 @@ inter klasika kaj lerneja ortografio en cirila) Show Names in Dictionary &Bar Montri Nomojn en Vortaro & Trinkejo - - Show Small Icons in &Toolbars - Montru Malgrandajn Piktogramojn en &Ilbretoj - &Menubar &Menubreto @@ -2448,10 +2430,6 @@ inter klasika kaj lerneja ortografio en cirila) Forward Antaŭen - - Enable Scanning - Ebligu Skanadon - Pronounce Word (Alt+S) Prononcu Vorton (Alt+S) @@ -2546,10 +2524,6 @@ Por trovi '*', '?', '[', ']' simboloj uz Remove current tab from Favorites Forigu la nunan langeton el Favoritoj - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Malsukcesis pravalorigi la mekanismon de monitorado de klavoj.<br>Certiĝu, ke via XServer havas RECORD-etendon ŝaltita. @@ -2702,10 +2676,6 @@ Por trovi '*', '?', '[', ']' simboloj uz Open dictionary folder Malfermu vortaran dosierujon - - Edit dictionary - Redakti vortaron - Now indexing for full-text search: Nun indeksante por plenteksta serĉo: @@ -2714,6 +2684,22 @@ Por trovi '*', '?', '[', ']' simboloj uz Remove headword "%1" from Favorites? Ĉu forigi kapvorton "%1" el Favoritoj? + + Show &Small Icons in Toolbars + Montri &Malgrandajn Ikonojn en Ilobretoj + + + Show &Large Icons in Toolbars + Montri &Grandajn piktogramojn en Ilobretoj + + + Show &Normal Icons in Toolbars + Montri &Normalajn piktogramojn en Ilobretoj + + + Toggle clipboard monitoring + Ŝaltigi monitoradon de tondujo + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ la aplikaĵon. &Popup &Skani Ŝprucfenestron - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Elektas ĉu la skana ŝprucfenestra reĝimo estas ŝaltita defaŭlte aŭ ne. Se markite, -la programo ĉiam komenciĝus kun la skana ŝprucfenestro aktiva. - - - Start with popup turned on - Komencu kun skanado ŝprucfenestron ŝaltita - Send translated word to main window instead of to show it in popup window Sendu tradukitan vorton al ĉefa fenestro anstataŭ montri ĝin en ŝprucfenestro @@ -3180,10 +3156,6 @@ en la premita stato kiam la vortelekto ŝanĝiĝas. Auto-pronounce words in main window Aŭtomate prononcu vortojn en ĉefa fenestro - - Auto-pronounce words in popup - Aŭtomate prononcu vortojn en skana ŝprucfenestro - Playback Reproduktado @@ -3574,6 +3546,18 @@ el Stardict, Babylon kaj GLS-vortaroj Restart needed Rekomenco necesas + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Elektas ĉu la monitorado de la tondujo estos ŝaltita defaŭlte ĉe la ekfunkciigo de la programo'. + + + Start with clipboard monitoring turned on + Komencu kun monitorado de tondujo ŝaltita + + + Auto-pronounce words in the popup + Aŭtomate prononcu vortojn en la ŝprucfenestro + ProgramTypeEditor @@ -3815,10 +3799,6 @@ could be resized or managed in other ways. Uzu ĉi tion por fiksi la fenestron por ke ĝi restu sur ekrano, povus esti regrandigita aŭ administrita alimaniere. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 AVERTO: %1 diff --git a/locale/es_AR.ts b/locale/es_AR.ts index 3a9b7049..d24a1500 100644 --- a/locale/es_AR.ts +++ b/locale/es_AR.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Editar diccionario - Open index folder Abrir carpeta de índice @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Búsqueda de texto completo deshabilitada - - Edit the dictionary via command: -%1 - Editar el diccionario vía comando: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Abrir carpeta del diccionario - - Edit dictionary - Editar diccionario - EditDictionaries @@ -2428,10 +2414,6 @@ Reordene los grupos usando el mouse sobre las pestañas con los nombres de los m Show Names in Dictionary &Bar Mostrar n&ombres en la barra de diccionarios - - Show Small Icons in &Toolbars - Mostrar íconos &pequeños en las barras - &Menubar Barra de &menú @@ -2448,10 +2430,6 @@ Reordene los grupos usando el mouse sobre las pestañas con los nombres de los m Forward Adelante - - Enable Scanning - Habilitar escaneo - Pronounce Word (Alt+S) Pronunciar palabra (Alt+S) @@ -2546,10 +2524,6 @@ Para encontrar '*', '?', '[', ']' uso de Remove current tab from Favorites Eliminar la pestaña actual de Favoritos - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. No fue posible inicializar el mecanismo de monitoreo de las teclas de acceso rápido. Verifique que su XServer posea la extensión RECORD activada. @@ -2702,10 +2676,6 @@ Para encontrar '*', '?', '[', ']' uso de Open dictionary folder Abrir carpeta del diccionario - - Edit dictionary - Editar diccionario - Now indexing for full-text search: Ahora indexando para búsqueda de texto completo: @@ -2714,6 +2684,22 @@ Para encontrar '*', '?', '[', ']' uso de Remove headword "%1" from Favorites? ¿Eliminar el encabezado "%1" de Favoritos? + + Show &Small Icons in Toolbars + Show &Small Icons in Toolbars + + + Show &Large Icons in Toolbars + Show &Large Icons in Toolbars + + + Show &Normal Icons in Toolbars + Show &Normal Icons in Toolbars + + + Toggle clipboard monitoring + Toggle clipboard monitoring + Mdx::MdxArticleRequest @@ -3058,16 +3044,6 @@ the application. &Popup &Ventana emergente de lectura - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Elige si la ventana emergente de lectura se activará por defecto o no. Si estuviera tildada, -el programa siempre se iniciará con la ventana emergente de lectura activa. - - - Start with popup turned on - Iniciar con la ventana emergente de lectura activada - Send translated word to main window instead of to show it in popup window Enviar palabra traducida a la ventana principal en lugar de mostrarla en la ventana emergente de lectura @@ -3181,10 +3157,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Auto-pronunciar palabras en la ventana principal - - Auto-pronounce words in popup - Auto-pronunciar palabras en la ventana emergente de lectura - Playback Reproducción @@ -3573,6 +3545,18 @@ de los diccionarios Stardict, Babylon y GLS. Restart needed Reiniciar necesario + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Start with clipboard monitoring turned on + + + Auto-pronounce words in the popup + Auto-pronounce words in the popup + ProgramTypeEditor @@ -3815,10 +3799,6 @@ could be resized or managed in other ways. quede en la pantalla, pueda ser redimensionada o pueda ser manipulada de otras formas. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ADVERTENCIA: %1 diff --git a/locale/es_BO.ts b/locale/es_BO.ts index 7845ffa5..81ae8ba6 100644 --- a/locale/es_BO.ts +++ b/locale/es_BO.ts @@ -596,10 +596,6 @@ entre la ortografía clásica y la escolar en cirílico) DictInfo - - Edit dictionary - Editar diccionario - Open index folder Abrir carpeta de índice @@ -652,12 +648,6 @@ entre la ortografía clásica y la escolar en cirílico) Full-text search disabled Búsqueda de texto completo deshabilitada - - Edit the dictionary via command: -%1 - Edite el diccionario mediante el comando: -%1 - DictListModel @@ -750,10 +740,6 @@ entre la ortografía clásica y la escolar en cirílico) Open dictionary folder Abrir carpeta del diccionario - - Edit dictionary - Editar diccionario - EditDictionaries @@ -2428,10 +2414,6 @@ entre la ortografía clásica y la escolar en cirílico) Show Names in Dictionary &Bar Mostrar nombres en el diccionario y la barra - - Show Small Icons in &Toolbars - Mostrar iconos pequeños en las barras de herramientas - &Menubar &Barra de menús @@ -2448,10 +2430,6 @@ entre la ortografía clásica y la escolar en cirílico) Forward Siguiente - - Enable Scanning - Habilitar escaneo - Pronounce Word (Alt+S) Pronunciar la Palabra (Alt+S) @@ -2546,10 +2524,6 @@ Para encontrar '*', '?', '[', ']' uso de Remove current tab from Favorites Eliminar la pestaña actual de Favoritos - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Fallo de inicializar monitoreo de teclas de acceso rápido.<br>Asegúrese que su XServer tiene activada la extensión RECORD. @@ -2702,10 +2676,6 @@ Para encontrar '*', '?', '[', ']' uso de Open dictionary folder Abrir carpeta del diccionario - - Edit dictionary - Editar diccionario - Now indexing for full-text search: Ahora indexando para búsqueda de texto completo: @@ -2714,6 +2684,22 @@ Para encontrar '*', '?', '[', ']' uso de Remove headword "%1" from Favorites? ¿Eliminar el encabezado "%1" de Favoritos? + + Show &Small Icons in Toolbars + Show &Small Icons in Toolbars + + + Show &Large Icons in Toolbars + Show &Large Icons in Toolbars + + + Show &Normal Icons in Toolbars + Show &Normal Icons in Toolbars + + + Toggle clipboard monitoring + Toggle clipboard monitoring + Mdx::MdxArticleRequest @@ -3053,16 +3039,6 @@ the application. &Popup &Escanear con ventana emergente - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Selecciona si el modo de escaneo está activado por defecto o no. Si está -marcado, el programa siempre iniciará con el modo de escaneo habilitado. - - - Start with popup turned on - Habilitar escaneo en una ventana emergente cuando inicia - Send translated word to main window instead of to show it in popup window Enviar la palabra traducida a la ventana principal en lugar de mostrarla en la ventana emergente @@ -3177,10 +3153,6 @@ seleccionadas estén oprimidas cuando la selección de la palabra cambie.Auto-pronounce words in main window Pronuncia palabras automáticamente en la ventana principal - - Auto-pronounce words in popup - Pronunciar palabras automáticamente a escanear con la ventana emergente - Playback Reproducción @@ -3569,6 +3541,18 @@ de los diccionarios Stardict, Babylon y GLS. Restart needed Reiniciar necesario + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Start with clipboard monitoring turned on + + + Auto-pronounce words in the popup + Auto-pronounce words in the popup + ProgramTypeEditor @@ -3809,10 +3793,6 @@ de los diccionarios Stardict, Babylon y GLS. could be resized or managed in other ways. Utilice esto para fijar la ventana en la pantalla, redimensionarla o gerenciarla en otra manera. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ADVERTENCIA: %1 diff --git a/locale/es_ES.ts b/locale/es_ES.ts index cc677865..beb9f01b 100644 --- a/locale/es_ES.ts +++ b/locale/es_ES.ts @@ -596,10 +596,6 @@ entre ortografía clásica y escolar en cirílico) DictInfo - - Edit dictionary - Editar diccionario - Open index folder Abrir carpeta de índice @@ -652,12 +648,6 @@ entre ortografía clásica y escolar en cirílico) Full-text search disabled Búsqueda de texto completo deshabilitada - - Edit the dictionary via command: -%1 - Editar el diccionario mediante comando: -%1 - DictListModel @@ -750,10 +740,6 @@ entre ortografía clásica y escolar en cirílico) Open dictionary folder Abrir carpeta del diccionario - - Edit dictionary - Editar diccionario - EditDictionaries @@ -2428,10 +2414,6 @@ entre ortografía clásica y escolar en cirílico) Show Names in Dictionary &Bar Mostrar N&ombres en Barra de Diccionarios - - Show Small Icons in &Toolbars - Mostrar &Iconos Pequeños en Barras de Herramientas - &Menubar Barra de &menús @@ -2448,10 +2430,6 @@ entre ortografía clásica y escolar en cirílico) Forward Adelante - - Enable Scanning - Habilitar escaneo - Pronounce Word (Alt+S) Pronunciar palabra (Alt+S) @@ -2546,10 +2524,6 @@ Para encontrar '*', '?', '[', ']' símbo Remove current tab from Favorites Eliminar la pestaña actual de Favoritos - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Se se ha podido iniciar la monitorización de teclas de acceso rápido.<br>Asegúrese de que su servidor X tiene activada la extensión RECORD. @@ -2702,10 +2676,6 @@ Para encontrar '*', '?', '[', ']' símbo Open dictionary folder Abrir directorio de diccionarios - - Edit dictionary - Editar diccionario - Now indexing for full-text search: Indexando ahora la búsqueda de texto completo: @@ -2714,6 +2684,22 @@ Para encontrar '*', '?', '[', ']' símbo Remove headword "%1" from Favorites? ¿Eliminar el encabezado "%1" de Favoritos? + + Show &Small Icons in Toolbars + Mostrar iconos pequeños en las barras de herramientas + + + Show &Large Icons in Toolbars + Mostrar iconos grandes en las barras de herramientas + + + Show &Normal Icons in Toolbars + Mostrar iconos normales en las barras de herramientas + + + Toggle clipboard monitoring + Activar o desactivar la supervisión del portapapeles + Mdx::MdxArticleRequest @@ -3054,16 +3040,6 @@ en lugar de cerrrarse. &Popup &Ventana emergente de búsqueda - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Elige si la ventana emergente de búsqueda está habilitada por defecto o no. Si se marca, -el programa empezará siempre con la ventana emergente de búsqueda activada. - - - Start with popup turned on - Empezar con la ventana emergente de búsqueda activada - Send translated word to main window instead of to show it in popup window Enviar palabra traducida a la ventana principal en lugar de mostrarla en la ventana emergente @@ -3178,10 +3154,6 @@ las teclas elegidas cuando cambia la palabra seleccionada. Auto-pronounce words in main window Pronunciar palabras automáticamente en la ventana principal - - Auto-pronounce words in popup - Pronunciar palabras automáticamente en la ventana emergente de búsqueda - Playback Reproducción @@ -3571,6 +3543,18 @@ de diccionarios Stardict, Babylon y GLS Restart needed Reinicio necesario + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Comience con la supervisión del portapapeles activada + + + Auto-pronounce words in the popup + Pronunciar palabras automáticamente en la ventana emergente + ProgramTypeEditor @@ -3812,10 +3796,6 @@ could be resized or managed in other ways. Utilice esta opción para fijar la ventana de manera que permanezca inmóvil en la pantalla, se pueda redimensionar o se pueda manipular de otras maneras. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ADVERTENCIA: %1 diff --git a/locale/fa_IR.ts b/locale/fa_IR.ts index 6a75c115..93041958 100644 --- a/locale/fa_IR.ts +++ b/locale/fa_IR.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - ویرایش واژه‌نامه - Open index folder پوشه فهرست را باز کنید @@ -652,11 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled جستجوی متن کامل غیرفعال شد - - Edit the dictionary via command: -%1 - ویرایش واژه‌نامه با دستور: %1 - DictListModel @@ -749,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder بازکردن پوشه واژه‌نامه - - Edit dictionary - ویرایش واژه‌نامه - EditDictionaries @@ -2427,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar نمایش نا&م‌ها در نوار واژه‌نامه - - Show Small Icons in &Toolbars - نمایش نشانه‌های &کوچک در نوار ابزار - &Menubar نوار &منو @@ -2447,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward پیش - - Enable Scanning - به کار انداختن پویش - Pronounce Word (Alt+S) بیان واژه (Alt+S) @@ -2545,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites حذف زبانهٔ کنونی از پسندیده‌ها - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. برپاسازی سازوکار بازبینی کلیدهای میان‌بر شکست خورد.<br>مطمئن شوید که افزونه RECORD مربوط به XServer روشن شده است. @@ -2701,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder باز کردن پوشه واژه‌نامه - - Edit dictionary - ویرایش واژه‌نامه - Now indexing for full-text search: اکنون در حال نمایه سازی برای جستجوی متن کامل: @@ -2713,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? عنوان "%1" از موارد دلخواه حذف شود؟ + + Show &Small Icons in Toolbars + نمایش نمادهای &کوچک در نوار ابزار + + + Show &Large Icons in Toolbars + نمایش نمادهای &بزرگ در نوار ابزار + + + Show &Normal Icons in Toolbars + نمایش نمادهای &عادی در نوار ابزار + + + Toggle clipboard monitoring + تغییر وضعیت نظارت بر کلیپ بورد + Mdx::MdxArticleRequest @@ -3054,16 +3041,6 @@ the application. &Popup پویش &واشو - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - برگزینید که آیا حالت پویش واشو به‌طور پیش‌فرض روشن باشد یا نه. اگر -به‌کار افتاده باشد، برنامه همیشه با فعال بودن پویش واشو آغاز می‌شود. - - - Start with popup turned on - آغاز با روشن بودن پویش واشو - Send translated word to main window instead of to show it in popup window واژه ترجمه شده را به‌جای نمایش در پنجره واشو به پنجره اصلی بفرست @@ -3178,10 +3155,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window بیان خودکار واژه‌ها در پنجره اصلی - - Auto-pronounce words in popup - بیان خودکار واژه‌ها در پویش واشو - Playback بازپخش @@ -3571,6 +3544,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed نیاز به راه اندازی مجدد + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + انتخاب می کند که آیا هنگام راه اندازی برنامه'نظارت بر کلیپ بورد به طور پیش فرض روشن شود یا خیر. + + + Start with clipboard monitoring turned on + با روشن بودن نظارت بر کلیپ بورد شروع کنید + + + Auto-pronounce words in the popup + تلفظ خودکار کلمات در پنجره بازشو + ProgramTypeEditor @@ -3812,10 +3797,6 @@ could be resized or managed in other ways. این سنجاق را فشار دهید تا پنجره روی صفحه بماند، می‌توان تغییر اندازه داد یا طور دیگری مدیریت کرد. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 هشدار: %1 diff --git a/locale/fi_FI.ts b/locale/fi_FI.ts index 58e46f3d..d2a3c474 100644 --- a/locale/fi_FI.ts +++ b/locale/fi_FI.ts @@ -596,10 +596,6 @@ klassisen ja kouluortografian välillä kyrillisessä) DictInfo - - Edit dictionary - Muokkaa sanakirjaa - Open index folder Avaa hakemistokansio @@ -652,12 +648,6 @@ klassisen ja kouluortografian välillä kyrillisessä) Full-text search disabled Koko tekstihaku pois käytöstä - - Edit the dictionary via command: -%1 - Muokkaa sanakirjaa komennon kautta: -%1 - DictListModel @@ -750,10 +740,6 @@ klassisen ja kouluortografian välillä kyrillisessä) Open dictionary folder Avaa sanakirjakansio - - Edit dictionary - Muokkaa sanakirjaa - EditDictionaries @@ -2428,10 +2414,6 @@ klassisen ja kouluortografian välillä kyrillisessä) Show Names in Dictionary &Bar Näytä nimet sanakirjassa &palkki - - Show Small Icons in &Toolbars - Näytä pienet kuvakkeet työkalupalkeissa - &Menubar Valikkopalkki @@ -2448,10 +2430,6 @@ klassisen ja kouluortografian välillä kyrillisessä) Forward Eteenpäin - - Enable Scanning - Ota Skannaus Käyttöön - Pronounce Word (Alt+S) Prounce Word (Alt+S) @@ -2546,10 +2524,6 @@ Löytääksesi '*', '?', '[', ']' tunnus Remove current tab from Favorites Poista nykyinen välilehti suosikeista - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Pikanäppäinten seurantamekanismin alustus epäonnistui.<br>Varmista, että XServer on ottanut RECORD-laajennuksen käyttöön. @@ -2702,10 +2676,6 @@ Löytääksesi '*', '?', '[', ']' tunnus Open dictionary folder Avaa sanakirjakansio - - Edit dictionary - Muokkaa sanakirjaa - Now indexing for full-text search: Nyt indeksoidaan koko tekstin hakuun: @@ -2714,6 +2684,22 @@ Löytääksesi '*', '?', '[', ']' tunnus Remove headword "%1" from Favorites? Poista otsikkosana "%1" suosikeista? + + Show &Small Icons in Toolbars + Näytä &pienet kuvakkeet työkalupalkeissa + + + Show &Large Icons in Toolbars + Näytä &suuret kuvakkeet työkalupalkeissa + + + Show &Normal Icons in Toolbars + Näytä &normaalit kuvakkeet työkalupalkissa + + + Toggle clipboard monitoring + Vaihda leikepöydän valvontaa + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ sovellus. &Popup &Kartoita Ponnahdusikkuna - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Valitsee onko skannaus ponnahdusikkuna oletusarvoisesti päällä vai ei. Jos valittuna, -ohjelma alkaisi aina skannauksen ponnahdusikkunan ollessa aktiivinen. - - - Start with popup turned on - Aloita skannaus ponnahdusikkuna otettu käyttöön - Send translated word to main window instead of to show it in popup window Lähetä käännetty sana pääikkunaan sen sijaan, että se näytetään ponnahdusikkunassa @@ -3180,10 +3156,6 @@ painettuna tilassa, kun sana valinta muuttuu. Auto-pronounce words in main window Ääntää sanat automaattisesti pääikkunassa - - Auto-pronounce words in popup - Ääntää automaattisesti sanoja skannauksessa - Playback Toisto @@ -3574,6 +3546,18 @@ alkaen alkaen alkupisteestä, Babylonista ja GLS-sanakirjoista Restart needed Uudelleenkäynnistys tarvitaan + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Valitsee, otetaanko leikepöydän valvonta oletusarvoisesti käyttöön ohjelman'käynnistyessä. + + + Start with clipboard monitoring turned on + Aloita leikepöydän valvonnalla + + + Auto-pronounce words in the popup + Äännä sanat automaattisesti ponnahdusikkunassa + ProgramTypeEditor @@ -3815,10 +3799,6 @@ could be resized or managed in other ways. Tämän avulla voit kiinnittää ikkunan alaspäin, jotta se pysyisi ruudulla, voidaan muuttaa tai hallita muulla tavoin. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 VAROITUS: %1 diff --git a/locale/fr_FR.ts b/locale/fr_FR.ts index 14d9e1d7..7ecd5e1a 100644 --- a/locale/fr_FR.ts +++ b/locale/fr_FR.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Éditer le dictionnaire - Open index folder Ouvrir le dossier d'index @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Recherche plein texte désactivée - - Edit the dictionary via command: -%1 - Éditer le dictionnaire avec la commande : -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Ouvrir le dossier des dictionnaires - - Edit dictionary - Éditer le dictionnaire - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Afficher les noms dans la &barre de dictionnaire - - Show Small Icons in &Toolbars - Afficher de petites icônes dans les barres d'ou&tils - &Menubar Barre du &menu @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward Suivant - - Enable Scanning - Activer le scan - Pronounce Word (Alt+S) Prononcer le mot (Alt+S) @@ -2545,10 +2523,6 @@ Pour rechercher les symboles '*', '?', '[', ' Remove current tab from Favorites Supprimer l'onglet actuel des Favoris - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Échec lors de l'initialisation du mécanisme d'écoute des raccourcis.<br>Vérifiez que l'extension ENREGISTREMENT du serveur X est activée. @@ -2701,10 +2675,6 @@ Pour rechercher les symboles '*', '?', '[', ' Open dictionary folder Ouvrir le dossier des dictionnaires - - Edit dictionary - Éditer le dictionnaire - Now indexing for full-text search: Indexation en cours pour la recherche plein texte : @@ -2713,6 +2683,22 @@ Pour rechercher les symboles '*', '?', '[', ' Remove headword "%1" from Favorites? Supprimer le mot-vedette "%1" des favoris ? + + Show &Small Icons in Toolbars + Afficher les petites icônes dans les barres d'outils + + + Show &Large Icons in Toolbars + Afficher les grandes icônes dans les barres d'outils + + + Show &Normal Icons in Toolbars + Afficher les icônes normales dans les barres d'outils + + + Toggle clipboard monitoring + Activer/désactiver la surveillance du presse-papiers + Mdx::MdxArticleRequest @@ -3054,16 +3040,6 @@ the application. &Popup Fenêtre de &scan - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Définit si la fonctionnalité de scan par fenêtre pop-up est activée par défaut ou non. -Si cette option est active, GoldenDict démarrera toujours avec la fenêtre de scan activée. - - - Start with popup turned on - Démarrer avec la fenêtre de scan activée - Send translated word to main window instead of to show it in popup window Envoyer la traduction du mot vers la fenêtre principale de GoldenDict au lieu de la montrer dans une pop-up @@ -3177,10 +3153,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Prononciation automatique dans la fenêtre principale - - Auto-pronounce words in popup - Prononciation automatique dans la fenêtre de scan - Playback Lecture @@ -3570,6 +3542,18 @@ des dictionnaires Stardict, Babylon et GLS Restart needed Redémarrage nécessaire + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Choisissez si la surveillance du presse-papiers sera activée par défaut au démarrage du programme'. + + + Start with clipboard monitoring turned on + Commencez avec la surveillance du presse-papiers activée + + + Auto-pronounce words in the popup + Prononciation automatique des mots dans la fenêtre contextuelle + ProgramTypeEditor @@ -3811,10 +3795,6 @@ Erreur lors de l'enregistrement de la ressource : could be resized or managed in other ways. Utiliser pour épingler la fenêtre de manière à ce qu'elle reste à l'écran, puisse être redimensionnée ou gérée par d'autres moyens. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ATTENTION : %1 diff --git a/locale/hi_IN.ts b/locale/hi_IN.ts index 111b298b..567d4963 100644 --- a/locale/hi_IN.ts +++ b/locale/hi_IN.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - शब्दकोश संपादित करें - Open index folder इंडेक्स फ़ोल्डर खोलें @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled पूर्ण-पाठ खोज अक्षम की गई - - Edit the dictionary via command: -%1 - शब्दकोश को समादेश के माध्यम से संपादित करें: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder शब्दकोश फ़ोल्डर खोलें - - Edit dictionary - शब्दकोश संपादित करें - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Afficher les noms dans la &barre de dictionnaire - - Show Small Icons in &Toolbars - Afficher de petites icônes dans les barres d'ou&tils - &Menubar Barre du &menu @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward Suivant - - Enable Scanning - स्कैनिंग सक्षम करें - Pronounce Word (Alt+S) Prononcer le mot (Alt+S) @@ -2545,10 +2523,6 @@ Pour rechercher les symboles '*', '?', '[', ' Remove current tab from Favorites पसंदीदा से वर्तमान टैब हटाएँ - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Échec lors de l'initialisation du mécanisme d'écoute des raccourcis.<br>Vérifiez que l'extension ENREGISTREMENT du serveur X est activée. @@ -2701,10 +2675,6 @@ Pour rechercher les symboles '*', '?', '[', ' Open dictionary folder Ouvrir le dossier des dictionnaires - - Edit dictionary - Éditer le dictionnaire - Now indexing for full-text search: अब पूर्ण-पाठ खोज के लिए अनुक्रमण: @@ -2713,6 +2683,22 @@ Pour rechercher les symboles '*', '?', '[', ' Remove headword "%1" from Favorites? पसंदीदा से हेडवर्ड "%1" हटाएं? + + Show &Small Icons in Toolbars + टूलबार में छोटे चिह्न दिखाएं + + + Show &Large Icons in Toolbars + टूलबार में बड़े चिह्न दिखाएं + + + Show &Normal Icons in Toolbars + टूलबार में &सामान्य चिह्न दिखाएँ + + + Toggle clipboard monitoring + क्लिपबोर्ड मॉनिटरिंग टॉगल करें + Mdx::MdxArticleRequest @@ -3048,17 +3034,6 @@ the application. &Popup &स्कैन पॉपअप - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - यह चुनता है कि स्कैन पॉपअप पद्धति औत्सर्गिक रूप से चालू है या नहीं। अगर जाँचा हुआ हो, -तो प्रोग्राम हमेशा स्कैन पॉपअप सक्रिय के साथ शुरू होगा। - - - - Start with popup turned on - स्कैन पॉपअप चालू के साथ शुरू करें - Send translated word to main window instead of to show it in popup window पॉपअप विंडो में दिखाने की जगह, अनुवादित शब्द को मुख्य विंडो पर भेजें @@ -3172,10 +3147,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window मुख्य खिडकी में शब्दों का स्वतः उच्चारण करें - - Auto-pronounce words in popup - स्कैन पॉपअप में शब्दों का स्वतः उच्चारण करें - Playback प्लेबैक @@ -3558,6 +3529,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed पुनः प्रारंभ करने की आवश्यकता है + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + यह चुनता है कि प्रोग्राम'के प्रारंभ होने पर क्लिपबोर्ड मॉनिटरिंग डिफ़ॉल्ट रूप से चालू होगी या नहीं। + + + Start with clipboard monitoring turned on + क्लिपबोर्ड मॉनिटरिंग चालू करके प्रारंभ करें + + + Auto-pronounce words in the popup + पॉपअप में शब्दों का स्वतः उच्चारण + ProgramTypeEditor @@ -3799,10 +3782,6 @@ could be resized or managed in other ways. खिड़की को पिन करने के लिए इसका उपयोग करें जिससे कि यह स्क्रीन पर बना रहे, अन्य विधियों से आकार बदला या प्रबंधित किया जा सकता है - - %1 - GoldenDict-ng - %1 - गोल्डनडिक्ट-एनजी - WARNING: %1 चेतावनी: %1 diff --git a/locale/hu_HU.ts b/locale/hu_HU.ts index 6d8c9120..f405ae74 100644 --- a/locale/hu_HU.ts +++ b/locale/hu_HU.ts @@ -596,10 +596,6 @@ a klasszikus és az iskolai helyesírás közt cirillben) DictInfo - - Edit dictionary - Szótár szerkesztése - Open index folder Indexmappa megnyitása @@ -652,12 +648,6 @@ a klasszikus és az iskolai helyesírás közt cirillben) Full-text search disabled Keresés a teljes szövegben letiltva - - Edit the dictionary via command: -%1 - A szótár szerkesztése a paranccsal: -%1 - DictListModel @@ -750,10 +740,6 @@ a klasszikus és az iskolai helyesírás közt cirillben) Open dictionary folder Mappa megnyitása - - Edit dictionary - Szótár szerkesztése - EditDictionaries @@ -2428,10 +2414,6 @@ a klasszikus és az iskolai helyesírás közt cirillben) Show Names in Dictionary &Bar Nevek megjelenítése a szótár &gombokon - - Show Small Icons in &Toolbars - Kis &ikonok megjelenítése az eszköztáron - &Menubar &Menüsor @@ -2448,10 +2430,6 @@ a klasszikus és az iskolai helyesírás közt cirillben) Forward Előre - - Enable Scanning - Felugróablak engedélyezése - Pronounce Word (Alt+S) Szó kiejtése (Alt+S) @@ -2546,10 +2524,6 @@ A '*', '?', '[' és ']' karakterek keres Remove current tab from Favorites A jelenlegi lap eltávolítása a kedvencekből - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Nem sikerült a gyorsbillentyűk beállítása.<br>Ellenőrizze, hogy a RECORD bővítmény engedélyezve van az XServeren. @@ -2702,10 +2676,6 @@ A '*', '?', '[' és ']' karakterek keres Open dictionary folder Mappa megnyitása - - Edit dictionary - Szótár szerkesztése - Now indexing for full-text search: Indexelés alatt teljes szöveges kereséshez: @@ -2714,6 +2684,22 @@ A '*', '?', '[' és ']' karakterek keres Remove headword "%1" from Favorites? Eltávolítja a címszót a kedvencekből: "%1"? + + Show &Small Icons in Toolbars + &Kis ikonok megjelenítése az eszköztáron + + + Show &Large Icons in Toolbars + &Nagy ikonok megjelenítése az eszköztáron + + + Show &Normal Icons in Toolbars + &Normál ikonok megjelenítése az eszköztáron + + + Toggle clipboard monitoring + Vágólap-figyelés be- és kikapcsolása + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ való kilépés helyett. &Popup Fordító felugró&ablak - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Megadja, hogy a fordító felugróablak a program indításakor be vagy ki -legyen kapcsolva. - - - Start with popup turned on - Indulás bekapcsolt felugróablakkal - Send translated word to main window instead of to show it in popup window A lefordított szót a program főablakában keresi ki, a felugróablak megjelenítése helyett @@ -3180,10 +3156,6 @@ kijelölésekor, ha a kiválasztott billentyűk mindegyike le van nyomva.Auto-pronounce words in main window Szavak automatikus kimondása a főablakban - - Auto-pronounce words in popup - Szavak automatikus kimondása a felugróablakban - Playback Lejátszás @@ -3573,6 +3545,18 @@ is felhasználja további szócikkek felfedezéséhez Restart needed Újraindítás szükséges + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Kiválasztja, hogy a vágólap figyelése alapértelmezés szerint be legyen-e kapcsolva a'program indításakor. + + + Start with clipboard monitoring turned on + Kezdje a vágólap-felügyelet bekapcsolásával + + + Auto-pronounce words in the popup + Szavak automatikus kiejtése a felugró ablakban + ProgramTypeEditor @@ -3814,10 +3798,6 @@ could be resized or managed in other ways. Ezzel rögzítheti az ablakot, hogy mindig a képernyőn maradjon, átméretezheti vagy különféleképpen kezelheti. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 FIGYELEM: %1 diff --git a/locale/ie_001.ts b/locale/ie_001.ts index be7a1e3c..7c2029ad 100644 --- a/locale/ie_001.ts +++ b/locale/ie_001.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Redacter dictionarium - Open index folder Open index folder @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Full-text search disabled - - Edit the dictionary via command: -%1 - Redacter li dictionarium med comande: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Aperter li fólder del dictionarium - - Edit dictionary - Redacter li dictionarium - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Monstrar nómines in li &panel de dictionariums - - Show Small Icons in &Toolbars - Micri icones in li &instrumentarium - &Menubar Panel de &menú @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward Avan - - Enable Scanning - Enable Scanning - Pronounce Word (Alt+S) Pronunciar li parol (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Remover li actual carte ex li preferet - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Aperter li fólder del dictionarium - - Edit dictionary - Redacter li dictionarium - Now indexing for full-text search: Indexante por sercha plentextual: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Remover li parol «%1» ex li Preferet? + + Show &Small Icons in Toolbars + Show &Small Icons in Toolbars + + + Show &Large Icons in Toolbars + Show &Large Icons in Toolbars + + + Show &Normal Icons in Toolbars + Show &Normal Icons in Toolbars + + + Toggle clipboard monitoring + Toggle clipboard monitoring + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ the application. &Popup &Monitor - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - - - Start with popup turned on - Activar li monitor al inicie - Send translated word to main window instead of to show it in popup window Send translated word to main window instead of to show it in popup window @@ -3180,10 +3156,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Auto-pronunciar paroles in li principal fenestre - - Auto-pronounce words in popup - Auto-pronounce words in popup - Playback Reproduction @@ -3574,6 +3546,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Restart needed + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Start with clipboard monitoring turned on + + + Auto-pronounce words in the popup + Auto-pronounce words in the popup + ProgramTypeEditor @@ -3815,10 +3799,6 @@ could be resized or managed in other ways. Use this to pin down the window so it would stay on screen, could be resized or managed in other ways. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 WARNING: %1 diff --git a/locale/it_IT.ts b/locale/it_IT.ts index dac3b1e9..19e1141a 100644 --- a/locale/it_IT.ts +++ b/locale/it_IT.ts @@ -596,10 +596,6 @@ tra l'ortografia classica e scolastica in cirillico) DictInfo - - Edit dictionary - Modifica dizionario - Open index folder Apri cartella indice @@ -652,12 +648,6 @@ tra l'ortografia classica e scolastica in cirillico) Full-text search disabled Ricerca full-text disattivata - - Edit the dictionary via command: -%1 - Modificia il dizionario via comando: -%1 - DictListModel @@ -750,10 +740,6 @@ tra l'ortografia classica e scolastica in cirillico) Open dictionary folder Apri cartella dizionario - - Edit dictionary - Modifica dizionario - EditDictionaries @@ -2428,10 +2414,6 @@ tra l'ortografia classica e scolastica in cirillico) Show Names in Dictionary &Bar Mostra i n&omi dei dizionari nella barra - - Show Small Icons in &Toolbars - Mostra icone &piccole nelle barre - &Menubar Barra dei &menu @@ -2448,10 +2430,6 @@ tra l'ortografia classica e scolastica in cirillico) Forward Traduzione successiva - - Enable Scanning - Abilita Scansione - Pronounce Word (Alt+S) Ascolta la pronuncia (Alt+S) @@ -2546,10 +2524,6 @@ Per utilizzare nelle ricerche i caratteri '*', '?', '[& Remove current tab from Favorites Rimuovi la scheda corrente dai Preferiti - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. L'inizializzazione del meccanismo di monitoraggio dei tasti scorciatoia è fallito.<br>Assicurarsi che nel proprio XServer c'è l'estensione RECORD attiva. @@ -2703,10 +2677,6 @@ Clicca <b>Scarica</b> per accedere alla pagina di scaricamento.Open dictionary folder Apri cartella dizionario - - Edit dictionary - Modifica dizionario - Now indexing for full-text search: Indicizzazione corrente per la ricerca a testo intero: @@ -2715,6 +2685,22 @@ Clicca <b>Scarica</b> per accedere alla pagina di scaricamento.Remove headword "%1" from Favorites? Rimuovere il lemma "%1" dai Preferiti? + + Show &Small Icons in Toolbars + Mostra icone piccole nelle barre degli strumenti + + + Show &Large Icons in Toolbars + Mostra icone grandi nelle barre degli strumenti + + + Show &Normal Icons in Toolbars + Mostra icone &normali nelle barre degli strumenti + + + Toggle clipboard monitoring + Attiva/disattiva il monitoraggio degli appunti + Mdx::MdxArticleRequest @@ -3054,17 +3040,6 @@ ne causerà soltanto l'iconizzazione nella barra di notifica. &Popup &Puntamento - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Spuntando questa casella, si attiva sin dall'inizio l'attività di scansione e traduzione delle parole puntate. -Le parole tradotte verranno mostrate in una finestra di dialogo a comparsa. -Al contrario se si deseleziona questa casella, scansione e traduzione vengono disabilitate. - - - Start with popup turned on - abilita l'attività di scansione e traduzione delle parole puntate fin dall'avvio del programma - Send translated word to main window instead of to show it in popup window Mostra le traduzioni nella finestra principale del programma invece che nella classica finestra a comparsa @@ -3180,10 +3155,6 @@ Le parole tradotte verranno mostrate in una finestra di dialogo a comparsa.Auto-pronounce words in main window pronuncia automaticamente le parole dalla finestra principale - - Auto-pronounce words in popup - pronuncia automaticamente le parole puntate - Playback Riproduzione @@ -3572,6 +3543,18 @@ dai dizionari di Stardict, Babylon e GLS Restart needed Riavvio necessario + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Sceglie se il monitoraggio degli appunti verrà attivato per impostazione predefinita all'avvio del programma'. + + + Start with clipboard monitoring turned on + Inizia con il monitoraggio degli appunti attivato + + + Auto-pronounce words in the popup + Pronuncia automaticamente le parole nel popup + ProgramTypeEditor @@ -3813,10 +3796,6 @@ could be resized or managed in other ways. Fissa sullo schermo la finestra dei risultati tradotti, in modo che possa essere ridimensionata o gestita liberamente. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ATTENZIONE: %1 diff --git a/locale/ja_JP.ts b/locale/ja_JP.ts index a3be15a0..46748ac7 100644 --- a/locale/ja_JP.ts +++ b/locale/ja_JP.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - 辞書を編集 - Open index folder インデックスフォルダーを開く @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled 全文検索が無効になっています - - Edit the dictionary via command: -%1 - コマンドで辞書を編集します: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder 辞書フォルダを開く - - Edit dictionary - 辞書を編集 - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar 辞書バーに名前を表示(&B) - - Show Small Icons in &Toolbars - ツールバーに小さなアイコンを表示(&T) - &Menubar メニューバー(&M) @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward 進む - - Enable Scanning - スキャンを有効化 - Pronounce Word (Alt+S) 単語の発音 (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites お気に入りから現在のタブを削除 - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. ホットキー監視機構の初期化に失敗しました。<br>XServer の RECORD 拡張がオンになっていることを確認してください。 @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder 辞書フォルダを開く - - Edit dictionary - 辞書を編集 - Now indexing for full-text search: 全文検索のインデックス作成: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? ヘッドワード "%1" をお気に入りから削除しますか? + + Show &Small Icons in Toolbars + ツールバーに小さいアイコンを表示する(&S) + + + Show &Large Icons in Toolbars + ツールバーに大きいアイコンを表示する(&L) + + + Show &Normal Icons in Toolbars + ツールバーに通常アイコンを表示する(&N) + + + Toggle clipboard monitoring + クリップボード監視の切り替え + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ the application. &Popup スキャン ポップアップ(&S) - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - スキャン ポップアップ モードを既定でオンにするかを選択します。チェックされている場合、 -プログラムは常にスキャン ポップアップがアクティブで起動します。 - - - Start with popup turned on - スキャン ポップアップをオンにして起動する - Send translated word to main window instead of to show it in popup window 翻訳された単語をポップアップウィンドウに表示する代わりにメインウィンドウに送信する @@ -3180,10 +3156,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window メイン ウィンドウで単語を自動的に発音する - - Auto-pronounce words in popup - スキャン ポップアップで単語を自動的に発音する - Playback 再生 @@ -3573,6 +3545,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed 再起動が必要です + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + クリップボード監視をオンにして開始します + + + Auto-pronounce words in the popup + ポップアップで単語を自動発音する + ProgramTypeEditor @@ -3814,10 +3798,6 @@ could be resized or managed in other ways. ウィンドウを画面に固定してサイズの変更ができる ようにするにはこのピンを使用します。 - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 警告: %1 diff --git a/locale/jbo_EN.ts b/locale/jbo_EN.ts index 6a30b44e..ed513b69 100644 --- a/locale/jbo_EN.ts +++ b/locale/jbo_EN.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - pa vlacku cu binxo - Open index folder Open index folder @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Full-text search disabled - - Edit the dictionary via command: -%1 - Edit the dictionary via command: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Open dictionary folder - - Edit dictionary - pa vlacku cu binxo - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar ciska ro cmene lo vlacku kajna - - Show Small Icons in &Toolbars - ro pixra poi zvati pa kajna cu cmalu - &Menubar cuxna liste kajna @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward bavla'i - - Enable Scanning - Enable Scanning - Pronounce Word (Alt+S) vlaba'u pa valsi (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites pa se vanbi be lo sepli poi ca se cuxna co'u nelci se tcita - - %1 - %2 - zoi zoi. %1 .zoi - la'o zoi. %2 .zoi - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Open dictionary folder - - Edit dictionary - pa vlacku cu binxo - Now indexing for full-text search: Now indexing for full-text search: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Remove headword "%1" from Favorites? + + Show &Small Icons in Toolbars + Show &Small Icons in Toolbars + + + Show &Large Icons in Toolbars + Show &Large Icons in Toolbars + + + Show &Normal Icons in Toolbars + Show &Normal Icons in Toolbars + + + Toggle clipboard monitoring + Toggle clipboard monitoring + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ the application. &Popup &Popup - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - - - Start with popup turned on - Start with popup turned on - Send translated word to main window instead of to show it in popup window Send translated word to main window instead of to show it in popup window @@ -3180,10 +3156,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Auto-pronounce words in main window - - Auto-pronounce words in popup - Auto-pronounce words in popup - Playback Playback @@ -3574,6 +3546,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Restart needed + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Start with clipboard monitoring turned on + + + Auto-pronounce words in the popup + Auto-pronounce words in the popup + ProgramTypeEditor @@ -3815,10 +3799,6 @@ could be resized or managed in other ways. Use this to pin down the window so it would stay on screen, could be resized or managed in other ways. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 WARNING: %1 diff --git a/locale/kab_KAB.ts b/locale/kab_KAB.ts new file mode 100644 index 00000000..31986ee9 --- /dev/null +++ b/locale/kab_KAB.ts @@ -0,0 +1,4268 @@ + + + + + About + + About + Ɣef + + + GoldenDict-ng dictionary lookup program, version + Goldendict, aseɣẓan n unadi n isegzawalen, alqem wis + + + Licensed under GNU GPLv3 or later + Licensed under GNU GPLv3 or later + + + Copy version info + Copy version info + + + Copy dictionaries list + Copy dictionaries list + + + Credits: + Asnemmer: + + + Based on Qt %1 (%2, %3) + Yettwabna ɣef Qt %1 (%2, %3) + + + + AnkiConnector + + anki: can't create a card without a word + anki: can't create a card without a word + + + Anki search: AnkiConnect is not enabled. + Anki search: AnkiConnect is not enabled. + + + anki: post to anki failed + anki: post to anki failed + + + anki: post to anki success + anki: post to anki success + + + + ArticleInspector + + Inspect + Inspect + + + + ArticleMaker + + Expand article + Expand article + + + Collapse article + Collapse article + + + No translation for <b dir="%3">%1</b> was found in group <b>%2</b>. + No translation for <b dir="%3">%1</b> was found in group <b>%2</b>. + + + No translation was found in group <b>%1</b>. + No translation was found in group <b>%1</b>. + + + Welcome! + Anṣuf ! + + + <h3 align="center">Welcome to <b>GoldenDict</b>!</h3><p>To start working with the program, first visit <em>Edit | Dictionaries</em> to add some directory paths where to search for the dictionary files, set up various Wikipedia sites or other sources, adjust dictionary order or create dictionary groups.<p>And then you're ready to look up your words! You can do that in this window by using a pane to the left, or you can <a href="https://xiaoyifang.github.io/goldendict-ng/ui_popup/">look up words from other active applications</a>. <p>To customize program, check out the available preferences at <em>Edit | Preferences</em>. All settings there have tooltips, be sure to read them if you are in doubt about anything.<p>Should you need further help, have any questions, suggestions or just wonder what the others think, you are welcome at the program's <a href="https://github.com/xiaoyifang/goldendict/discussions">forum</a>.<p>Check program's <a href="https://github.com/xiaoyifang/goldendict">website</a> for the updates. <p>(c) 2008-2013 Konstantin Isakov. Licensed under GPLv3 or later. + <h3 align="center">Welcome to <b>GoldenDict</b>!</h3><p>To start working with the program, first visit <em>Edit | Dictionaries</em> to add some directory paths where to search for the dictionary files, set up various Wikipedia sites or other sources, adjust dictionary order or create dictionary groups.<p>And then you're ready to look up your words! You can do that in this window by using a pane to the left, or you can <a href="https://xiaoyifang.github.io/goldendict-ng/ui_popup/">look up words from other active applications</a>. <p>To customize program, check out the available preferences at <em>Edit | Preferences</em>. All settings there have tooltips, be sure to read them if you are in doubt about anything.<p>Should you need further help, have any questions, suggestions or just wonder what the others think, you are welcome at the program's <a href="https://github.com/xiaoyifang/goldendict/discussions">forum</a>.<p>Check program's <a href="https://github.com/xiaoyifang/goldendict">website</a> for the updates. <p>(c) 2008-2013 Konstantin Isakov. Licensed under GPLv3 or later. + + + (untitled) + (war azwel) + + + (picture) + (picture) + + + + ArticleRequest + + Expand article + Expand article + + + From + Seg + + + Collapse article + Collapse article + + + Make a new Anki note + Make a new Anki note + + + Query error: %1 + Query error: %1 + + + Close words: + Close words: + + + Compound expressions: + Compound expressions: + + + Individual words: + Individual words: + + + + ArticleView + + Phrase not found + Phrase not found + + + %1 of %2 matches + %1 of %2 matches + + + Select Current Article + Select Current Article + + + Copy as text + Nɣel am uḍris + + + Inspect + Inspect + + + Resource + Resource + + + Audio + Ameslaw + + + TTS Voice + TTS Voice + + + Video + Tavidyut + + + Video: %1 + Tavidyutt: %1 + + + Definition from dictionary "%1": %2 + Definition from dictionary "%1": %2 + + + Definition: %1 + Definition: %1 + + + ERROR: %1 + TUCCḌA: %1 + + + The referenced resource doesn't exist. + The referenced resource doesn't exist. + + + The referenced audio program doesn't exist. + The referenced audio program doesn't exist. + + + Op&en Link + Op&en Link + + + Open Link in New &Tab + Open Link in New &Tab + + + Open Link in &External Browser + Open Link in &External Browser + + + Save &image... + Sekles &tugna... + + + Open image in system viewer... + Open image in system viewer... + + + Save s&ound... + Save s&ound... + + + &Look up "%1" + &Look up "%1" + + + Look up "%1" in &New Tab + Look up "%1" in &New Tab + + + Send "%1" to input line + Send "%1" to input line + + + &Add "%1" to history + &Add "%1" to history + + + Look up "%1" in %2 + Look up "%1" in %2 + + + Look up "%1" in %2 in &New Tab + Look up "%1" in %2 in &New Tab + + + Save &Bookmark "%1..." + Save &Bookmark "%1..." + + + &Send Current Article to Anki + &Send Current Article to Anki + + + &Send selected text to Anki + &Send selected text to Anki + + + Save sound + Sekles imesli + + + Sound files (*.wav *.opus *.ogg *.oga *.mp3 *.mp4 *.aac *.flac *.mid *.wv *.ape *.spx);;All files (*.*) + Sound files (*.wav *.opus *.ogg *.oga *.mp3 *.mp4 *.aac *.flac *.mid *.wv *.ape *.spx);;All files (*.*) + + + Save image + Sekles tugna + + + Image files (*.bmp *.jpg *.png *.tif);;All files (*.*) + Image files (*.bmp *.jpg *.png *.tif);;All files (*.*) + + + Failed to play sound file: %1 + Failed to play sound file: %1 + + + Failed to create temporary file. + Failed to create temporary file. + + + Failed to auto-open resource file, try opening manually: %1. + Failed to auto-open resource file, try opening manually: %1. + + + WARNING: Audio Player: %1 + WARNING: Audio Player: %1 + + + &Create Anki note + &Create Anki note + + + + BelarusianTranslit + + Belarusian transliteration from latin to cyrillic (classic orthography) + Belarusian transliteration from latin to cyrillic (classic orthography) + + + Belarusian transliteration from latin to cyrillic (school orthography) + Belarusian transliteration from latin to cyrillic (school orthography) + + + Belarusian transliteration (smoothes out the difference +between classic and school orthography in cyrillic) + Belarusian transliteration (smoothes out the difference +between classic and school orthography in cyrillic) + + + + ChineseConversion + + Chinese Conversion + Chinese Conversion + + + Enable conversion between simplified and traditional Chinese characters + Enable conversion between simplified and traditional Chinese characters + + + Chinese Con&version + Chinese Con&version + + + Enable conversion from simplified characters to traditional (Taiwan variant) characters + Enable conversion from simplified characters to traditional (Taiwan variant) characters + + + SC to TC (Taiwan variant) + SC to TC (Taiwan variant) + + + Enable conversion from simplified characters to traditional (Hong Kong variant) characters + Enable conversion from simplified characters to traditional (Hong Kong variant) characters + + + SC to TC (Hong Kong variant) + SC to TC (Hong Kong variant) + + + Enable conversion from traditional characters to simplified characters + Enable conversion from traditional characters to simplified characters + + + TC to SC + TC ɣer SC + + + Simplified to traditional Chinese (Taiwan variant) conversion + Simplified to traditional Chinese (Taiwan variant) conversion + + + Simplified to traditional Chinese (Hong Kong variant) conversion + Simplified to traditional Chinese (Hong Kong variant) conversion + + + Traditional to simplified Chinese conversion + Traditional to simplified Chinese conversion + + + + CustomTranslit + + custom transliteration + custom transliteration + + + + Dialog + + Proxy authentication required + Proxy authentication required + + + You need to supply a Username and a Password to access via proxy + You need to supply a Username and a Password to access via proxy + + + Username: + Isem n useqdac: + + + Password: + Awal n uɛeddi: + + + + DictGroupWidget + + Form + Form + + + Group icon: + Group icon: + + + Shortcut: + Anegzum: + + + Favorites folder: + Favorites folder: + + + None + None + + + From file... + Seg ufaylu... + + + Choose a file to use as group icon + Choose a file to use as group icon + + + Images + Tugniwin + + + All files + Akk ifuyla + + + Error + Tuccḍa + + + Can't read the specified image file. + Can't read the specified image file. + + + + DictGroupsWidget + + Dictionaries: + Isegzawalen: + + + Confirmation + Confirmation + + + Are you sure you want to generate a set of groups based on language pairs? + Are you sure you want to generate a set of groups based on language pairs? + + + Unassigned + Unassigned + + + Auto group by folder failed. + Auto group by folder failed. + + + The parent directory of %1 can not be reached. + The parent directory of %1 can not be reached. + + + Are you sure you want to generate a set of groups based on containing folders? + Are you sure you want to generate a set of groups based on containing folders? + + + Are you sure you want to generate a set of groups based on metadata.toml? + Are you sure you want to generate a set of groups based on metadata.toml? + + + Combine groups by source language to "%1->" + Combine groups by source language to "%1->" + + + Combine groups by target language to "->%1" + Combine groups by target language to "->%1" + + + Make two-side translate group "%1-%2-%1" + Make two-side translate group "%1-%2-%1" + + + Combine groups with "%1" + Combine groups with "%1" + + + + DictHeadwords + + If checked any filter changes will we immediately applied to headwords list + If checked any filter changes will we immediately applied to headwords list + + + Auto apply + Auto apply + + + Press this button to apply filter to headwords list + Press this button to apply filter to headwords list + + + Apply + Apply + + + Filter string (fixed string, wildcards or regular expression) + Filter string (fixed string, wildcards or regular expression) + + + Filter: + Filter: + + + Search mode + Search mode + + + This element determines how filter string will be interpreted + This element determines how filter string will be interpreted + + + If checked on the symbols case will be take in account when filtering + If checked on the symbols case will be take in account when filtering + + + Match case + Match case + + + Exports headwords to file + Exports headwords to file + + + Export + Sifeḍ + + + Specify the maximum filtered headwords returned. + Specify the maximum filtered headwords returned. + + + Filter max results: + Filter max results: + + + Help + Tallelt + + + OK + IH + + + Text + Aḍris + + + Wildcards + Wildcards + + + RegExp + RegExp + + + Unique headwords total: %1. + Unique headwords total: %1. + + + Unique headwords total: %1, filtered(limited): %2 + Unique headwords total: %1, filtered(limited): %2 + + + Save headwords to file + Save headwords to file + + + Text files (*.txt);;All files (*.*) + Text files (*.txt);;All files (*.*) + + + Can not open exported file + Can not open exported file + + + Export headwords... + Export headwords... + + + Cancel + Sefsex + + + Export process is interrupted + Export process is interrupted + + + Export finished + Export finished + + + + DictInfo + + Open index folder + Open index folder + + + Total articles: + Total articles: + + + Index filename: + Index filename: + + + Total words: + Total words: + + + Open folder + Ldi akaram + + + Translates from: + Tisuqilin seg: + + + Translates to: + Tisuqilin ɣer: + + + Files comprising this dictionary: + Files comprising this dictionary: + + + Description: + Aglam: + + + Show all unique dictionary headwords + Show all unique dictionary headwords + + + Headwords + Headwords + + + Full-text search enabled + Full-text search enabled + + + Full-text search disabled + Full-text search disabled + + + + DictListModel + + %1 entries + %1 entries + + + + DictServer + + Url: + Url: + + + Databases: + Izaduren n yisefka: + + + Search strategies: + Search strategies: + + + Server databases + Server databases + + + + DictServersModel + + Enabled + Enabled + + + Name + Isem + + + Address + Tansa + + + Databases + Izaduren n yisefka + + + Strategies + Strategies + + + Icon + Tignit + + + Comma-delimited list of databases +(empty string or "*" matches all databases) + Comma-delimited list of databases +(empty string or "*" matches all databases) + + + Comma-delimited list of search strategies +(empty string mean "prefix" strategy) + Comma-delimited list of search strategies +(empty string mean "prefix" strategy) + + + + DictionaryBar + + &Dictionary Bar + &Dictionary Bar + + + Extended menu with all dictionaries... + Extended menu with all dictionaries... + + + Edit this group + Edit this group + + + Dictionary info + Dictionary info + + + Dictionary headwords + Dictionary headwords + + + Open dictionary folder + Ldi akaram n usegzawal + + + + EditDictionaries + + Dictionaries + Isegzawalen + + + &Sources + &Tiɣbula + + + &Dictionaries + &Isegzawalen + + + &Groups + &Groups + + + Sources changed + Sources changed + + + Some sources were changed. Would you like to accept the changes? + Some sources were changed. Would you like to accept the changes? + + + Accept + Accept + + + Cancel + Sefsex + + + + Epwing::EpwingDictionary + + Previous Page + Asebter uzwir + + + Next Page + Asebter uḍfir + + + + ExternalViewer + + the viewer program name is empty + the viewer program name is empty + + + + FTS::FullTextSearchDialog + + Full-text search + Full-text search + + + Default + Amezwaru + + + Wildcards + Wildcards + + + Support xapian search syntax, such as AND OR +/- etc. + Support xapian search syntax, such as AND OR +/- etc. + + + Articles found: + Articles found: + + + Now indexing: + Now indexing: + + + None + None + + + The querying word can not be empty. + The querying word can not be empty. + + + No dictionaries for full-text search + No dictionaries for full-text search + + + + FavoritesModel + + Error in favorities file + Error in favorities file + + + + FavoritesPaneWidget + + &Delete Selected + &Delete Selected + + + Copy Selected + Copy Selected + + + Add folder + Rnu akaram + + + Favorites: + Favorites: + + + All selected items will be deleted. Continue? + All selected items will be deleted. Continue? + + + + Forvo::ForvoArticleRequest + + XML parse error: %1 at %2,%3 + XML parse error: %1 at %2,%3 + + + Added %1 + Added %1 + + + by + sɣur + + + Male + Male + + + Female + Female + + + from + from + + + Go to Edit|Dictionaries|Sources|Forvo and apply for our own API key to make this error disappear. + Go to Edit|Dictionaries|Sources|Forvo and apply for our own API key to make this error disappear. + + + + FtsSearchPanel + + &Previous + &Previous + + + &Next + &Next + + + + FullTextSearchDialog + + Search + Anadi + + + Mode: + Mode: + + + Articles found: + Articles found: + + + Available dictionaries in group: + Available dictionaries in group: + + + Wait for indexing: + Wait for indexing: + + + Total: + Total: + + + Indexed: + Indexed: + + + Now indexing: None + Now indexing: None + + + Cancel + Sefsex + + + Help + Tallelt + + + + GermanTranslit + + German Transliteration + German Transliteration + + + + GreekTranslit + + Greek Transliteration + Greek Transliteration + + + + GroupComboBox + + Choose a Group (Alt+G) + Choose a Group (Alt+G) + + + + Groups + + Dictionaries available: + Isegzawalen i yellan: + + + Add selected dictionaries to group (Ins) + Add selected dictionaries to group (Ins) + + + > + > + + + Ins + Ins + + + Remove selected dictionaries from group (Del) + Remove selected dictionaries from group (Del) + + + < + < + + + Del + Del + + + Groups: + Groups: + + + Tab 2 + Tab 2 + + + Create new dictionary group + Create new dictionary group + + + &Add group + &Snulfu-d agraw + + + Rename current dictionary group + Rename current dictionary group + + + Re&name group + Re&name group + + + Remove current dictionary group + Remove current dictionary group + + + &Remove group + &Remove group + + + Remove all dictionary groups + Remove all dictionary groups + + + Remove all groups + Remove all groups + + + Create language-based groups + Create language-based groups + + + Group by Languages + Group by Languages + + + Create folder-based groups. + Create folder-based groups. + + + Group by Folders + Group by Folders + + + Group by Metadata + Group by Metadata + + + Drag&drop dictionaries to and from the groups, move them inside the groups, reorder the groups using your mouse. + Drag&drop dictionaries to and from the groups, move them inside the groups, reorder the groups using your mouse. + + + Group tabs + Group tabs + + + Open groups list + Open groups list + + + Add group + Rnu agraw + + + Give a name for the new group: + Give a name for the new group: + + + Rename group + Rename group + + + Give a new name for the group: + Give a new name for the group: + + + Remove group + Remove group + + + Are you sure you want to remove the group <b>%1</b>? + Are you sure you want to remove the group <b>%1</b>? + + + Are you sure you want to remove all the groups? + Are you sure you want to remove all the groups? + + + + HistoryPaneWidget + + &Delete Selected + &Delete Selected + + + Copy Selected + Copy Selected + + + History: + History: + + + %1/%2 + %1/%2 + + + History size: %1 entries out of maximum %2 + History size: %1 entries out of maximum %2 + + + + Hunspell + + Spelling suggestions: + Spelling suggestions: + + + %1 Morphology + %1 Morphology + + + + HunspellDictsModel + + Enabled + Enabled + + + Name + Isem + + + + Initializing + + GoldenDict-ng - Initializing + GoldenDict-ng - Initializing + + + Indexing: + Indexing: + + + Dictionary Name + Isem n usegzawal + + + Please wait... + Txil rǧu… + + + Indexing... + Indexing... + + + Loading... + Loading... + + + + Language + + Afar + Tafarit + + + Abkhazian + Tabxazit + + + Avestan + Tavestant + + + Afrikaans + Tafrikanst + + + Akan + Takanit + + + Amharic + Tamharikt + + + Aragonese + Taṛagunit + + + Arabic + Taɛrabt + + + Assamese + Tasamizt + + + Avaric + Tavarikt + + + Aymara + Taymarat + + + Azerbaijani + Tazeṛbayǧanit + + + Bashkir + Tabackirt + + + Belarusian + Tabilurusit + + + Bulgarian + Tabulgarit + + + Bihari + Tabiharit + + + Bislama + Bislama + + + Bambara + Tabambarat + + + Bengali + Tabengalit + + + Tibetan + Tatibitant + + + Breton + Tabrutunt + + + Bosnian + Tabusnit + + + Catalan + Takaṭalant + + + Chechen + Tačičinit + + + Chamorro + Takumurit + + + Corsican + Takuṛsikant + + + Cree + Takrikt + + + Czech + Taččikit + + + Church Slavic + Church Slavic + + + Chuvash + Chuvash + + + Welsh + Welsh + + + Danish + Danish + + + German + Talmanit + + + Divehi + Divehi + + + Dzongkha + Tadzungat + + + Ewe + Tawit + + + Greek + Tagrigit + + + English + Taglizit + + + Esperanto + Taspirantit + + + Spanish + Taspenyulit + + + Estonian + Tasṭunit + + + Basque + Tabaskit + + + Persian + Tafarsit + + + Fulah + Tafulaht + + + Finnish + Finnish + + + Fijian + Fijian + + + Faroese + Faroese + + + French + Tafṛansist + + + Western Frisian + Western Frisian + + + Irish + Tirlandit + + + Scottish Gaelic + Tagalikant n Skutland + + + Galician + Tagalisyant + + + Guarani + Guarani + + + Gujarati + Gujarati + + + Manx + Manx + + + Hausa + Hausa + + + Hebrew + Hebrew + + + Hindi + Tahendit + + + Hiri Motu + Tahirimutut + + + Croatian + Takrwasit + + + Haitian + Haitian + + + Hungarian + Tahungarit + + + Armenian + Taṛminit + + + Herero + Tahirirut + + + Interlingua + Tantirlingwat + + + Indonesian + Tandunizit + + + Interlingue + Interlingue + + + Igbo + Igbo + + + Sichuan Yi + Sichuan Yi + + + Inupiaq + Inupiaq + + + Ido + Ido + + + Icelandic + Taslandit + + + Italian + Taṭelyanit + + + Inuktitut + Tinuktitut + + + Japanese + Tajapunit + + + Javanese + Javanese + + + Georgian + Tajyurjit + + + Kongo + Takungut + + + Kikuyu + Takikuyut + + + Kwanyama + Takwanyamat + + + Kazakh + Takazaxt + + + Kalaallisut + Kalaallisut + + + Khmer + Khmer + + + Kannada + Kannada + + + Korean + Takurit + + + Kanuri + Takanurit + + + Kashmiri + Takacmirit + + + Kurdish + Takurdit + + + Komi + Takumit + + + Cornish + Takurnikt + + + Kirghiz + Kirghiz + + + Latin + Latin + + + Luxembourgish + Luxembourgish + + + Ganda + Ganda + + + Limburgish + Limburgish + + + Lingala + Lingala + + + Lao + Lao + + + Lithuanian + Lithuanian + + + Luba-Katanga + Luba-Katanga + + + Latvian + Latvian + + + Malagasy + Malagasy + + + Marshallese + Marshallese + + + Maori + Maori + + + Macedonian + Macedonian + + + Malayalam + Malayalam + + + Mongolian + Mongolian + + + Marathi + Marathi + + + Malay + Malay + + + Maltese + Maltese + + + Burmese + Burmese + + + Nauru + Nauru + + + Norwegian Bokmal + Norwegian Bokmal + + + North Ndebele + North Ndebele + + + Nepali + Tanipalit + + + Ndonga + Tandungat + + + Dutch + Tahulandit + + + Norwegian Nynorsk + Norwegian Nynorsk + + + Norwegian + Tanurvijit + + + South Ndebele + South Ndebele + + + Navajo + Navajo + + + Chichewa + Chichewa + + + Occitan + Tuksiṭant + + + Ojibwa + Ojibwa + + + Oromo + Oromo + + + Oriya + Oriya + + + Ossetian + Ossetian + + + Panjabi + Panjabi + + + Pali + Pali + + + Polish + Polish + + + Pashto + Pashto + + + Portuguese + Tapurtugit + + + Quechua + Takicwat + + + Raeto-Romance + Raeto-Romance + + + Kirundi + Kirundi + + + Romanian + Tarumanit + + + Russian + Tarusit + + + Kinyarwanda + Kinyarwanda + + + Sanskrit + Sanskrit + + + Sardinian + Sardinian + + + Sindhi + Sindhi + + + Northern Sami + Northern Sami + + + Sango + Sango + + + Serbo-Croatian + Serbo-Croatian + + + Sinhala + Sinhala + + + Slovak + Tasluvakt + + + Slovenian + Tasluvinit + + + Samoan + Tasamwant + + + Shona + Tacunat + + + Somali + Tasumalit + + + Albanian + Talbanit + + + Serbian + Taṣirbit + + + Swati + Taswatit + + + Southern Sotho + Southern Sotho + + + Sundanese + Sundanese + + + Swedish + Taswidit + + + Swahili + Taswahilit + + + Tamil + Taṭamilit + + + Telugu + Tatilugut + + + Tajik + Tatajikt + + + Thai + Taṭaylandit + + + Tigrinya + Tigrinya + + + Turkmen + Turkmen + + + Tagalog + Tagalog + + + Tswana + Tswana + + + Tonga + Tonga + + + Turkish + Taṭurkit + + + Tsonga + Tsonga + + + Tatar + Tatar + + + Twi + Twi + + + Tahitian + Tahitian + + + Uighur + Uighur + + + Ukrainian + Tukranit + + + Urdu + Turdut + + + Uzbek + Tuzbikt + + + Venda + Tavendat + + + Vietnamese + Tavyitnamit + + + Volapuk + Volapuk + + + Walloon + Walloon + + + Wolof + Wolof + + + Xhosa + Xhosa + + + Yiddish + Yiddish + + + Yoruba + Yoruba + + + Zhuang + Zhuang + + + Chinese + Tacinwat + + + Zulu + Tazulut + + + Lojban + Talujbant + + + Traditional Chinese + Traditional Chinese + + + Simplified Chinese + Simplified Chinese + + + Other + Other + + + Other Simplified Chinese dialects + Other Simplified Chinese dialects + + + Other Traditional Chinese dialects + Other Traditional Chinese dialects + + + Other Eastern-European languages + Other Eastern-European languages + + + Other Western-European languages + Other Western-European languages + + + Other Russian languages + Other Russian languages + + + Other Japanese languages + Other Japanese languages + + + Other Baltic languages + Other Baltic languages + + + Other Greek languages + Other Greek languages + + + Other Korean dialects + Other Korean dialects + + + Other Turkish dialects + Other Turkish dialects + + + Other Thai dialects + Other Thai dialects + + + Tamazight + Tamaziɣt + + + + Language::Db + + French + Tafṛansist + + + Spanish + Taspenyulit + + + Belarusian + Tabilurusit + + + Bulgarian + Tabulgarit + + + Czech + Taččikit + + + German + Talmanit + + + Greek + Tagrigit + + + Finnish + Tafinit + + + Italian + Taṭelyanit + + + Japanese + Tajapunit + + + Korean + Takurit + + + Lithuanian + Taliṭwanit + + + Macedonian + Tamasidunt + + + Dutch + Dutch + + + Polish + Tapulandit + + + Portuguese + Tapurtugit + + + Russian + Tarusit + + + Slovak + Slovak + + + Albanian + Talbanit + + + Serbian (Cyrillic) + Serbian (Cyrillic) + + + Swedish + Swedish + + + Turkish + Taṭurkit + + + Ukrainian + Tukranit + + + Chinese Simplified + Chinese Simplified + + + Chinese Traditional + Chinese Traditional + + + Vietnamese + Tavyitnamit + + + Portuguese, Brazilian + Portuguese, Brazilian + + + Persian + Tafarsit + + + Spanish, Argentina + Spanish, Argentina + + + Hindi + Tahendit + + + Esperanto + Taspirantit + + + German, Switzerland + German, Switzerland + + + Spanish, Bolivia + Spanish, Bolivia + + + Tajik + Tatajikt + + + Quechua + Takicwat + + + Aymara + Taymarat + + + Arabic, Saudi Arabia + Taɛrabt, Suɛudiya Taɛrabt + + + Turkmen + Taturkmant + + + Interlingue + Interlingue + + + Lojban + Lojban + + + Hungarian + Hungarian + + + English + Taglizit + + + + LoadDictionaries + + Error loading dictionaries + Error loading dictionaries + + + + Main + + Error in configuration file. Continue with default settings? + Error in configuration file. Continue with default settings? + + + + MainWindow + + Welcome! + Welcome! + + + &File + &Afaylu + + + &Edit + &Edit + + + &Help + &Help + + + &View + &View + + + &Zoom + &Zoom + + + H&istory + H&istory + + + Search + Search + + + Favo&rites + Favo&rites + + + &Search Pane + &Search Pane + + + &Results Navigation Pane + &Results Navigation Pane + + + Favor&ites Pane + Favor&ites Pane + + + &History Pane + &History Pane + + + &Dictionaries... + &Isegzawalen... + + + F3 + F3 + + + &Preferences... + &Preferences... + + + F4 + F4 + + + &Homepage + &Homepage + + + &About + &About + + + About GoldenDict-ng + About GoldenDict-ng + + + &Quit + &Quit + + + Quit from application + Quit from application + + + Ctrl+Q + Ctrl+Q + + + &Forum + &Forum + + + &Close To Tray + &Close To Tray + + + Minimizes the window to tray + Minimizes the window to tray + + + Ctrl+F4 + Ctrl+F4 + + + &Save Article + &Save Article + + + Save Article + Save Article + + + F2 + F2 + + + &Print + &Print + + + Ctrl+P + Ctrl+P + + + Page Set&up + Page Set&up + + + Print Pre&view + Print Pre&view + + + &Rescan Files + &Rescan Files + + + Ctrl+F5 + Ctrl+F5 + + + &Clear + &Clear + + + &New Tab + &New Tab + + + Ctrl+T + Ctrl+T + + + &Configuration Folder + &Configuration Folder + + + &Show + &Show + + + Ctrl+H + Ctrl+H + + + &Export + &Export + + + &Import + &Import + + + &Always on Top + &Always on Top + + + Always on Top + Always on Top + + + Ctrl+O + Ctrl+O + + + Menu Button + Menu Button + + + Search in page + Search in page + + + Ctrl+F + Ctrl+F + + + Full-text search + Full-text search + + + Ctrl+Shift+F + Ctrl+Shift+F + + + GoldenDict reference + GoldenDict reference + + + F1 + F1 + + + Show + Sken + + + Export + Sifeḍ + + + Import + Kter + + + Add + Rnu + + + Add current tab to Favorites + Add current tab to Favorites + + + Ctrl+E + Ctrl+E + + + Export to list + Export to list + + + Show Names in Dictionary &Bar + Show Names in Dictionary &Bar + + + &Menubar + &Menubar + + + &Navigation + &Navigation + + + Back + Tuɣalin + + + Forward + Uḍfir + + + Pronounce Word (Alt+S) + Pronounce Word (Alt+S) + + + Zoom In + Zoom In + + + Zoom Out + Zoom Out + + + Normal Size + Normal Size + + + Found in Dictionaries: + Yettwaf deg isegzawalen-a: + + + Words Zoom In + Words Zoom In + + + Words Zoom Out + Words Zoom Out + + + Words Normal Size + Words Normal Size + + + Show &Main Window + Show &Main Window + + + Opened tabs + Opened tabs + + + Close current tab + Close current tab + + + Close all tabs + Close all tabs + + + Close all tabs except current + Close all tabs except current + + + Add all tabs to Favorites + Add all tabs to Favorites + + + New Tab + New Tab + + + Accessibility API is not enabled + Accessibility API is not enabled + + + WARNING: %1 + WARNING: %1 + + + String to search in dictionaries. The wildcards '*', '?' and sets of symbols '[...]' are allowed. +To find '*', '?', '[', ']' symbols use '\*', '\?', '\[', '\]' respectively + String to search in dictionaries. The wildcards '*', '?' and sets of symbols '[...]' are allowed. +To find '*', '?', '[', ']' symbols use '\*', '\?', '\[', '\]' respectively + + + %1 dictionaries, %2 articles, %3 words + %1 dictionaries, %2 articles, %3 words + + + All + All + + + Open Tabs List + Open Tabs List + + + (untitled) + (untitled) + + + Remove current tab from Favorites + Remove current tab from Favorites + + + Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. + Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. + + + New Release Available + New Release Available + + + Version <b>%1</b> of GoldenDict is now available for download.<br>Click <b>Download</b> to get to the download page. + Version <b>%1</b> of GoldenDict is now available for download.<br>Click <b>Download</b> to get to the download page. + + + Download + Download + + + Skip This Release + Skip This Release + + + You have chosen to hide a menubar. Use %1 to show it back. + You have chosen to hide a menubar. Use %1 to show it back. + + + Ctrl+M + Ctrl+M + + + Page Setup + Page Setup + + + No printer is available. Please install one first. + No printer is available. Please install one first. + + + Print Article + Print Article + + + Article, Complete (*.html) + Article, Complete (*.html) + + + Article, HTML Only (*.html) + Article, HTML Only (*.html) + + + Save Article As + Save Article As + + + Error + Tuccḍa + + + Can't save article: %1 + Can't save article: %1 + + + Saving article... + Saving article... + + + Save article complete + Save article complete + + + The main window is set to be always on top. + The main window is set to be always on top. + + + &Hide + &Hide + + + Export history to file + Export history to file + + + Text files (*.txt);;All files (*.*) + Text files (*.txt);;All files (*.*) + + + Export error: + Export error: + + + History export complete + History export complete + + + Import history from file + Import history from file + + + Import error: + Import error: + + + Import error: invalid data in file + Import error: invalid data in file + + + History import complete + History import complete + + + Export Favorites to file + Export Favorites to file + + + XML files (*.xml);;All files (*.*) + XML files (*.xml);;All files (*.*) + + + Favorites export complete + Favorites export complete + + + Export Favorites to file as plain list + Export Favorites to file as plain list + + + Import Favorites from file + Import Favorites from file + + + XML files (*.xml);;Txt files (*.txt);;All files (*.*) + XML files (*.xml);;Txt files (*.txt);;All files (*.*) + + + Data parsing error + Data parsing error + + + Favorites import complete + Favorites import complete + + + Dictionary info + Dictionary info + + + Dictionary headwords + Dictionary headwords + + + Open dictionary folder + Ldi akaram n isegzawalen + + + Now indexing for full-text search: + Now indexing for full-text search: + + + Remove headword "%1" from Favorites? + Remove headword "%1" from Favorites? + + + Show &Small Icons in Toolbars + Show &Small Icons in Toolbars + + + Show &Large Icons in Toolbars + Show &Large Icons in Toolbars + + + Show &Normal Icons in Toolbars + Show &Normal Icons in Toolbars + + + Toggle clipboard monitoring + Toggle clipboard monitoring + + + + Mdx::MdxArticleRequest + + Dictionary file was tampered or corrupted + Dictionary file was tampered or corrupted + + + Failed loading article from %1, reason: %2 + Failed loading article from %1, reason: %2 + + + + MediaWiki::MediaWikiArticleRequest + + XML parse error: %1 at %2,%3 + XML parse error: %1 at %2,%3 + + + + MediaWiki::MediaWikiWordSearchRequest + + XML parse error: %1 at %2,%3 + XML parse error: %1 at %2,%3 + + + + MediaWikisModel + + Enabled + Enabled + + + Name + Isem + + + Address + Tansa + + + Icon + Tignit + + + Language Variant + Language Variant + + + + MultimediaAudioPlayer + + Couldn't open audio buffer for reading. + Couldn't open audio buffer for reading. + + + + OrderAndProps + + Form + Form + + + Dictionary order: + Dictionary order: + + + Inactive (disabled) dictionaries: + Inactive (disabled) dictionaries: + + + Dictionary information + Dictionary information + + + Name: + Isem: + + + Total articles: + Total articles: + + + Total words: + Total words: + + + Translates from: + Tisuqilin seg: + + + Translates to: + Tisuqilin ɣer: + + + Description: + Aglam: + + + Files comprising this dictionary: + Files comprising this dictionary: + + + Adjust the order by dragging and dropping items in it. Drop dictionaries to the inactive group to disable their use. + Adjust the order by dragging and dropping items in it. Drop dictionaries to the inactive group to disable their use. + + + Dictionary headwords + Dictionary headwords + + + Sort by name + Sort by name + + + Sort by languages + Smizwer s tutlayin + + + Dictionaries active: %1, inactive: %2 + Dictionaries active: %1, inactive: %2 + + + + PathsModel + + Path + Path + + + Recursive + Recursive + + + + Preferences + + Preferences + Preferences + + + &Interface + &Interface + + + Double-click translates the word clicked + Double-click translates the word clicked + + + Tabbed browsing + Tabbed browsing + + + Normally, opening a new tab switches to it immediately. +With this on however, new tabs will be opened without +switching to them. + Normally, opening a new tab switches to it immediately. +With this on however, new tabs will be opened without +switching to them. + + + Open new tabs in background + Open new tabs in background + + + With this on, new tabs are opened just after the +current, active one. Otherwise they are added to +be the last ones. + With this on, new tabs are opened just after the +current, active one. Otherwise they are added to +be the last ones. + + + Open new tabs after the current one + Open new tabs after the current one + + + Select this option if you don't want to see the main tab bar when only a single tab is opened. + Select this option if you don't want to see the main tab bar when only a single tab is opened. + + + Hide single tab + Hide single tab + + + MRU order: Most recently used order. + MRU order: Most recently used order. + + + Ctrl-Tab navigates tabs in MRU order + Ctrl-Tab navigates tabs in MRU order + + + Normally, pressing ESC key moves focus to the translation line. +With this on however, it will hide the main window. + Normally, pressing ESC key moves focus to the translation line. +With this on however, it will hide the main window. + + + ESC key hides main window + ESC key hides main window + + + Turn this option on if you want to select words by single mouse click + Turn this option on if you want to select words by single mouse click + + + Select word by single click + Select word by single click + + + Startup + Startup + + + Automatically starts GoldenDict after operation system bootup. + Automatically starts GoldenDict after operation system bootup. + + + Start with system + Start with system + + + Normally, clicking on a link, double-clicking on a word or looking up +selection in an article loads the translation and almost immediately +scrolls to the article from the same dictionary. With this option off, +however, the article from the topmost dictionary is shown. + Normally, clicking on a link, double-clicking on a word or looking up +selection in an article loads the translation and almost immediately +scrolls to the article from the same dictionary. With this option off, +however, the article from the topmost dictionary is shown. + + + Automatically scroll to target article + Automatically scroll to target article + + + When enabled, an icon appears in the system tray area which can be used +to open main window and perform other tasks. + When enabled, an icon appears in the system tray area which can be used +to open main window and perform other tasks. + + + Enable system tray icon + Enable system tray icon + + + With this on, the application starts directly to system tray without showing +its main window. + With this on, the application starts directly to system tray without showing +its main window. + + + Start to system tray + Start to system tray + + + With this on, an attempt to close main window would hide it instead of closing +the application. + With this on, an attempt to close main window would hide it instead of closing +the application. + + + Close to system tray + Close to system tray + + + Adjust this value to avoid huge context menus. + Adjust this value to avoid huge context menus. + + + Context menu dictionaries limit: + Context menu dictionaries limit: + + + Appearance + Appearance + + + Interface Font + Interface Font + + + Interface language: + Tutlayt n wegrudem: + + + Article Display style: + Article Display style: + + + Add-on style: + Add-on style: + + + Interface Style: + Interface Style: + + + Turn the UI to dark. + Turn the UI to dark. + + + Dark Mode + Dark Mode + + + Turn the article display style to dark. + Turn the article display style to dark. + + + Dark Reader Mode + Dark Reader Mode + + + These fonts will be applied when the fonts specified by a dictionary are not found. + These fonts will be applied when the fonts specified by a dictionary are not found. + + + Fallback Fonts + Fallback Fonts + + + Standard Font + Standard Font + + + Serif Font + Serif Font + + + Sans-serif Font + Sans-serif Font + + + Monospace Font + Monospace Font + + + &Popup + &Popup + + + Send translated word to main window instead of to show it in popup window + Send translated word to main window instead of to show it in popup window + + + Send translated word to main window + Send translated word to main window + + + Track clipboard changes when Scanning is enabled. Notice! You should always enable this unless you are on Linux. + Track clipboard changes when Scanning is enabled. Notice! You should always enable this unless you are on Linux. + + + Track Clipboard change + Track Clipboard change + + + Track Selection change + Track Selection change + + + With this enabled, the popup would only show up if all chosen keys are +in the pressed state when the word selection changes. + With this enabled, the popup would only show up if all chosen keys are +in the pressed state when the word selection changes. + + + Only tack selection when all selected keys are kept pressed: + Only tack selection when all selected keys are kept pressed: + + + Alt key + Alt key + + + Alt + Alt + + + Ctrl key + Ctrl key + + + Ctrl + Ctrl + + + Shift key + Shift key + + + Shift + Shift + + + Windows key or Meta key + Windows key or Meta key + + + Win/Meta + Win/Meta + + + Show a flag window before showing popup window, click the flag to show popup window. + Show a flag window before showing popup window, click the flag to show popup window. + + + Show scan flag when word is selected + Show scan flag when word is selected + + + Do not show popup when selection or clipboard in one of GoldenDict's own windows changes + Do not show popup when selection or clipboard in one of GoldenDict's own windows changes + + + Ignore GoldenDict's own selection and clipboard changes + Ignore GoldenDict's own selection and clipboard changes + + + Delay time + Delay time + + + ms + ms + + + Hotkeys + Hotkeys + + + Use the following hotkey to show or hide the main window: + Use the following hotkey to show or hide the main window: + + + Use the following hotkey to translate a word from clipboard: + Use the following hotkey to translate a word from clipboard: + + + The hotkeys are global and work from any program and within any context as long as GoldenDict is running in background. + The hotkeys are global and work from any program and within any context as long as GoldenDict is running in background. + + + &Audio + &Audio + + + Pronunciation + Pronunciation + + + Auto-pronounce words in main window + Auto-pronounce words in main window + + + Playback + Playback + + + Play audio files via built-in audio support + Play audio files via built-in audio support + + + Use internal player: + Use internal player: + + + Choose audio back end + Choose audio back end + + + Use any external program to play audio files + Use any external program to play audio files + + + Use external program: + Use external program: + + + Enter audio player command line + Enter audio player command line + + + &Network + &Network + + + Enable if you wish to use a proxy server +for all program's network requests. + Enable if you wish to use a proxy server +for all program's network requests. + + + Use proxy server + Use proxy server + + + System proxy + System proxy + + + Custom proxy + Custom proxy + + + Custom settings + Custom settings + + + Type: + Type: + + + Host: + Host: + + + Port: + Port: + + + User: + Aseqdac: + + + Password: + Awal n uɛeddi: + + + Anki Connect + Anki Connect + + + http:// + http:// + + + Deck: + Deck: + + + Model: + Model: + + + Word + Awal + + + Vocabulary field... + Vocabulary field... + + + Text + Aḍris + + + Definition field... + Definition field... + + + Sentence + Sentence + + + Sentence field (can be empty)... + Sentence field (can be empty)... + + + Enabling this would make GoldenDict block most advertisements +by disallowing content (images, frames) not originating from the site +you are browsing. If some site breaks because of this, try disabling this. + Enabling this would make GoldenDict block most advertisements +by disallowing content (images, frames) not originating from the site +you are browsing. If some site breaks because of this, try disabling this. + + + Disallow loading content from other sites (hides most advertisements) + Disallow loading content from other sites (hides most advertisements) + + + Some sites detect GoldenDict via HTTP headers and block the requests. +Enable this option to workaround the problem. + Some sites detect GoldenDict via HTTP headers and block the requests. +Enable this option to workaround the problem. + + + Do not identify GoldenDict in HTTP headers + Do not identify GoldenDict in HTTP headers + + + Maximum network cache size: + Maximum network cache size: + + + Maximum disk space occupied by GoldenDict's network cache in +%1 +If set to 0 the network disk cache will be disabled. + Maximum disk space occupied by GoldenDict's network cache in +%1 +If set to 0 the network disk cache will be disabled. + + + MiB + MiB + + + When this option is enabled, GoldenDict +clears its network cache from disk during exit. + When this option is enabled, GoldenDict +clears its network cache from disk during exit. + + + Clear network cache on exit + Clear network cache on exit + + + When this is enabled, the program periodically +checks if a new, updated version of GoldenDict +is available for download. If it is so, the program +informs the user about it and prompts to open a +download page. + When this is enabled, the program periodically +checks if a new, updated version of GoldenDict +is available for download. If it is so, the program +informs the user about it and prompts to open a +download page. + + + Check for new program releases periodically + Check for new program releases periodically + + + Full-text search + Full-text search + + + Allow full-text search for: + Allow full-text search for: + + + Don't search in dictionaries containing more than + Don't search in dictionaries containing more than + + + articles (0 - unlimited) + articles (0 - unlimited) + + + Create fulltext index with parallel threads + Create fulltext index with parallel threads + + + Ad&vanced + Ad&vanced + + + History + History + + + Turn this option on to store history of the translated words + Turn this option on to store history of the translated words + + + Store &history + Store &history + + + Specify the maximum number of entries to keep in history. + Specify the maximum number of entries to keep in history. + + + Maximum history size: + Maximum history size: + + + History saving interval. If set to 0 history will be saved only during exit. + History saving interval. If set to 0 history will be saved only during exit. + + + Save every + Save every + + + minutes + minutes + + + Favorites + Favorites + + + Favorites saving interval. If set to 0 Favorites will be saved only during exit. + Favorites saving interval. If set to 0 Favorites will be saved only during exit. + + + Turn this option on to confirm every operation of items deletion + Turn this option on to confirm every operation of items deletion + + + Confirmation for items deletion + Confirmation for items deletion + + + Articles + Articles + + + Ignore punctuation while searching + Ignore punctuation while searching + + + Input phrases longer than this size will be ignored + Input phrases longer than this size will be ignored + + + symbols + symbols + + + Select this option to automatic collapse big articles + Select this option to automatic collapse big articles + + + Collapse articles more than + Collapse articles more than + + + Turn this option on to ignore unreasonably long input text +from mouse-over, selection, clipboard or command line + Turn this option on to ignore unreasonably long input text +from mouse-over, selection, clipboard or command line + + + Ignore input phrases longer than + Ignore input phrases longer than + + + Articles longer than this size will be collapsed + Articles longer than this size will be collapsed + + + Turn this option on to always expand optional parts of articles + Turn this option on to always expand optional parts of articles + + + Expand optional &parts + Expand optional &parts + + + Turn this option on to ignore diacritics while searching articles + Turn this option on to ignore diacritics while searching articles + + + Ignore diacritics while searching + Ignore diacritics while searching + + + During successive searches,if one dictionary is collapsed by manual, it will remain collapsed in the next search + During successive searches,if one dictionary is collapsed by manual, it will remain collapsed in the next search + + + Session collapse + Session collapse + + + Turn this option on to enable extra articles search via synonym lists +from Stardict, Babylon and GLS dictionaries + Turn this option on to enable extra articles search via synonym lists +from Stardict, Babylon and GLS dictionaries + + + Extra search via synonyms + Extra search via synonyms + + + When using clipboard, strip everything after newline + When using clipboard, strip everything after newline + + + On a new search, focus the main or popup window even if it's visible + On a new search, focus the main or popup window even if it's visible + + + Miscellaneous + Miscellaneous + + + Remove invalid index on exit + Remove invalid index on exit + + + System default + System default + + + Default + Default + + + Classic + Classic + + + Modern + Modern + + + Lingvo + Lingvo + + + Babylon + Babylon + + + Lingoes + Lingoes + + + Lingoes-Blue + Lingoes-Blue + + + MB + MB + + + Restart the program to apply the language change. + Restart the program to apply the language change. + + + Restart to apply the interface style change. + Restart to apply the interface style change. + + + Restart to apply the interface font change. + Restart to apply the interface font change. + + + Restart needed + Restart needed + + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Start with clipboard monitoring turned on + + + Auto-pronounce words in the popup + Auto-pronounce words in the popup + + + + ProgramTypeEditor + + Audio + Audio + + + Plain Text + Plain Text + + + Html + Html + + + Prefix Match + Prefix Match + + + Unknown + Unknown + + + + Programs::RunInstance + + No program name was given. + No program name was given. + + + The program has crashed. + The program has crashed. + + + The program has returned exit code %1. + The program has returned exit code %1. + + + + ProgramsModel + + Enabled + Yermed + + + Type + Anaw + + + Name + Isem + + + Command Line + Izirig n tladan + + + Icon + Tignit + + + + QObject + + Article loading error + Article loading error + + + Article decoding error + Article decoding error + + + Copyright: %1%2 + Copyright: %1%2 + + + Version: %1%2 + Lqem: %1%2 + + + Author: %1%2 + Ameskar: %1%2 + + + E-mail: %1%2 + Imayl: %1%2 + + + Title: %1%2 + Azwel: %1%2 + + + Website: %1%2 + Asmel web: %1%2 + + + Date: %1%2 + Azemz: %1%2 + + + A dictionary lookup program. + A dictionary lookup program. + + + Word or sentence to query. + Word or sentence to query. + + + Save debug messages to gd_log.txt in the config folder. + Save debug messages to gd_log.txt in the config folder. + + + Reset window state. + Reset window state. + + + Disable tts. + Disable tts. + + + Change the group of main window. + Change the group of main window. + + + Change the group of popup. + Change the group of popup. + + + Force the word to be translated in scanpopup + Force the word to be translated in scanpopup + + + Force the word to be translated in the mainwindow + Force the word to be translated in the mainwindow + + + Toggle popup. + Toggle popup. + + + Print version and diagnosis info. + Print version and diagnosis info. + + + + QuickFilterLine + + Dictionary search/filter (Ctrl+F) + Dictionary search/filter (Ctrl+F) + + + Clear Search + Clear Search + + + + ResourceToSaveHandler + + ERROR: %1 + TUCCḌA: %1 + + + Resource saving error: + Resource saving error: + + + WARNING: %1 + WARNING: %1 + + + The referenced resource failed to download. + The referenced resource failed to download. + + + + Romaji + + Hepburn Romaji for Hiragana + Hepburn Romaji for Hiragana + + + Hepburn Romaji for Katakana + Hepburn Romaji for Katakana + + + + RussianTranslit + + Russian Transliteration + Russian Transliteration + + + + ScanPopup + + Dialog + Adiwenni + + + Back + Tuɣalin + + + Forward + Welleh + + + Pronounce Word (Alt+S) + Pronounce Word (Alt+S) + + + Alt+S + Alt+S + + + Send word to main window (Alt+W) + Send word to main window (Alt+W) + + + Alt+W + Alt+W + + + Add word to Favorites (Ctrl+E) + Add word to Favorites (Ctrl+E) + + + Shows or hides the dictionary bar + Shows or hides the dictionary bar + + + Always stay on top of all other windows + Always stay on top of all other windows + + + Use this to pin down the window so it would stay on screen, +could be resized or managed in other ways. + Use this to pin down the window so it would stay on screen, +could be resized or managed in other ways. + + + WARNING: %1 + WARNING: %1 + + + + SearchPanel + + &Previous + &Previous + + + Ctrl+Shift+G + Ctrl+Shift+G + + + &Next + &Next + + + Ctrl+G + Ctrl+G + + + &Case Sensitive + &Case Sensitive + + + Find: + Af: + + + + SoundDirsModel + + Path + Abrid + + + Name + Isem + + + Icon + Tignit + + + + Sources + + Files + Ifuyla + + + Paths to search for the dictionary files: + Paths to search for the dictionary files: + + + &Add... + &Rnu... + + + &Remove + &Kkes + + + Re&scan now + Re&scan now + + + Sound Dirs + Sound Dirs + + + Make dictionaries from bunches of audiofiles by adding paths here: + Make dictionaries from bunches of audiofiles by adding paths here: + + + Morphology + Morphology + + + Path to a directory with Hunspell/Myspell dictionaries: + Path to a directory with Hunspell/Myspell dictionaries: + + + &Change... + &Beddel... + + + Available morphology dictionaries: + Available morphology dictionaries: + + + Each morphology dictionary appears as a +separate auxiliary dictionary which +provides stem words for searches and +spelling suggestions for mistyped words. +Add appropriate dictionaries to the bottoms +of the appropriate groups to use them. + Each morphology dictionary appears as a +separate auxiliary dictionary which +provides stem words for searches and +spelling suggestions for mistyped words. +Add appropriate dictionaries to the bottoms +of the appropriate groups to use them. + + + Wikipedia + Wikipedia + + + Wikipedia (MediaWiki) sites: + Wikipedia (MediaWiki) sites: + + + Websites + Websites + + + Any websites. A string %GDWORD% will be replaced with the query word: + Any websites. A string %GDWORD% will be replaced with the query word: + + + Alternatively, use %GD1251% for CP1251, %GDISO1%...%GDISO16% for ISO 8859-1...ISO 8859-16 respectively, +%GDBIG5% for Big-5, %GDBIG5HKSCS% for Big5-HKSCS, %GDGBK% for GBK and GB18030, %GDSHIFTJIS% for Shift-JIS. + Alternatively, use %GD1251% for CP1251, %GDISO1%...%GDISO16% for ISO 8859-1...ISO 8859-16 respectively, +%GDBIG5% for Big-5, %GDBIG5HKSCS% for Big5-HKSCS, %GDGBK% for GBK and GB18030, %GDSHIFTJIS% for Shift-JIS. + + + DICT servers + Iqeddacen DICT + + + DICT servers: + Iqeddacen DICT: + + + Programs + Ihalen + + + Any external programs. A string %GDWORD% will be replaced with the query word. A string %GDSEARCH% will be replaced with the text in the search bar. If both of the parameters are not provided, the headword will be fed into standard input. + Any external programs. A string %GDWORD% will be replaced with the query word. A string %GDSEARCH% will be replaced with the text in the search bar. If both of the parameters are not provided, the headword will be fed into standard input. + + + Lingua Libre + Lingua Libre + + + <html><head/><body><p>Pronunciations provided by <a href="https://lingualibre.org"><span style=" text-decoration: underline; color:#2980b9;">Lingua Libre</span></a>, a collaborative linguistic media library of Wikimedia France. </p></body></html> + <html><head/><body><p>Pronunciations provided by <a href="https://lingualibre.org"><span style=" text-decoration: underline; color:#2980b9;">Lingua Libre</span></a>, a collaborative linguistic media library of Wikimedia France. </p></body></html> + + + Enable Lingua Libre + Enable Lingua Libre + + + ISO 639-3 language code + ISO 639-3 language code + + + Examples: &quot;eng&quot; for English, &quot;fra&quot; for French <br> + +Full list of availiable languages can be found <a href="https://lingualibre.org/wiki/LinguaLibre:Stats/Languages"> here </a> + Examples: &quot;eng&quot; for English, &quot;fra&quot; for French <br> + +Full list of availiable languages can be found <a href="https://lingualibre.org/wiki/LinguaLibre:Stats/Languages"> here </a> + + + Forvo + Forvo + + + Live pronunciations from <a href="http://www.forvo.com/">forvo.com</a>. The site allows people to record and share word pronunciations. You can listen to them from GoldenDict. + Live pronunciations from <a href="http://www.forvo.com/">forvo.com</a>. The site allows people to record and share word pronunciations. You can listen to them from GoldenDict. + + + Enable pronunciations from Forvo + Enable pronunciations from Forvo + + + API Key: + API Key: + + + <html><head/><body><p>Use of Forvo currently requires an API key, register on the site to get your own key.</p></body></html> + <html><head/><body><p>Use of Forvo currently requires an API key, register on the site to get your own key.</p></body></html> + + + <html><head/><body><p>Get your own key <a href="http://api.forvo.com/key/"><span style=" text-decoration: underline; color:#0000ff;">here</span></a></p></body></html> + <html><head/><body><p>Get your own key <a href="http://api.forvo.com/key/"><span style=" text-decoration: underline; color:#0000ff;">here</span></a></p></body></html> + + + Language codes (comma-separated): + Language codes (comma-separated): + + + List of language codes you would like to have. Example: "en, ru". + List of language codes you would like to have. Example: "en, ru". + + + Full list of language codes is available <a href="http://www.forvo.com/languages-codes/">here</a>. + Full list of language codes is available <a href="http://www.forvo.com/languages-codes/">here</a>. + + + Transliteration + Transliteration + + + Greek transliteration + Greek transliteration + + + Russian transliteration + Russian transliteration + + + German transliteration + German transliteration + + + Belarusian transliteration + Belarusian transliteration + + + Enables to use the Latin alphabet to write the Japanese language + Enables to use the Latin alphabet to write the Japanese language + + + Japanese Romaji + Japanese Romaji + + + Systems: + Inagrawen: + + + The most widely used method of transcription of Japanese, +based on English phonology + The most widely used method of transcription of Japanese, +based on English phonology + + + Hepburn + Hepburn + + + The most regular system, having a one-to-one relation to the +kana writing systems. Standardized as ISO 3602 + +Not implemented yet in GoldenDict. + The most regular system, having a one-to-one relation to the +kana writing systems. Standardized as ISO 3602 + +Not implemented yet in GoldenDict. + + + Nihon-shiki + Nihon-shiki + + + Based on Nihon-shiki system, but modified for modern standard Japanese. +Standardized as ISO 3602 + +Not implemented yet in GoldenDict. + Based on Nihon-shiki system, but modified for modern standard Japanese. +Standardized as ISO 3602 + +Not implemented yet in GoldenDict. + + + Kunrei-shiki + Kunrei-shiki + + + Syllabaries: + Syllabaries: + + + Hiragana Japanese syllabary + Hiragana Japanese syllabary + + + Hiragana + Hiragana + + + Katakana Japanese syllabary + Katakana Japanese syllabary + + + Katakana + Katakana + + + Custom transliteration + Custom transliteration + + + This only applied in search phrase, with each line represent a transliteration,semicolon seperated. For example, ae;æ,users can input ae to represent æ in the target word. + This only applied in search phrase, with each line represent a transliteration,semicolon seperated. For example, ae;æ,users can input ae to represent æ in the target word. + + + ae;æ #this is an example + ae;æ #this is an example + + + Text to Speech + Text to Speech + + + Choose a directory + Fren akaram + + + Confirm removal + Confirm removal + + + Remove directory <b>%1</b> from the list? + Remove directory <b>%1</b> from the list? + + + Remove site <b>%1</b> from the list? + Remove site <b>%1</b> from the list? + + + Remove program <b>%1</b> from the list? + Remove program <b>%1</b> from the list? + + + + StylesComboBox + + None + None + + + + TextToSpeechSource + + Selected voice engines: + Selected voice engines: + + + &Add + &Add + + + &Remove + &Remove + + + Preferences + Preferences + + + Volume: + Volume: + + + Rate: + Rate: + + + Preview + Preview + + + Available voice engines: + Available voice engines: + + + Text to be previewed: + Text to be previewed: + + + Type text to be previewed here. + Type text to be previewed here. + + + &Preview + &Preview + + + No TTS voice available + No TTS voice available + + + Cannot find available TTS voice.<br>Please make sure that at least one TTS engine installed on your computer already. + Cannot find available TTS voice.<br>Please make sure that at least one TTS engine installed on your computer already. + + + Confirm removal + Confirm removal + + + Remove voice engine <b>%1</b> from the list? + Remove voice engine <b>%1</b> from the list? + + + + TranslateBox + + Type a word or phrase to search dictionaries + Type a word or phrase to search dictionaries + + + Drop-down + Drop-down + + + + VoiceEnginesModel + + Enabled + Enabled + + + Name + Isem + + + Id + Asulay + + + Icon + Tignit + + + + WebSitesModel + + Insert article as link inside <iframe> tag + Insert article as link inside <iframe> tag + + + Enabled + Yermed + + + As link + Am useɣwen + + + Name + Isem + + + Address + Tansa + + + Icon + Tignit + + + + WordFinder + + Failed to query some dictionaries. + Failed to query some dictionaries. + + + diff --git a/locale/ko_KR.ts b/locale/ko_KR.ts index 5f55a514..3c13de53 100644 --- a/locale/ko_KR.ts +++ b/locale/ko_KR.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - 사전 편집 - Open index folder 색인 폴더 열기 @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled 전체 텍스트 검색이 비활성화됨 - - Edit the dictionary via command: -%1 - 명령행으로 사전 편집: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder 사전 폴더 열기 - - Edit dictionary - 사전 편집 - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar 사전모음에 이름 보이기(&B) - - Show Small Icons in &Toolbars - 도구모음에 작은 아이콘(&T) - &Menubar 메뉴 모음(&M) @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward 앞으로 - - Enable Scanning - 스캔 활성화 - Pronounce Word (Alt+S) 발음 듣기(Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites 즐겨찾기에서 현재 탭 제거 - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. 단축키 감시메커니즘을 시작할 수없습니다..<br>XServer에서 RECORD extension이 활성화 되어 있는지 확인하십시오. @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder 사전 폴더 열기 - - Edit dictionary - 사전 편집 - Now indexing for full-text search: 이제 전체 텍스트 검색을 위한 인덱싱: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? 즐겨찾기에서 제목 "%1" 를 제거하시겠습니까? + + Show &Small Icons in Toolbars + 도구 모음에 작은 아이콘 표시 + + + Show &Large Icons in Toolbars + 도구 모음에 큰 아이콘 표시 + + + Show &Normal Icons in Toolbars + 도구 모음에 일반 아이콘 표시 + + + Toggle clipboard monitoring + 클립보드 모니터링 전환 + Mdx::MdxArticleRequest @@ -3054,16 +3040,6 @@ the application. &Popup 스캔팝업(&S) - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - 기본값으로 스캔팝업모드를 켤 것인지 설정합니다. 이 항목을 선택하면, -프로그램이 시작할 때 항상 스캔팝업기능이 활성화됩니다. - - - Start with popup turned on - 프로그램 시작시 스캔팝업 활성화 - Send translated word to main window instead of to show it in popup window 검색내용을 팝업창에 표시하지 않고 메인창으로 보냅니다 @@ -3178,10 +3154,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window 메인창에서 발음 자동 재생 - - Auto-pronounce words in popup - 스캔팝업창에서 발음 자동 재생 - Playback 재생 @@ -3570,6 +3542,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed 재시작 필요 + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + 클립보드 모니터링을 켜서 시작하세요 + + + Auto-pronounce words in the popup + 팝업에서 단어를 자동 발음합니다 + ProgramTypeEditor @@ -3811,10 +3795,6 @@ could be resized or managed in other ways. 핀 아이콘을 선택하면 창을 항상 화면 맨 위에 표시하고, 팝업창 크기, 사전모음의 위치 등을 조절할 수 있습니다. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 경고: %1 diff --git a/locale/lt_LT.ts b/locale/lt_LT.ts index 51b15cd3..0bb6e75f 100644 --- a/locale/lt_LT.ts +++ b/locale/lt_LT.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Keisti žodyną - Open index folder Atidarykite rodyklės aplanką @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Viso teksto paieška išjungta - - Edit the dictionary via command: -%1 - Žodyną keisti naudojant komandą: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Atverti žodyno aplanką - - Edit dictionary - Keisti žodyną - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar &Pavadinimai žodynų juostoje - - Show Small Icons in &Toolbars - Įran&kių juostoje maži ženkliukai - &Menubar &Meniu juosta @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward Pirmyn - - Enable Scanning - Įgalinti nuskaitymą - Pronounce Word (Alt+S) Ištarti žodį (Alt+S) @@ -2545,10 +2523,6 @@ Norėdami rasti „*“, „?“, „[“, „]“ simbolius, atitinkamai įvesk Remove current tab from Favorites Pašalinti veikiamąją kortelę iš žymelių - - %1 - %2 - %1 : %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Nepavyko paruošti sparčiųjų klavišų stebėjimo mechanizmo<br>Įsitikinkite, kad XServer turi įjungtą RECORD plėtinį. @@ -2702,10 +2676,6 @@ Norėdami atverti parsisiuntimo puslapį, spauskite <b>Parsisiųsti</b& Open dictionary folder Atverti žodyno aplanką - - Edit dictionary - Keisti žodyną - Now indexing for full-text search: Indeksuojama visatekstei paieškai: @@ -2714,6 +2684,22 @@ Norėdami atverti parsisiuntimo puslapį, spauskite <b>Parsisiųsti</b& Remove headword "%1" from Favorites? Pašalinti antraštinį žodį „%1“ iš žymelių? + + Show &Small Icons in Toolbars + Rodyti &mažas piktogramas įrankių juostose + + + Show &Large Icons in Toolbars + Rodyti &dideles piktogramas įrankių juostose + + + Show &Normal Icons in Toolbars + Rodyti &įprastas piktogramas įrankių juostose + + + Toggle clipboard monitoring + Perjungti iškarpinės stebėjimą + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ tiesiog paslepiama. &Popup &Iškylantis langas - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Nurodykite, ar ši iškylančių langų funkcija yra numatytoji. -Jei pažymėta, iškylančių langų funkcija bus įjungta vos paleistoje programoje. - - - Start with popup turned on - Paleisti su įjungta iškylančių langų funkcija - Send translated word to main window instead of to show it in popup window Žodžio vertimas pagrindiniame lange, o ne iškylančiame lange @@ -3180,10 +3156,6 @@ po to, kai pasikeis pažymėtas žodis. Auto-pronounce words in main window Automatiškai ištarti pagrindinio lango žodžius - - Auto-pronounce words in popup - Automatiškai ištarti iškylančio lango žodžius - Playback Grojimas @@ -3571,6 +3543,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Reikia paleisti iš naujo + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Pasirenkama, ar iškarpinės stebėjimas bus įjungtas pagal numatytuosius nustatymus paleidžiant programą'. + + + Start with clipboard monitoring turned on + Pradėkite įjungę iškarpinės stebėjimą + + + Auto-pronounce words in the popup + Automatiškai ištarti žodžius iššokančiajame lange + ProgramTypeEditor @@ -3812,10 +3796,6 @@ could be resized or managed in other ways. Naudokite, jei norite pritvirtinti šį langą. Tuomet jis nepradigs patrukus pelę, galėsite keisti lango dydį ar atlikti kitus įprastus langų tvarkymo veiksmus. - - %1 - GoldenDict-ng - %1 – GoldenDict-ng - WARNING: %1 ĮSPĖJIMAS: %1 diff --git a/locale/mk_MK.ts b/locale/mk_MK.ts index a1c5a8fd..9fe184ce 100644 --- a/locale/mk_MK.ts +++ b/locale/mk_MK.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Уреди речник - Open index folder Отворете ја папката со индекси @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Пребарувањето во цел текст е оневозможено - - Edit the dictionary via command: -%1 - Уредиго речникот преку команда: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Отвори папка на речникот - - Edit dictionary - Уреди речник - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Прикажи називи во картичките &Лентата на речникот - - Show Small Icons in &Toolbars - Прикажи мала икона во &алатникот - &Menubar &Мени лента @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward Напред - - Enable Scanning - Овозможи скенирање - Pronounce Word (Alt+S) Изговори збор (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Отстранете ја тековната картичка од Омилени - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Неуспешна иницијализација на механизмот за надгледување на кратенките(на таст.).<br>Проверете дали вашиот XServer подржува RECORD EXtension. @@ -2703,10 +2677,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Отвори папка на речник - - Edit dictionary - Уреди речник - Now indexing for full-text search: Сега се индексира за пребарување на целосен текст: @@ -2715,6 +2685,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Да се отстрани насловот "%1" од Омилени? + + Show &Small Icons in Toolbars + Прикажи и мали икони во алатникот + + + Show &Large Icons in Toolbars + Прикажи &Големи икони во Лентата со алатки + + + Show &Normal Icons in Toolbars + Прикажи &нормални икони во алатникот + + + Toggle clipboard monitoring + Вклучете го следењето на таблата со исечоци + Mdx::MdxArticleRequest @@ -3058,15 +3044,6 @@ the application. &Popup &Скан попап - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Вклучи или не вклучи попап прозорец кога програмот стартува. - - - Start with popup turned on - Овозможи попап прозорец при стартување - Send translated word to main window instead of to show it in popup window Пратете го преведениот збор во главниот прозорец наместо да се прикаже во попап прозорецот @@ -3181,10 +3158,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Автоматски изговари зборови во главниот прозорец - - Auto-pronounce words in popup - Автоматски изговори зборови во скокачки прозорец - Playback Репродукција @@ -3576,6 +3549,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Потребно е рестартирање + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Избира дали следењето на таблата со исечоци ќе биде стандардно вклучено при стартување на програмата'. + + + Start with clipboard monitoring turned on + Започнете со вклучено следење на таблата со исечоци + + + Auto-pronounce words in the popup + Автоматско изговарање зборови во скокачкиот прозорец + ProgramTypeEditor @@ -3817,10 +3802,6 @@ could be resized or managed in other ways. Кликните за да го усидрите прозорецот на екранот, промените големината или било која друга особина. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ПРЕДУПРЕДУВАЊЕ: %1 diff --git a/locale/nl_NL.ts b/locale/nl_NL.ts index 32043776..c55fdbe7 100644 --- a/locale/nl_NL.ts +++ b/locale/nl_NL.ts @@ -596,10 +596,6 @@ traditionele en hedendaagse spelling in het cyrillisch) DictInfo - - Edit dictionary - Woordenboek bewerken - Open index folder Indexmap openen @@ -652,12 +648,6 @@ traditionele en hedendaagse spelling in het cyrillisch) Full-text search disabled Zoeken in volledige tekst uitgeschakeld - - Edit the dictionary via command: -%1 - Woordenboek bewerken via opdracht: -%1 - DictListModel @@ -750,10 +740,6 @@ traditionele en hedendaagse spelling in het cyrillisch) Open dictionary folder Woordenboekmap openen - - Edit dictionary - Woordenboek bewerken - EditDictionaries @@ -2428,10 +2414,6 @@ traditionele en hedendaagse spelling in het cyrillisch) Show Names in Dictionary &Bar Woordenboekwerkbalk met &tekst - - Show Small Icons in &Toolbars - Werkbalken met &kleine pictogrammen - &Menubar &Menubalk @@ -2448,10 +2430,6 @@ traditionele en hedendaagse spelling in het cyrillisch) Forward Vooruit - - Enable Scanning - Scannen inschakelen - Pronounce Word (Alt+S) Woord uitspreken (Alt+S) @@ -2546,10 +2524,6 @@ Om '*'te vinden, '?', '[', ']' symbolen Remove current tab from Favorites Huidige tab uit favorieten verwijderen - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Bewakingsmechanisme voor sneltoetsen kan niet worden geïnitialiseerd.<br>Zorg ervoor dat de RECORD-extensie van uw XServer is ingeschakeld. @@ -2702,10 +2676,6 @@ Om '*'te vinden, '?', '[', ']' symbolen Open dictionary folder Woordenboekmap openen - - Edit dictionary - Woordenboek bewerken - Now indexing for full-text search: Nu indexeren voor full-text zoeken: @@ -2714,6 +2684,22 @@ Om '*'te vinden, '?', '[', ']' symbolen Remove headword "%1" from Favorites? Hoofdwoord "%1" uit favorieten verwijderen? + + Show &Small Icons in Toolbars + &Kleine pictogrammen weergeven in werkbalken + + + Show &Large Icons in Toolbars + Grote pictogrammen weergeven in werkbalken + + + Show &Normal Icons in Toolbars + &Normale pictogrammen weergeven in werkbalken + + + Toggle clipboard monitoring + Klembordbewaking in-/uitschakelen + Mdx::MdxArticleRequest @@ -3055,16 +3041,6 @@ the application. &Popup Scan &Popup - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Hier kunt u aangeven of de Popup modus standaard in- of uitgeschakeld is. -Het programma start met de Popup modus ingeschakeld als dit geselecteerd is. - - - Start with popup turned on - Starten met Popup ingeschakeld - Send translated word to main window instead of to show it in popup window Vertaald woord niet in popup weergeven maar naar hoofdvenster verzenden @@ -3179,10 +3155,6 @@ toetsen zijn ingedrukt wanneer de woordselectie verandert. Auto-pronounce words in main window Woorden in hoofdvenster automatisch uitspreken - - Auto-pronounce words in popup - Woorden in Popup automatisch uitspreken - Playback Afspelen @@ -3570,6 +3542,18 @@ van Stardict, Babylon en GLS woordenboeken Restart needed Opnieuw opstarten nodig + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Hiermee kiest u of de klembordbewaking standaard wordt ingeschakeld bij het opstarten van het programma'. + + + Start with clipboard monitoring turned on + Begin met klembordbewaking ingeschakeld + + + Auto-pronounce words in the popup + Woorden automatisch uitspreken in de pop-up + ProgramTypeEditor @@ -3708,7 +3692,7 @@ van Stardict, Babylon en GLS woordenboeken Toggle popup. - Toggle popup. + Pop-up weergeven/verbergen. Print version and diagnosis info. @@ -3811,10 +3795,6 @@ could be resized or managed in other ways. Hiermee vergrendelt u het venster zodat het zichtbaar blijft en u het in grootte of anderszins kunt aanpassen. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 WAARSCHUWING: %1 diff --git a/locale/pl_PL.ts b/locale/pl_PL.ts index 09d2c45d..b63d9ea9 100644 --- a/locale/pl_PL.ts +++ b/locale/pl_PL.ts @@ -596,10 +596,6 @@ między ortografią klasyczną i szkolną w cyrylicy) DictInfo - - Edit dictionary - Edytuj słownik - Open index folder Otwórz folder indeksu @@ -652,12 +648,6 @@ między ortografią klasyczną i szkolną w cyrylicy) Full-text search disabled Wyszukiwanie pełnotekstowe wyłączone - - Edit the dictionary via command: -%1 - Edytuj słownik za pomocą komendy: -%1 - DictListModel @@ -750,10 +740,6 @@ między ortografią klasyczną i szkolną w cyrylicy) Open dictionary folder Otwórz folder słownika - - Edit dictionary - Edytuj słownik - EditDictionaries @@ -2428,10 +2414,6 @@ między ortografią klasyczną i szkolną w cyrylicy) Show Names in Dictionary &Bar Pokaż nazwy w pas&ku słowników - - Show Small Icons in &Toolbars - Pokaż małe &ikony w paskach narzędzi - &Menubar Pasek &menu @@ -2448,10 +2430,6 @@ między ortografią klasyczną i szkolną w cyrylicy) Forward Dalej - - Enable Scanning - Włącz skanowanie - Pronounce Word (Alt+S) Wymowa słowa (Alt+S) @@ -2546,10 +2524,6 @@ Aby odnaleźć symbole „*”, „?”, „[” i „]”, należy użyć odpow Remove current tab from Favorites Usuń bieżącą kartę z Ulubionych - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Nie powiodło się zainicjowanie mechanizmu monitorowania klawiszy skrótu.<br>Upewnij się, że włączono rozszerzenie RECORD serwera XServer. @@ -2702,10 +2676,6 @@ Aby odnaleźć symbole „*”, „?”, „[” i „]”, należy użyć odpow Open dictionary folder Otwórz folder słownika - - Edit dictionary - Edytuj słownik - Now indexing for full-text search: Indeksowanie dla wyszukiwania pełnotekstowego: @@ -2714,6 +2684,22 @@ Aby odnaleźć symbole „*”, „?”, „[” i „]”, należy użyć odpow Remove headword "%1" from Favorites? Usunąć słowo nagłówka "%1" z Ulubionych? + + Show &Small Icons in Toolbars + Pokaż &małe ikony na paskach narzędzi + + + Show &Large Icons in Toolbars + Pokaż &duże ikony na paskach narzędzi + + + Show &Normal Icons in Toolbars + Pokaż &normalne ikony na paskach narzędzi + + + Toggle clipboard monitoring + Przełącz monitorowanie schowka + Mdx::MdxArticleRequest @@ -3054,16 +3040,6 @@ prowadzi do jego ukrycia, a nie do zamknięcia aplikacji. &Popup &Skanowanie automatyczne - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Wskazuje, czy tryb skanowania automatycznego jest domyślnie włączony, czy nie. Zaznaczenie -tej opcji powoduje, że program uruchamia się z włączonym skanowaniem automatycznym. - - - Start with popup turned on - Uruchamiaj z włączoną funkcją skanowania automatycznego - Send translated word to main window instead of to show it in popup window Wyślij przetłumaczone słowo do okna głównego, a nie wyświetlaj w okienku wyskakującym @@ -3178,10 +3154,6 @@ kiedy zaznaczenie słowa ulega zmianie przy naciśniętych wszystkich wybranych Auto-pronounce words in main window Automatycznie wymawiaj słowa znajdujące się w oknie głównym - - Auto-pronounce words in popup - Automatycznie wymawiaj słowa znajdujące się w okienku wyskakującym - Playback Odtwarzanie @@ -3573,6 +3545,18 @@ ze słowników Stardict, Babylon i GLS Restart needed Potrzebne ponowne uruchomienie + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Wybiera, czy monitorowanie schowka będzie domyślnie włączone podczas uruchamiania programu's. + + + Start with clipboard monitoring turned on + Rozpocznij z włączonym monitorowaniem schowka + + + Auto-pronounce words in the popup + Automatyczne wymawianie słów w oknie podręcznym + ProgramTypeEditor @@ -3814,10 +3798,6 @@ could be resized or managed in other ways. Opcja ta umożliwia przypięcie okna na stałe do ekranu. Dzięki temu można zmieniać jego wielkość i zarządzać nim w inny sposób. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 UWAGA: %1 diff --git a/locale/pt_BR.ts b/locale/pt_BR.ts index a1a094a4..547f2d0e 100644 --- a/locale/pt_BR.ts +++ b/locale/pt_BR.ts @@ -596,10 +596,6 @@ entre clássico e ortografia escolar em cirílico) DictInfo - - Edit dictionary - Editar dicionário - Open index folder Abrir pasta de índice @@ -652,12 +648,6 @@ entre clássico e ortografia escolar em cirílico) Full-text search disabled Pesquisa de texto completo desativada - - Edit the dictionary via command: -%1 - Editar o dicionário via comando: -%1 - DictListModel @@ -750,10 +740,6 @@ entre clássico e ortografia escolar em cirílico) Open dictionary folder Abrir pasta de dicionário - - Edit dictionary - Editar dicionário - EditDictionaries @@ -2428,10 +2414,6 @@ entre clássico e ortografia escolar em cirílico) Show Names in Dictionary &Bar Mostrar Nomes na &Barra de Dicionário - - Show Small Icons in &Toolbars - Exibir Ícones Pequenos na &Barra de Tarefas - &Menubar Barra de &Menus @@ -2448,10 +2430,6 @@ entre clássico e ortografia escolar em cirílico) Forward Seguinte - - Enable Scanning - Ativar verificação - Pronounce Word (Alt+S) Pronuncia a palavra da consulta atual (Alt+S) @@ -2546,10 +2524,6 @@ Para encontrar os símbolos '*', '?', '[', '] Remove current tab from Favorites Remover a guia atual dos Favoritos - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Não foi possível acionar o mecanismo de monitoramento por atalho.<br>Veja se seu XServer está com a extensão RECORD ativada. @@ -2702,10 +2676,6 @@ Para encontrar os símbolos '*', '?', '[', '] Open dictionary folder Abrir pasta de dicionário - - Edit dictionary - Editar dicionário - Now indexing for full-text search: Indexando para pesquisa de texto completo: @@ -2714,6 +2684,22 @@ Para encontrar os símbolos '*', '?', '[', '] Remove headword "%1" from Favorites? Remover a palavra-chave "%1" dos Favoritos? + + Show &Small Icons in Toolbars + Mostrar ícones pequenos nas barras de ferramentas + + + Show &Large Icons in Toolbars + Mostrar ícones grandes nas barras de ferramentas + + + Show &Normal Icons in Toolbars + Mostrar ícones normais nas barras de ferramentas + + + Toggle clipboard monitoring + Alternar monitoramento da área de transferência + Mdx::MdxArticleRequest @@ -3062,15 +3048,6 @@ ser fechado. &Popup &Janela de Definições/Tradução Semiautomáticas - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Permite especificar se a janela secundária de definições/tradução semiautomáticas deve ficar ativa por padrão. Se habilitada esta opção, o programa será sempre executado com a janela secundária ativada. - - - Start with popup turned on - Executar o GoldenDict com a janela de definições/tradução semiautomáticas habilitada - Send translated word to main window instead of to show it in popup window Envia a palavra traduzida/consultada para a janela principal, em vez de exibi-la numa janela secundária (popup) @@ -3186,10 +3163,6 @@ em qualquer situação ou contexto, desde que o GoldenDict esteja em execução. Auto-pronounce words in main window Pronunciar palavras na janela principal automaticamente - - Auto-pronounce words in popup - Pronunciar automaticamente palavras da janela de definições/tradução semiautomáticas - Playback Reprodução @@ -3579,6 +3552,18 @@ dos dicionários Stardict, Babylon e GLS Restart needed Reiniciar necessário + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Escolhe se o monitoramento da área de transferência será ativado por padrão na inicialização do programa'. + + + Start with clipboard monitoring turned on + Comece com o monitoramento da área de transferência ativado + + + Auto-pronounce words in the popup + Pronuncie palavras automaticamente no pop-up + ProgramTypeEditor @@ -3820,10 +3805,6 @@ could be resized or managed in other ways. Use esta opção para fixar a janela do GoldenDict na frente das outras janelas, redimensioná-la ou geri-la à vontade. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 AVISO: %1 diff --git a/locale/pt_PT.ts b/locale/pt_PT.ts index 058cdf34..3e8c61d6 100644 --- a/locale/pt_PT.ts +++ b/locale/pt_PT.ts @@ -596,10 +596,6 @@ entre ortografia clássica e escolar em ciílico) DictInfo - - Edit dictionary - Editar dicionário - Open index folder Abrir pasta de índice @@ -652,12 +648,6 @@ entre ortografia clássica e escolar em ciílico) Full-text search disabled Pesquisa de texto completo desativada - - Edit the dictionary via command: -%1 - Edite o dicionário via comando: -%1 - DictListModel @@ -750,10 +740,6 @@ entre ortografia clássica e escolar em ciílico) Open dictionary folder Abrir pasta do dicionário - - Edit dictionary - Editar dicionário - EditDictionaries @@ -2428,10 +2414,6 @@ entre ortografia clássica e escolar em ciílico) Show Names in Dictionary &Bar Mostrar nomes na Barra de Dicionário - - Show Small Icons in &Toolbars - Mostrar ícones pequenos na barra de ferramentas - &Menubar &Barra de menu @@ -2448,10 +2430,6 @@ entre ortografia clássica e escolar em ciílico) Forward Encaminhar - - Enable Scanning - Ativar verificação - Pronounce Word (Alt+S) Palavra Pronunciada (Alt+S) @@ -2546,10 +2524,6 @@ Para encontrar '*', '?', '[', ']' símbo Remove current tab from Favorites Remover a aba atual dos Favoritos - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Falha ao inicializar o mecanismo de monitoramento das teclas de atalho.<br>Certifique-se de que sua extensão XServer está ligada. @@ -2702,10 +2676,6 @@ Para encontrar '*', '?', '[', ']' símbo Open dictionary folder Abrir pasta do dicionário - - Edit dictionary - Editar dicionário - Now indexing for full-text search: Agora indexação para busca por texto: @@ -2714,6 +2684,22 @@ Para encontrar '*', '?', '[', ']' símbo Remove headword "%1" from Favorites? Remover headword "%1" dos favoritos? + + Show &Small Icons in Toolbars + Mostrar ícones pequenos nas barras de ferramentas + + + Show &Large Icons in Toolbars + Mostrar ícones grandes nas barras de ferramentas + + + Show &Normal Icons in Toolbars + Mostrar ícones normais nas barras de ferramentas + + + Toggle clipboard monitoring + Alternar monitoramento da área de transferência + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ a aplicação. &Popup &Escanear pop-up - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Escolha se o modo popup está ativado por padrão. Se selecionado, -o programa sempre iniciará com o popup de verificação ativo. - - - Start with popup turned on - Iniciar com o popup de verificação ativado - Send translated word to main window instead of to show it in popup window Enviar palavra traduzida para a janela principal em vez de mostrá-la na janela popup @@ -3180,10 +3156,6 @@ no estado pressionado quando a seleção de palavras mudar. Auto-pronounce words in main window Auto-pronunciar palavras na janela principal - - Auto-pronounce words in popup - Auto-pronunciar palavras em pop-up de verificação - Playback Reprodução @@ -3574,6 +3546,18 @@ no Stardict, Babilônia e dicionários GLS Restart needed Reiniciar necessário + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Escolhe se o monitoramento da área de transferência será ativado por padrão na inicialização do programa'. + + + Start with clipboard monitoring turned on + Comece com o monitoramento da área de transferência ativado + + + Auto-pronounce words in the popup + Pronuncie palavras automaticamente no pop-up + ProgramTypeEditor @@ -3815,10 +3799,6 @@ could be resized or managed in other ways. Use isso para fixar a janela para que ela fique na tela, poderia ser redimensionado ou gerenciado de outras formas. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 AVISO: %1 diff --git a/locale/qt_extra_es.ts b/locale/qt_extra_es.ts deleted file mode 100644 index 18e25ee7..00000000 --- a/locale/qt_extra_es.ts +++ /dev/null @@ -1,8065 +0,0 @@ - - - - - MAC_APPLICATION_MENU - - - Services - Servicios - - - - Hide %1 - Ocultar %1 - - - - Hide Others - Ocultar otros - - - - Show All - Mostrar todo - - - - Preferences... - Preferencias… - - - - Quit %1 - Salir de %1 - - - - About %1 - Acerca de %1 - - - - AudioOutput - - - <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> - - - - - <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> - - - - - Revert back to device '%1' - - - - - CloseButton - - - Close Tab - Cerrar pestaña - - - - PPDOptionsModel - - Name - Nombre - - - Value - Valor - - - - Phonon:: - - - Notifications - - - - - Music - - - - - Video - - - - - Communication - - - - - Games - - - - - Accessibility - - - - - Phonon::Gstreamer::Backend - - - Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. - Some video features have been disabled. - - - - - Warning: You do not seem to have the base GStreamer plugins installed. - All audio and video support has been disabled - - - - - Phonon::Gstreamer::MediaObject - - - Cannot start playback. - -Check your Gstreamer installation and make sure you -have libgstreamer-plugins-base installed. - - - - - A required codec is missing. You need to install the following codec(s) to play this content: %0 - - - - - - - - - - - - Could not open media source. - - - - - Invalid source type. - - - - - Could not locate media source. - - - - - Could not open audio device. The device is already in use. - - - - - Could not decode media source. - - - - - Phonon::VolumeSlider - - - - Volume: %1% - - - - - - - Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% - - - - - Q3Accel - - - %1, %2 not defined - La secuencia %1, %2 no está definida - - - - Ambiguous %1 not handled - Secuencia ambigua %1 no tratada - - - - Q3DataTable - - - True - Verdadero - - - - False - Falso - - - - Insert - Insertar - - - - Update - Actualizar - - - - Delete - Borrar - - - - Q3FileDialog - - - Copy or Move a File - Copiar o mover un fichero - - - - Read: %1 - Lectura: %1 - - - - - Write: %1 - Escritura: %1 - - - - - Cancel - Cancelar - - - - - - - All Files (*) - Todos los ficheros (*) - - - - Name - Nombre - - - - Size - Tamaño - - - - Type - Tipo - - - - Date - Fecha - - - - Attributes - Atributos - - - - - &OK - &Aceptar - - - - Look &in: - Buscar &en: - - - - - - File &name: - &Nombre de fichero: - - - - File &type: - &Tipo de fichero: - - - - Back - Precedente (histórico) - - - - One directory up - Ir al directorio superior - - - - Create New Folder - Crear una nueva carpeta - - - - List View - Vista de lista - - - - Detail View - Vista detallada - - - - Preview File Info - Información del fichero previsualizado - - - - Preview File Contents - Contenido del fichero previsualizado - - - - Read-write - Lectura-escritura - - - - Read-only - Sólo lectura - - - - Write-only - Sólo escritura - - - - Inaccessible - Inaccesible - - - - Symlink to File - Enlace simbólico a un fichero - - - - Symlink to Directory - Enlace simbólico a un directorio - - - - Symlink to Special - Enlace simbólico a un fichero especial - - - - File - Fichero - - - - Dir - Directorio - - - - Special - Fichero especial - - - - - - Open - Abrir - - - - - Save As - Guardar como - - - - - - &Open - &Abrir - - - - - &Save - &Guardar - - - - &Rename - Cambia&r de nombre - - - - &Delete - &Borrar - - - - R&eload - R&ecargar - - - - Sort by &Name - Ordenar por &nombre - - - - Sort by &Size - Ordenar por &tamaño - - - - Sort by &Date - Ordenar por &fecha - - - - &Unsorted - &Sin ordenar - - - - Sort - Ordenar - - - - Show &hidden files - Mostrar los fic&heros ocultos - - - - the file - el fichero - - - - the directory - el directorio - - - - the symlink - el enlace simbólico - - - - Delete %1 - Borrar %1 - - - - <qt>Are you sure you wish to delete %1 "%2"?</qt> - <qt>¿Seguro que desea borrar %1 «%2»?</qt> - - - - &Yes - &Sí - - - - &No - &No - - - - New Folder 1 - Nueva carpeta 1 - - - - New Folder - Nueva carpeta - - - - New Folder %1 - Nueva carpeta %1 - - - - Find Directory - Buscar en el directorio - - - - - Directories - Directorios - - - - Directory: - Directorio: - - - - - Error - Error - - - - %1 -File not found. -Check path and filename. - %1 -Fichero no encontrado. -Compruebe la ruta y el nombre del fichero. - - - - All Files (*.*) - Todos los ficheros (*.*) - - - - Open - Abrir - - - - Select a Directory - Seleccionar un directorio - - - - Q3LocalFs - - - - Could not read directory -%1 - No fue posible leer el directorio -%1 - - - - Could not create directory -%1 - No fue posible crear el directorio -%1 - - - - Could not remove file or directory -%1 - No fue posible eliminar el fichero o directorio -%1 - - - - Could not rename -%1 -to -%2 - No fue posible cambiar el nombre -%1 -a -%2 - - - - Could not open -%1 - No fue posible abrir -%1 - - - - Could not write -%1 - No fue posible escribir -%1 - - - - Q3MainWindow - - - Line up - Alinear - - - - Customize... - Personalizar... - - - - Q3NetworkProtocol - - - Operation stopped by the user - Operación detenida por el usuario - - - - Q3ProgressDialog - - - - Cancel - Cancelar - - - - Q3TabDialog - - - - OK - Aceptar - - - - Apply - Aplicar - - - - Help - Ayuda - - - - Defaults - Valores por omisión - - - - Cancel - Cancelar - - - - Q3TextEdit - - - &Undo - &Deshacer - - - - &Redo - &Rehacer - - - - Cu&t - Cor&tar - - - - &Copy - &Copiar - - - - &Paste - &Pegar - - - - Clear - Limpiar - - - - - Select All - Seleccionar todo - - - - Q3TitleBar - - - System - Sistema - - - - Restore up - Restaurar arriba - - - - Minimize - Minimizar - - - - Restore down - Restaurar abajo - - - - Maximize - Maximizar - - - - Close - Cerrar - - - - Contains commands to manipulate the window - Contiene órdenes para manipular la ventana - - - - Puts a minimized back to normal - Devuelve una ventana minimizada a su aspecto normal - - - - Moves the window out of the way - Aparta la ventana - - - - Puts a maximized window back to normal - Devuelve una ventana maximizada a su aspecto normal - - - - Makes the window full screen - Muestra la ventana en pantalla completa - - - - Closes the window - Cierra la ventana - - - - Displays the name of the window and contains controls to manipulate it - Muestra el nombre de la ventana y contiene controles para manipularla - - - - Q3ToolBar - - - More... - Más... - - - - Q3UrlOperator - - - - - The protocol `%1' is not supported - El protocolo «%1» no está contemplado - - - - The protocol `%1' does not support listing directories - El protocolo «%1» no permite listar los ficheros de un directorio - - - - The protocol `%1' does not support creating new directories - El protocolo «%1» no permite crear nuevos directorios - - - - The protocol `%1' does not support removing files or directories - El protocolo «%1» no permite eliminar ficheros o directorios - - - - The protocol `%1' does not support renaming files or directories - El protocolo «%1» no permite cambiar de nombre ficheros o directorios - - - - The protocol `%1' does not support getting files - El protocolo «%1» no permite recibir ficheros - - - - The protocol `%1' does not support putting files - El protocolo «%1» no permite enviar ficheros - - - - - The protocol `%1' does not support copying or moving files or directories - El protocolo «%1» no permite copiar o mover ficheros o directorios - - - - - (unknown) - (desconocido) - - - - Q3Wizard - - - &Cancel - &Cancelar - - - - < &Back - < &Anterior - - - - &Next > - Siguie&nte > - - - - &Finish - &Terminar - - - - &Help - &Ayuda - - - - QAbstractSocket - - - - - - Host not found - Equipo no encontrado - - - - - - Connection refused - Conexión rechazada - - - - Connection timed out - Conexión expirada - - - - - - Operation on socket is not supported - - - - - Socket operation timed out - Operación socket expirada - - - - Socket is not connected - El socket no está conectado - - - - Network unreachable - Red inalcanzable - - - - QAbstractSpinBox - - - &Step up - &Aumentar - - - - Step &down - Re&ducir - - - - &Select All - &Seleccionar todo - - - - QApplication - - - Activate - Activar - - - - Executable '%1' requires Qt %2, found Qt %3. - El ejecutable «%1» requiere Qt %2 (se encontró Qt %3). - - - - Incompatible Qt Library Error - Error: biblioteca Qt incompatible - - - - QT_LAYOUT_DIRECTION - Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. - LTR - - - - Activates the program's main window - Activa la ventana principal del programa - - - - QAxSelect - - - Select ActiveX Control - Seleccionar un control ActiveX - - - - OK - Aceptar - - - - &Cancel - &Cancelar - - - - COM &Object: - &Objeto COM: - - - - QCheckBox - - - Uncheck - Desmarcar - - - - Check - Marcar - - - - Toggle - Conmutar - - - - QColorDialog - - - Hu&e: - &Tono: - - - - &Sat: - &Saturación: - - - - &Val: - &Valor: - - - - &Red: - &Rojo: - - - - &Green: - &Verde: - - - - Bl&ue: - Az&ul: - - - - A&lpha channel: - Canal a&lfa: - - - - Select Color - - - - - &Basic colors - Colores &básicos - - - - &Custom colors - &Colores personalizados - - - &Define Custom Colors >> - &Definir colores personalizados >> - - - OK - Aceptar - - - Cancel - Cancelar - - - - &Add to Custom Colors - &Añadir a los colores personalizados - - - Select color - Seleccionar color - - - - QComboBox - - - - Open - Abrir - - - - False - Falso - - - - True - Verdadero - - - - Close - Cerrar - - - - QCoreApplication - - - %1: key is empty - QSystemSemaphore - - - - - %1: unable to make key - QSystemSemaphore - - - - - %1: ftok failed - QSystemSemaphore - - - - - QDB2Driver - - - Unable to connect - Imposible establecer una conexión - - - - Unable to commit transaction - Incapaz de enviar la transacción - - - - Unable to rollback transaction - Incapaz de anular la transacción - - - - Unable to set autocommit - Incapaz de activar el envío automático - - - - QDB2Result - - - - Unable to execute statement - Imposible ejecutar la instrucción - - - - Unable to prepare statement - Imposible preparar la instrucción - - - - Unable to bind variable - No es posible ligar la variable - - - - Unable to fetch record %1 - Imposible obtener el registro %1 - - - - Unable to fetch next - Imposible recuperar el siguiente - - - - Unable to fetch first - Imposible recuperar el primero - - - - QDateTimeEdit - - - AM - AM - - - - am - am - - - - PM - PM - - - - pm - pm - - - - QDial - - - QDial - QDial - - - - SpeedoMeter - Velocímetro - - - - SliderHandle - Asa del deslizador - - - - QDialog - - - What's This? - ¿Qué es esto? - - - - Done - Terminar - - - - QDialogButtonBox - - - - - OK - Aceptar - - - - Save - Guardar - - - - &Save - &Guardar - - - - Open - Abrir - - - - Cancel - Cancelar - - - - &Cancel - &Cancelar - - - - Close - Cerrar - - - - &Close - &Cerrar - - - - Apply - Aplicar - - - - Reset - Reinicializar - - - - Help - Ayuda - - - - Don't Save - No guardar - - - - Discard - Descartar - - - - &Yes - &Sí - - - - Yes to &All - Sí a &todo - - - - &No - &No - - - - N&o to All - N&o a todo - - - - Save All - Guardar todo - - - - Abort - Interrumpir - - - - Retry - Reintentar - - - - Ignore - Ignorar - - - - Restore Defaults - Restaurar los valores predeterminados - - - - Close without Saving - Cerrar sin guardar - - - - &OK - &Aceptar - - - - QDirModel - - - Name - Nombre - - - - Size - Tamaño - - - Kind - Match OS X Finder - - Clase - - - - Type - All other platforms - Tipo - - - - Date Modified - Última modificación - - - - Kind - Match OS X Finder - Clase - - - - QDockWidget - - - Close - Cerrar - - - - Dock - Anclada - - - - Float - Flotante - - - - QDoubleSpinBox - - - More - Más - - - - Less - Menos - - - - QErrorMessage - - - Debug Message: - Mensaje de depuración: - - - - Warning: - Aviso: - - - - Fatal Error: - Error fatal: - - - - &Show this message again - Mo&strar este mensaje de nuevo - - - - &OK - &Aceptar - - - - QFile - - - - Destination file exists - - - - - Cannot remove source file - - - - - Cannot open %1 for input - - - - - Cannot open for output - - - - - Failure to write block - - - - - Cannot create %1 for output - - - - - QFileDialog - - - - All Files (*) - Todos los ficheros (*) - - - - Directories - Directorios - - - - - - - &Open - &Abrir - - - - - &Save - &Guardar - - - - Open - Abrir - - - - %1 already exists. -Do you want to replace it? - El fichero %1 ya existe. -¿Desea reemplazarlo? - - - - %1 -File not found. -Please verify the correct file name was given. - %1 -Fichero no encontrado. -Verifique que el nombre del fichero es correcto. - - - - My Computer - Mi equipo - - - - &Rename - Cambia&r de nombre - - - - &Delete - &Borrar - - - - Show &hidden files - Mostrar los fic&heros ocultos - - - - - Back - Anterior (histórico) - - - - - Parent Directory - Directorio superior - - - - - List View - Vista de lista - - - - - Detail View - Vista detallada - - - - - Files of type: - Ficheros de tipo: - - - - - Directory: - Directorio: - - - -File not found. -Please verify the correct file name was given - -Fichero no encontrado. -Compruebe que el nombre del fichero es correcto - - - - - %1 -Directory not found. -Please verify the correct directory name was given. - %1 -Directorio no encontrado. -Verique que el nombre del directorio es correcto. - - - - '%1' is write protected. -Do you want to delete it anyway? - «%1» está protegido contra escritura. -¿Desea borrarlo de todas formas? - - - - Are sure you want to delete '%1'? - ¿Seguro que desea borrar «%1»? - - - - Could not delete directory. - No fue posible borrar el directorio. - - - - Recent Places - - - - - All Files (*.*) - Todos los ficheros (*.*) - - - - Save As - Guardar como - - - - Drive - Unidad - - - - - File - Fichero - - - - Unknown - Desconocido - - - - Find Directory - Buscar en el directorio - - - - Show - Mostrar - - - - - Forward - Siguiente (histórico) - - - - New Folder - Nueva carpeta - - - - &New Folder - &Nueva carpeta - - - - - &Choose - &Seleccionar - - - - Remove - Eliminar - - - - - File &name: - &Nombre de fichero: - - - - - Look in: - Ver en: - - - - - Create New Folder - Crear una nueva carpeta - - - - QFileSystemModel - - - %1 TB - %1 TiB - - - - %1 GB - %1 GiB - - - - %1 MB - %1 MiB - - - - %1 KB - %1 KiB - - - - %1 bytes - %1 bytes - - - - Invalid filename - Nombre de fichero no válido - - - - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. - <b>No se puede utilizar el nombre «%1».</b><p>Intente usar otro nombre con menos caracteres o sin signos de puntuación. - - - - Name - Nombre - - - - Size - Tamaño - - - - Kind - Match OS X Finder - Clase - - - Type - -All other platforms - Tipo - - - - Date Modified - Última modificación - - - - My Computer - Mi equipo - - - - Computer - Equipo - - - - Type - All other platforms - Tipo - - - - QFontDatabase - - - - Normal - - - - - - - Bold - - - - - - Demi Bold - - - - - - - Black - - - - - Demi - - - - - - Light - - - - - - Italic - - - - - - Oblique - - - - - Any - - - - - Latin - - - - - Greek - - - - - Cyrillic - - - - - Armenian - - - - - Hebrew - - - - - Arabic - - - - - Syriac - - - - - Thaana - - - - - Devanagari - - - - - Bengali - - - - - Gurmukhi - - - - - Gujarati - - - - - Oriya - - - - - Tamil - - - - - Telugu - - - - - Kannada - - - - - Malayalam - - - - - Sinhala - - - - - Thai - - - - - Lao - - - - - Tibetan - - - - - Myanmar - - - - - Georgian - - - - - Khmer - - - - - Simplified Chinese - - - - - Traditional Chinese - - - - - Japanese - - - - - Korean - - - - - Vietnamese - - - - - Symbol - - - - - Ogham - - - - - Runic - - - - - QFontDialog - - - &Font - &Tipo de letra - - - - Font st&yle - &Estilo del tipo de letra - - - - &Size - &Tamaño - - - - Effects - Efectos - - - - Stri&keout - &Tachado - - - - &Underline - S&ubrayado - - - - Sample - Muestra - - - - Wr&iting System - Sistema de escr&itura - - - - - Select Font - Seleccionar un tipo de letra - - - - QFtp - - - - Not connected - No conectado - - - - - Host %1 not found - Equipo %1 no encontrado - - - - - Connection refused to host %1 - Conexión rechazada al equipo %1 - - - - Connection timed out to host %1 - - - - - - - Connected to host %1 - Conectado al equipo %1 - - - - - Connection refused for data connection - Conexión para conexión de datos rechazada - - - - - - - Unknown error - Error desconocido - - - - - Connecting to host failed: -%1 - La conexión con el equipo ha fallado: -%1 - - - - - Login failed: -%1 - Identificación fallida: -%1 - - - - - Listing directory failed: -%1 - El listado del directorio ha fallado: -%1 - - - - - Changing directory failed: -%1 - Fallo del cambio de directorio: -%1 - - - - - Downloading file failed: -%1 - Fallo de la descarga del fichero: -%1 - - - - - Uploading file failed: -%1 - El envío del fichero ha fallado: -%1 - - - - - Removing file failed: -%1 - Eliminación de fichero fallida: -%1 - - - - - Creating directory failed: -%1 - Fallo de la creación de un directorio: -%1 - - - - - Removing directory failed: -%1 - Eliminación de directorio fallida: -%1 - - - - - - Connection closed - Conexión cerrada - - - - Host %1 found - Equipo %1 encontrado - - - - Connection to %1 closed - Conexión a %1 cerrada - - - - Host found - Equipo encontrado - - - - Connected to host - Conectado al equipo - - - - QHostInfo - - - Unknown error - Error desconocido - - - - QHostInfoAgent - - - - - - - - - - Host not found - Equipo no encontrado - - - - - - - Unknown address type - Dirección de tipo desconocido - - - - - - Unknown error - Error desconocido - - - - QHttp - - - HTTPS connection requested but SSL support not compiled in - - - - - - - - Unknown error - Error desconocido - - - - - Request aborted - Solicitud interrumpida - - - - - No server set to connect to - No se ha indicado ningún servidor al que conectarse - - - - - Wrong content length - Longitud del contenido errónea - - - - - Server closed connection unexpectedly - El servidor cerró la conexión inesperadamente - - - - Unknown authentication method - - - - - Error writing response to device - - - - - - Connection refused - Conexión rechazada - - - - - - Host %1 not found - Equipo %1 no encontrado - - - - - - - HTTP request failed - Solicitud HTTP fallida - - - - - Invalid HTTP response header - Cabecera de respuesta HTTP no válida - - - - - - - Invalid HTTP chunked body - Fragmento HTTP no válido - - - - Host %1 found - Equipo %1 encontrado - - - - Connected to host %1 - Conectado al equipo %1 - - - - Connection to %1 closed - Conexión a %1 cerrada - - - - Host found - Equipo encontrado - - - - Connected to host - Conectado al equipo - - - - - Connection closed - Conexión cerrada - - - - Proxy authentication required - El proxy requiere autenticación - - - - Authentication required - Se precisa autenticación - - - - Connection refused (or timed out) - - - - - Proxy requires authentication - - - - - Host requires authentication - - - - - Data corrupted - - - - - Unknown protocol specified - - - - - SSL handshake failed - - - - - QHttpSocketEngine - - - Did not receive HTTP response from proxy - - - - - Error parsing authentication request from proxy - - - - - Authentication required - Se precisa autenticación - - - - Proxy denied connection - - - - - Error communicating with HTTP proxy - - - - - Proxy server not found - - - - - Proxy connection refused - - - - - Proxy server connection timed out - - - - - Proxy connection closed prematurely - - - - - QIBaseDriver - - - Error opening database - Error al abrir la base de datos - - - - Could not start transaction - No fue posible iniciar la transacción - - - - Unable to commit transaction - Incapaz de enviar la transacción - - - - Unable to rollback transaction - Incapaz de anular la transacción - - - - QIBaseResult - - - Unable to create BLOB - Imposible crear un BLOB - - - - Unable to write BLOB - Imposible escribir el BLOB - - - - Unable to open BLOB - Imposible abrir el BLOB - - - - Unable to read BLOB - Imposible leer el BLOB - - - - - Could not find array - No fue posible encontrar la tabla - - - - Could not get array data - No fue posible obtener los datos de la tabla - - - - Could not get query info - No fue posible obtener información sobre la consulta - - - - Could not start transaction - No fue posible iniciar la transacción - - - - Unable to commit transaction - Incapaz de enviar la transacción - - - - Could not allocate statement - No fue posible asignar la instrucción - - - - Could not prepare statement - No fue posible preparar la instrucción - - - - - Could not describe input statement - No fue posible describir la instrucción de entrada - - - - Could not describe statement - No fue posible describir la instrucción - - - - Unable to close statement - No fue posible cerrar la instrucción - - - - Unable to execute query - No fue posible ejecutar la consulta - - - - Could not fetch next item - No fue posible obtener el elemento siguiente - - - - Could not get statement info - No fue posible obtener información sobre la instrucción - - - - QIODevice - - - Permission denied - Permiso denegado - - - - Too many open files - Demasiados ficheros abiertos simultáneamente - - - - No such file or directory - No hay ningún fichero o directorio con ese nombre - - - - No space left on device - No queda espacio en el dispositivo - - - - Unknown error - Error desconocido - - - - QInputContext - - - XIM - XIM - - - - XIM input method - Método de entrada XIM - - - - Windows input method - Método de entrada Windows - - - - Mac OS X input method - Método de entrada Mac OS X - - - - QInputDialog - - - Enter a value: - - - - - QLibrary - - QLibrary::load_sys: Cannot load %1 (%2) - QLibrary::load_sys: No se puede cargar %1 (%2) - - - QLibrary::unload_sys: Cannot unload %1 (%2) - QLibrary::unload_sys: No se puede cargar %1 (%2) - - - QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) - QLibrary::resolve_sys: Símbolo «%1» no definido en %2 (%3) - - - - Could not mmap '%1': %2 - No fu posible establecer la proyección en memoria de «%1»: %2 - - - - Plugin verification data mismatch in '%1' - Los datos de verificación del complemento no coinciden en «%1» - - - - Could not unmap '%1': %2 - No fue posible suprimir la proyección en memoria de «%1»: %2 - - - - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] - El complemento «%1» usa una biblioteca Qt incompatible. (%2.%3.%4) [%5] - - - - The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" - El complemento «%1» usa una biblioteca Qt incompatible. Se esperaba la clave «%2», pero se ha recibido «%3» - - - - Unknown error - Error desconocido - - - - - The shared library was not found. - No se ha encontrado la biblioteca compartida. - - - - The file '%1' is not a valid Qt plugin. - El fichero «%1» no es un complemento de Qt válido. - - - - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) - El complemento «%1» usa una biblioteca Qt incompatible. (No se pueden mezclar las bibliotecas «debug» y «release».) - - - - - Cannot load library %1: %2 - - - - - - Cannot unload library %1: %2 - - - - - - Cannot resolve symbol "%1" in %2: %3 - - - - - QLineEdit - - - &Undo - &Deshacer - - - - &Redo - &Rehacer - - - - Cu&t - Cor&tar - - - - &Copy - &Copiar - - - - &Paste - &Pegar - - - - Delete - Borrar - - - - Select All - Seleccionar todo - - - - QLocalServer - - - - %1: Name error - - - - - %1: Permission denied - - - - - %1: Address in use - - - - - - %1: Unknown error %2 - - - - - QLocalSocket - - - - %1: Connection refused - - - - - - %1: Remote closed - - - - - - - - %1: Invalid name - - - - - - %1: Socket access error - - - - - - %1: Socket resource error - - - - - - %1: Socket operation timed out - - - - - - %1: Datagram too large - - - - - - - %1: Connection error - - - - - - %1: The socket operation is not supported - - - - - %1: Unknown error - - - - - - %1: Unknown error %2 - - - - - QMYSQLDriver - - - Unable to open database ' - Imposible abrir la base de datos ' - - - - Unable to connect - No es posible establecer una conexión - - - - Unable to begin transaction - No es posible iniciar la transacción - - - - Unable to commit transaction - No es posible enviar la transacción - - - - Unable to rollback transaction - No es posible anular la transacción - - - - QMYSQLResult - - - Unable to fetch data - No es posible obtener los datos - - - - Unable to execute query - No es posible ejecutar la consulta - - - - Unable to store result - No es posible almacenar el resultado - - - - - Unable to prepare statement - No es posible preparar la instrucción - - - - Unable to reset statement - No es posible reinicializar la instrucción - - - - Unable to bind value - No es posible ligar el valor - - - - Unable to execute statement - No es posible ejecutar la instrucción - - - - - Unable to bind outvalues - No es posible ligar los valores de salida - - - - Unable to store statement results - No es posible almacenar los resultados de la instrucción - - - - Unable to execute next query - - - - - Unable to store next result - - - - - QMdiArea - - - (Untitled) - - - - - QMdiSubWindow - - - %1 - [%2] - %1 - [%2] - - - - Close - Cerrar - - - - Minimize - Minimizar - - - - Restore Down - Restaurar abajo - - - - &Restore - &Restaurar - - - - &Move - &Mover - - - - &Size - Redimen&sionar - - - - Mi&nimize - Mi&nimizar - - - - Ma&ximize - Ma&ximizar - - - - Stay on &Top - Permanecer en &primer plano - - - - &Close - &Cerrar - - - - - [%1] - - - - - Maximize - Maximizar - - - - Unshade - - - - - Shade - - - - - Restore - - - - - Help - Ayuda - - - - Menu - Menú - - - - QMenu - - - - Close - Cerrar - - - - - Open - Abrir - - - - - - Execute - Ejecutar - - - - QMenuBar - - About - Acerca de - - - Config - Configuración - - - Preference - Preferencia - - - Options - Opciones - - - Setting - Parámetro - - - Setup - Configuración - - - Quit - Salir - - - Exit - Salir - - - About %1 - Acerca de %1 - - - About Qt - Acerca de Qt - - - Preferences - Preferencias - - - Quit %1 - Salir de %1 - - - - QMessageBox - - - Help - Ayuda - - - - - - - OK - Aceptar - - - - About Qt - Acerca de Qt - - - <p>This program uses Qt version %1.</p> - <p>Este programa utiliza la versión %1 de Qt.</p> - - - <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.digia.com/">qt.digia.com</a> for more information.</p> - <h3>Acerca de Qt</h3>%1<p>Qt es un toolkit en C++ para desarrollo de aplicaciones multiplataforma.</p><p>Qt proporciona portabilidad del código entre MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux y todas las variantes comerciales de Unix importantes. Qt también está disponible para sistemas empotrados bajo el nombre Qtopia Core.</p><p>Qt es un producto de Trolltech. Visite <a href="http://qt.digia.com/">qt.digia.com</a> para obtener más información.</p> - - - - Show Details... - Mostrar los detalles... - - - - Hide Details... - Ocultar los detalles... - - - - <h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.digia.com/product/licensing">qt.digia.com/product/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).</p><p>Qt is a Digia product. See <a href="http://qt.digia.com/">qt.digia.com</a> for more information.</p> - - - - <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.digia.com/company/model/">qt.digia.com/company/model/</a> for an overview of Qt licensing.</p> - <p>Este programa utiliza Qt Open Source Edition versión %1.</p><p>Qt Open Source Edition está dirigida al desarrollo de aplicaciones libres. Para desarrollar aplicaciones privativas (de código cerrado) necesita una licencia comercial de Qt.</p><p>Visite <a href="http://qt.digia.com/company/model/">qt.digia.com/company/model/</a> para obtener una visión global de las licencias de Qt.</p> - - - - QMultiInputContext - - - Select IM - Seleccionar IM - - - - QMultiInputContextPlugin - - - Multiple input method switcher - Seleccionador de varios métodos de entrada - - - - Multiple input method switcher that uses the context menu of the text widgets - Seleccionador de varios métodos de entrada que usa el menú contextual de los elementos de texto - - - - QNativeSocketEngine - - - The remote host closed the connection - El equipo remoto ha cerrado la conexión - - - - Network operation timed out - La operación de red ha expirado - - - - Out of resources - Insuficientes recursos - - - - Unsupported socket operation - Operación socket no admitida - - - - Protocol type not supported - Tipo de protocolo no admitido - - - - Invalid socket descriptor - Descriptor de socket no válido - - - - Network unreachable - Red inalcanzable - - - - Permission denied - Permiso denegado - - - - Connection timed out - Conexión expirada - - - - Connection refused - Conexión rechazada - - - - The bound address is already in use - La dirección enlazada ya está en uso - - - - The address is not available - La dirección no está disponible - - - - The address is protected - La dirección está protegida - - - - Unable to send a message - Imposible enviar un mensaje - - - - Unable to receive a message - Imposible recibir un mensaje - - - - Unable to write - Imposible escribir - - - - Network error - Error de red - - - - Another socket is already listening on the same port - Ya hay otro socket escuchando por el mismo puerto - - - - Unable to initialize non-blocking socket - Imposible inicializar el socket no bloqueante - - - - Unable to initialize broadcast socket - Imposible inicializar el socket de difusión - - - - Attempt to use IPv6 socket on a platform with no IPv6 support - Intento de usar un socket IPv6 sobre una plataforma que no contempla IPv6 - - - - Host unreachable - Equipo inaccesible - - - - Datagram was too large to send - El datagrama era demasiado grande para poder ser enviado - - - - Operation on non-socket - Operación sobre un no-socket - - - - Unknown error - Error desconocido - - - - The proxy type is invalid for this operation - - - - - QNetworkAccessCacheBackend - - - Error opening %1 - - - - - QNetworkAccessFileBackend - - - Request for opening non-local file %1 - - - - - Error opening %1: %2 - - - - - Write error writing to %1: %2 - - - - - Cannot open %1: Path is a directory - - - - - Read error reading from %1: %2 - - - - - QNetworkAccessFtpBackend - - - No suitable proxy found - - - - - Cannot open %1: is a directory - - - - - Logging in to %1 failed: authentication required - - - - - Error while downloading %1: %2 - - - - - Error while uploading %1: %2 - - - - - QNetworkAccessHttpBackend - - - No suitable proxy found - - - - - QNetworkReply - - - Error downloading %1 - server replied: %2 - - - - - Protocol "%1" is unknown - - - - - QNetworkReplyImpl - - - - Operation canceled - - - - - QOCIDriver - - - Unable to logon - No es posible abrir sesión - - - - Unable to initialize - QOCIDriver - La inicialización ha fallado - - - - Unable to begin transaction - No es posible iniciar la transacción - - - - Unable to commit transaction - - - - - Unable to rollback transaction - - - - - QOCIResult - - - - - Unable to bind column for batch execute - No es posible ligar la columna para una ejecución por lotes - - - - Unable to execute batch statement - No es posible ejecutar la instrucción por lotes - - - - Unable to goto next - No es posible pasar al siguiente - - - - Unable to alloc statement - No es posible asignar la instrucción - - - - Unable to prepare statement - No es posible preparar la instrucción - - - - Unable to bind value - No es posible ligar el valor - - - Unable to execute select statement - No es posible ejecutar la instrucción select - - - - Unable to execute statement - No es posible ejecutar la instrucción - - - - QODBCDriver - - - Unable to connect - No es posible establecer una conexión - - - - Unable to connect - Driver doesn't support all needed functionality - No es posible conectarse - El controlador no ofrece todas las funciones necesarias - - - - Unable to disable autocommit - No es posible inhabilitar el envío automático - - - - Unable to commit transaction - No es posible enviar la transacción - - - - Unable to rollback transaction - No es posible anular la transacción - - - - Unable to enable autocommit - No es posible habilitar el envío automático - - - - QODBCResult - - - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration - QODBCResult::reset: No es posible establecer «SQL_CURSOR_STATIC» como atributo de instrucción. Compruebe la configuración de su controlador ODBC - - - - - Unable to execute statement - No es posible ejecutar la instrucción - - - - Unable to fetch next - No es posible obtener el siguiente - - - - Unable to prepare statement - No es posible preparar la instrucción - - - - Unable to bind variable - No es posible ligar la variable - - - - - - Unable to fetch last - - - - - Unable to fetch - - - - - Unable to fetch first - Imposible recuperar el primero - - - - Unable to fetch previous - - - - - QObject - - - Home - Inicio - - - - Operation not supported on %1 - - - - - Invalid URI: %1 - - - - - Write error writing to %1: %2 - - - - - Read error reading from %1: %2 - - - - - Socket error on %1: %2 - - - - - Remote host closed the connection prematurely on %1 - - - - - Protocol error: packet of size 0 received - - - - - - No host name given - - - - - QPPDOptionsModel - - - Name - Nombre - - - - Value - Valor - - - - QPSQLDriver - - - Unable to connect - No es posible establecer conexión - - - - Could not begin transaction - No fue posible iniciar la transacción - - - - Could not commit transaction - No fue posible enviar la transacción - - - - Could not rollback transaction - No fue posible anular la transacción - - - - Unable to subscribe - - - - - Unable to unsubscribe - - - - - QPSQLResult - - - Unable to create query - No es posible crear la consulta - - - - Unable to prepare statement - - - - - QPageSetupWidget - - - Centimeters (cm) - - - - - Millimeters (mm) - - - - - Inches (in) - - - - - Points (pt) - - - - - Form - - - - - Paper - - - - - Page size: - Tamaño de página: - - - - Width: - - - - - Height: - - - - - Paper source: - Fuente del papel: - - - - Orientation - - - - - Portrait - Vertical - - - - Landscape - Apaisado - - - - Reverse landscape - - - - - Reverse portrait - - - - - Margins - - - - - top margin - - - - - left margin - - - - - right margin - - - - - bottom margin - - - - - QPluginLoader - - - Unknown error - Error desconocido - - - - The plugin was not loaded. - El complemento no fue cargado. - - - - QPrintDialog - - - locally connected - conectado localmente - - - - - Aliases: %1 - Alias: %1 - - - - - unknown - desconocido - - - Print in color if available - Imprimir en color si es posible - - - - Print all - Imprimir todo - - - - Print selection - Imprimir la selección - - - - Print range - Imprimir el intervalo - - - Print last page first - Imprimir primero la última página - - - Number of copies: - Número de copias: - - - Paper format - Formato del papel - - - Portrait - Vertical - - - Landscape - Apaisado - - - - A0 (841 x 1189 mm) - A0 (841 x 1189 mm) - - - - A1 (594 x 841 mm) - A1 (594 x 841 mm) - - - - A2 (420 x 594 mm) - A2 (420 x 594 mm) - - - - A3 (297 x 420 mm) - A3 (297 x 420 mm) - - - - A4 (210 x 297 mm, 8.26 x 11.7 inches) - A4 (210 x 297 mm, 8,26 x 11,7 pulgadas) - - - - A5 (148 x 210 mm) - A5 (148 x 210 mm) - - - - A6 (105 x 148 mm) - A6 (105 x 148 mm) - - - - A7 (74 x 105 mm) - A7 (74 x 105 mm) - - - - A8 (52 x 74 mm) - A8 (52 x 74 mm) - - - - A9 (37 x 52 mm) - A9 (37 x 52 mm) - - - - B0 (1000 x 1414 mm) - B0 (1000 x 1414 mm) - - - - B1 (707 x 1000 mm) - B1 (707 x 1000 mm) - - - - B2 (500 x 707 mm) - B2 (500 x 707 mm) - - - - B3 (353 x 500 mm) - B3 (353 x 500 mm) - - - - B4 (250 x 353 mm) - B4 (250 x 353 mm) - - - - B5 (176 x 250 mm, 6.93 x 9.84 inches) - B5 (176 x 250 mm, 6,93 x 9,84 pulgadas) - - - - B6 (125 x 176 mm) - B6 (125 x 176 mm) - - - - B7 (88 x 125 mm) - B7 (88 x 125 mm) - - - - B8 (62 x 88 mm) - B8 (62 x 88 mm) - - - - B9 (44 x 62 mm) - B9 (44 x 62 mm) - - - - B10 (31 x 44 mm) - B10 (31 x 44 mm) - - - - C5E (163 x 229 mm) - C5E (163 x 229 mm) - - - - DLE (110 x 220 mm) - DLE (110 x 220 mm) - - - - Executive (7.5 x 10 inches, 191 x 254 mm) - Ejecutivo (7,5 x 10 pulgadas, 191 x 254 mm) - - - - Folio (210 x 330 mm) - Folio (210 x 330 mm) - - - - Ledger (432 x 279 mm) - Ledger (432 x 279 mm) - - - - Legal (8.5 x 14 inches, 216 x 356 mm) - Legal (8,5 x 14 pulgadas, 216 x 356 mm) - - - - Letter (8.5 x 11 inches, 216 x 279 mm) - Carta (8,5 x 11 pulgadas, 216 x 279 mm) - - - - Tabloid (279 x 432 mm) - Tabloide (279 x 432 mm) - - - - US Common #10 Envelope (105 x 241 mm) - Sobre US Common #10 (105 x 241 mm) - - - - OK - Aceptar - - - Cancel - Cancelar - - - Page size: - Tamaño de página: - - - Orientation: - Orientación: - - - Paper source: - Fuente del papel: - - - - - - Print - Imprimir - - - File - Fichero - - - Printer - Impresora - - - - Print To File ... - Imprimir a fichero... - - - Print dialog - Ventana de impresión - - - Size: - Tamaño: - - - Properties - Propiedades - - - Printer info: - Información de la impresora: - - - Browse - Explorar - - - Print to file - Imprimir a fichero - - - Pages from - Páginas - - - to - a - - - Selection - Selección - - - Copies - Copias - - - Collate - Recopilar - - - Other - Otro - - - Double side printing - Impresión a doble cara - - - - File %1 is not writable. -Please choose a different file name. - No se puede escribir en el fichero %1. -Elija un nombre de fichero diferente. - - - - %1 already exists. -Do you want to overwrite it? - %1 ya existe. -¿Desea sobrescribirlo? - - - - File exists - El fichero existe - - - - <qt>Do you want to overwrite it?</qt> - <qt>¿Desea sobrescribirlo?</qt> - - - - %1 is a directory. -Please choose a different file name. - %1 es un directorio. -Elija un nombre de fichero diferente. - - - - A0 - - - - - A1 - - - - - A2 - - - - - A3 - - - - - A4 - - - - - A5 - - - - - A6 - - - - - A7 - - - - - A8 - - - - - A9 - - - - - B0 - - - - - B1 - - - - - B2 - - - - - B3 - - - - - B4 - - - - - B5 - - - - - B6 - - - - - B7 - - - - - B8 - - - - - B9 - - - - - B10 - - - - - C5E - - - - - DLE - - - - - Executive - - - - - Folio - - - - - Ledger - - - - - Legal - - - - - Letter - - - - - Tabloid - - - - - US Common #10 Envelope - - - - - Custom - - - - - - &Options >> - - - - - &Print - - - - - &Options << - - - - - Print to File (PDF) - - - - - Print to File (Postscript) - - - - - Local file - - - - - Write %1 file - - - - - The 'From' value cannot be greater than the 'To' value. - - - - - QPrintPreviewDialog - - Page Setup - Configurar página - - - %1% - %1% - - - Print Preview - Previsualizar impresión - - - Next page - Página siguiente - - - Previous page - Página anterior - - - First page - Primera página - - - Last page - Última página - - - Fit width - Ajustar al ancho - - - Fit page - Ajustar a la página - - - Zoom in - Acercar - - - Zoom out - Alejar - - - Portrait - Vertical - - - Landscape - Apaisado - - - Show single page - Mostrar páginas sueltas - - - Show facing pages - Mostrar páginas encaradas - - - Show overview of all pages - Vista previa de todas las páginas - - - Print - Imprimir - - - Page setup - Configurar página - - - Close - Cerrar - - - Export to PDF - Exportar a PDF - - - Export to PostScript - Exportar a PostScript - - - - QPrintPropertiesDialog - - PPD Properties - Propiedades PPD - - - Save - Guardar - - - OK - Aceptar - - - - QPrintPropertiesWidget - - - Form - - - - - Page - - - - - Advanced - - - - - QPrintSettingsOutput - - - Form - - - - - Copies - Copias - - - - Print range - Imprimir el intervalo - - - - Print all - Imprimir todo - - - - Pages from - Páginas - - - - to - a - - - - Selection - Selección - - - - Output Settings - - - - - Copies: - - - - - Collate - Recopilar - - - - Reverse - - - - - Options - Opciones - - - - Color Mode - - - - - Color - - - - - Grayscale - - - - - Duplex Printing - - - - - None - - - - - Long side - - - - - Short side - - - - - QPrintWidget - - - Form - - - - - Printer - Impresora - - - - &Name: - - - - - P&roperties - - - - - Location: - - - - - Preview - - - - - Type: - - - - - Output &file: - - - - - ... - - - - - QProcess - - - - Could not open input redirection for reading - - - - - - Could not open output redirection for writing - - - - - Resource error (fork failure): %1 - - - - - - - - - - - - - Process operation timed out - - - - - - - - Error reading from process - - - - - - - Error writing to process - - - - - Process crashed - - - - - No program defined - - - - - Process failed to start - - - - - QProgressDialog - - - Cancel - Cancelar - - - - QPushButton - - - Open - Abrir - - - - QRadioButton - - - Check - Marcar - - - - QRegExp - - - no error occurred - no se ha producido ningún error - - - - disabled feature used - se ha usado una característica no habilitada - - - - bad char class syntax - sintaxis no válida para clase de caracteres - - - - bad lookahead syntax - sintaxis no válida para lookahead - - - - bad repetition syntax - sintaxis no válida para repetición - - - - invalid octal value - valor octal no válido - - - - missing left delim - falta el delimitador izquierdo - - - - unexpected end - fin inesperado - - - - met internal limit - se alcanzó el límite interno - - - - QSQLite2Driver - - - Error to open database - Error al abrir la base de datos - - - - Unable to begin transaction - No es posible iniciar la transacción - - - - Unable to commit transaction - No es posible enviar la transacción - - - - Unable to rollback Transaction - No es posible anular la transacción - - - - QSQLite2Result - - - Unable to fetch results - No es posible obtener los resultados - - - - Unable to execute statement - No es posible ejecutar la instrucción - - - - QSQLiteDriver - - - Error opening database - Error al abrir la base de datos - - - - Error closing database - Error al cerrar la base de datos - - - - Unable to begin transaction - No es posible iniciar la transacción - - - - Unable to commit transaction - No es posible enviar la transacción - - - Unable to roll back transaction - No es posible anular la transacción - - - - Unable to rollback transaction - - - - - QSQLiteResult - - - - - Unable to fetch row - No es posible obtener la fila - - - - Unable to execute statement - No es posible ejecutar la instrucción - - - - Unable to reset statement - No es posible reinicializar la instrucción - - - - Unable to bind parameters - No es posible ligar los parámetros - - - - Parameter count mismatch - Número de parámetros incorrecto - - - - No query - - - - - QScrollBar - - - Scroll here - Desplazar hasta aquí - - - - Left edge - Borde izquierdo - - - - Top - Parte superior - - - - Right edge - Borde derecho - - - - Bottom - Parte inferior - - - - Page left - Una página a la izquierda - - - - - Page up - Una página hacia arriba - - - - Page right - Una página a la derecha - - - - - Page down - Una página hacia abajo - - - - Scroll left - Desplazar hacia la izquierda - - - - Scroll up - Desplazar hacia arriba - - - - Scroll right - Desplazar hacia la derecha - - - - Scroll down - Desplazar hacia abajo - - - - Line up - Alinear - - - - Position - Posición - - - - Line down - Alinear por abajo - - - - QSharedMemory - - - %1: unable to set key on lock - - - - - %1: create size is less then 0 - - - - - - %1: unable to lock - - - - - %1: unable to unlock - - - - - - %1: permission denied - - - - - - %1: already exists - - - - - - %1: doesn't exists - - - - - - %1: out of resources - - - - - - %1: unknown error %2 - - - - - %1: key is empty - - - - - %1: unix key file doesn't exists - - - - - %1: ftok failed - - - - - - %1: unable to make key - - - - - %1: system-imposed size restrictions - - - - - %1: not attached - - - - - %1: invalid size - - - - - %1: key error - - - - - %1: size query failed - - - - - QShortcut - - - Space - Espacio - - - - Esc - Esc - - - - Tab - Tabulador - - - - Backtab - Tabulador hacia atrás - - - - Backspace - Borrar - - - - Return - Retorno - - - - Enter - Intro - - - - Ins - Ins - - - - Del - Supr - - - - Pause - Pausa - - - - Print - Impr Pant - - - - SysReq - PetSis - - - - Home - Inicio - - - - End - Fin - - - - Left - Izquierda - - - - Up - Arriba - - - - Right - Derecha - - - - Down - Abajo - - - - PgUp - Re Pág - - - - PgDown - Av Pág - - - - CapsLock - Bloq Mayús - - - - NumLock - Bloq Num - - - - ScrollLock - Bloq Despl - - - - Menu - Menú - - - - Help - Ayuda - - - - Back - Anterior (histórico) - - - - Forward - Siguiente (histórico) - - - - Stop - Detener - - - - Refresh - Actualizar - - - - Volume Down - Bajar el volumen - - - - Volume Mute - Silenciar - - - - Volume Up - Subir el volumen - - - - Bass Boost - Potenciar los graves - - - - Bass Up - Subir los graves - - - - Bass Down - Bajar los graves - - - - Treble Up - Subir los agudos - - - - Treble Down - Bajar los agudos - - - - Media Play - Reproducir el medio - - - - Media Stop - Detener el medio - - - - Media Previous - Medio anterior - - - - Media Next - Siguiente medio - - - - Media Record - Grabar medio - - - - Favorites - Favoritos - - - - Search - Búsqueda - - - - Standby - Reposo - - - - Open URL - Abrir URL - - - - Launch Mail - Lanzar correo - - - - Launch Media - Lanzar medio - - - - Launch (0) - Lanzar (0) - - - - Launch (1) - Lanzar (1) - - - - Launch (2) - Lanzar (2) - - - - Launch (3) - Lanzar (3) - - - - Launch (4) - Lanzar (4) - - - - Launch (5) - Lanzar (5) - - - - Launch (6) - Lanzar (6) - - - - Launch (7) - Lanzar (7) - - - - Launch (8) - Lanzar (8) - - - - Launch (9) - Lanzar (9) - - - - Launch (A) - Lanzar (A) - - - - Launch (B) - Lanzar (B) - - - - Launch (C) - Lanzar (C) - - - - Launch (D) - Lanzar (D) - - - - Launch (E) - Lanzar (E) - - - - Launch (F) - Lanzar (F) - - - - Print Screen - Imprimir pantalla - - - - Page Up - Retroceder página - - - - Page Down - Avanzar página - - - - Caps Lock - Bloqueo de mayúsculas - - - - Num Lock - Bloq num - - - - Number Lock - Bloqueo numérico - - - - Scroll Lock - Bloqueo del desplazamiento - - - - Insert - Insertar - - - - Delete - Borrar - - - - Escape - Escape - - - - System Request - Petición del sistema - - - - Select - Seleccionar - - - - Yes - - - - - No - No - - - - Context1 - Contexto1 - - - - Context2 - Contexto2 - - - - Context3 - Contexto3 - - - - Context4 - Contexto4 - - - - Call - Llamar - - - - Hangup - Descolgar - - - - Flip - Voltear - - - - - Ctrl - Ctrl - - - - - Shift - May - - - - - Alt - Alt - - - - - Meta - Meta - - - - + - + - - - - F%1 - F%1 - - - - Home Page - Página de inicio - - - - QSlider - - - Page left - Una página a la izquierda - - - - Page up - Una página hacia arriba - - - - Position - Posición - - - - Page right - Una página a la derecha - - - - Page down - Una página hacia abajo - - - - QSocks5SocketEngine - - - Connection to proxy refused - - - - - Connection to proxy closed prematurely - - - - - Proxy host not found - - - - - Connection to proxy timed out - - - - - Proxy authentication failed - - - - - Proxy authentication failed: %1 - - - - - SOCKS version 5 protocol error - - - - - General SOCKSv5 server failure - - - - - Connection not allowed by SOCKSv5 server - - - - - TTL expired - - - - - SOCKSv5 command not supported - - - - - Address type not supported - - - - - Unknown SOCKSv5 proxy error code 0x%1 - - - - Socks5 timeout error connecting to socks server - Error de expiración socks5 mientras se establecía una conexión al servidor socks - - - - Network operation timed out - La operación de red ha expirado - - - - QSpinBox - - - More - Más - - - - Less - Menos - - - - QSql - - - Delete - Borrar - - - - Delete this record? - ¿Borrar este registro? - - - - - - Yes - - - - - - - No - No - - - - Insert - Insertar - - - - Update - Actualizar - - - - Save edits? - ¿Guardar las modificaciones? - - - - Cancel - Cancelar - - - - Confirm - Confirmar - - - - Cancel your edits? - ¿Cancelar sus modificaciones? - - - - QSslSocket - - - Unable to write data: %1 - No es posible escribir los datos: %1 - - - - Error while reading: %1 - Error al leer: %1 - - - - Error during SSL handshake: %1 - Error durante el saludo SSL: %1 - - - - Error creating SSL context (%1) - Error al crear el contexto SSL (%1) - - - - Invalid or empty cipher list (%1) - Lista de cifras vacía o no válida (%1) - - - - Error creating SSL session, %1 - Error al crear la sesión SSL, %1 - - - - Error creating SSL session: %1 - Error al crear la sesión SSL: %1 - - - - Cannot provide a certificate with no key, %1 - No se puede proporcionar un certificado sin clave, %1 - - - - Error loading local certificate, %1 - Error al cargar el certificado local, %1 - - - - Error loading private key, %1 - Error al cargar la clave privada, %1 - - - Private key do not certificate public key, %1 - La clave privada no certifica la clave pública, %1 - - - - Private key does not certificate public key, %1 - - - - - QSystemSemaphore - - - - %1: out of resources - - - - - - %1: permission denied - - - - - %1: already exists - - - - - %1: does not exist - - - - - - %1: unknown error %2 - - - - - QTDSDriver - - - Unable to open connection - No es posible abrir la conexión - - - - Unable to use database - No es posible utilizar la base de datos - - - - QTabBar - - - Scroll Left - Desplazar hacia la izquierda - - - - Scroll Right - Desplazar hacia la derecha - - - - QTcpServer - - Socket operation unsupported - Operación socket no admitida - - - - Operation on socket is not supported - - - - - QTextControl - - - &Undo - &Deshacer - - - - &Redo - &Rehacer - - - - Cu&t - Cor&tar - - - - &Copy - &Copiar - - - - Copy &Link Location - Copiar la ubicación del en&lace - - - - &Paste - &Pegar - - - - Delete - Borrar - - - - Select All - Seleccionar todo - - - - QToolButton - - - - Press - Pulsar - - - - - Open - Abrir - - - - QUdpSocket - - - This platform does not support IPv6 - La plataforma no contempla IPv6 - - - - QUndoGroup - - - Undo - Deshacer - - - - Redo - Rehacer - - - - QUndoModel - - - <empty> - <vacío> - - - - QUndoStack - - - Undo - Deshacer - - - - Redo - Rehacer - - - - QUnicodeControlCharacterMenu - - - LRM Left-to-right mark - LRM Left-to-right mark - - - - RLM Right-to-left mark - RLM Right-to-left mark - - - - ZWJ Zero width joiner - ZWJ Zero width joiner - - - - ZWNJ Zero width non-joiner - ZWNJ Zero width non-joiner - - - - ZWSP Zero width space - ZWSP Zero width space - - - - LRE Start of left-to-right embedding - LRE Start of left-to-right embedding - - - - RLE Start of right-to-left embedding - RLE Start of right-to-left embedding - - - - LRO Start of left-to-right override - LRO Start of left-to-right override - - - - RLO Start of right-to-left override - RLO Start of right-to-left override - - - - PDF Pop directional formatting - PDF Pop directional formatting - - - - Insert Unicode control character - Insertar carácter de control Unicode - - - - QWebFrame - - - Request cancelled - - - - - Request blocked - - - - - Cannot show URL - - - - - Frame load interruped by policy change - - - - - Cannot show mimetype - - - - - File does not exist - - - - - QWebPage - - - Bad HTTP request - - - - - Submit - default label for Submit buttons in forms on web pages - - - - - Submit - Submit (input element) alt text for <input> elements with no alt, title, or value - - - - - Reset - default label for Reset buttons in forms on web pages - Reinicializar - - - - This is a searchable index. Enter search keywords: - text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' - - - - - Choose File - title for file button used in HTML forms - - - - - No file selected - text to display in file button used in HTML forms when no file is selected - - - - - Open in New Window - Open in New Window context menu item - - - - - Save Link... - Download Linked File context menu item - - - - - Copy Link - Copy Link context menu item - - - - - Open Image - Open Image in New Window context menu item - - - - - Save Image - Download Image context menu item - - - - - Copy Image - Copy Link context menu item - Copiar imagen - - - - Open Frame - Open Frame in New Window context menu item - - - - - Copy - Copy context menu item - Copiar - - - - Go Back - Back context menu item - Precedente - - - - Go Forward - Forward context menu item - - - - - Stop - Stop context menu item - Detener - - - - Reload - Reload context menu item - - - - - Cut - Cut context menu item - Cortar - - - - Paste - Paste context menu item - Pegar - - - Select All - Select All context menu item - Seleccionar todo - - - - No Guesses Found - No Guesses Found context menu item - - - - - Ignore - Ignore Spelling context menu item - Ignorar - - - - Add To Dictionary - Learn Spelling context menu item - - - - - Search The Web - Search The Web context menu item - - - - - Look Up In Dictionary - Look Up in Dictionary context menu item - - - - - Open Link - Open Link context menu item - - - - - Ignore - Ignore Grammar context menu item - Ignorar - - - - Spelling - Spelling and Grammar context sub-menu item - - - - - Show Spelling and Grammar - menu item title - - - - - Hide Spelling and Grammar - menu item title - - - - - Check Spelling - Check spelling context menu item - - - - - Check Spelling While Typing - Check spelling while typing context menu item - - - - - Check Grammar With Spelling - Check grammar with spelling context menu item - - - - - Fonts - Font context sub-menu item - - - - - Bold - Bold context menu item - - - - - Italic - Italic context menu item - - - - - Underline - Underline context menu item - - - - - Outline - Outline context menu item - - - - - Direction - Writing direction context sub-menu item - - - - - Text Direction - Text direction context sub-menu item - - - - - Default - Default writing direction context menu item - - - - - LTR - Left to Right context menu item - - - - - RTL - Right to Left context menu item - - - - - Inspect - Inspect Element context menu item - - - - - No recent searches - Label for only item in menu that appears when clicking on the search field image, when no searches have been performed - - - - - Recent searches - label for first item in the menu that appears when clicking on the search field image, used as embedded menu title - - - - - Clear recent searches - menu item in Recent Searches menu that empties menu's contents - - - - - Unknown - Unknown filesize FTP directory listing item - Desconocido - - - - %1 (%2x%3 pixels) - Title string for images - - - - - Web Inspector - %2 - - - - - Scroll here - Desplazar hasta aquí - - - - Left edge - Borde izquierdo - - - - Top - Parte superior - - - - Right edge - Borde derecho - - - - Bottom - Parte inferior - - - - Page left - Una página a la izquierda - - - - Page up - Una página hacia arriba - - - - Page right - Una página a la derecha - - - - Page down - Una página hacia abajo - - - - Scroll left - Desplazar hacia la izquierda - - - - Scroll up - Desplazar hacia arriba - - - - Scroll right - Desplazar hacia la derecha - - - - Scroll down - Desplazar hacia abajo - - - - %n file(s) - number of chosen file - - - - - - - - JavaScript Alert - %1 - - - - - JavaScript Confirm - %1 - - - - - JavaScript Prompt - %1 - - - - - Move the cursor to the next character - - - - - Move the cursor to the previous character - - - - - Move the cursor to the next word - - - - - Move the cursor to the previous word - - - - - Move the cursor to the next line - - - - - Move the cursor to the previous line - - - - - Move the cursor to the start of the line - - - - - Move the cursor to the end of the line - - - - - Move the cursor to the start of the block - - - - - Move the cursor to the end of the block - - - - - Move the cursor to the start of the document - - - - - Move the cursor to the end of the document - - - - - Select all - Seleccionar todo - - - - Select to the next character - - - - - Select to the previous character - - - - - Select to the next word - - - - - Select to the previous word - - - - - Select to the next line - - - - - Select to the previous line - - - - - Select to the start of the line - - - - - Select to the end of the line - - - - - Select to the start of the block - - - - - Select to the end of the block - - - - - Select to the start of the document - - - - - Select to the end of the document - - - - - Delete to the start of the word - - - - - Delete to the end of the word - - - - - Insert a new paragraph - - - - - Insert a new line - - - - - QWhatsThisAction - - - What's This? - ¿Qué es esto? - - - - QWidget - - - * - * - - - - QWizard - - - Go Back - Precedente - - - - Continue - Siguiente - - - - Commit - Enviar - - - - Done - Terminar - - - Quit - Salir - - - - Help - Ayuda - - - - < &Back - < &Anterior - - - - &Finish - &Terminar - - - - Cancel - Cancelar - - - - &Help - &Ayuda - - - - &Next - - - - - &Next > - Siguie&nte > - - - - QWorkspace - - - &Restore - &Restaurar - - - - &Move - &Mover - - - - &Size - &Tamaño - - - - Mi&nimize - Mi&nimizar - - - - Ma&ximize - Ma&ximizar - - - - &Close - &Cerrar - - - - Stay on &Top - Permanecer en &primer plano - - - - - Sh&ade - Sombre&ar - - - - - %1 - [%2] - %1 - [%2] - - - - Minimize - Minimizar - - - - Restore Down - Restaurar abajo - - - - Close - Cerrar - - - - &Unshade - Q&uitar sombra - - - - QXml - - - no error occurred - no se ha producido ningún error - - - - error triggered by consumer - error debido al consumidor - - - - unexpected end of file - fin de fichero inesperado - - - - more than one document type definition - más de una definición de tipo de documento - - - - error occurred while parsing element - se ha producido un error durante el análisis de un elemento - - - - tag mismatch - etiqueta desequilibrada - - - - error occurred while parsing content - se ha producido un error durante el análisis del contenido - - - - unexpected character - carácter inesperado - - - - invalid name for processing instruction - nombre de instrucción de tratamiento no válido - - - - version expected while reading the XML declaration - se esperaba la versión al leer la declaración XML - - - - wrong value for standalone declaration - valor erróneo para la declaración independiente - - - - encoding declaration or standalone declaration expected while reading the XML declaration - se esperaba una declaración de codificación o declaración autónoma al leer la declaración XML - - - - standalone declaration expected while reading the XML declaration - se esperaba una declaración independiente al leer la declaración XML - - - - error occurred while parsing document type definition - se ha producido un error durante el análisis de la definición de tipo de documento - - - - letter is expected - se esperaba una letra - - - - error occurred while parsing comment - se ha producido un error durante el análisis de un comentario - - - - error occurred while parsing reference - se ha producido un error durante el análisis de una referencia - - - - internal general entity reference not allowed in DTD - no se permiten referencias a entidades internas generales en la DTD - - - - external parsed general entity reference not allowed in attribute value - no se permiten referencias a entidades externas generales ya analizadas en el valor de un atributo - - - - external parsed general entity reference not allowed in DTD - no se permiten referencias a entidades externas generales ya analizadas en la DTD - - - - unparsed entity reference in wrong context - referencia a entidad no analizada en un contexto no válido - - - - recursive entities - entidades recursivas - - - - error in the text declaration of an external entity - error en la declaración de texto de una entidad externa - - - - QXmlStream - - - - Extra content at end of document. - Contenido extra al final del documento. - - - - Invalid entity value. - Valor de la entidad no válido. - - - - Invalid XML character. - Carácter XML no válido. - - - - Sequence ']]>' not allowed in content. - Secuencia «]]>» no permitida en el contenido. - - - - Namespace prefix '%1' not declared - Prefijo de espacio de nombres «%1» no declarado - - - - Attribute redefined. - Atributo redefinido. - - - - Unexpected character '%1' in public id literal. - Carácter «%1» inesperado en un literal de identificación público. - - - - Invalid XML version string. - Cadena de versión XML no válida. - - - - Unsupported XML version. - Versión XML no admitida. - - - - %1 is an invalid encoding name. - %1 es un nombre de codificación no válido. - - - - Encoding %1 is unsupported - No se admite la codificación %1 - - - Invalid XML encoding name. - Nombre de codificación XML no válido. - - - - Standalone accepts only yes or no. - «Standalone» sólo acepta «sí» o «no». - - - - Invalid attribute in XML declaration. - Atributo no válido en la declaración XML. - - - - Premature end of document. - Final prematuro del documento. - - - - Invalid document. - Documento no válido. - - - - Expected - Se esperaba - - - - , but got ' - , pero se ha recibido ' - - - - Unexpected ' - No se esperaba ' - - - - Expected character data. - Se esperaban datos de carácter. - - - - Recursive entity detected. - Detectada entidad recursiva. - - - - Start tag expected. - Se esperaba etiqueta de inicio. - - - - XML declaration not at start of document. - La declaración XML no está al principio del documento. - - - - NDATA in parameter entity declaration. - NDATA en una declaración de entidad parámetro. - - - - %1 is an invalid processing instruction name. - %1 es un nombre de instrucción de procesamiento no válido. - - - - Invalid processing instruction name. - Nombre de instrucción de procesamiento no válido. - - - - - - - Illegal namespace declaration. - Declaración de espacio de nombres ilegal. - - - - Invalid XML name. - Nombre XML no válido. - - - - Opening and ending tag mismatch. - Las etiquetas de apertura y cierre no coinciden. - - - - Reference to unparsed entity '%1'. - Referencia a una entidad no analizada «%1». - - - - - - Entity '%1' not declared. - Entidad «%1» no declarada. - - - - Reference to external entity '%1' in attribute value. - Referencia a una entidad externa «%1» en el valor del atributo. - - - - Invalid character reference. - Referencia un carácter no válido. - - - - - Encountered incorrectly encoded content. - Encontrado contenido codificado incorrectamente. - - - - The standalone pseudo attribute must appear after the encoding. - El pseudoatributo «standalone» debe aparece después de la codificación. - - - - %1 is an invalid PUBLIC identifier. - %1 no es un identificador PUBLIC válido. - - - - QtXmlPatterns - - - An %1-attribute with value %2 has already been declared. - - - - - An %1-attribute must have a valid %2 as value, which %3 isn't. - - - - - Network timeout. - - - - - Element %1 can't be serialized because it appears outside the document element. - - - - - Attribute %1 can't be serialized because it appears at the top level. - - - - - Year %1 is invalid because it begins with %2. - - - - - Day %1 is outside the range %2..%3. - - - - - Month %1 is outside the range %2..%3. - - - - - Overflow: Can't represent date %1. - - - - - Day %1 is invalid for month %2. - - - - - Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; - - - - - Time %1:%2:%3.%4 is invalid. - - - - - Overflow: Date can't be represented. - - - - - - At least one component must be present. - - - - - At least one time component must appear after the %1-delimiter. - - - - - No operand in an integer division, %1, can be %2. - - - - - The first operand in an integer division, %1, cannot be infinity (%2). - - - - - The second operand in a division, %1, cannot be zero (%2). - - - - - %1 is not a valid value of type %2. - - - - - When casting to %1 from %2, the source value cannot be %3. - - - - - Integer division (%1) by zero (%2) is undefined. - - - - - Division (%1) by zero (%2) is undefined. - - - - - Modulus division (%1) by zero (%2) is undefined. - - - - - - Dividing a value of type %1 by %2 (not-a-number) is not allowed. - - - - - Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. - - - - - Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. - - - - - A value of type %1 cannot have an Effective Boolean Value. - - - - - Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. - - - - - Value %1 of type %2 exceeds maximum (%3). - - - - - Value %1 of type %2 is below minimum (%3). - - - - - A value of type %1 must contain an even number of digits. The value %2 does not. - - - - - %1 is not valid as a value of type %2. - - - - - Operator %1 cannot be used on type %2. - - - - - Operator %1 cannot be used on atomic values of type %2 and %3. - - - - - The namespace URI in the name for a computed attribute cannot be %1. - - - - - The name for a computed attribute cannot have the namespace URI %1 with the local name %2. - - - - - Type error in cast, expected %1, received %2. - - - - - When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. - - - - - No casting is possible with %1 as the target type. - - - - - It is not possible to cast from %1 to %2. - - - - - Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. - - - - - It's not possible to cast the value %1 of type %2 to %3 - - - - - Failure when casting from %1 to %2: %3 - - - - - A comment cannot contain %1 - - - - - A comment cannot end with a %1. - - - - - No comparisons can be done involving the type %1. - - - - - Operator %1 is not available between atomic values of type %2 and %3. - - - - - An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. - - - - - A library module cannot be evaluated directly. It must be imported from a main module. - - - - - No template by name %1 exists. - - - - - A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. - - - - - A positional predicate must evaluate to a single numeric value. - - - - - The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. - - - - - %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. - - - - - The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. - - - - - The data of a processing instruction cannot contain the string %1 - - - - - No namespace binding exists for the prefix %1 - - - - - No namespace binding exists for the prefix %1 in %2 - - - - - - %1 is an invalid %2 - - - - - %1 takes at most %n argument(s). %2 is therefore invalid. - - - - - - - - %1 requires at least %n argument(s). %2 is therefore invalid. - - - - - - - - The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. - - - - - The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - - - - - The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - - - - - %1 is not a valid XML 1.0 character. - - - - - The first argument to %1 cannot be of type %2. - - - - - If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. - - - - - %1 was called. - - - - - %1 must be followed by %2 or %3, not at the end of the replacement string. - - - - - In the replacement string, %1 must be followed by at least one digit when not escaped. - - - - - In the replacement string, %1 can only be used to escape itself or %2, not %3 - - - - - %1 matches newline characters - - - - - %1 and %2 match the start and end of a line. - - - - - Matches are case insensitive - - - - - Whitespace characters are removed, except when they appear in character classes - - - - - %1 is an invalid regular expression pattern: %2 - - - - - %1 is an invalid flag for regular expressions. Valid flags are: - - - - - If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. - - - - - It will not be possible to retrieve %1. - - - - - The root node of the second argument to function %1 must be a document node. %2 is not a document node. - - - - - The default collection is undefined - - - - - %1 cannot be retrieved - - - - - The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). - - - - - A zone offset must be in the range %1..%2 inclusive. %3 is out of range. - - - - - %1 is not a whole number of minutes. - - - - - Required cardinality is %1; got cardinality %2. - - - - - The item %1 did not match the required type %2. - - - - - - %1 is an unknown schema type. - - - - - Only one %1 declaration can occur in the query prolog. - - - - - The initialization of variable %1 depends on itself - - - - - No variable by name %1 exists - - - - - The variable %1 is unused - - - - - Version %1 is not supported. The supported XQuery version is 1.0. - - - - - The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. - - - - - No function with signature %1 is available - - - - - - A default namespace declaration must occur before function, variable, and option declarations. - - - - - Namespace declarations must occur before function, variable, and option declarations. - - - - - Module imports must occur before function, variable, and option declarations. - - - - - It is not possible to redeclare prefix %1. - - - - - Prefix %1 is already declared in the prolog. - - - - - The name of an option must have a prefix. There is no default namespace for options. - - - - - The Schema Import feature is not supported, and therefore %1 declarations cannot occur. - - - - - The target namespace of a %1 cannot be empty. - - - - - The module import feature is not supported - - - - - No value is available for the external variable by name %1. - - - - - A construct was encountered which only is allowed in XQuery. - - - - - A template by name %1 has already been declared. - - - - - The keyword %1 cannot occur with any other mode name. - - - - - The value of attribute %1 must of type %2, which %3 isn't. - - - - - The prefix %1 can not be bound. By default, it is already bound to the namespace %2. - - - - - A variable by name %1 has already been declared. - - - - - A stylesheet function must have a prefixed name. - - - - - The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) - - - - - The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. - - - - - The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 - - - - - A function already exists with the signature %1. - - - - - No external functions are supported. All supported functions can be used directly, without first declaring them as external - - - - - An argument by name %1 has already been declared. Every argument name must be unique. - - - - - When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. - - - - - In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. - - - - - In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. - - - - - In an XSL-T pattern, function %1 cannot have a third argument. - - - - - In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. - - - - - In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. - - - - - %1 is an invalid template mode name. - - - - - The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. - - - - - The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. - - - - - None of the pragma expressions are supported. Therefore, a fallback expression must be present - - - - - Each name of a template parameter must be unique; %1 is duplicated. - - - - - The %1-axis is unsupported in XQuery - - - - - %1 is not a valid name for a processing-instruction. - - - - - %1 is not a valid numeric literal. - - - - - No function by name %1 is available. - - - - - The namespace URI cannot be the empty string when binding to a prefix, %1. - - - - - %1 is an invalid namespace URI. - - - - - It is not possible to bind to the prefix %1 - - - - - Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). - - - - - Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). - - - - - Two namespace declaration attributes have the same name: %1. - - - - - The namespace URI must be a constant and cannot use enclosed expressions. - - - - - An attribute by name %1 has already appeared on this element. - - - - - A direct element constructor is not well-formed. %1 is ended with %2. - - - - - The name %1 does not refer to any schema type. - - - - - %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. - - - - - %1 is not an atomic type. Casting is only possible to atomic types. - - - - - - %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. - - - - - The name of an extension expression must be in a namespace. - - - - - empty - - - - - zero or one - - - - - exactly one - - - - - one or more - - - - - zero or more - - - - - Required type is %1, but %2 was found. - - - - - Promoting %1 to %2 may cause loss of precision. - - - - - The focus is undefined. - - - - - It's not possible to add attributes after any other kind of node. - - - - - An attribute by name %1 has already been created. - - - - - Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. - - - - - %1 is an unsupported encoding. - - - - - %1 contains octets which are disallowed in the requested encoding %2. - - - - - The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. - - - - - Ambiguous rule match. - - - - - In a namespace constructor, the value for a namespace cannot be an empty string. - - - - - The prefix must be a valid %1, which %2 is not. - - - - - The prefix %1 cannot be bound. - - - - - Only the prefix %1 can be bound to %2 and vice versa. - - - - - Circularity detected - - - - - The parameter %1 is required, but no corresponding %2 is supplied. - - - - - The parameter %1 is passed, but no corresponding %2 exists. - - - - - The URI cannot have a fragment - - - - - Element %1 is not allowed at this location. - - - - - Text nodes are not allowed at this location. - - - - - Parse error: %1 - - - - - The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. - - - - - Running an XSL-T 1.0 stylesheet with a 2.0 processor. - - - - - Unknown XSL-T attribute %1. - - - - - Attribute %1 and %2 are mutually exclusive. - - - - - In a simplified stylesheet module, attribute %1 must be present. - - - - - If element %1 has no attribute %2, it cannot have attribute %3 or %4. - - - - - Element %1 must have at least one of the attributes %2 or %3. - - - - - At least one mode must be specified in the %1-attribute on element %2. - - - - - Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. - - - - - Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. - - - - - Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. - - - - - Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. - - - - - XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. - - - - - The attribute %1 must appear on element %2. - - - - - The element with local name %1 does not exist in XSL-T. - - - - - Element %1 must come last. - - - - - At least one %1-element must occur before %2. - - - - - Only one %1-element can appear. - - - - - At least one %1-element must occur inside %2. - - - - - When attribute %1 is present on %2, a sequence constructor cannot be used. - - - - - Element %1 must have either a %2-attribute or a sequence constructor. - - - - - When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. - - - - - Element %1 cannot have children. - - - - - Element %1 cannot have a sequence constructor. - - - - - - The attribute %1 cannot appear on %2, when it is a child of %3. - - - - - A parameter in a function cannot be declared to be a tunnel. - - - - - This processor is not Schema-aware and therefore %1 cannot be used. - - - - - Top level stylesheet elements must be in a non-null namespace, which %1 isn't. - - - - - The value for attribute %1 on element %2 must either be %3 or %4, not %5. - - - - - Attribute %1 cannot have the value %2. - - - - - The attribute %1 can only appear on the first %2 element. - - - - - At least one %1 element must appear as child of %2. - - - - - VolumeSlider - - - Muted - - - - - - Volume: %1% - - - - - WebCore::PlatformScrollbar - - Scroll here - Desplazar hasta aquí - - - Left edge - Borde izquierdo - - - Top - Parte superior - - - Right edge - Borde derecho - - - Bottom - Parte inferior - - - Page left - Una página a la izquierda - - - Page up - Una página hacia arriba - - - Page right - Una página a la derecha - - - Page down - Una página hacia abajo - - - Scroll left - Desplazar hacia la izquierda - - - Scroll up - Desplazar hacia arriba - - - Scroll right - Desplazar hacia la derecha - - - Scroll down - Desplazar hacia abajo - - - diff --git a/locale/qt_extra_it.ts b/locale/qt_extra_it.ts deleted file mode 100644 index 87271233..00000000 --- a/locale/qt_extra_it.ts +++ /dev/null @@ -1,6294 +0,0 @@ - - - - - QWidget - - * - - - - - QShortcut - - + - + - - - CD - CD - - - Go - Vai - - - No - No - - - Up - - - - Alt - Alt - - - F%1 - F%1 - - - DOS - DOS - - - Del - Canc - - - Cut - Taglia - - - End - Fine - - - Esc - Esc - - - Ins - Ins - - - Tab - Tab - - - WWW - WWW - - - Yes - - - - Back - Indietro - - - Away - Assente - - - Book - Libro - - - Call - Chiama - - - Copy - Copia - - - Ctrl - Ctrl - - - Down - Giù - - - Flip - Inverti - - - Game - Gioco - - - Help - Guida - - - Home - Inizio - - - Left - Sinistra - - - Menu - Menu - - - Meta - Meta - - - News - Novità - - - PgUp - PgSù - - - Save - Salva - - - Send - Invia - - - Shop - Negozio - - - Stop - Interrompi - - - Time - Durata - - - XFer - XFer - - - View - Visualizza - - - Split Screen - Dividi schermo - - - Clear - Pulisci - - - Close - Chiudi - - - Eject - Espelli - - - Enter - Invio - - - Kanji - Kanji - - - Music - Musica - - - Paste - Incolla - - - Pause - Pausa - - - Phone - Telefono - - - Print - Stampa - - - Reply - Rispondi - - - Right - Destra - - - Shift - MAIUSCOLE - - - Sleep - Sospendi - - - Space - Spazio - - - Tools - Strumenti - - - Video - Video - - - Hiragana - Hiragana - - - Wireless - Wireless - - - Media Record - Registra - - - Multiple Candidate - Candidato multiplo - - - Zenkaku - Zenkaku - - - Print Screen - Stampa schermata - - - Audio Rewind - Riavvolgi audio - - - Audio Repeat - Ripeti audio - - - Toggle Call/Hangup - Alterna Chiama/Riaggancia - - - Zoom In - Ingrandisci - - - Camera Shutter - Otturatore fotocamera - - - Ultra Wide Band - Banda ultra larga - - - Hangul Special - Hangul Special - - - Treble Down - Abbassa gli alti - - - Scroll Lock - Blocca scorrimento - - - Media Pause - Pausa - - - Word Processor - Elaboratore di testi - - - Volume Down - Abbassa volume - - - Volume Mute - Silenzia - - - Kana Shift - Kana MAIUSCOLE - - - Media Previous - Traccia precedente - - - Home Page - Pagina iniziale - - - Meeting - Riunione - - - Volume Up - Alza volume - - - Menu PB - Menu PB - - - Keyboard Brightness Up - Aumenta la luminosità della tastiera - - - Hangul PostHanja - Hangul PostHanja - - - Kana Lock - Blocca Kana - - - Community - Comunità - - - Launch (6) - Avvia (6) - - - Launch (7) - Avvia (7) - - - Launch (8) - Avvia (8) - - - Launch (9) - Avvia (9) - - - Launch (2) - Avvia (2) - - - Launch (3) - Avvia (3) - - - Launch (4) - Avvia (4) - - - Launch (5) - Avvia (5) - - - Launch (0) - Avvia (0) - - - Launch (1) - Avvia (1) - - - Launch (F) - Avvia (F) - - - Launch (B) - Avvia (B) - - - Launch (C) - Avvia (C) - - - Launch (D) - Avvia (D) - - - Launch (E) - Avvia (E) - - - Launch (A) - Avvia (A) - - - Delete - Elimina - - - Escape - Esc - - - Audio Random Play - Riproduci brani casualmente - - - Hangul - Hangul - - - Hangup - Riaggancia - - - Henkan - Henkan - - - Insert - Inserisci - - - Home Office - Casa e ufficio - - - Last Number Redial - Ultimo numero chiamato - - - Logoff - Disconnettiti - - - Market - Mercato - - - Massyo - Massyo - - - Bass Boost - Incremento bassi - - - Option - Opzione - - - PgDown - PgGiù - - - Reload - Ricarica - - - Return - Invio - - - Romaji - Romaji - - - Search - Cerca - - - Select - Seleziona - - - SysReq - SysReq - - - Travel - Viaggia - - - NumLock - BlocNum - - - Audio Forward - Avannza audio - - - WebCam - WebCam - - - Hiragana Katakana - Hiragana Katakana - - - Top Menu - Menu in alto - - - ScrollLock - BloccaScorrimento - - - Hot Links - Collegamenti caldi - - - Audio Cycle Track - Ripeti ciclicamente - - - Context1 - Contesto1 - - - Context2 - Contesto2 - - - Context3 - Contesto3 - - - Context4 - Contesto4 - - - Zoom Out - Riduci - - - Page Up - Pagina sù - - - Open URL - Apri URL - - - iTouch - iTouch - - - Previous Candidate - Candidato precedente - - - Toggle Media Play/Pause - Alterna Riproduci/Pausa - - - Caps Lock - BLOCCO MAIUSCOLE - - - Eisu Shift - Eisu MAIUSCOLE - - - Code input - Inserisci codice - - - Camera Focus - Messa a fuoco fotocamera - - - Adjust Brightness - Regola la luminosità - - - Spreadsheet - Foglio di calcolo - - - Eisu toggle - Alterna Eisu - - - Keyboard Brightness Down - Abbassa la luminosità della tastiera - - - Clear Grab - Elimina la cattura - - - Monitor Brightness Up - Aumenta la luminosità del monitor - - - System Request - Sistema richiesto - - - CapsLock - BLOCCOMAIUSCOLE - - - Backtab - Tab indietro - - - Bass Up - Alza i bassi - - - Battery - Batteria - - - Katakana - Katakana - - - Refresh - Aggiorna - - - Hibernate - Iberna - - - Application Left - Applicazione sinistra - - - Voice Dial - Composizione vocale - - - Browser - Navigatore - - - Keyboard Menu - Menu tastiera - - - Back Forward - Arretra Avanza - - - Launch Mail - Avvia email - - - Keyboard Light On/Off - Tastiera illuminata sì/no - - - Backspace - Indietro - - - Bass Down - Abbassa i bassi - - - Mail Forward - Intoltra email - - - Messenger - Messaggeria istantanea - - - Hangul Banja - Hangul Banja - - - Hangul Hanja - Hangul Hanja - - - Standby - Attesa - - - Hangul Start - Avvio Hangul - - - Rotation KB - Rotazione KB - - - Rotation PB - Rotazione PB - - - Documents - Documenti - - - Calculator - Calcolatrice - - - Support - Supporto - - - Suspend - Sospendi - - - Display - Schermo - - - Hangul Romaja - Hangul Romaja - - - My Sites - I miei siti - - - Rotate Windows - Ruota finestra - - - Touroku - Touroku - - - Zenkaku Hankaku - Zenkaku Hankaku - - - Hangul Jeonja - Hangul Jeonja - - - Treble Up - Alza gli alti - - - Subtitle - Sottotitoli - - - Hangul Jamo - Hangul Jamo - - - Bluetooth - Bluetooth - - - Muhenkan - Muhenkan - - - Num Lock - Bloc Num - - - Screensaver - Salva schermo - - - Number Lock - Blocca tastierino numerico - - - Spellchecker - Correttore ortografico - - - Hangul PreHanja - Hangul PreHanja - - - Terminal - Terminale - - - Add Favorite - Aggiungi ai preferiti - - - Finance - Finanza - - - Task Panel - Pannello dei compiti - - - Favorites - Preferiti - - - Forward - Avanza - - - Page Down - Pagina giù - - - Wake Up - Risveglio - - - Power Off - Spegnimento - - - LightBulb - Lampadina - - - Hankaku - Hankaku - - - Hangul End - Fine Hangul - - - Monitor Brightness Down - Abbassa la luminosità del monitor - - - History - Cronologia - - - Media Play - Riproduci - - - Media Stop - Interrompi - - - Media Next - Traccia successiva - - - Launch Media - Avvia traccia multimediale - - - Application Right - Applicazione destra - - - Pictures - Immmagini - - - - Q3TabDialog - - OK - OK - - - Help - Guida - - - Apply - Applica - - - Cancel - Annulla - - - Defaults - Preimpostati - - - - QDialogButtonBox - - OK - OK - - - &OK - &OK - - - &No - &No - - - &Yes - &Sì - - - Help - Guida - - - Open - Apri - - - Save - Salva - - - &Save - &Salva - - - Abort - Interrompi - - - Apply - Applica - - - Close - Chiudi - - - Reset - Azzera - - - Retry - Riprova - - - Restore Defaults - Ripristina i valori preimpostati - - - &Close - &Chiudi - - - Cancel - Annulla - - - Ignore - Ignora - - - Close without Saving - Chiudi senza salvare - - - N&o to All - N&o a tutti - - - Save All - Salva tutto - - - &Cancel - &Annulla - - - Discard - Rifiuta - - - Yes to &All - S&ì a tutti - - - Don't Save - Non salvare - - - - QPrintPreviewDialog - - %1% - %1% - - - Print Preview - Anteprima di stampa - - - Close - Chiudi - - - Print - Stampa - - - Fit page - Adatta zoom alla pagina - - - Zoom in - Ingrandisci - - - Landscape - Orizzontale - - - Zoom out - Riduci - - - Fit width - Adatta zoom in larghezza - - - Portrait - Verticale - - - Page Setup - Imposta pagina - - - Page setup - Imposta pagina - - - Show overview of all pages - Mostra panoramica di tutte le pagine - - - First page - Vai alla prima pagina - - - Last page - Vai all'ultima pagina - - - Show single page - Mostra pagina singola - - - Export to PDF - Esporta come PDF - - - Previous page - Vai alla pagina precedente - - - Next page - Vai alla pagina successiva - - - Show facing pages - Mostra pagine affiancate - - - Export to PostScript - Esporta come PostScript - - - - QWebPage - - Top - In alto - - - Unknown - Unknown filesize FTP directory listing item - Sconosciute - - - Align Right - Allinea a destra - - - Insert a new paragraph - Inserisci un nuovo paragrafo - - - Strikethrough - Barrato - - - Recent searches - label for first item in the menu that appears when clicking on the search field image, used as embedded menu title - Ricerche recenti - - - Stop - Stop context menu item - Interrompi - - - Select to the start of the block - Seleziona all'inizio del blocco - - - No Guesses Found - No Guesses Found context menu item - Nessun ospite trovato - - - Move the cursor to the end of the block - Sposta il cursore alla fine del blocco - - - Fullscreen Button - Media controller element - Passa a schermo intero - - - Select to the start of the line - Seleziona all'inizio della linea - - - This is a searchable index. Enter search keywords: - text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' - Questo è un indice consultabile. Inserire le parole chiave: - - - Justify - Giustificato - - - Direction - Writing direction context sub-menu item - Direzione - - - Delete to the start of the word - Elimina all'inizio della parola - - - Unmute audio tracks - Media controller element - Riattiva l'audio delle tracce dal silenzio - - - Seek Forward Button - Media controller element - Avanza ricerca - - - Left to Right - Left to Right context menu item - Da sinistra a destra - - - Move the cursor to the next word - Sposta il cursore all'inizio della parola - - - Move the cursor to the next line - Sposta il cursore all'inizio della linea - - - JavaScript Alert - %1 - Allerta JavaScript - %1 - - - Right to Left - Right to Left context menu item - Da destra a sinistra - - - Scroll down - Scorri verso il basso - - - Scroll here - Scorri qui - - - Scroll left - Scorri verso sinistra - - - Go Back - Back context menu item - Precedente - - - Search The Web - Search The Web context menu item - Cerca nel web - - - Unmute Button - Media controller element - Riattiva l'audio dal silenzio - - - Fonts - Font context sub-menu item - Tipi di caratteri - - - Underline - Underline context menu item - Sottolineato - - - Reload - Reload context menu item - Ricarica - - - Move the cursor to the start of the block - Sposta il cursore all'inizio del blocco - - - Ignore - Ignore Spelling context menu item - Ignora - - - Paste - Paste context menu item - Incolla - - - Go Forward - Forward context menu item - Vai al successivo - - - Slider - Media controller element - Interruttore scorrevole - - - Pause Button - Media controller element - Pausa - - - Outline - Outline context menu item - Cornice - - - Bottom - In basso - - - Copy - Copy context menu item - Copia - - - Center - Centra - - - Indent - Rientra - - - %1 minutes %2 seconds - Media time description - %1 minuti %2 secondi - - - Move the cursor to the end of the line - Sposta il cursore alla fine del blocco - - - Save Image - Download Image context menu item - Salva immagine - - - Move the cursor to the start of the line - Sposta il cursore alla fine della linea - - - Copy Link - Copy Link context menu item - Copia collegamento - - - Status Display - Media controller element - Mostra stato - - - The script on this page appears to have a problem. Do you want to stop the script? - Lo script di questa pagina sembra avere alcuni problemi. Desideri fermarlo? - - - JavaScript Confirm - %1 - Conferma JavaScript - %1 - - - Insert a new line - Inserisci una nuova riga - - - Audio Element - Media controller element - Elemento audio - - - No file selected - text to display in file button used in HTML forms when no file is selected - Nessun file selezionato - - - Return streaming movie to real-time - Media controller element - Passa dal filmato streaming a quello in tempo reale - - - Check Spelling - Check spelling context menu item - Controllo ortografico - - - Return to Real-time Button - Media controller element - Passa al filmato in tempo reale - - - Web Inspector - %2 - Ispettore web - %2 - - - Page up - Pagina sù - - - Rewind movie - Media controller element - Riavvolgi video - - - No recent searches - Label for only item in menu that appears when clicking on the search field image, when no searches have been performed - Nessuna ricerca recente - - - Paste and Match Style - Incolla e corrispondi lo stile - - - Look Up In Dictionary - Look Up in Dictionary context menu item - Cerca nel dizionario - - - Outdent - Riduci rientranza - - - Inspect - Inspect Element context menu item - Ispeziona - - - Play movie in full-screen mode - Media controller element - Riproduci filmato a schermo intero - - - Ignore - Ignore Grammar context menu item - Ignora - - - Check Grammar With Spelling - Check grammar with spelling context menu item - Controlla la grammatica assieme all'ortografia - - - Insert Bulleted List - Inserisci elenchi puntati - - - JavaScript Problem - %1 - Problema di JavaScript - %1 - - - Page right - Pagina destra - - - Move the cursor to the start of the document - Sposta il cursore all'inizio del documento - - - Remaining movie time - Media controller element - Durata restante del filmato - - - Move the cursor to the next character - Sposta il cursore all'inizio del carattere - - - JavaScript Prompt - %1 - Prompt di JavaScript - %1 - - - Submit - default label for Submit buttons in forms on web pages - Sottoscrivi - - - Show Spelling and Grammar - menu item title - Mostra ortografia e grammatica - - - Default - Default writing direction context menu item - Preimpostato - - - Select to the previous line - Seleziona la riga precedente - - - Select to the previous word - Seleziona la parola precedente - - - Current movie time - Media controller element - Durata corrente del filmato - - - Redirection limit reached - Limite di reindirizzamento raggiunto - - - Check Spelling While Typing - Check spelling while typing context menu item - Controlla l'ortografia durante la digitazione - - - Clear recent searches - menu item in Recent Searches menu that empties menu's contents - Elimina ricerche recenti - - - Select to the next character - Seleziona all'inizio del carattere - - - Slider Thumb - Media controller element - Interruttore scorrevole miniature - - - %1 seconds - Media time description - %1 secondi - - - Text Direction - Text direction context sub-menu item - Direzione del testo - - - Delete to the end of the word - Elimina alla fine della parola - - - Select to the end of the line - Seleziona alla fine della linea - - - Submit - Submit (input element) alt text for <input> elements with no alt, title, or value - Sottoscrivi - - - Loading... - Media controller status message when the media is loading - Caricamento... - - - Save Link... - Download Linked File context menu item - Salva collegamento... - - - Open Link - Open Link context menu item - Apri collegamento - - - Scroll up - Scorri verso l'alto - - - Spelling - Spelling and Grammar context sub-menu item - Ortografia - - - Live Broadcast - Media controller status message when watching a live broadcast - Trasmissione in diretta - - - Video Element - Media controller element - Elemento video - - - Subscript - Sottoscritto - - - Superscript - Soprascritto - - - Bold - Bold context menu item - Grassetto - - - Hide Spelling and Grammar - menu item title - Nascondi ortografia e granmmatica - - - Copy Image - Copy Link context menu item - Copia immagine - - - Select to the start of the document - Seleziona all'inizio del documento - - - Add To Dictionary - Learn Spelling context menu item - Aggiungi nel dizionario - - - Remaining Time - Media controller element - Tempo rimanente - - - Seek quickly forward - Media controller element - Avanza velocemente nella ricerca - - - %1 hours %2 minutes %3 seconds - Media time description - %1 ore %2 minuti %3 secondi - - - Seek quickly back - Media controller element - Arretra velocemente nella ricerca - - - Cut - Cut context menu item - Taglia - - - Move the cursor to the previous character - Sposta il cursore al carattere precedente - - - Video element playback controls and status display - Media controller element - Visualizza lo stato e i controlli per la riproduzione dei video - - - Insert Numbered List - Inserisci elenco numerato - - - Select to the end of the document - Seleziona alla fine del documento - - - Select to the end of the block - Seleziona alla fine del blocco - - - Select All - Seleziona tutto - - - Movie time scrubber - Media controller element - Azzera durata del filmato - - - Scroll right - Scorri verso destra - - - Bad HTTP request - Cattiva richiesta HTTP - - - Rewind Button - Media controller element - Riavvolgi - - - Indefinite time - Media time description - Tempo indefinito - - - Open Frame - Open Frame in New Window context menu item - Apri fotogramma - - - Current movie status - Media controller element - Stato corrente del filmato - - - %1 days %2 hours %3 minutes %4 seconds - Media time description - %1 giorni %2 ore %3 minuti %4 secondi - - - Move the cursor to the previous word - Sposta il cursore alla parola precedente - - - Move the cursor to the previous line - Sposta il cursore alla linea precedente - - - Seek Back Button - Media controller element - Arretra nella ricerca - - - %n file(s) - - %n fichier - %n file - - - - %1 (%2x%3 pixels) - Title string for images - %1 (%2x%3 pixels) - - - Left edge - A sinistra - - - Page down - Pagina giù - - - Page left - Pagina sinistra - - - Missing Plug-in - Plug-in mancante - - - Reset - default label for Reset buttons in forms on web pages - Azzera - - - Align Left - Allinea a sinistra - - - Select to the previous character - Seleziona il carattere precedente - - - Mute audio tracks - Media controller element - Silenzia le tracce - - - Audio element playback controls and status display - Media controller element - Visualizza lo stato e i controlli per la riproduzione dell'audio - - - Begin playback - Media controller element - Inizia la riproduzione - - - Choose File - title for file button used in HTML forms - Seleziona file - - - Pause playback - Media controller element - Pausa - - - Open Image - Open Image in New Window context menu item - Apri immagine - - - Mute Button - Media controller element - Silenzia - - - Play Button - Media controller element - Riproduci - - - Right edge - A destra - - - Elapsed Time - Media controller element - Tempo trascorso - - - Move the cursor to the end of the document - Sposta il cursore alla fine del documento - - - Remove formatting - Rimuovi formattazione - - - Open in New Window - Open in New Window context menu item - Apri in una nuova finestra - - - Select to the next word - Seleziona fino alla parola successiva - - - Select to the next line - Seleziona fino alla riga successiva - - - Movie time scrubber thumb - Media controller element - Azzera miniatura durata del filmato - - - Italic - Italic context menu item - Corsivo - - - - QFile - - Cannot remove source file - Impossibile rimuovere il file sorgente - - - Cannot create %1 for output - Impossibile creare %1 per la scrittura - - - Failure to write block - Impossibile scrivere un blocco - - - Cannot open %1 for input - Impossibile aprire %1 per la lettura - - - Destination file exists - Il file di destinazione esiste già - - - Cannot open for output - Impossibile aprire il file per la scrittura - - - Will not rename sequential file using block copy - I file sequenziali non verreanno rinominati utilizzando la copia del blocco - - - - QFileDialog - - Back - Indietro - - - File - File - - - Open - Apri - - - &Open - &Apri - - - &Save - &Salva - - - Drive - Unità - - - Show - Mostra - - - '%1' is write protected. -Do you want to delete it anyway? - '%1' è protetto in scrittura. -Eliminare il file comunque? - - - File &name: - &Nome file: - - - Alias - Mac OS X Finder - Alias - - - File Folder - Match Windows Explorer - Cartella file - - - New Folder - Nuova cartella - - - Shortcut - All other platforms - Scorciatoia - - - Parent Directory - Cartella superiore - - - &New Folder - &Nuova cartella - - - Remove - Elimina - - - My Computer - Computer - - - Look in: - Cerca in: - - - Create a New Folder - Crea nuova cartella - - - Files of type: - Tipi di file: - - - Find Directory - Cerca nella cartella - - - Show &hidden files - Mostra file &nascosti - - - Are sure you want to delete '%1'? - Sei sicuro di volere eliminare '%1' ? - - - Save As - Salva come - - - %1 -Directory not found. -Please verify the correct directory name was given. - %1 -Cartella non trovata. -Verificare il nome della cartella che sia corretto. - - - List View - Elenco - - - &Choose - &Seleziona - - - &Delete - &Elimina - - - All Files (*) - Tutti i file (*) - - - Directories - Cartelle - - - All Files (*.*) - Tutti i file (*.*) - - - &Rename - &Rinomina - - - Could not delete directory. - Impossibile eliminare la cartella. - - - Directory: - Cartella: - - - Unknown - Sconosciuto - - - %1 already exists. -Do you want to replace it? - Il file %1 esiste già. -Sostituire il file? - - - Folder - All other platforms - Cartella - - - Forward - Successivo - - - Go forward - Vai al successivo - - - Go to the parent directory - Vai al livello superiore della cartella - - - Recent Places - Risorse recenti - - - Go back - Torna indietro - - - Change to detail view mode - Passa alla visualizzazione come dettagli - - - Create New Folder - Crea nuoba cartella - - - Detail View - Dettagli - - - %1 -File not found. -Please verify the correct file name was given. - %1 -File non trovato. -Verificare il nome del file che sia corretto. - - - Change to list view mode - Passa alla visualizzazione come elenco - - - - Q3TextEdit - - Cu&t - &Taglia - - - &Copy - Cop&ia - - - &Redo - &Ripeti - - - &Undo - &Annulla - - - Clear - Pulisci - - - &Paste - &Incolla - - - Select All - Seleziona tutto - - - - QLineEdit - - Cu&t - &Taglia - - - &Copy - Cop&ia - - - &Redo - &Ripeti - - - &Undo - &Annulla - - - &Paste - &Incolla - - - Delete - Elimina - - - Select All - Seleziona tutto - - - - QTextControl - - Cu&t - &Taglia - - - &Copy - Cop&ia - - - &Redo - &Ripeti - - - &Undo - &Annulla - - - &Paste - &Incolla - - - Delete - Elimina - - - Select All - Seleziona tutto - - - Copy &Link Location - Copia &collegamento dell'indirizzo di destinazione - - - - QDockWidget - - Dock - Aggancia - - - Close - Chiudi - - - Float - Mobile - - - - QDialog - - Done - Fine - - - What's This? - Che cos'è? - - - - QWizard - - Done - Operazione completata - - - Help - Guida - - - &Help - &Guida - - - &Next - &Successivo - - - Cancel - Annulla - - - Commit - Deposita - - - Continue - Continua - - - &Finish - &Fine - - - &Next > - &Avanti > - - - Go Back - Torna indietro - - - < &Back - < &Indietro - - - - QPageSetupWidget - - Form - Modulo - - - bottom margin - Marginre inferiore - - - Paper - Foglio - - - Paper source: - Alimentazione: - - - Centimeters (cm) - Centimetri (cm) - - - right margin - Margine destro - - - Margins - Margini - - - Landscape - Orizzontale - - - Width: - Larghezza: - - - Orientation - Orientamento - - - Portrait - Verticale - - - top margin - Marginre superiore - - - left margin - Marginre sinistro - - - Page size: - Dimensioni pagina: - - - Reverse portrait - Verticale capovolto - - - Millimeters (mm) - Millimetri (mm) - - - Points (pt) - Punti (pt) - - - Inches (in) - Pollici (in) - - - Reverse landscape - Orizzontale capovolto - - - Height: - Altezza: - - - - QPrintPropertiesWidget - - Form - Modulo - - - Page - Pagina - - - Advanced - Avanzato - - - - QMdiSubWindow - - Help - Guida - - - Menu - Menu - - - &Move - &Sposta - - - &Size - &Ridimensiona - - - Close - Chiudi - - - Minimize - Riduci a icona - - - Shade - Arrotola - - - Stay on &Top - &Sempre in primo piano - - - &Close - &Chiudi - - - - [%1] - - [%1] - - - %1 - [%2] - %1 - [%2] - - - &Restore - &Ripristina - - - Restore - Ripristina - - - Maximize - Ingrandisci - - - Unshade - Srotola - - - Mi&nimize - &Riduci a icona - - - Ma&ximize - &Ingrandisci - - - Restore Down - Ripristina in basso - - - - QDoubleSpinBox - - Less - Meno - - - More - Più - - - - QSpinBox - - Less - Meno - - - More - Più - - - - QDirModel - - Name - Nome - - - Size - Dimensioni - - - Kind - Match OS X Finder - Tipologia - - - Type - All other platforms - Tipo - - - Date Modified - Data di modifica - - - - QFileSystemModel - - Name - Nome - - - Size - Dimensioni - - - %1 GB - %1 GB - - - %1 KB - %1 KB - - - %1 MB - %1 MB - - - %1 TB - %1 TB - - - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. - <b>Il nome "%1" non può essere usato.</b><p>Provare ad utilizzare un altro nome con meno caratteri o senza simboli di punteggiatura. - - - %1 bytes - %1 byte - - - My Computer - Computer - - - Computer - Computer - - - Invalid filename - Nome file non valido - - - %1 byte(s) - %1 byte - - - Kind - Match OS X Finder - Tipologia - - - Type - All other platforms - Tipo - - - Date Modified - Data di modifica - - - - QPPDOptionsModel - - Name - Nome - - - Value - Valore - - - - QScriptDebuggerLocalsModel - - Name - Nome - - - Value - Valore - - - - QScriptDebuggerStackModel - - Name - Nome - - - Level - Livello - - - Location - Percorso - - - - QScriptDebuggerCodeFinderWidget - - Next - Successivo - - - Close - Chiudi - - - Whole words - Parole intere - - - Previous - Precedente - - - <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped - <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Ricerca ripresa - - - Case Sensitive - MAIUSCOLE/minuscole - - - - QComboBox - - Open - Apri - - - True - Vero - - - Close - Chiudi - - - False - Falso - - - - QMenu - - Open - Apri - - - Close - Chiudi - - - Execute - Esegui - - - - QPushButton - - Open - Apri - - - - QToolButton - - Open - Apri - - - Press - Premi - - - - QUndoGroup - - Redo - Ripeti - - - Undo - Annulla - - - - QUndoStack - - Redo - Ripeti - - - Undo - Annulla - - - - Q3DataTable - - True - Vero - - - False - Falso - - - Delete - Elimina - - - Insert - Inserisci - - - Update - Aggiorna - - - - QScriptEngineDebugger - - View - Visualizza - - - Stack - Pila - - - Debug Output - Uscita di debug - - - Breakpoints - Punti di interruzione - - - Qt Script Debugger - Debugger di script Qt - - - Locals - Locali - - - Search - Cerca - - - Error Log - Registro degli errori - - - Console - Console - - - Loaded Scripts - Script caricati - - - - QSslSocket - - Error creating SSL session: %1 - Errore nella creazione della sessione SSL: %1 - - - Error creating SSL session, %1 - Errore nella creazione della sessione SSL, %1 - - - The certificate's notAfter field contains an invalid time - Il campo notAfter del certificato contiene un'ora non valida - - - No error - Nessun errorre - - - Cannot provide a certificate with no key, %1 - Impossibile fornire un certificato senza chiave, %1 - - - Unable to write data: %1 - Impossibile scrivere i dati: %1 - - - The basicConstraints path length parameter has been exceeded - Il parametro di lunghezza di percorso basicConstraints è stato superato - - - The certificate has expired - Il certificato è scaduto - - - Error during SSL handshake: %1 - Errore nell'inizializzazione SSL: %1 - - - Error loading local certificate, %1 - Errore nel caricamento del certificato locale, %1 - - - The certificate is self-signed, and untrusted - Il certificato è firmato da sé e non affidabile - - - The peer did not present any certificate - La controparte non ha presentato nessun certificato - - - The root CA certificate is marked to reject the specified purpose - Il certificato radice dell'autorità di certificazione è segnato per rifiutare lo scopo specifico - - - Invalid or empty cipher list (%1) - Elenco di cifrari non valido o vuoto (%1) - - - No certificates could be verified - Non è stato possibile verificare nessun certificato - - - The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate - Il certificato candidato attuale dell'emittente è stato rifiutato perché erano presenti il nome dell'emittente e il numero di serie, e non corrispondono all'identificativo della chiave di autorità del certificato attuale - - - The root CA certificate is not trusted for this purpose - Il certificato radice dell'autorità di certificazione non è affidabile questo scopo - - - The host name did not match any of the valid hosts for this certificate - Il nome dell'host non coincide con nessuno degli host validi per questo certificato - - - The root certificate of the certificate chain is self-signed, and untrusted - Il certificato radice della catena di certificati è firmato da sé e non affidabile - - - The certificate signature could not be decrypted - Impossibile decifrare la firma del certificato - - - The supplied certificate is unsuitable for this purpose - Il certificato fornito non è adatto per questo scopo - - - Private key does not certify public key, %1 - La chiave privata non certifica quella pubblica, %1 - - - Error creating SSL context (%1) - Errore nella creazione del contesto SSL (%1) - - - The issuer certificate could not be found - Impossibile trovare il certificato dell'emittente - - - Unknown error - Errore sconosciuto - - - The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate - Il certificato candidato attuale dell'emittente è stato rifiutato perché il nome del suo oggetto non corrisponde al nome dell'emittente del certificato attuale - - - Error while reading: %1 - Errore nella lettura: %1 - - - The certificate's notBefore field contains an invalid time - Il campo notBefore del certificato contiene un'ora non valida - - - Error loading private key, %1 - Errore nel caricamento della chiave privata, %1 - - - The certificate is not yet valid - Il certificato non è ancora valido - - - The public key in the certificate could not be read - Impossibile leggere la chiave pubblica del certificato - - - One of the CA certificates is invalid - Uno dei certificati dell'autorità di certificazione non è valido - - - The signature of the certificate is invalid - La firma del certificato non è valida - - - The issuer certificate of a locally looked up certificate could not be found - Le certificat de l'émetteur d'un certificat converti localement est introuvable - - - Unable to decrypt data: %1 - Impossibile decifrare i dati: %1 - - - - QLocalSocket - - %1: Connection error - %1: Errore di connessione - - - %1: Connection refused - %1: Connessione rifiutata - - - %1: Unknown error %2 - %1: errore sconosciuto %2 - - - %1: Socket access error - %1: Errore di accesso al socket - - - %1: Socket resource error - %1: Errore di risorsa del socket - - - %1: The socket operation is not supported - %1: L'operazione sul socket non è supportata - - - %1: Invalid name - %1: Nome non valido - - - %1: Unknown error - %1: Errore sconosciuto - - - %1: Socket operation timed out - %1: Operazione sul socket scaduta - - - %1: Datagram too large - %1: Datagramma troppo grande - - - %1: Remote closed - %1: Host remoto chiuso - - - - QOCIResult - - Unable to get statement type - Impossibile recuperare il tipo di dichiarazione - - - Unable to alloc statement - Impossibile allocare la dichiarazione - - - Unable to goto next - Impossibile passare al successivo - - - Unable to execute statement - Impossibile eseguire la dichiarazione - - - Unable to bind column for batch execute - Impossibile collegare la colonna per l'esecuzione in serie - - - Unable to prepare statement - Impossibile preparare la dichiarazione - - - Unable to execute batch statement - Impossibile eseguire la dichiarazione in serie - - - Unable to bind value - Impossibile collegare il valore - - - - QDeclarativeAnchors - - Cannot anchor item to self. - Impossibile ancorare un elemento a sè stesso. - - - Possible anchor loop detected on horizontal anchor. - Possibile ciclo ancorato rilevato all'ancoramento orizzontale. - - - Cannot anchor to a null item. - Impossibile ancorare a un elemento nullo. - - - Cannot specify top, bottom, and vcenter anchors. - Impossibile specificare ancore in alto, in basso e al centro verticale. - - - Possible anchor loop detected on centerIn. - Possibile ciclo ancorato rilevato al centramento. - - - Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors. - L'ancora sulla linea base non è utilizzabile assieme alle ancore in alto, in basso o al centro verticale. - - - Cannot specify left, right, and hcenter anchors. - Impossibile specificare ancore a sinistra, destra e centro orizzontale. - - - Possible anchor loop detected on vertical anchor. - Possibile ciclo ancorato rilevato all'ancoramento verticale. - - - Cannot anchor a horizontal edge to a vertical edge. - Impossibile ancorare un bordo orizzontale a uno verticale. - - - Cannot anchor a vertical edge to a horizontal edge. - Impossibile ancorare un bordo verticale a uno orizzontale. - - - Cannot anchor to an item that isn't a parent or sibling. - Impossibile ancorare a un elemento che non sia padre o di pari livello. - - - Possible anchor loop detected on fill. - Possibile ciclo ancorato rilevato al riempimento. - - - - QDeclarativeCompositeTypeManager - - %1 %2 - %1 %2 - - - Resource %1 unavailable - Risors %1 non disponbile - - - Type %1 unavailable - Tipo %1 non disponibile - - - Namespace %1 cannot be used as a type - Lo spazio di nomi %1 non può essere usato come tipo - - - - Phonon::MMF::AudioEqualizer - - %1 Hz - %1 Hz - - - - QFontDialog - - &Font - &Tipi di carattere - - - &Size - &Dimensioni - - - Sample - Esempio - - - Font st&yle - &Stile caratteri - - - Wr&iting System - Sistema di sc&rittura - - - Select Font - Seleziona i caratteri - - - &Underline - Sotto&lineato - - - Effects - Effetti - - - Stri&keout - &Barrato - - - - Q3Wizard - - &Help - &Guida - - - &Cancel - &Annulla - - - &Finish - &Fine - - - &Next > - &Avanti > - - - < &Back - < &Indietro - - - - QWorkspace - - &Move - &Sposta - - - &Size - &Ridimensiona - - - Close - Chiudi - - - Minimize - Riduci a icona - - - Stay on &Top - &Sempre in primo piano - - - &Close - &Chiudi - - - %1 - [%2] - %1 - [%2] - - - Sh&ade - &Arrotola - - - &Restore - &Ripristina - - - &Unshade - &Srotola - - - Mi&nimize - &Riduci a icona - - - Ma&ximize - &Ingrandisci - - - Restore Down - Ripristina in basso - - - - QColorDialog - - &Red: - &Rosso: - - - &Sat: - &Saturazione: - - - &Val: - &Valore: - - - Hu&e: - &Tonalità: - - - Select Color - Colore selezionato - - - &Add to Custom Colors - &Aggiungi ai colori personalizzati - - - Bl&ue: - Bl&u : - - - &Green: - &Verde: - - - &Basic colors - Colori di &base - - - &Custom colors - &Colori personalizzati - - - A&lpha channel: - Canale a&lpha : - - - - QNetworkSessionPrivateImpl - - Roaming error - Errore di roaming - - - The session was aborted by the user or system. - La sessione è stata interrotta dall'utente o dal sistema. - - - The requested operation is not supported by the system. - L'operazione richiesta non è supportata dal sistema. - - - Session aborted by user or system - Sessione interrotta dall'utente o dal sistema - - - Unidentified Error - Errore non identificato - - - Roaming was aborted or is not possible. - Roaming interrotto o impossibile. - - - The specified configuration cannot be used. - La configurazione specificata non può essere usata. - - - Unknown session error. - Errore di sessione sconosciuto. - - - - QSharedMemory - - %1: system-imposed size restrictions - %1: restrizioni di sistema sulla dimensione - - - %1: doesn't exists - %1: non esiste - - - %1: key is empty - %1: la chiave è vuota - - - %1: key error - %1 : errore di chiave - - - %1: create size is less then 0 - %1: la dimensione creata è inferiore a 0 - - - %1: already exists - %1: esiste già - - - %1: unknown error %2 - %1: errore sconosciuto %2 - - - %1: invalid size - %1: dimensione non valida - - - %1: unable to make key - %1: impossibile creare la chiave - - - %1: unable to set key on lock - %1: impossibile impostare la chiave sul blocco - - - %1: unable to unlock - %1: impossibile sbloccare - - - %1: permission denied - %1: permesso negato - - - %1: ftok failed - %1: ftok non riuscito - - - %1: out of resources - %1: risorse insufficienti - - - %1: not attached - %1: non allegato - - - %1: UNIX key file doesn't exist - %1: il file chiave UNIX non esiste - - - %1: doesn't exist - %1: non esistono - - - %1: size query failed - %1: interrogazione della dimensione non riuscita - - - %1: unable to lock - %1: impossibile bloccare - - - - QXmlStream - - Reference to unparsed entity '%1'. - Riferimento all'entità '%1' non analizzata. - - - Unexpected character '%1' in public id literal. - Carattere inatteso "%1" in letterale identificativo pubblico. - - - Illegal namespace declaration. - Dichiarazione di spazio di nomi non consentita. - - - Invalid XML character. - Carattere XML non valido. - - - Expected character data. - Erano attesi dati di caratteri. - - - Standalone accepts only yes or no. - "Standalone" accetta solo "yes" o "no". - - - Invalid XML version string. - Stringa di versione XML non valida. - - - Invalid processing instruction name. - Nome d'istruzione non valido. - - - Namespace prefix '%1' not declared - Prefisso "%1" dello spazio di nomi non dichiarato - - - Entity '%1' not declared. - Entità '%1' non dichiarata. - - - %1 is an invalid processing instruction name. - %1 non è un'istruzione di processo valida. - - - The standalone pseudo attribute must appear after the encoding. - Lo pseudo-attributo "standalone" deve comparire dopo la codifica. - - - Sequence ']]>' not allowed in content. - Sequenza ']]>' non consentita nel contesto. - - - %1 is an invalid encoding name. - %1 non è un nome di codifica valido. - - - , but got ' - , invece si è ottenuto ' - - - Start tag expected. - Ci si attendeva un marcatore d'inizio. - - - Invalid character reference. - Riferimento di carattere non valido. - - - Reference to external entity '%1' in attribute value. - Riferimento all'entità esterna '%1' nel valore dell'attributo. - - - Expected - Atteso - - - Invalid document. - Documento non valido. - - - Opening and ending tag mismatch. - Il marcatore d'inizio e quello di fine devono corrispondere. - - - Encountered incorrectly encoded content. - Trovato contenuto con codifica non corretta. - - - Invalid attribute in XML declaration. - Attributo non valido nella dichiarazione XML. - - - Attribute redefined. - Attributo ridefinito. - - - %1 is an invalid PUBLIC identifier. - %1 non è un identificatore PUBLIC valido. - - - Extra content at end of document. - Contenuti eccedenti alla fine del documento. - - - Invalid XML name. - Nome XML non valido. - - - Premature end of document. - Chiusura anticipata del documento. - - - XML declaration not at start of document. - La dichiarazione XML deve trovarsi all'inizio del documento. - - - Recursive entity detected. - Entità ricorsiva rilevata. - - - Unsupported XML version. - Versione di XML non supportata. - - - Unexpected ' - Inatteso ' - - - Invalid entity value. - Valore dell'entità non valido. - - - Encoding %1 is unsupported - La codifica %1 non è supportata - - - NDATA in parameter entity declaration. - NDATA all'interno di una dichiarazione d'entità di parametri. - - - - QProcess - - Error writing to process - Errore in scrittura sul processo - - - Resource error (fork failure): %1 - Errore di risorse (fork non riuscito): %1 - - - Error reading from process - Errore in lettura dal processo - - - Process failed to start: %1 - Avvio del processo non riuscito: %1 - - - Could not open input redirection for reading - Impossibile aprire in lettura la ridirezione dell'ingresso - - - No program defined - Nessun programma definito - - - Could not open output redirection for writing - Impossibile aprire in scrittura la ridirezione dell'uscita - - - Process operation timed out - Tempo scaduto per l'operazione del processo - - - Process crashed - Il processo è andato in crash - - - - QNativeSocketEngine - - The proxy type is invalid for this operation - Il tipo di proxy non è valido per questa operazione - - - Network operation timed out - Operazione di rete scaduta - - - The remote host closed the connection - L'host remoto ha chiuso la connessione - - - Invalid socket descriptor - Descrittore di socket non valido - - - Host unreachable - Host irraggiungibile - - - Protocol type not supported - Tipo di protocollo non supportato - - - Datagram was too large to send - Datagramma troppo grande per essere inviato - - - Attempt to use IPv6 socket on a platform with no IPv6 support - Tentativo di usare un socket IPv6 su una piattaforma senza supporto IPv6 - - - Unable to receive a message - Impossibile ricevere un messaggio - - - Permission denied - Permesso negato - - - Connection refused - Connessione rifiutata - - - Unable to write - Impossibile scrivere - - - Another socket is already listening on the same port - Un altro socket è già in ascolto sulla stessa porta - - - Unable to send a message - Impossibile inviare un messaggio - - - The bound address is already in use - L'indirizzo vincolato è già in uso - - - Connection timed out - Connessione scaduta - - - Network error - Errore di rete - - - Unsupported socket operation - Operazione sul socket non supportata - - - Operation on non-socket - Operazione su un non-socket - - - Unable to initialize broadcast socket - Impossibile inizializzare socket di broadcast - - - Unknown error - Errore sconosciuto - - - Unable to initialize non-blocking socket - Impossibile inizializzare socket non bloccante - - - The address is protected - L'indirizzo è protetto - - - Network unreachable - Rete irraggiungibile - - - The address is not available - L'indirizzo non è disponibile - - - Out of resources - Risorse terminate - - - - QNetworkAccessFtpBackend - - No suitable proxy found - Nessun proxy adatto trovato - - - Error while downloading %1: %2 - Errore nello scaricamento di %1: %2 - - - Error while uploading %1: %2 - Errore nell'invio di %1: %2 - - - Cannot open %1: is a directory - Impossibile aprire %1: è una cartella - - - Logging in to %1 failed: authentication required - Accesso a %1 non riuscito: autenticazione richiesta - - - - QNetworkAccessHttpBackend - - No suitable proxy found - Nessun proxy adatto trovato - - - - QCheckBox - - Check - Spunta - - - Toggle - Commuta - - - Uncheck - Togli spunta - - - - QRadioButton - - Check - Spunta - - - - Q3TitleBar - - Close - Chiudi - - - Minimize - Riduci a icona - - - Displays the name of the window and contains controls to manipulate it - Mostra il nome della finestra e contiene i controlli per manipolarla - - - Makes the window full screen - Mostra la finestra a schermo intero - - - System - Sistema - - - Maximize - Ingrandisci - - - Contains commands to manipulate the window - Contiene i comandi per manipolare la finestra - - - Restore up - Ripristina in alto - - - Puts a minimized window back to normal - Ripristina una finestra minimizzata - - - Closes the window - Chiude la finestra - - - Puts a maximized window back to normal - Ripristina una finestra massimizzata - - - Moves the window out of the way - Toglie di torno la finestra - - - Restore down - Ripristina in basso - - - - QScriptNewBreakpointWidget - - Close - Chiudi - - - - Phonon:: - - Games - Giochi - - - Music - Musica - - - Video - Video - - - Communication - Comunicazione - - - Accessibility - Accessibilità - - - Notifications - Notifiche - - - - Phonon::VolumeSlider - - Muted - In silenzio - - - Volume: %1% - Volume : %1% - - - Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% - Utilizzare questo interruttore scorrevole per regolare il volume. La posizione più a sinistra è 0% mentre quella destra è %1% - - - - Q3LocalFs - - Could not open -%1 - Impossibile aprire -%1 - - - Could not remove file or directory -%1 - Impossibile rimuovere il file o la cartella -%1 - - - Could not create directory -%1 - Impossibile creare la cartella -%1 - - - Could not read directory -%1 - Impossibile leggere la cartella -%1 - - - Could not rename -%1 -to -%2 - Impossibile rinominare -%1 -a -%2 - - - Could not write -%1 - Impossibile scrivere -%1 - - - - QDial - - QDial - QDial - - - SliderHandle - Levetta del cursore - - - SpeedoMeter - Tachimetro - - - - QAccessibleButton - - Press - Premi - - - - QSocks5SocketEngine - - Network operation timed out - Operazione di rete scaduta - - - Connection to proxy closed prematurely - Connessione al proxy chiusa prematuramente - - - Proxy authentication failed: %1 - Autenticazione al proxy non riuscita: %1 - - - Proxy authentication failed - Autenticazione al proxy non riuscita - - - General SOCKSv5 server failure - Errore generale del server SOCKSv5 - - - Unknown SOCKSv5 proxy error code 0x%1 - Codice di errore sconosciuto 0x%1 del proxy SOCKSv5 - - - Connection not allowed by SOCKSv5 server - Connessione non consentita dal server SOCKSv5 - - - SOCKSv5 command not supported - Comando SOCKSv5 non supportato - - - Connection to proxy timed out - Connessione al proxy scaduta - - - Proxy host not found - Host proxy non trovato - - - TTL expired - TTL scaduto - - - Address type not supported - Tipo di indirizzo non supportato - - - Connection to proxy refused - Connessione al proxy rifiutata - - - SOCKS version 5 protocol error - Errore di protocollo SOCKS versione 5 - - - - Phonon::MMF - - Could not connect - Impossibile connettersi - - - Access denied - Accesso negato - - - Invalid protocol - Protocollo non valido - - - No error - Nessun errorre - - - Audio Output - Uscita audio - - - Disconnected - Disconnesso - - - Server alert - Avviso del server - - - Out of memory - Memoria esaurita - - - Not supported - Non supportato - - - Invalid URL - URL non valido - - - Video output error - Errore nell'uscita video - - - In use - In uso - - - Insufficient bandwidth - Banda insufficiente - - - Already exists - Esiste già - - - Audio output error - Errore nell'uscita audio - - - Multicast error - Errore multicast - - - Proxy server not supported - Server proxy non supportato - - - Permission denied - Permesso negato - - - Not found - Non trovato - - - Not ready - Non pronto - - - Proxy server error - Errore nel server proxy - - - The audio output device - Il dispositivo di uscita dell'audio - - - Streaming not supported - Streaming non supportato - - - Audio or video components could not be played - Impossibile leggere i componenti audio o video - - - Underflow - Scarso flusso - - - Network communication error - Errore di comunicazione di rete - - - Overflow - Sovraccarico - - - Network unavailable - Rete non disponibile - - - Path not found - Percorso non trovato - - - Decoder error - Errore di decodifica - - - DRM error - Errore di DRM - - - Unknown error (%1) - Errore sconosciuto (%1) - - - - QRegExp - - invalid category - categoria non valida - - - bad lookahead syntax - sintassi errata della ricerca in avanti - - - no error occurred - nessun errore - - - missing left delim - delimitatore sinistro mancante - - - bad char class syntax - sintassi errata di classe di caratteri - - - disabled feature used - è stata usata una funzione disabilitata - - - invalid octal value - valore ottale non valido - - - bad repetition syntax - sintassi errata di ripetizione - - - met internal limit - raggiunto un limite interno - - - invalid interval - intervallo non valido - - - unexpected end - fine inattesa - - - - QWhatsThisAction - - What's This? - Che cos'è? - - - - QDeclarativeTextInput - - Could not instantiate cursor delegate - Impossibile istanziare il delegato del cursore - - - Could not load cursor delegate - Impossibile caricare il delegato del cursore - - - - Q3UrlOperator - - The protocol `%1' does not support getting files - Il protocollo `%1' non consente la ricezione dei file - - - The protocol `%1' does not support renaming files or directories - Il protocollo `%1' non consente la rinomina dei file o delle cartelle - - - The protocol `%1' does not support listing directories - Il protocollo `%1' non consente l'elencazione delle cartelle - - - (unknown) - (sconosciuto) - - - The protocol `%1' does not support removing files or directories - Il protocollo `%1' non consente la rimozione dei file o delle cartelle - - - The protocol `%1' does not support putting files - Il protocollo `%1' non consente l'invio dei file - - - The protocol `%1' is not supported - Il protocollo `%1' non è supportato - - - The protocol `%1' does not support copying or moving files or directories - Il protocollo `%1' non consente la copia o lo spostamento dei file o delle cartelle - - - The protocol `%1' does not support creating new directories - Il protocollo `%1' non consente la creazione di nuove cartelle - - - - QFtp - - Listing directory failed: -%1 - Elencazione delle cartelle è fallita: -%1 - - - Creating directory failed: -%1 - Creazione delle cartelle è fallita: -%1 - - - Not connected - Non connesso - - - Connection refused for data connection - Connessione rifiutata dalla connessione di dati - - - Login failed: -%1 - Autenticazione fallita: -%1 - - - Downloading file failed: -%1 - Scaricamento del file fallito: -%1 - - - Connected to host - Connessione all'host - - - Connection timed out to host %1 - Connessione scaduta verso l'host %1 - - - Connected to host %1 - Connessione all'host %1 - - - Connecting to host failed: -%1 - Connessione all'host fallita: -%1 - - - Host %1 not found - Host %1 non trovato - - - Uploading file failed: -%1 - Caricamento file sul sever fallito: -%1 - - - Changing directory failed: -%1 - Modifica della cartella fallita: -%1 - - - Host found - Host trovato - - - Removing directory failed: -%1 - Rimozione della cartella fallita: -%1 - - - Connection refused to host %1 - Connessione all'host %1 rifiutata - - - Connection to %1 closed - Connessione a %1 chiusa - - - Removing file failed: -%1 - Rimozione file fallita: -%1 - - - Host %1 found - Host %1 trovato - - - Unknown error - Errore sconosciuto - - - Connection closed - Connessione chiusa - - - - QDeclarativeListModel - - set: value is not an object - set: il valore non è un oggetto - - - ListElement: cannot use script for property value - ListElement: non può usare uno script come valore di proprietà - - - ListModel: undefined property '%1' - ListModel: proprietà non definita '%1' - - - ListElement: cannot contain nested elements - ListElement: non può contenere elementi annidati - - - insert: value is not an object - insert: il valore non è un oggetto - - - remove: index %1 out of range - remove: l'indice %1 è fuori dai limiti - - - set: index %1 out of range - set: l'indice %1 è fuori dai limiti - - - append: value is not an object - append: il valore non è un oggetto - - - move: out of range - move: fuori dai limiti - - - insert: index %1 out of range - insert: l'indice %1 è fuori dai limiti - - - ListElement: cannot use reserved "id" property - ListElement : non può usare la proprietà riservata "id" - - - - QDeclarativeEngine - - Version mismatch: expected %1, found %2 - Versione non corrispondente: era attesa %1, trovata %2 - - - executeSql called outside transaction() - executeSql chiamato al di fuori di transaction() - - - Read-only Transaction - Transazione di sola lettura - - - SQL transaction failed - Transazione SQL non riuscita - - - transaction: missing callback - transaction: manca funzione chiamante - - - SQL: database version mismatch - SQL: versioni di banche dati non corrispondenti - - - - Phonon::MMF::EnvironmentalReverb - - Reverb delay (ms) - Ritardo del riverbero (ms) - - - Density (%) - Densità (%) - - - Room HF level - Livello della stanza in alta frequenza - - - Reverb level (mB) - Livello del riverbero (mB) - - - Diffusion (%) - Diffusione (%) - - - Decay HF ratio (%) - Rapporto di decadimento delle alte frequenze (%) - - - Decay time (ms) - Tempo di decadimento (ms) - - - Reflections level (mB) - Livello delle riflessioni (mB) - - - Room level (mB) - Livello della stanza (mB) - - - Reflections delay (ms) - Ritardo delle riflessioni (ms) - - - - QDeclarativeVME - - Cannot assign object to list - Impossibile assegnare un oggetto all'elenco - - - Cannot assign object type %1 with no default method - Impossibile assegnare un oggetto di tipo %1 senza metodo predefinito - - - Cannot connect mismatched signal/slot %1 %vs. %2 - Impossibile connettere segnale e ricettore non corrispondenti, %1 e %2 - - - Cannot assign value %1 to property %2 - Impossibile assegnare un valore %1 alla proprietà %2 - - - Cannot set properties on %1 as it is null - Impossibile impostare le proprietà di %1 perché è nullo - - - Cannot assign an object to signal property %1 - Impossibile assegnare un oggetto alla proprietà di segnale %1 - - - Unable to create object of type %1 - Impossibile creare oggetto di tipo %1 - - - Cannot assign object to interface property - Impossibile assegnare oggetto a proprietà di interfaccia - - - Unable to create attached object - Impossibile creare oggetto allegato - - - - QDB2Driver - - Unable to commit transaction - Impossibile depositare la transazione - - - Unable to set autocommit - Impossibile impostare il deposito automatico - - - Unable to connect - Impossibile connettere - - - Unable to rollback transaction - Impossibile annullare la transazione - - - - QIBaseDriver - - Unable to commit transaction - Impossibile depositare la transazione - - - Could not start transaction - Impossibile avviare la transazione - - - Error opening database - Errore nell'apertura della banca dati - - - Unable to rollback transaction - Impossibile annullare la transazione - - - - QIBaseResult - - Unable to commit transaction - Impossibile depositare la transazione - - - Unable to open BLOB - Impossibile aprire il blob - - - Could not describe statement - Impossibile descrivere la dichiarazione - - - Could not describe input statement - Impossibile descrivere la dichiarazione di ingresso - - - Could not allocate statement - Impossibile allocare la dichiarazione - - - Unable to write BLOB - Impossibile scrivere il blob - - - Could not start transaction - Impossibile avviare la transazione - - - Unable to close statement - Impossibile chiudere la dichiarazione - - - Could not get query info - Impossibile prelevare le informazioni dell'interrogazione - - - Could not find array - Impossibile trovare l'array - - - Could not get array data - Impossibile prelevare i dati dell'array - - - Unable to execute query - Impossibile eseguire l'interrogazione - - - Could not prepare statement - Impossibile preparare la dichiarazione - - - Could not fetch next item - Impossibile prelevare il prossimo elemento - - - Could not get statement info - Impossibile ottenere informazioni sulla dichiarazione - - - Unable to create BLOB - Impossibile creare il blob - - - Unable to read BLOB - Impossibile leggere il blob - - - - QMYSQLDriver - - Unable to commit transaction - Impossibile depositare la transazione - - - Unable to open database ' - Impossibile aprire la banca dati ' - - - Unable to connect - Impossibile connettere - - - Unable to rollback transaction - Impossibile annullare la transazione - - - Unable to begin transaction - Impossibile avviare la transazione - - - - QOCIDriver - - Unable to commit transaction - Impossibile depositare la transazione - - - Unable to initialize - QOCIDriver - Impossibile inizializzare - - - Unable to logon - Impossibile accedere - - - Unable to rollback transaction - Impossibile annullare la transazione - - - Unable to begin transaction - Impossibile avviare la transazione - - - - QODBCDriver - - Unable to commit transaction - Impossibile depositare la transazione - - - Unable to enable autocommit - Impossibile abilitare il deposito automatico - - - Unable to disable autocommit - Impossibile disabilitare il deposito automatico - - - Unable to connect - Driver doesn't support all functionality required - Impossibile connettersi: il driver non supporta tutte le funzionalità richieste - - - Unable to connect - Impossibile connettere - - - Unable to rollback transaction - Impossibile annullare la transazione - - - - QSQLite2Driver - - Unable to commit transaction - Impossibile depositare la transazione - - - Error opening database - Errore nell'apertura della banca dati - - - Unable to rollback transaction - Impossibile annullare la transazione - - - Unable to begin transaction - Impossibile avviare la transazione - - - - QSQLiteDriver - - Unable to commit transaction - Impossibile depositare la transazione - - - Error closing database - Errore nella chiusura della banca dati - - - Error opening database - Errore nell'apertura della banca dati - - - Unable to rollback transaction - Impossibile annullare la transazione - - - Unable to begin transaction - Impossibile avviare la transazione - - - - QAbstractSocket - - Host not found - Host non trovato - - - Connection refused - Connessione rifiutata - - - Connection timed out - Connessione scaduta - - - Socket is not connected - Socket non connesso - - - Socket operation timed out - Operazione sul socket scaduta - - - Network unreachable - Rete irraggiungibile - - - Operation on socket is not supported - L'operazione sul socket non è supportata - - - - QHostInfoAgent - - Host not found - Host non trovato - - - No host name given - Nessun nome di host specificato - - - Unknown address type - Tipo di indirizzo sconosciuto - - - Unknown error - Errore sconosciuto - - - Invalid hostname - Nome dell'host non valido - - - - Phonon::Gstreamer::MediaObject - - Could not open media source. - Impossibile aprire la fonte audio/video. - - - Missing codec helper script assistant. - Assistente dello script di supporto al codec mancante. - - - Could not decode media source. - Impossibile decodificare la fonte audio/video. - - - Invalid source type. - Tipo di fonte non valido. - - - Cannot start playback. - -Check your GStreamer installation and make sure you -have libgstreamer-plugins-base installed. - Impossibile avviare la lettura. - -Controlla l'installazione di GStreamer e assicurati -di aver installato libgstreamer-plugins-base. - - - Plugin codec installation failed for codec: %0 - Installazione dell'estensione per codec non riuscita per il codec: %0 - - - Could not open audio device. The device is already in use. - Impossibile aprire il dispositivo audio. Il dispositivo è già in uso. - - - A required codec is missing. You need to install the following codec(s) to play this content: %0 - Manca un codec richiesto. Devi installare i codec seguenti per leggere questo contenuto: %0 - - - Could not locate media source. - Impossibile trovare la fonte audio/video. - - - - QLibrary - - Could not unmap '%1': %2 - Impossibile effettuare unmap di «%1»: %2 - - - Cannot unload library %1: %2 - Impossibile scaricare la libreria %1: %2 - - - Cannot load library %1: %2 - Impossibile caricare la libreria %1: %2 - - - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] - L'estensione '%1' usa una libreria Qt non compatibile. (%2.%3.%4) [%5] - - - Cannot resolve symbol "%1" in %2: %3 - Impossible de résoudre le symbole "%1" dans %2 : %3 - - - Plugin verification data mismatch in '%1' - Dati di verifica dell'estensione non corrispondenti in '%1' - - - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) - L'estensione '%1' usa una libreria Qt non compatibile (non si possono mischiare le versioni di debug con quelle di rilascio). - - - The file '%1' is not a valid Qt plugin. - Il file '%1' non è un'estensione valida di Qt. - - - The shared library was not found. - La libreria condivisa non è stata trovata. - - - Unknown error - Errore sconosciuto - - - The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" - Le plugin '%1' utilise une bibliothèque Qt incompatible. Clé attendue "%2", reçue "%3" - - - Could not mmap '%1': %2 - Impossibile effettuare mmap di '%1': %2 - - - - QHttp - - Connection refused (or timed out) - Connessione rifiutata (o scaduta) - - - Data corrupted - Data corrotta - - - Connected to host - Connessione all'host - - - Connected to host %1 - Connessione all'host %1 - - - Host %1 not found - Host %1 non trovato - - - Unknown authentication method - Metodo di autentificazione sconosciuto - - - Host requires authentication - L'host richiede l'autentificazione - - - Error writing response to device - Errore in scrittura durante la risposta al dispositivo - - - HTTPS connection requested but SSL support not compiled in - Connessione HTTPS richiesta ma il supporto SSL non è compilato in - - - Host found - Host trovato - - - Connection refused - Connessione rifiutata - - - Proxy authentication required - Autenticazione al proxy richiesta - - - Unknown protocol specified - Protocollo specificato sconosciuto - - - HTTP request failed - Richiesta HTTP fallita - - - Proxy requires authentication - Il proxy richiede un'autentificazione - - - Authentication required - Autentificazione richiesta - - - SSL handshake failed - Inizializzazione SSL fallita - - - Connection to %1 closed - Connessione a %1 chiusa - - - Invalid HTTP chunked body - Frammento HTTP non valido - - - Host %1 found - Host %1 trovato - - - Wrong content length - Lunghezza contenuto errata - - - Unknown error - Errore sconosciuto - - - Invalid HTTP response header - Intestazione di risposta HTTP non valida - - - Connection closed - Connessione chiusa - - - No server set to connect to - Nessun server impostato per la connessione a - - - Server closed connection unexpectedly - La connessione si è interrotta inaspettatamente - - - Request aborted - Richiesta interrotta - - - - QDeclarativeImportDatabase - - is ambiguous. Found in %1 and in %2 - ambiguo. Trovato in %1 e in %2 - - - local directory - cartella locale - - - import "%1" has no qmldir and no namespace - l'importazione '%1' non ha qmldir né spazio di nomi - - - - %1 is not a namespace - - %1 non è uno spazio di nomi - - - module "%1" definition "%2" not readable - definizione "%2" per il modulo "%1% non leggibile - - - module "%1" plugin "%2" not found - plugin "%2" per il modulo "%1" non trovato - - - is not a type - non è un tipo - - - module "%1" is not installed - il modulo "%1" non è installato - - - module "%1" version %2.%3 is not installed - la versione %2.%3 del modulo "%1" non è installata - - - - nested namespaces not allowed - - spazi di nomi annidati non permessi - - - plugin cannot be loaded for module "%1": %2 - plugin non caricabile per il modulo "%1" : %2 - - - is instantiated recursively - è istanziato ricorsivamente - - - is ambiguous. Found in %1 in version %2.%3 and %4.%5 - ambiguo. Trovato in %1 in versione %2.%3 e %4.%5 - - - "%1": no such directory - "%1": cartella inesistente - - - - QXml - - unparsed entity reference in wrong context - riferimento a entità non analizzata in contesto errato - - - external parsed general entity reference not allowed in DTD - riferimento a entità esterna generale analizzata non consetito nella DTD - - - wrong value for standalone declaration - valore errato per la dichiarazione "standalone" - - - encoding declaration or standalone declaration expected while reading the XML declaration - attesa una dichiarazione di codifica o una dichiarazione "standalone" nella lettura della dichiarazione XML - - - no error occurred - nessun errore - - - error occurred while parsing reference - errore nell'analisi del riferimento - - - standalone declaration expected while reading the XML declaration - attesa dichiarazione "standalone" nella lettura della dichiarazione XML - - - invalid name for processing instruction - nome non valido per l'istruzione di elaborazione - - - error triggered by consumer - errore causato dal consumatore - - - error occurred while parsing element - errore nell'analisi dell'elemento - - - unexpected character - carattere inatteso - - - tag mismatch - marcatori non corrispondenti - - - error occurred while parsing content - errore nell'analisi del contenuto - - - error occurred while parsing comment - errore nell'analisi del commento - - - internal general entity reference not allowed in DTD - riferimento a entità interna generale non consentito nella DTD - - - recursive entities - entità ricorsive - - - more than one document type definition - più di una DTD - - - version expected while reading the XML declaration - attesa versione nella lettura della dichiarazione XML - - - letter is expected - attesa una lettera - - - unexpected end of file - fine di file inattesa - - - external parsed general entity reference not allowed in attribute value - riferimento a entità esterna generale analizzata non consentito in un valore di attributo - - - error in the text declaration of an external entity - errore nella dichiarazione del testo di un'entità esterna - - - error occurred while parsing document type definition - errore nell'analisi della DTD - - - - QSystemSemaphore - - %1: does not exist - %1: non esiste - - - %1: already exists - %1: esiste già - - - %1: unknown error %2 - %1: errore sconosciuto %2 - - - %1: permission denied - %1: permesso negato - - - %1: out of resources - %1: risorse insufficienti - - - - Phonon::MMF::MediaObject - - Error opening source: resource is compressed - Errore nell'apertura della fonte: risorsa compressa - - - Error opening source: media type could not be determined - Errore nell'apertura della fonte: impossibile determinare il tipo di audio o video - - - Error opening source: resource not valid - Errore nell'apertura della fonte: risorsa non valida - - - Error opening source: type not supported - Errore nell'apertura della fonte: tipo non supportato - - - - QDeclarativePixmap - - Error decoding: %1: %2 - Errore nella decodifica: %1: %2 - - - Cannot open: %1 - Impossibile aprire: %1 - - - Failed to get image from provider: %1 - Recupero dell'immagine dal fornitore non riuscita: %1 - - - - QSQLiteResult - - Unable to fetch row - Impossibile prelevare la riga - - - No query - Nessuna interrogazione - - - Unable to execute statement - Impossibile eseguire la dichiarazione - - - Unable to bind parameters - Impossibile collegare i parametri - - - Unable to reset statement - Impossibile azzerare la dichiarazione - - - Parameter count mismatch - Numero di parametri non corrispondente - - - - QApplication - - Activates the program's main window - Attiva la finestra principale del programma - - - QT_LAYOUT_DIRECTION - Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. - LTR - - - Activate - Attiva - - - Executable '%1' requires Qt %2, found Qt %3. - L'esecuzione '%1' richiede Qt %2 mentre è stato rilevato Qt %3. - - - Incompatible Qt Library Error - Errore d'incompatibilità delle librerie Qt - - - - QDeclarativeBinding - - Binding loop detected for property "%1" - Ciclo di collegamento rilevato per la proprietà "%1" - - - - QDeclarativeBindings - - Binding loop detected for property "%1" - Ciclo di collegamento rilevato per la proprietà "%1" - - - - QUnicodeControlCharacterMenu - - RLE Start of right-to-left embedding - RLE inizio incorporamento da destra a sinistra - - - ZWSP Zero width space - ZWJ spazio di ampiezza zero - - - Insert Unicode control character - Inserisci carattere di controllo Unicode - - - LRO Start of left-to-right override - LRO inizio forzatura da sinistra a destra - - - LRE Start of left-to-right embedding - LRE inizio incorporamento da sinistra a destra - - - RLM Right-to-left mark - RLM indicatore di direzione da destra a sinistra - - - PDF Pop directional formatting - PDF ripristina impostazioni di direzione del testo - - - ZWNJ Zero width non-joiner - ZWNJ carattere non congiungente di ampiezza zero - - - RLO Start of right-to-left override - RLO inizio forzatura da destra a sinistra - - - ZWJ Zero width joiner - ZWJ carattere congiungente di ampiezza zero - - - LRM Left-to-right mark - LRM indicatore di direzione da sinistra a destra - - - - QWebFrame - - Request blocked - Richiesta bloccata - - - Frame load interrupted by policy change - Caricamento riquadro interrotto dalla modifica dei criteri - - - Request cancelled - Richiesta annullata - - - Cannot show URL - Impossibile mostrare l'URL - - - File does not exist - Il file non esiste - - - Cannot show mimetype - Impossible mostrare il Tipo MIME - - - - QHttpSocketEngine - - Proxy connection refused - Connessione al proxy rifiutata - - - Proxy denied connection - Connessione al proxy negata - - - Proxy server not found - Connessione al serveur non rilevata - - - Proxy server connection timed out - Connessione al server proxy scaduta - - - Did not receive HTTP response from proxy - Non è stata ricevuta alcuna risposta HTTP dal proxy - - - Proxy connection closed prematurely - La connessione al proxy si è chiusa prematuramente - - - Error communicating with HTTP proxy - Errore di comunicazione con il proxy HTTP - - - Authentication required - Autentificazione richiesta - - - Error parsing authentication request from proxy - Errore durante l'analsi di autentificazione richiesta da parte del proxy - - - - QNetworkAccessManager - - Network access is disabled. - L'accesso alla rete è disabilitato. - - - - QNetworkReply - - Error downloading %1 - server replied: %2 - Errore nello scaricamento di %1; il server ha risposto: %2 - - - Network session error. - Errore nella sessione di rete. - - - Protocol "%1" is unknown - Le protocole "%1" est inconnu - - - Temporary network failure. - Errore di rete temporaneo. - - - - QAbstractSpinBox - - Step &down - Sposta in &basso - - - &Step up - Sposta in &alto - - - &Select All - Seleziona &tutto - - - - QDeclarativeXmlRoleList - - An XmlListModel query must start with '/' or "//" - Un'interrogazione XmlListModel deve iniziare per '/' o "//" - - - - QDB2Result - - Unable to bind variable - Impossibile collegare la variabile - - - Unable to execute statement - Impossibile eseguire la dichiarazione - - - Unable to fetch next - Impossibile prelevare il successivo - - - Unable to prepare statement - Impossibile preparare la dichiarazione - - - Unable to fetch record %1 - Impossibile prelevare il record %1 - - - Unable to fetch first - Impossibile prelevare il primo - - - - QODBCResult - - Unable to bind variable - Impossibile collegare la variabile - - - Unable to execute statement - Impossibile eseguire la dichiarazione - - - Unable to fetch next - Impossibile prelevare il successivo - - - Unable to fetch last - Impossibile prelevare l'ultimo - - - Unable to prepare statement - Impossibile preparare la dichiarazione - - - Unable to fetch previous - Impossibile prelevare il precedente - - - Unable to fetch - Impossibile prelevare - - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration - QODBCResult::reset: Impossibile impostare 'SQL_CURSOR_STATIC' come un attributo della dichiarazione. Controlla la configurazione del driver ODBC. - - - Unable to fetch first - Impossibile prelevare il primo - - - - QPSQLDriver - - Unable to subscribe - Impossibile iscriversi - - - Could not begin transaction - Impossibile iniziare la transazione - - - Could not rollback transaction - Impossibile annullare la transazione - - - Could not commit transaction - Impossibile depositare la transazione - - - Unable to connect - Impossibile connettere - - - Unable to unsubscribe - Impossibile deiscriversi - - - - QInputDialog - - Enter a value: - Inserisci un valore: - - - - QIODevice - - No such file or directory - File o cartella inesistente - - - Permission denied - Permesso negato - - - No space left on device - Non c'è più spazio sul dispositivo - - - Unknown error - Errore sconosciuto - - - Too many open files - Troppi file aperti - - - - FakeReply - - Invalid URL - URL non valido - - - Fake error ! - Errore finto! - - - - QMultiInputContext - - Select IM - Seleziona metodo d'inserimento - - - - QTabBar - - Scroll Left - Scorri a sinistra - - - Scroll Right - Scorri a destra - - - - QUndoModel - - <empty> - <vuoto> - - - - QNetworkAccessCacheBackend - - Error opening %1 - Errore nell'apertura di %1 - - - - QDeclarativeParser - - Script import qualifiers must be unique. - I qualificatori di importazione degli script devono essere univoci. - - - Unterminated regular expression class - Classe di espressioni regolari non conclusa - - - Library import requires a version - L'importazione di librerie richiede una versione - - - Invalid regular expression flag '%0' - Contrassegno non valido per espressione regolare '%0' - - - JavaScript declaration outside Script element - Dichiarazione JavaScript al di fuori di un elemento Script - - - Illegal character - Carattere non consentito - - - Unclosed comment at end of file - Commento non concluso alla fine del file - - - Unclosed string at end of line - Stringa non conclusa alla fine della riga - - - Expected property type - Era atteso un tipo di proprietà - - - Expected type name - Era atteso un nome di tipo - - - Illegal escape sequence - Sequenza di escape non consentita - - - Readonly not yet supported - Sola lettura non ancora supportata - - - Unterminated regular expression literal - Letterale a espressione regolare non concluso - - - Property value set multiple times - Valore della proprietà impostato più volte - - - Unterminated regular expression backslash sequence - Sequenza con barra inversa di espressione regolare non conclusa - - - Identifier cannot start with numeric literal - L'identificativo non può cominciare con un letterale numerico - - - Script import requires a qualifier - L'importazione di script richiede un qualificatore - - - Illegal syntax for exponential number - Sintassi non consentita per numero esponenziale - - - Invalid property type modifier - Modificatore del tipo di proprietà non valido - - - Reserved name "Qt" cannot be used as an qualifier - Il nome riservato"Qt" non può essere usato come qualificatore - - - Expected token `%1' - Elemento atteso '%1' - - - Unexpected token `%1' - Elemento inatteso '%1' - - - Expected parameter type - Era atteso un tipo di parametro - - - Illegal unicode escape sequence - Sequenza di escape Unicode non consentita - - - Unexpected property type modifier - Modificatore del tipo di proprietà inatteso - - - Invalid import qualifier ID - Identificativo del qualificatore d'importazione non valido - - - Syntax error - Errore di sintassi - - - - QScriptEdit - - Disable Breakpoint - Disabilita punto di interruzione - - - Breakpoint Condition: - Condizione del punto di interruzione: - - - Toggle Breakpoint - Commuta punto di interruzione - - - Enable Breakpoint - Abilita punto di interruzione - - - - QMYSQLResult - - Unable to execute statement - Impossibile eseguire la dichiarazione - - - Unable to store statement results - Impossibile memorizzare i risultati della dichiarazione - - - Unable to execute next query - Impossibile eseguire l'interrogazione successiva - - - Unable to bind outvalues - Impossibile collegare i valori in uscita - - - Unable to store next result - Impossibile memorizzare il prossimo risultato - - - Unable to fetch data - Impossibile prelevare dati - - - Unable to prepare statement - Impossibile preparare la dichiarazione - - - Unable to store result - Impossibile memorizzare il risultato - - - Unable to bind value - Impossibile collegare il valore - - - Unable to execute query - Impossibile eseguire l'interrogazione - - - Unable to reset statement - Impossibile azzerare la dichiarazione - - - - QSQLite2Result - - Unable to execute statement - Impossibile eseguire la dichiarazione - - - Unable to fetch results - Impossibile prelevare i risultati - - - - Phonon::AudioOutput - - <html>Switching to the audio playback device <b>%1</b><br/>which has higher preference or is specifically configured for this stream.</html> - <html>Passo al dispositivo di lettura audio <b>%1</b><br/> che ha maggiore preferenza o è configurato specificamente per questo flusso.</html> - - - <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> - <html>Il dispositivo di lettura audio <b>%1</b> non funziona.<br/>Ripiego su <b>%2</b>.</html> - - - Revert back to device '%1' - Ritorno al dispositivo '%1' - - - <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> - <html>Passo al dispositivo di lettura audio <b>%1</b><br/> che è appena diventato disponibile e ha una preferenza maggiore.</html> - - - - Q3MainWindow - - Line up - Allinea - - - Customize... - Personalizza... - - - - QUdpSocket - - This platform does not support IPv6 - Questa piattaforma non supporta IPv6 - - - - Phonon::Gstreamer::Backend - - Warning: You do not seem to have the base GStreamer plugins installed. - All audio and video support has been disabled - Avviso: sembra che le estensioni fondamentali di GStreamer non siano installate. - Il supporto audio e video è stato disabilitato. - - - Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. - Some video features have been disabled. - Avviso: sembra che il pacchetto gstreamer0.10-plugins-good non sia installato. - Alcune funzioni video sono state disabilitate. - - - - QDeclarativePropertyChanges - - Cannot assign to read-only property "%1" - Impossibile assegnare alla proprietà di sola lettura "%1" - - - PropertyChanges does not support creating state-specific objects. - PropertyChanges non supporta la creazione di oggetti a stato specifico. - - - Cannot assign to non-existent property "%1" - Impossibile assegnare una proprietà inesistente "%1" - - - - QLocalServer - - %1: Name error - %1: errore nel nome - - - %1: Unknown error %2 - %1: errore sconosciuto %2 - - - %1: Permission denied - %1: permesso negato - - - %1: Address in use - %1: Indirizzo già in uso - - - - Phonon::MMF::AbstractVideoPlayer - - Pause failed - Pausa non riuscita - - - Seek failed - Spostamento non riuscito - - - Opening clip failed - Apertura dello spezzone non riuscita - - - Getting position failed - Recupero della posizione non riuscito - - - - Phonon::MMF::AbstractMediaPlayer - - Not ready to play - Non pronto alla lettura - - - Error opening file - Errore nell'apertura del file - - - Error opening source: resource not opened - Errore nell'apertura della fonte: risorsa non aperta - - - Error opening URL - Errore nell'apertura dell'URL - - - Loading clip failed - Caricamento dello spezzone non riuscito - - - Setting volume failed - Impostazione del volume non riuscita - - - Error opening resource - Errore nell'apertura della risorsa - - - Playback complete - Lettura completata - - - - QDeclarativeAbstractAnimation - - Animation is an abstract class - L'animazione è una classe astratta - - - Cannot animate non-existent property "%1" - Impossibile animare la proprietà inesistente "%1" - - - Cannot animate read-only property "%1" - Impossibile animare la proprietà di sola lettura "%1" - - - - QCoreApplication - - %1: unable to make key - QSystemSemaphore - %1: impossibile creare la chiave - - - %1: ftok failed - QSystemSemaphore - %1: ftok non riuscito - - - %1: out of resources - QSystemSemaphore - %1: risorse insufficienti - - - %1: does not exist - QSystemSemaphore - %1: non esiste - - - %1: unknown error %2 - QSystemSemaphore - %1: errore sconosciuto %2 - - - %1: key is empty - QSystemSemaphore - %1: la chiave è vuota - - - %1: already exists - QSystemSemaphore - %1: esiste già - - - - QDeclarativeFlipable - - front is a write-once property - 'front' (fronte) è una proprietà scrivibile una volta sola - - - back is a write-once property - 'back' (retro) è una proprietà scrivibile una volta sola - - - - Q3ToolBar - - More... - Altro... - - - - QDeclarativeParentAnimation - - Unable to preserve appearance under non-uniform scale - Impossibile mantenere l'aspetto in riscalamento non uniforme - - - Unable to preserve appearance under complex transform - Impossibile mantenere l'aspetto in trasformazione complessa - - - Unable to preserve appearance under scale of 0 - Impossibile mantenere l'aspetto in scala di 0 - - - - QDeclarativeParentChange - - Unable to preserve appearance under non-uniform scale - Impossibile mantenere l'aspetto in riscalamento non uniforme - - - Unable to preserve appearance under complex transform - Impossibile mantenere l'aspetto in trasformazione complessa - - - Unable to preserve appearance under scale of 0 - Impossibile mantenere l'aspetto in scala di 0 - - - - QMultiInputContextPlugin - - Multiple input method switcher that uses the context menu of the text widgets - Cambio multiplo del metodo d'inserimento che usa il menu contestuale degli campi di testo - - - Multiple input method switcher - Cambio multiplo del metodo d'inserimento - - - - Q3ProgressDialog - - Cancel - Annulla - - - - QProgressDialog - - Cancel - Annulla - - - - QGstreamerPlayerSession - - Unable to play %1 - Impossibile leggere %1 - - - - QDeclarativeComponent - - Invalid empty URL - URL vuoto non valido - - - - MAC_APPLICATION_MENU - - Hide Others - Nascondi gli altri - - - Quit %1 - Esci da %1 - - - About %1 - Informazioni su %1 - - - Preferences... - Preferenze... - - - Services - Servizi - - - Hide %1 - Nascondi %1 - - - Show All - Mostra tutto - - - - QTDSDriver - - Unable to open connection - Impossibile aprire la connessione - - - Unable to use database - Impossibile usare la banca dati - - - - QDeclarativeVisualDataModel - - Delegate component must be Item type. - Il componente delegato deve essere di tipo Item. - - - - QMediaPlaylist - - The file could not be accessed. - Impossibile accedere al file. - - - Could not add items to read only playlist. - Impossibile aggiungere elementi alla scaletta in sola lettura dei file multimediali da riprodurre. - - - Playlist format is not supported - Il formato della scaletta dei file multimediali da riprodurre non è supportato - - - - QDeclarativeConnections - - Connections: script expected - Connections: era atteso uno script - - - Connections: nested objects not allowed - Connections: oggetti annidati non permessi - - - Cannot assign to non-existent property "%1" - Impossibile assegnare alla proprietà inesistente"%1" - - - Connections: syntax error - Connections: errore di sintassi - - - - QPluginLoader - - The plugin was not loaded. - L'estensione non è stata caricata. - - - Unknown error - Errore sconosciuto - - - - QSlider - - Page up - Pagina sù - - - Position - Posizione - - - Page right - Pagina destra - - - Page down - Pagina giù - - - Page left - Pagina sinistra - - - - CloseButton - - Close Tab - Chiudi scheda - - - - QPSQLResult - - Unable to prepare statement - Impossibile preparare la dichiarazione - - - Unable to create query - Impossibile creare l'interrogazione - - - - QNetworkSession - - Invalid configuration. - Configurazione non valida. - - - - QNetworkAccessDataBackend - - Invalid URI: %1 - URI non valido: %1 - - - Operation not supported on %1 - Operazione non supportata su %1 - - - - QDeclarativeAnimatedImage - - Qt was built without support for QMovie - Qt è stato generato senza supporto per QMovie - - - - QObject - - "%1" duplicates a previous role name and will be disabled. - "%1" duplica un nome di ruolo precedente e sarà disabilitato. - - - PulseAudio Sound Server - Server sonoro PulseAudio - - - invalid query: "%1" - interrogazione non valida: "%1" - - - - QDeclarativeKeysAttached - - Keys is only available via attached properties - Keys è disponibile solo attraverso proprietà allegate - - - - QMenuBar - - Actions - Azioni - - - - QMediaPlayer - - The QMediaPlayer object does not have a valid service - L'oggetto QMediaPlayer non presenta un servizio valido - - - - QNetworkAccessDebugPipeBackend - - Socket error on %1: %2 - Errore di socket su %1: %2 - - - Remote host closed the connection prematurely on %1 - L'host remoto ha chiuso la connessione prematuramente su %1 - - - Write error writing to %1: %2 - Errore nella scrittura su %1: %2 - - - - QNetworkAccessFileBackend - - Request for opening non-local file %1 - Richiesta di apertura di file non locale %1 - - - Read error reading from %1: %2 - Errore nella lettura da %1: %2 - - - Cannot open %1: Path is a directory - Impossibile aprire %1: il percorso è una cartella - - - Error opening %1: %2 - Errore nell'apertura di %1: %2 - - - Write error writing to %1: %2 - Errore nella scrittura su %1: %2 - - - - QHostInfo - - No host name given - Nessun nome di host specificato - - - Unknown error - Errore sconosciuto - - - - QDeclarativeLoader - - Loader does not support loading non-visual elements. - Il caricatore non supporta il caricamento di elementi non visivi. - - - - QNetworkReplyImpl - - Operation canceled - Operazione annullata - - - - Q3NetworkProtocol - - Operation stopped by the user - Operazione interrotta dall'utente - - - - QStateMachine - - Missing default state in history state '%1' - Stato predefinito mancante nello stato cronologico '%1' - - - Unknown error - Errore sconosciuto - - - Missing initial state in compound state '%1' - Stato iniziale mancante nello stato composto '%1' - - - No common ancestor for targets and source of transition from state '%1' - Nessun antenato comune per le destinazioni e l'origine della transizione dallo stato '%1' - - - - QMdiArea - - (Untitled) - (Senza titolo) - - - - QDeclarativeXmlListModelRole - - An XmlRole query must not start with '/' - Un'interrogazione XmlRole non può cominciare per '/' - - - - QDeclarativeBehavior - - Cannot change the animation assigned to a Behavior. - Impossibile cambiare l'animazione assegnata a un comportamento. - - - - Q3Accel - - %1, %2 not defined - %1, %2 non definiti - - - Ambiguous %1 not handled - %1 ambiguo non gestito - - - - Phonon::MMF::EffectFactory - - Enabled - Abilitato - - - - Phonon::MMF::DsaVideoPlayer - - Video display error - Errore nella visualizzazione del video - - - - Phonon::MMF::SurfaceVideoPlayer - - Video display error - Errore nella visualizzazione del video - - - - Phonon::MMF::StereoWidening - - Level (%) - Livello (%) - - - - Phonon::MMF::AudioPlayer - - Getting position failed - Recupero della posizione non riuscito - - - - QDeclarativeKeyNavigationAttached - - KeyNavigation is only available via attached properties - KeyNavigation è disponibile solo attraverso proprietà allegate - - - - QDeclarativeAnchorAnimation - - Cannot set a duration of < 0 - Impossibile impostare una durata negativa - - - - QDeclarativePauseAnimation - - Cannot set a duration of < 0 - Impossibile impostare una durata negativa - - - - QDeclarativePropertyAnimation - - Cannot set a duration of < 0 - Impossibile impostare una durata negativa - - - - QTcpServer - - Operation on socket is not supported - L'operazione sul socket non è supportata - - - - QDeclarativeXmlListModel - - Qt was built without support for xmlpatterns - Qt è stato generato senza supporto per gli schemi XML - - - diff --git a/locale/qt_extra_lt.ts b/locale/qt_extra_lt.ts deleted file mode 100644 index c484b258..00000000 --- a/locale/qt_extra_lt.ts +++ /dev/null @@ -1,5719 +0,0 @@ - - - - - MAC_APPLICATION_MENU - - Services - Paslaugos - - - Hide %1 - Slėpti %1 - - - Hide Others - Slėpti kitką - - - Show All - Rodyti viską - - - Preferences... - Nuostatos... - - - Quit %1 - Baigti %1 - - - About %1 - Apie %1 - - - - AudioOutput - - <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> - <html><b>%1</b>Garso atkūrimo įrenginys neveikia.<br/>Naudosimas <b>%2</b>.</html> - - - <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> - <html>Naudosimas <b>%1</b> garso atkūrimo įrenginys,<br/>kuris ką tik tapo prieinamu bei turi aukštesnį prioritetą.</html> - - - Revert back to device '%1' - Naudosimas įrenginys „%1“ - - - - Phonon:: - - Notifications - Pranešimai - - - Music - Muzika - - - Video - Vaizdai - - - Communication - Bendravimas - - - Games - Žaidimai - - - Accessibility - Prieinamumas - - - - Phonon::Gstreamer::Backend - - Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. - Some video features have been disabled. - Attention: Vous n'avez apparemment pas installé le paquet gstreamer0.10-plugins-good. -Des fonctionnalités vidéo ont été desactivées. - Dėmesio: panašu, kad gstreamer0.10-plugins-good paketas neįdiegtas. - Kai kurios vaizdo funkcijos uždraustos. - - - Warning: You do not seem to have the base GStreamer plugins installed. - All audio and video support has been disabled - Attention: Vous n'avez apparemment pas installées les plugins de base de GStreamer. -Le support audio et vidéo est désactivé. - Dėmesio: panašu, kad neįdiegtas pagrindinis GStreamer papildinys. - Visas garso ir vaizdo palaikymas yra uždraustas - - - - Phonon::Gstreamer::MediaObject - - Cannot start playback. - -Check your Gstreamer installation and make sure you -have libgstreamer-plugins-base installed. - Impossible de démarrer la lecture. Verifiez votre installation de Gstreamer et assuez-vousd'avoir installé libgstreamer-plugins-base. - Nepavyksta groti. - -Patikrinkite, ar tinkamai įdiegtas Gstreamer ir -jo elementas libgstreamer-plugins-base. - - - A required codec is missing. You need to install the following codec(s) to play this content: %0 - Des codecs requis sont manquants. Vous devez installer les codecs suivants pour jouer le contenu - - Trūksta reikiamos kodavimo priemonės. Norėdami atlikti šį kūrinį, įdiekite šią kodavimo priemonę: %0 - Trūksta reikiamos kodavimo priemonės. Norėdami atlikti šį kūrinį, įdiekite šias kodavimo priemones: %0 - Trūksta reikiamos kodavimo priemonės. Norėdami atlikti šį kūrinį, įdiekite šias kodavimo priemones: %0 - - - - Could not open media source. - Nepavyksta atverti kūrinio šaltinio. - - - Invalid source type. - Netinkamas šaltinio tipas. - - - Could not locate media source. - Nepavyksta rasti kūrinio šaltinio. - - - Could not open audio device. The device is already in use. - Nepavyksta atverti garso įrenginio.Įrenginys užimtas. - - - Could not decode media source. - Nepavyksta iškoduoti kūrinio šaltinio. - - - - Phonon::VolumeSlider - - Volume: %1% - Garsumas: %1% - - - Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% - Utilisez le slider pour ajuster le volume. La position la plus à gauche est 0%, la plus à droite est %1% - Garsumą keiskite šliaužikliu. Kairiausia padėtis atitinka 0%, o dešiniausia – %1% - - - - Q3Accel - - %1, %2 not defined - %1, %2 seka neapibrėžta - - - Ambiguous %1 not handled - Séquence ambiguë %1 non traitée - - - - - Q3DataTable - - True - Tiesa - - - False - Melas - - - Insert - Įterpti - - - Update - Atnaujinti - - - Delete - Pašalinti - - - - Q3FileDialog - - Copy or Move a File - Kopijuoti arba perkelti rinkmeną - - - Read: %1 - Skaityti: %1 - - - Write: %1 - Rašyti: %1 - - - Cancel - Atšaukti - - - All Files (*) - Visos rinkmenos (*) - - - Name - Pavadinimas - - - Size - Dydis - - - Type - Tipas - - - Date - Data - - - Attributes - Savybės - - - &OK - &Gerai - - - Look &in: - Kur &ieškoti: - - - File &name: - Rinkmenos &pavadinimas: - - - File &type: - Rinkmenos &tipas: - - - Back - Atgal - - - One directory up - Į aukštesnį aplanką - - - Create New Folder - Sukurti naują aplanką - - - List View - Sąrašo rodinys - - - Detail View - Detalus rodinys - - - Preview File Info - Informations du fichier prévisualisé - Rinkmenos informacijos peržiūra - - - Preview File Contents - Contenu du fichier prévisualisé - Rinkmenos turinio peržiūra - - - Read-write - Tik rašyti - - - Read-only - Tik skaityti - - - Write-only - Tik rašyti - - - Inaccessible - Neprieinama - - - Symlink to File - Sukurti simbolinę nuorodą į rinkmeną - - - Symlink to Directory - Sukurti simbolinę nuorodą į aplanką - - - Symlink to Special - Sukurti specialią simbolinę nuorodą - - - File - Rinkmena - - - Dir - Aplankas - - - Special - Specialus - - - Open - Atverti - - - Save As - Įrašyti kaip - - - &Open - At&verti - - - &Save - Į&rašyti - - - &Rename - &Pervadinti - - - &Delete - &Ištrinti - - - R&eload - Įk&elti iš naujo - - - Sort by &Name - Rikiuoti pagal &pavadinimą - - - Sort by &Size - Rikiuoti pagal &dydį - - - Sort by &Date - Rikiuoti pagal &datą - - - &Unsorted - &Nerikiuoti - - - Sort - Rikiuoti - - - Show &hidden files - Rodyti paslėptas &rinkmenas - - - the file - rinkmeną - - - the directory - aplanką - - - the symlink - simbolinę nuorodą - - - Delete %1 - Ištrinti %1 - - - <qt>Are you sure you wish to delete %1 "%2"?</qt> - <qt>Tikrai ištrinti %1 „%2“?</qt> - - - &Yes - &Taip - - - &No - &Ne - - - New Folder 1 - Naujas aplankas 1 - - - New Folder - Naujas aplankas - - - New Folder %1 - Naujas aplankas %1 - - - Find Directory - Ieškoti aplanko - - - Directories - Aplankai - - - Directory: - Aplankas: - - - Error - Klaida - - - %1 -File not found. -Check path and filename. - %1 -Rinkmena nerasta. -Patikrinkite rinkmenos kelią ir pavadinimą. - - - - Q3LocalFs - - Could not read directory -%1 - Nepavyksta nuskaityti iš aplanko -%1 - - - Could not create directory -%1 - Nepavyksta sukurti aplanko -%1 - - - Could not remove file or directory -%1 - Nepavyksta pašalinti rinkmenos arba aplanko -%1 - - - Could not rename -%1 -to -%2 - %1 -nepavyksta pervadinti į -%2 - - - Could not open -%1 - Nepavyksta atverti -%1 - - - Could not write -%1 - Nepavyksta rašyti į -%1 - - - - Q3MainWindow - - Line up - Aligner - - - - Customize... - Personnaliser... - Derinti... - - - - Q3NetworkProtocol - - Operation stopped by the user - Veiksmą nutraukė naudotojas - - - - Q3ProgressDialog - - Cancel - Atšaukti - - - - Q3TabDialog - - OK - Gerai - - - Apply - Pritaikyti - - - Help - Pagalba - - - Defaults - Numatyta - - - Cancel - Atšaukti - - - - Q3TextEdit - - &Undo - Atša&ukti - - - &Redo - Paka&rtoti - - - Cu&t - Iškirp&ti - - - &Copy - &Kopijuoti - - - &Paste - &Padėti - - - Clear - Išvalyti - - - Select All - Viską pažymėti - - - - Q3TitleBar - - System - Sistema - - - Restore up - Atstatyti aukščiau - - - Minimize - Sumažinti - - - Restore down - Atstatyti žemiau - - - Maximize - Išdidinti - - - Close - Užverti - - - Contains commands to manipulate the window - Contient des commandes pour manipuler la fenêtre - Komandos langui valdyti - - - Puts a minimized back to normal - Sumažintą langą grąžina į įprastą būseną - - - Moves the window out of the way - Déplace la fenêtre à l'écart - Nukelia langą - - - Puts a maximized window back to normal - Išdidintą langą grąžina į įprastą būseną - - - Makes the window full screen - Langą rodo visame ekrane - - - Closes the window - Užveria langą - - - Displays the name of the window and contains controls to manipulate it - Affiche le nom de la fenêtre et contient des contrôles pour la manipuler - Rodo lango pavadinimą ir turi jo tvarkymo priemones - - - - Q3ToolBar - - More... - Daugiau... - - - - Q3UrlOperator - - The protocol `%1' is not supported - Protokolas „%1“ nepalaikomas - - - The protocol `%1' does not support listing directories - Le protocole `%1' ne permet pas de lister les fichiers d'un dossier - Protokolas „%1“ nepalaiko aplankų sąrašų pateikimo - - - The protocol `%1' does not support creating new directories - Protokolas „%1“ nepaliko naujų aplankų kūrimo - - - The protocol `%1' does not support removing files or directories - Protokolas „%1“ nepaliko rinkmenų ir aplankų šalinimo - - - The protocol `%1' does not support renaming files or directories - Protokolas „%1“ nepaliko rinkmenų ir aplankų pervedinimo - - - The protocol `%1' does not support getting files - Protokolas „%1“ nepalaiko rinkmenų gavimo - - - The protocol `%1' does not support putting files - Protokolas „%1“ nepalaiko rinkmenų įkėlimo - - - The protocol `%1' does not support copying or moving files or directories - Protokolas „%1“ nepaliko rinkmenų ir aplankų kopijavimo ir perkėlimo - - - (unknown) - (nežinoma) - - - - Q3Wizard - - &Cancel - &Atšaukti - - - < &Back - < &Atgal - - - &Next > - &Toliau > - - - &Finish - &Užbaigti - - - &Help - &Pagalba - - - - QAbstractSocket - - Host not found - Pagrindinis kompiuteris nerastas - - - Connection refused - Connexion refusée - Ryšys atmestas - - - Socket operation timed out - Opération socket expirée - - - - Socket is not connected - Le socket n'est pas connecté - - - - - QAbstractSpinBox - - &Step up - Pa&didinti - - - Step &down - Su&mažinti - - - &Select All - &Viską pažymėti - - - - QApplication - - Activate - Aktyvuoti - - - Executable '%1' requires Qt %2, found Qt %3. - „%1“ vykdymui reikia Qt %2 (rasta Qt %3). - - - Incompatible Qt Library Error - Klaida: QT bibliotekos nesuderinamos - - - QT_LAYOUT_DIRECTION - Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. - LTR - - - Activates the program's main window - Aktyvuoja programos pagrindinį langą - - - - QCheckBox - - Uncheck - Atžymėti - - - Check - Pažymėti - - - Toggle - Perjungti - - - - QColorDialog - - Hu&e: - &Tonas : - - - &Sat: - &Sodrumas: - - - &Val: - &Reikšmė: - - - &Red: - &Raudona: - - - &Green: - &Žalia: - - - Bl&ue: - &Mėlyna: - - - A&lpha channel: - A&lfa kanalas: - - - &Basic colors - &Pagrindinės spalvos - - - &Custom colors - &Derintos spalvos - - - &Add to Custom Colors - Pridėti prie d&erintų spalvų - - - Select color - Spalvos pasirinkimas - - - - QComboBox - - Open - Atverti - - - False - Melas - - - True - Tiesa - - - Close - Užverti - - - - QCoreApplication - - %1: permission denied - QSystemSemaphore - %1: nepakanka leidimų - - - %1: already exists - QSystemSemaphore - %1: jau yra - - - %1: doesn't exists - QSystemSemaphore - %1: nėra - - - %1: out of resources - QSystemSemaphore - %1: plus de ressources disponibles - %1: viršija išteklius - - - %1: unknown error %2 - QSystemSemaphore - %1: nežinoma klaida %2 - - - %1: key is empty - QSystemSemaphore - %1: clé vide - %1: tuščias raktas - - - %1: unable to make key - QSystemSemaphore - %1: impossible de créer la clé - %1: nepavyksta sukurti rakto - - - %1: ftok failed - QSystemSemaphore - %1: ftok a échoué - - - - - QDB2Driver - - Unable to connect - Incapable d'établir une connexion - Nepavyksta prisijungti - - - Unable to commit transaction - Incapable de soumettre la transaction - Nepavyksta įkelti operacijos - - - Unable to rollback transaction - Incapable d'annuler la transaction - Nepavyksta atsisakyti operacijos - - - Unable to set autocommit - Impossible d'activer l'auto-soumission - Nepavyksta įgalinti automatinio įkėlimo - - - - QDB2Result - - Unable to execute statement - Impossible d'exécuter la requête - - - - Unable to prepare statement - Impossible de prépare la requête - - - - Unable to bind variable - Impossible d'attacher la variable - - - - Unable to fetch record %1 - Impossible de récupérer l'enregistrement %1 - - - - Unable to fetch next - Impossible de récupérer le suivant - - - - Unable to fetch first - Impossible de récupérer le premier - - - - - QDateTimeEdit - - AM - - - - am - - - - PM - - - - pm - - - - - QDial - - QDial - - - - SpeedoMeter - Greičio matuoklis - - - SliderHandle - Poignée - - - - - QDialog - - What's This? - Kas tai? - - - Done - Užbaigti - - - - QDialogButtonBox - - OK - Gerai - - - Save - Įrašyti - - - Open - Atverti - - - Cancel - Atšaukti - - - Close - Užverti - - - Apply - Pritaikyti - - - Reset - Iš naujo - - - Help - Pagalba - - - Don't Save - Neįrašyti - - - Discard - Panaikinti - - - &Yes - &Taip - - - Yes to &All - Taip &viskam - - - &No - &Ne - - - N&o to All - N&e viskam - - - Save All - Viską įrašyti - - - Abort - Nutraukti - - - Retry - Kartoti - - - Ignore - Nepaisyti - - - Restore Defaults - Atkurti numatytąsias reikšmes - - - Close without Saving - Užverti neišsaugant - - - &OK - &Gerai - - - - QDirModel - - Name - Pavadinimas - - - Size - Dydis - - - Kind - Match OS X Finder - Tipas - - - Type - All other platforms - Tipas - - - Date Modified - Pakeitimo data - - - - QDockWidget - - Close - Užverti - - - Dock - Attacher - Pritvirtinti - - - Float - Détacher - Atkabinti - - - - QDoubleSpinBox - - More - Daugiau - - - Less - Mažiau - - - - QErrorMessage - - Debug Message: - Derinimo pranešimas: - - - Warning: - Įspėjimas: - - - Fatal Error: - Lemtinga klaida: - - - &Show this message again - &Rodyti šį pranešimą dar kartą - - - &OK - &Gerai - - - - QFileDialog - - All Files (*) - Visos rinkmenos (*) - - - Directories - Aplankai - - - &Open - At&verti - - - &Save - Į&rašyti - - - Open - Atverti - - - %1 already exists. -Do you want to replace it? - Rinkmena %1 jau yra. Perrašyti ją? - - - %1 -File not found. -Please verify the correct file name was given. - %1 -Rinkmena nerasta. -Patikrinkite rinkmenos kelią ir pavadinimą. - - - My Computer - Mano kompiuteris - - - &Rename - &Pervadinti - - - &Delete - &Ištrinti - - - Show &hidden files - Rodyti paslėptas &rinkmenas - - - Back - Atgal - - - Parent Directory - Į aukštesnį aplanką - - - List View - Sąrašo rodinys - - - Detail View - Detalus rodinys - - - Files of type: - Rinkmenos, kurių tipas: - - - Directory: - Aplankas: - - - %1 -Directory not found. -Please verify the correct directory name was given. - %1 -Aplankas nerastas. -Patikrinkite aplanko pavadinimą. - - - '%1' is write protected. -Do you want to delete it anyway? - „%1“ apsaugotas nuo įrašymas. -Vis tiek norite ištrinti? - - - Are sure you want to delete '%1'? - Tikrai norite ištrinti „%1“? - - - Could not delete directory. - Nepavyksta pašalinti aplanko. - - - Save As - Įrašyti kaip - - - Drive - - - - File - Rinkmena - - - Unknown - Nežinoma - - - Find Directory - Ieškoti aplanko - - - Show - Rodyti - - - Forward - Toliau - - - New Folder - Naujas aplankas - - - &New Folder - &Naujas aplankas - - - &Choose - &Pasirinkti - - - Remove - Pašalinti - - - File &name: - Rinkmenos &pavadinimas: - - - Look in: - Kur ieškoti: - - - Create New Folder - Sukurti naują aplanką - - - - QFileSystemModel - - Invalid filename - Rinkmenos pavadinimas netinkamas - - - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. - <b>Negalima naudoti pavadinimo „%1“</b><p>Naudokite kitą trumpesnį pavadinimą be skyrybos ženklų. - - - Name - Pavadinimas - - - Size - Dydis - - - Kind - Match OS X Finder - Tipas - - - Type - All other platforms - Tipas - - - Date Modified - Pakeitimo data - - - My Computer - Mano kompiuteris - - - Computer - Kompiuteris - - - %1 TB - %1 TB - - - %1 GB - %1 GB - - - %1 MB - %1 MB - - - %1 KB - %1 KB - - - %1 bytes - %1 baitai - - - - QFontDatabase - - Normal - Įprastas - - - Bold - Pusjuodis - - - Demi Bold - Silpnai pusjuodis - - - Black - Juodas - - - Demi - Pusiau - - - Light - Plonas - - - Italic - Kursyvinis - - - Oblique - Pasviras - - - Any - Bet koks - - - Latin - Lotynų - - - Greek - Graikų - - - Cyrillic - Kirilica - - - Armenian - Armėnų - - - Hebrew - Hebrajų - - - Arabic - Arabų - - - Syriac - Sirų - - - Thaana - - - - Devanagari - Devanagari - - - Bengali - Bengalų - - - Gurmukhi - Gurmukhi - - - Gujarati - Gudžarati - - - Oriya - - - - Tamil - Tamilų - - - Telugu - Telugu - - - Kannada - - - - Malayalam - Malajalių - - - Sinhala - Sinhala - - - Thai - Tajų - - - Lao - Laosiečių - - - Tibetan - Tibeto - - - Myanmar - Mianmaro - - - Georgian - Gruzinų - - - Khmer - Chmerų - - - Simplified Chinese - Supaprastinta kinų - - - Traditional Chinese - Tradicinė kinų - - - Japanese - Japonų - - - Korean - Korėjiečių - - - Vietnamese - Vietnamiečių - - - Symbol - Simbolis - - - Ogham - - - - Runic - Runų - - - - QFontDialog - - &Font - &Šriftas - - - Font st&yle - Šrifto &stilius - - - &Size - &Dydis - - - Effects - Efektai - - - Stri&keout - Per&braukta - - - &Underline - &Pabrauktas - - - Sample - Pavyzdys - - - Wr&iting System - Rašymo &sistema - - - Select Font - Pasirinkti šriftą - - - - QFtp - - Not connected - Neprisijungta - - - Host %1 not found - Pagrindinis kompiuteris %1 nerastas - - - Connection refused to host %1 - Prisijungimas prie pagrindinio kompiuterio %1 atmestas - - - Connected to host %1 - Prisijungta prie pagrindinio kompiuterio %1 - - - Connection refused for data connection - - - - Unknown error - Nežinoma klaida - - - Connecting to host failed: -%1 - Nepavyko prisijungti prie pagrindinio kompiuterio: -%1 - - - Login failed: -%1 - Prisijungti nepavyko: -%1 - - - Listing directory failed: -%1 - Nepavyko pateikti aplankų sąrašo: -%1 - - - Changing directory failed: -%1 - Nepavyko pakeisti aplanko: -%1 - - - Downloading file failed: -%1 - Nepavyko parsiųsti rinkmenos: -%1 - - - Uploading file failed: -%1 - Nepavyko įkelti rinkmenos: -%1 - - - Removing file failed: -%1 - Nepavyko pašalinti rinkmenos: -%1 - - - Creating directory failed: -%1 - Nepavyko sukurti aplanko: -%1 - - - Removing directory failed: -%1 - Nepavyko pašalinti aplanko: -%1 - - - Connection closed - Ryšys nutrauktas - - - Host %1 found - Rastas pagrindinis kompiuteris %1 - - - Connection to %1 closed - Nutrauktas prisijungimas prie %1 - - - Host found - Rastas pagrindinis kompiuteris - - - Connected to host - Prisijungta prie pagrindinio kompiuterio - - - - QHostInfo - - Unknown error - Nežinoma klaida - - - - QHostInfoAgent - - Host not found - Pagrindinis kompiuteris nerastas - - - Unknown address type - Nežinimo tipo adresas - - - Unknown error - Nežinoma klaida - - - - QHttp - - Unknown error - Nežinoma klaida - - - Request aborted - Užklausa nutraukta - - - No server set to connect to - - - - Wrong content length - Netinkamas turinio ilgis - - - Server closed connection unexpectedly - Serveris netikėtai nutraukė ryšį - - - Connection refused - Ryšys atmestas - - - Host %1 not found - Pagrindinis kompiuteris %1 nerastas - - - HTTP request failed - - - - Invalid HTTP response header - - - - Invalid HTTP chunked body - - - - Host %1 found - Rastas pagrindinis kompiuteris %1 - - - Connected to host %1 - Prisijungta prie pagrindinio kompiuterio %1 - - - Connection to %1 closed - Nutrauktas prisijungimas prie %1 - - - Host found - Rastas pagrindinis kompiuteris - - - Connected to host - Prisijungta prie pagrindinio kompiuterio - - - Connection closed - Ryšys nutrauktas - - - Proxy authentication required - Le proxy requiert une authentification - Reikia nustatyti tapatybę įgaliotame serveryje - - - Authentication required - Reikia nustatyti tapatybę - - - Connection refused (or timed out) - Ryšys atmestas (arba pasibaigė laikas) - - - Proxy requires authentication - Įgaliotasis serveris reikalauja nustatyti tapatybę - - - Host requires authentication - L'hôte requiert une authentification - Pagrindinis kompiuteris reikalauja nustatyti tapatybę - - - Data corrupted - Données corrompues - Duomenys sugadinti - - - Unknown protocol specified - Protocole spécifié inconnu - Nurodytas nežinomas protokolas - - - SSL handshake failed - le handshake SSL a échoué - - - - HTTPS connection requested but SSL support not compiled in - Connexion HTTPS requise mais le support SSL n'est pas compilé - HTTPS ryšiui reikia SSL, tačiau palaikymas nesukompiliuotas - - - - QHttpSocketEngine - - Authentication required - Reikia nustatyti tapatybę - - - - QIBaseDriver - - Error opening database - Erreur d'ouverture de la base de données - Atveriant duomenų bazę įvyko klaida - - - Could not start transaction - La transaction n'a pas pu être démarrée - Nepavyksta pradėti operacijos - - - Unable to commit transaction - Nepavyksta įkelti operacijos - - - Unable to rollback transaction - Nepavyksta atsisakyti operacijos - - - - QIBaseResult - - Unable to create BLOB - Nepavyksta sukurti BLOB - - - Unable to write BLOB - Nepavyksta įrašyti BLOB - - - Unable to open BLOB - Nepavyksta atverti BLOB - - - Unable to read BLOB - Nepavyksta nuskaityti BLOB - - - Could not find array - Impossible de trouver le tableau - - - - Could not get array data - Impossible de trouver le tableau de données - - - - Could not get query info - Impossible d'avoir les informations sur la requête - - - - Could not start transaction - Nepavyksta pradėti operacijos - - - Unable to commit transaction - Nepavyksta įkelti operacijos - - - Could not allocate statement - Impossible d'allouer la requête - - - - Could not prepare statement - Impossible de préparer la requête - - - - Could not describe input statement - Impossible de décrire la requête - - - - Could not describe statement - Impossible de décrire la requête - - - - Unable to close statement - Impossible de fermer la requête - - - - Unable to execute query - Impossible d'exécuter la requête - - - - Could not fetch next item - Impossible de récuperer l'élément suivant - - - - Could not get statement info - Impossible d'avoir les informations sur la requête - Nepavyksta gauti informacijos apie būseną - - - - QIODevice - - Permission denied - Nepakanka leidimų - - - Too many open files - Trop de fichiers ouverts simultanément - Atverta per daug rinkmenų - - - No such file or directory - Aucun fichier ou dossier de ce nom - Tokios rinkmenos ar aplanko nėra - - - No space left on device - Aucun espace disponible sur le périphérique - Įrenginyje nebėra vietos - - - Unknown error - Nežinoma klaida - - - - QInputContext - - XIM - XIM - - - XIM input method - XIM įvesties metodas - - - Windows input method - Windows įvesties metodas - - - Mac OS X input method - Mac OS X įvesties metodas - - - - QLibrary - - QLibrary::load_sys: Cannot load %1 (%2) - QLibrary::load_sys: Nepavyksta įkelti %1 (%2) - - - QLibrary::unload_sys: Cannot unload %1 (%2) - QLibrary::unload_sys: Nepavyksta iškelti %1 (%2) - - - QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) - QLibrary::resolve_sys: Symbole "%1" non défini dans %2 (%3) - - - - Could not mmap '%1': %2 - Impossible d'établir la projection en mémoire de '%1' : %2 - - - - Plugin verification data mismatch in '%1' - Données de vérification du plugin différente dans '%1' - - - - Could not unmap '%1': %2 - Impossible de supprimer la projection en mémoire de '%1' : %2 - - - - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] - Le plugin '%1' utilise une bibliothèque Qt incompatible. (%2.%3.%4) [%5] - „%1“ papildinys naudoja nesuderinamą Qt biblioteką. (%2.%3.%4) [%5] - - - The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" - Le plugin '%1' utilise une bibliothèque Qt incompatible. Clé attendue "%2", reçue "%3" - - - - Unknown error - Nežinoma klaida - - - The shared library was not found. - La bibliothèque partagée est introuvable. - Bendra biblioteka nerasta. - - - The file '%1' is not a valid Qt plugin. - Le fichier '%1' n'est pas un plugin Qt valide. - Rinkmena „%1“ nėra tinkamas Qt papildinys. - - - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) - Le plugin '%1' utilise une bibliothèque Qt incompatible. (Il est impossible de mélanger des bibliothèques 'debug' et 'release'.) - - - - - QLineEdit - - &Undo - Atša&ukti - - - &Redo - Paka&rtoti - - - Cu&t - Iškirp&ti - - - &Copy - &Kopijuoti - - - &Paste - &Padėti - - - Delete - Ištrinti - - - Select All - Viską pažymėti - - - - QLocalServer - - %1: Name error - %1: Vardo klaida - - - %1: Permission denied - %1: Nepakanka leidimų - - - %1: Address in use - %1: Adresas jau naudojamas - - - %1: Unknown error %2 - %1: Nežinoma klaida %2 - - - - QLocalSocket - - %1: Connection refused - %1: Ryšys atmestas - - - %1: Remote closed - %1: Ryšys nutrauktas - - - %1: Invalid name - %1: Netinkamas pavadinimas - - - %1: Socket access error - %1: Erreur d'accès au socket - - - - %1: Socket resource error - %1: Erreur de ressource du socket - - - - %1: Socket operation timed out - %1: L'opération socket a expiré - - - - %1: Datagram too large - %1: Datagramme trop grand - - - - %1: Connection error - %1: Ryšio klaida - - - %1: The socket operation is not supported - %1: L'opération n'est pas supportée - - - - %1: Unknown error %2 - %1: Nežinoma klaida %2 - - - - QMYSQLDriver - - Unable to open database ' - Napavyksta atverti duomenų bazės - - - Unable to connect - Nepavyksta prisijungti - - - Unable to begin transaction - Nepavyksta pradėti operacijos - - - Unable to commit transaction - Nepavyksta įkelti operacijos - - - Unable to rollback transaction - Nepavyksta atsisakyti operacijos - - - - QMYSQLResult - - Unable to fetch data - Nepavyksta gauti duomenų - - - Unable to execute query - Impossible d'exécuter la requête - - - - Unable to store result - Impossible de stocker le résultat - - - - Unable to prepare statement - Impossible de préparer l'instruction - - - - Unable to reset statement - Impossible de réinitialiser l'instruction - - - - Unable to bind value - Impossible d'attacher la valeur - - - - Unable to execute statement - Impossible d'exécuter la requête - - - - Unable to bind outvalues - Impossible d'attacher les valeurs de sortie - - - - Unable to store statement results - Impossible de stocker les résultats de la requête - - - - Unable to execute next query - Impossible d'exécuterla prochaine requête - - - - Unable to store next result - Impossible de stocker le prochain résultat - - - - - QMdiArea - - (Untitled) - (be antraštės) - - - - QMdiSubWindow - - %1 - [%2] - %1 - [%2] - - - Close - Užverti - - - Minimize - Sumažinti - - - Restore Down - Atstatyti žemiau - - - &Restore - &Atstatyti - - - &Move - &Perkelti - - - &Size - &Dydis - - - Mi&nimize - Su&mažinti - - - Ma&ximize - Iš&didinti - - - Stay on &Top - &Visada viršuje - - - &Close - &Užverti - - - - [%1] - - [%1] - - - Maximize - Išdidinti - - - Unshade - - - - Shade - Ombrer - Patamsinti - - - Restore - Atstatyti - - - Help - Pagalba - - - Menu - Meniu - - - - QMenu - - Close - Užverti - - - Open - Atverti - - - Execute - Įvykdyti - - - - QMessageBox - - Help - Pagalba - - - OK - Gerai - - - About Qt - Apie Qt - - - <p>This program uses Qt version %1.</p> - <p>Ši programa naudoja %1 Qt versija.</p> - - - Show Details... - Rodyti detales... - - - Hide Details... - Slėpti detales... - - - <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> for an overview of Qt licensing.</p> - - - - <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> for more information.</p> - - - - - QMultiInputContext - - Select IM - Sélectionner IM - Pasirinkti ĮM - - - - QMultiInputContextPlugin - - Multiple input method switcher - Sélectionneur de méthode de saisie - - - - Multiple input method switcher that uses the context menu of the text widgets - Sélectionneur de méthode de saisie qui utilise le menu contextuel des widgets de texte - - - - - QNativeSocketEngine - - The remote host closed the connection - L'hôte distant a fermé la connexion - Nuotolinis pagrindinis kompiuteris nutraukė ryšį - - - Network operation timed out - L'opération réseau a expiré - Baigėsi laikas tinklo operacijai - - - Out of resources - Manque de ressources - Trūksta išteklių - - - Unsupported socket operation - Opération socket non supportée - - - - Protocol type not supported - Nepalaikomas protokolo tipas - - - Invalid socket descriptor - Descripteur de socket invalide - - - - Network unreachable - Réseau impossible à rejoindre - Tinklas nepasiekiamas - - - Permission denied - Nepakanka leidimų - - - Connection timed out - Baigėsi ryšio laikas - - - Connection refused - Ryšys atmestas - - - The bound address is already in use - L'adresse liée est déjà en usage - - - - The address is not available - L'adresse n'est pas disponible - - - - The address is protected - L'adresse est protégée - Adresas apsaugotas - - - Unable to send a message - Impossible d'envoyer un message - Nepavyksta išsiųsti žinutės - - - Unable to receive a message - Impossible de recevoir un message - Nepavyksta gauti žinutės - - - Unable to write - Impossible d'écrire - Nepavyksta įrašyti - - - Network error - Tinklo klaida - - - Another socket is already listening on the same port - Un autre socket écoute déjà sur le même port - - - - Unable to initialize non-blocking socket - Impossible d'initialiser le socket asynchrone - - - - Unable to initialize broadcast socket - Impossible d'initialiser le socket broadcast - - - - Attempt to use IPv6 socket on a platform with no IPv6 support - Tentative d'utiliser un socket IPv6 sur une plateforme qui ne supporte pas IPv6 - - - - Host unreachable - Hôte inaccessible - Pagrindinis kompiuteris nepasiekiamas - - - Datagram was too large to send - Le datagramme était trop grand pour être envoyé - - - - Operation on non-socket - Operation sur non-socket - - - - Unknown error - Nežinoma klaida - - - The proxy type is invalid for this operation - Le type de proxy est invalide pour cette opération - - - - - QNetworkAccessFileBackend - - Request for opening non-local file %1 - Requête d'ouverture de fichier distant %1 - Bandoma atverti nuotolinę rinkmeną %1 - - - Error opening %1: %2 - Erreur lors de l'ouverture de %1 : %2 - Atveriant %1 įvyko klaida: %2 - - - Write error writing to %1: %2 - Erreur d'écriture de %1 : %2 - Klaida rašant į %1: %2 - - - Cannot open %1: Path is a directory - Impossible d'ouvrir %1 : le chemin est un dossier - Nepavyksta atverti %1: kelias yra aplankas - - - Read error reading from %1: %2 - Erreur de lecture de %1 : %2 - Klaida skaitant iš %1: %2 - - - - QNetworkAccessFtpBackend - - Cannot open %1: is a directory - Nepavyksta atverti %1: tai yra aplankas - - - Logging in to %1 failed: authentication required - Connexion à %1 a échoué : authentification requise - Nepavyko prisijungti prie %1: reikia patvirtinti tapatybę - - - Error while downloading %1: %2 - Klaida įvyko parsiunčiant %1 : %2 - - - Error while uploading %1: %2 - Klaida įvyko įkeliant %1 : %2 - - - - QNetworkReply - - Error downloading %1 - server replied: %2 - Klaida parsiunčiant %1 - serveris grąžino: %2 - - - Protocol "%1" is unknown - Protokolas „%1“ nežinomas - - - - QNetworkReplyImpl - - Operation canceled - Veiksmas atšauktas - - - - QOCIDriver - - Unable to logon - Nepavyskta pradėti sesijos - - - Unable to initialize - QOCIDriver - Nepavyksta paruošti - - - Unable to begin transaction - Nepavyksta pradėti operacijos - - - Unable to commit transaction - Nepavyksta įrašyti operacijos - - - Unable to rollback transaction - Nepavyksta atsisakyti operacijos - - - - QOCIResult - - Unable to bind column for batch execute - Impossible d'attacher la colonne pour une execution batch - - - - Unable to execute batch statement - Impossible d'exécuter l'instruction batch - - - - Unable to goto next - Impossible de passer au suivant - - - - Unable to alloc statement - Impossible d'allouer la requête - - - - Unable to prepare statement - Impossible de préparer la requête - - - - Unable to bind value - Impossible d'attacher la valeur - - - - Unable to execute select statement - Impossible d'exéctuer la requête select - - - - Unable to execute statement - Impossible d'exéctuer la requête - - - - - QODBCDriver - - Unable to connect - Incapable d'établir une connexion - Nepavyksta prisijungti - - - Unable to connect - Driver doesn't support all needed functionality - Impossible de se connecter - Le pilote ne supporte pas toutes les fonctionnalités nécessaires - Nepavyksta prisijungti - tvarkyklė nepaiko reikiamų funkcijų - - - Unable to disable autocommit - Nepavyksta uždrausti automatinio įkėlimo - - - Unable to commit transaction - Nepavyksta įkelti operacijos - - - Unable to rollback transaction - Nepavyksta atsisakyti operacijos - - - Unable to enable autocommit - Nepavyksta įgalinti automatinio įkėlimo - - - - QODBCResult - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration - QODBCResult::reset: Impossible d'utiliser 'SQL_CURSOR_STATIC' comme attribut de requête. Veuillez vérifier la configuration de votre pilote ODBC - - - - Unable to execute statement - Impossible d'exéctuer la requête - - - - Unable to fetch next - Impossible de récupérer le suivant - - - - Unable to prepare statement - Impossible de préparer la requête - - - - Unable to bind variable - Impossible d'attacher la variable - - - - Unable to fetch last - Impossible de récupérer le dernier - - - - Unable to fetch - Nepavyksta gauti - - - Unable to fetch first - Impossible de récupérer le premier - - - - Unable to fetch previous - Impossible de récupérer le précedent - - - - - QObject - - Operation not supported on %1 - Opération non supportée sur %1 - - - - Invalid URI: %1 - Klaidingas URI: %1 - - - Write error writing to %1: %2 - Klaida rašant į %1: %2 - - - Read error reading from %1: %2 - Klaida skaitant iš %1: %2 - - - Socket error on %1: %2 - Erreur de socket sur %1 : %2 - - - - Remote host closed the connection prematurely on %1 - L'hôte distant a fermé sa connexion de façon prématurée sur %1 - - - - Protocol error: packet of size 0 received - Erreur de protocole: paquet de taille 0 reçu - - - - - QPPDOptionsModel - - Name - Pavadinimas - - - Value - Reikšmė - - - - QPSQLDriver - - Unable to connect - Impossible d'établir une connexion - Nepavyksta prisijungti - - - Could not begin transaction - Nepavyksta pradėti operacijos - - - Could not commit transaction - Nepavyksta įkelti operacijos - - - Could not rollback transaction - Nepavyksta atsisakyti operacijos - - - Unable to subscribe - - - - Unable to unsubscribe - Impossible de se désinscrire - - - - - QPSQLResult - - Unable to create query - Nepavyksta sukurti užklausos - - - Unable to prepare statement - Impossible de préparer la requête - - - - - QPageSetupWidget - - Centimeters (cm) - Centimetrai (cm) - - - Millimeters (mm) - Millimetrai (mm) - - - Inches (in) - Coliai (in) - - - Points (pt) - Taškai (pt) - - - Form - Forma - - - Paper - Popierius - - - Page size: - Puslapio dydis: - - - Width: - Plotis: - - - Height: - Aukštis: - - - Paper source: - Popieriaus šaltinis: - - - Orientation - Orientacija - - - Portrait - Stačias - - - Landscape - Gulsčias - - - Reverse landscape - Apverstas gulsčias - - - Reverse portrait - Apverstas stačias - - - Margins - Paraštės - - - top margin - viršutinė paraštė - - - left margin - kairioji paraštė - - - right margin - dešinioji paraštė - - - bottom margin - apatinė paraštė - - - - QPluginLoader - - Unknown error - Nežinoma klaida - - - The plugin was not loaded. - Papildinys neįkeltas. - - - - QPrintDialog - - locally connected - vietinis prijungimas - - - Aliases: %1 - Pseudonimai: %1 - - - unknown - nežinoma - - - Print To File ... - Spausdinti į rinkmeną... - - - File %1 is not writable. -Please choose a different file name. - Nepavyksta rašyti į %1. -Pasirinkite kitą rinkmenos pavadinimą. - - - %1 already exists. -Do you want to overwrite it? - %1 jau yra. -Perrašyti? - - - %1 is a directory. -Please choose a different file name. - %1 yra aplankas. -Pasirinkite kitą rinkmenos pavadinimą. - - - A0 - A0 - - - A1 - A1 - - - A2 - A2 - - - A3 - A3 - - - A4 - A4 - - - A5 - A5 - - - A6 - A6 - - - A7 - A7 - - - A8 - A8 - - - A9 - A9 - - - B0 - B0 - - - B1 - B1 - - - B2 - B2 - - - B3 - B3 - - - B4 - B4 - - - B5 - B5 - - - B6 - B6 - - - B7 - B7 - - - B8 - B8 - - - B9 - B9 - - - B10 - B10 - - - C5E - C5E - - - DLE - DLE - - - Executive - - - - Folio - - - - Ledger - - - - Legal - - - - Letter - Laiškas - - - Tabloid - - - - US Common #10 Envelope - - - - Custom - Savitas - - - &Options >> - &Parinktys >> - - - &Print - &Spausdinti - - - &Options << - &Parinktys << - - - Print to File (PDF) - Spausdinti į rinkmeną (PDF) - - - Print to File (Postscript) - Spausdinti į rinkmeną (PostScript) - - - Local file - Vietinė rinkmena - - - Write %1 file - Įrašyti į rinkmeną %1 - - - - QPrintPreviewDialog - - Page Setup - Puslapio konfigūracija - - - Print Preview - Spaudinio peržiūra - - - Next page - Tolesnis puslapis - - - Previous page - Ankstesnis puslapis - - - First page - Pirmas puslapis - - - Last page - Paskutinis puslapis - - - Fit width - Taikyti pagal plotį - - - Fit page - Įtalpinti puslapį - - - Zoom in - Priartinti - - - Zoom out - Atitolinti - - - Portrait - Stačias - - - Landscape - Gulsčias - - - Show single page - Rodyti vieną puslapį - - - Show facing pages - Rodyti po du puslapius - - - Show overview of all pages - Rodyti visus puslapius - - - Print - Spausdinti - - - Page setup - Puslapio konfigūracija - - - Close - Užverti - - - - QPrintPropertiesWidget - - Form - Forma - - - Page - Puslapis - - - Advanced - Sudėtingiau - - - - QPrintSettingsOutput - - Form - Forma - - - Copies - Kopijos - - - Print range - Imprimer la sélection - Spausdinimo rėžis - - - Print all - Viską spausdinti - - - Pages from - Puslapius nuo - - - to - iki - - - Selection - Sélection - Pasirinkimas - - - Output Settings - Paramètres de sortie - Išvesties nuostatos - - - Copies: - Kopijos: - - - Collate - Assembler - Rikiuoti - - - Reverse - Inverse - Atvirkščiai - - - Options - Parinktys - - - Color Mode - Spalvų veiksena - - - Color - Spalvota - - - Grayscale - Pilkumo skalė - - - Duplex Printing - Impression en duplex - Dvipusis spausdinimas - - - None - Nieko - - - Long side - Côté long - Platusis kraštas - - - Short side - Côté court - Siaurasis kraštas - - - - QPrintWidget - - Form - Forma - - - Printer - Spausdintuvas - - - &Name: - &Pavadinimas: - - - P&roperties - &Savybės - - - Location: - Vieta: - - - Preview - Peržiūra - - - Type: - Tipas: - - - Output &file: - Išvesties &rinkmena: - - - ... - ... - - - - QProgressDialog - - Cancel - Atšaukti - - - - QPushButton - - Open - Atverti - - - - QRadioButton - - Check - Pažymėti - - - - QRegExp - - no error occurred - aucune erreur ne s'est produite - jokių klaidų - - - disabled feature used - parinktis uždrausta - - - bad char class syntax - syntaxe invalide pour classe de caractère - - - - bad lookahead syntax - syntaxe invalide pour lookahead - - - - bad repetition syntax - syntaxe invalide pour répétition - - - - invalid octal value - valeur octale invalide - - - - missing left delim - délémiteur gauche manquant - - - - unexpected end - fin impromptue - netikėta pabaiga - - - met internal limit - rencontré limite interne - pasiekta vidinė riba - - - - QSQLite2Driver - - Error to open database - Erreur à l'ouverture de la base de données - Atveriant duomenų bazę įvyko klaida - - - Unable to begin transaction - Nepavyksta pradėti operacijos - - - Unable to commit transaction - Nepavyksta įkelti operacijos - - - Unable to rollback Transaction - Nepavyksta atsisakyti operacijos - - - - QSQLite2Result - - Unable to fetch results - Nepavyksta gauti rezultatų - - - Unable to execute statement - Impossible d'exécuter la requête - - - - - QSQLiteDriver - - Error opening database - Atveriant duomenų bazę įvyko klaida - - - Error closing database - Užveriant duomenų bazę įvyko klaida - - - Unable to begin transaction - Nepavyksta pradėti operacijos - - - Unable to commit transaction - Nepavyksta įkelti operacijos - - - Unable to rollback transaction - Nepavyksta atsisakyti operacijos - - - - QSQLiteResult - - Unable to fetch row - Nepavyksta gauti dabar - - - Unable to execute statement - Impossible d'exécuter la requête - - - - Unable to reset statement - Impossible de réinitialiser la requête - - - - Unable to bind parameters - Impossible d'attacher les paramètres - - - - Parameter count mismatch - Nombre de paramètres incorrect - - - - No query - Pas de requête - Užklausos nėra - - - - QScrollBar - - Scroll here - Slikti iki čia - - - Left edge - Kairysis kraštas - - - Top - Viršus - - - Right edge - Dešinysis kraštas - - - Bottom - Apačia - - - Page left - Puslapis kairėje - - - Page up - Puslapiu aukštyn - - - Page right - Puslapis dešinėje - - - Page down - Puslapiu žemyn - - - Scroll left - Slinkti kairėn - - - Scroll up - Slikti auktyn - - - Scroll right - Slinkti dešinėn - - - Scroll down - Slinkti žemyn - - - Line up - Linija aukštyn - - - Position - Padėtis - - - Line down - Linija žemyn - - - - QSharedMemory - - %1: unable to set key on lock - %1 : impossible d'affecter la clé au verrou - - - - %1: create size is less then 0 - %1 : taille de création est inférieur à 0 - - - - %1: unable to lock - %1 : impossible de vérrouiller - - - - %1: unable to unlock - %1 : impossible de déverrouiller - - - - %1: permission denied - %1: nepakanka leidimų - - - %1: already exists - %1: jau yra - - - %1: doesn't exists - %1: nėra - - - %1: out of resources - %1: viršija išteklius - - - %1: unknown error %2 - %1: nežinoma klaida %2 - - - %1: key is empty - %1 : clé vide - - - - %1: unix key file doesn't exists - %1 : le fichier de clé unix n'existe pas - - - - %1: ftok failed - %1 : ftok a échoué - - - - %1: unable to make key - %1 : impossible de créer la clé - - - - %1: system-imposed size restrictions - %1 : le système impose des restrictions sur la taille - - - - %1: not attached - %1 : non attaché - - - - - QShortcut - - Space - Tarpas - - - Esc - Gr(įžti) - - - Tab - Tab(uliacija) - - - Backtab - - - - Backspace - Naikinti - - - Return - Įvesti - - - Enter - Įvesti - - - Ins - Įterpti - - - Del - Šalinti - - - Pause - Pauzė - - - Print - Ekrano nuotrauka - - - SysReq - - - - Home - Prad(žia) - - - End - Pab(aiga) - - - Left - Kairėn - - - Up - Aukštyn - - - Right - Dešinėn - - - Down - Žemyn - - - PgUp - Psl aukštyn - - - PgDown - Psl žemyn - - - CapsLock - Didž(iosios) - - - NumLock - Skaitm(enys) - - - ScrollLock - Slinkti - - - Menu - Meniu - - - Help - Pagalba - - - Back - Atgal - - - Forward - Toliau - - - Stop - Stabdyti - - - Refresh - Atnaujinti - - - Volume Down - Pritildyti - - - Volume Mute - Nutildyti - - - Volume Up - Pagarsinti - - - Bass Boost - Graves fort - Žemi dažniai - - - Bass Up - Graves haut - - - - Bass Down - Graves bas - - - - Treble Up - Aigus haut - - - - Treble Down - Aigus bas - - - - Media Play - Groti kūrinį - - - Media Stop - Sustabdyti kūrinį - - - Media Previous - Ankstenis kūrinys - - - Media Next - Tolesnis kūrinys - - - Media Record - Įrašyti kūrinį - - - Favorites - Préférés - - - - Search - Recherche - Ieškoti - - - Standby - Attente - Užmigdyti - - - Open URL - Atverti URL - - - Launch Mail - Lancer courrier - Paštas - - - Launch Media - Lancer média - - - - Launch (0) - Paleisti (0) - - - Launch (1) - Paleisti (1) - - - Launch (2) - Paleisti (2) - - - Launch (3) - Paleisti (3) - - - Launch (4) - Paleisti (4) - - - Launch (5) - Paleisti (5) - - - Launch (6) - Paleisti (6) - - - Launch (7) - Paleisti (7) - - - Launch (8) - Paleisti (8) - - - Launch (9) - Paleisti (9) - - - Launch (A) - Paleisti (A) - - - Launch (B) - Paleisti (B) - - - Launch (C) - Paleisti (C) - - - Launch (D) - Paleisti (D) - - - Launch (E) - Paleisti (E) - - - Launch (F) - Paleisti (F) - - - Print Screen - Ekrano nuotrauka - - - Page Up - Puslapiu aukštyn - - - Page Down - Puslapiu žemyn - - - Caps Lock - Didžiosios - - - Num Lock - Skaitmenys - - - Number Lock - Skaitmenys - - - Scroll Lock - Slinkti - - - Insert - Įterpti - - - Delete - Šalinti - - - Escape - Grįžti - - - System Request - - - - Select - Pasirinkti - - - Yes - Taip - - - No - Ne - - - Context1 - 1kontekstas - - - Context2 - 2kontekstas - - - Context3 - 3kontekstas - - - Context4 - 4kontekstas - - - Call - Appeler - - - Hangup - Raccrocher - - - Flip - Retourner - - - Ctrl - Vald - - - Shift - Lyg2 - - - Alt - Alt - - - Meta - Meta - - - + - + - - - F%1 - F%1 - - - Home Page - Pagrindinis puslapis - - - - QSlider - - Page left - Puslapis kairėje - - - Page up - Puslapiu aukštyn - - - Position - Padėtis - - - Page right - Puslapis dešinėje - - - Page down - Puslapiu žemyn - - - - QSocks5SocketEngine - - Socks5 timeout error connecting to socks server - Erreur d'expiration socks5 lors de l'établissement d'une connexion au serveur socks - - - - Network operation timed out - L'opération réseau a expiré - Baigėsi laikas tinklo operacijai - - - - QSpinBox - - More - Daugiau - - - Less - Mažiau - - - - QSql - - Delete - Supprimer - Šalinti - - - Delete this record? - Supprimer cet enregistrement ? - Pašalinti įrašą? - - - Yes - Taip - - - No - Ne - - - Insert - Insérer - Įterpti - - - Update - Atnaujinti - - - Save edits? - Enregistrer les modifications - Išsaugoti pakeitimus? - - - Cancel - Atšaukti - - - Confirm - Patvirtinti - - - Cancel your edits? - Annuler vos modifications - Atmesti pakeitimus? - - - - QSslSocket - - Unable to write data: %1 - Nepavyksta įrašyti duomenų: %1 - - - Error while reading: %1 - Skaitymo klaida: %1 - - - Error during SSL handshake: %1 - Erreur lors de la poignée de main SSL : %1 - - - - Error creating SSL context (%1) - Erreur lors de la création du contexte SSL (%1) - - - - Invalid or empty cipher list (%1) - La list de chiffrements est invalide ou vide (%1) - - - - Error creating SSL session, %1 - Kuriant SSL sesiją įvyko klaida, %1 - - - Error creating SSL session: %1 - Kuriant SSL sesiją įvyko klaida: %1 - - - Cannot provide a certificate with no key, %1 - Impossible de fournir un certificat sans clé, %1 - - - - Error loading local certificate, %1 - Įkeliant vietinį liudijimą įvyko klaida, %1 - - - Error loading private key, %1 - Erreur lors du chargement de la clé privée, %1 - Klaida įkeliant privatųjį raktą, %1 - - - Private key does not certificate public key, %1 - La clé privée ne certifie pas la clé publique, %1 - - - - - QTDSDriver - - Unable to open connection - Impossible d'ouvrir la connexion - nepavyksta atverti ryšio - - - Unable to use database - Impossible d'utiliser la base de données - Napavyksta pasinaudoti duomenų baze - - - - QTabBar - - Scroll Left - Slinkti kairėn - - - Scroll Right - Slinkti dešinėn - - - - QTextControl - - &Undo - Atša&ukti - - - &Redo - Paka&rtoti - - - Cu&t - Iškirp&ti - - - &Copy - &Kopijuoti - - - Copy &Link Location - Kopijuoti &nuorodos adresą - - - &Paste - &Padėti - - - Delete - Ištrinti - - - Select All - Viską pažymėti - - - - QToolButton - - Press - Spausti - - - Open - Atverti - - - - QUdpSocket - - This platform does not support IPv6 - Cette plateforme ne supporte pas IPv6 - Ši platforma nepalaiko IPv6 - - - - QUndoGroup - - Undo - Atšaukti - - - Redo - Pakartoti - - - - QUndoModel - - <empty> - <tuščia> - - - - QUndoStack - - Undo - Atšaukti - - - Redo - Pakartoti - - - - QUnicodeControlCharacterMenu - - LRM Left-to-right mark - LRM žymė iš kairės į dešinę - - - RLM Right-to-left mark - RLM žymė iš dešinės į kairę - - - ZWJ Zero width joiner - ZWJ nulinio pločio jungtis - - - ZWNJ Zero width non-joiner - ZWNJ nulinio pločio nejungtis - - - ZWSP Zero width space - ZWSP nulinio pločio tarpas - - - LRE Start of left-to-right embedding - LRE „iš kairės į dešinę“ integruotas - - - RLE Start of right-to-left embedding - RLE „iš dešinės į kairę“ integruotas - - - LRO Start of left-to-right override - LRO „iš kairės į dešinę“ atšaukimas - - - RLO Start of right-to-left override - RLO „iš dešinės į kairę“ atšaukimas - - - PDF Pop directional formatting - PDF Pop kryptingas formatavimas - - - Insert Unicode control character - Įterpti unikodo valdymo simbolį - - - - QWebFrame - - Request cancelled - Atsisakyta užklausos - - - Request blocked - Requête bloquée - Užklausa užblokuota - - - Cannot show URL - Nepavyksta parodyti URL - - - Frame load interruped by policy change - Chargement de la frame interrompu par un changement de configuration - - - - Cannot show mimetype - Impossible d'afficher le mimetype - Negalima parodyti MIME tipo - - - File does not exist - Rinkmenos nėra - - - - QWebPage - - Bad HTTP request - Requête HTTP erronée - Bloga HTTP užklausa - - - Submit - default label for Submit buttons in forms on web pages - Pateikti - - - Submit - Submit (input element) alt text for <input> elements with no alt, title, or value - Pateikti - - - Reset - default label for Reset buttons in forms on web pages - Iš naujo - - - This is a searchable index. Enter search keywords: - text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' - Ceci est un index. Veuillez saisir les mots-clé : - - - - Choose File - title for file button used in HTML forms - Pasirinkti rinkmeną - - - No file selected - text to display in file button used in HTML forms when no file is selected - Rinkmena nepasirinkta - - - Open in New Window - Open in New Window context menu item - Atverti naujame lange - - - Save Link... - Download Linked File context menu item - Įrašyti nuorodą... - - - Copy Link - Copy Link context menu item - Kopijuoti nuorodą - - - Open Image - Open Image in New Window context menu item - Atverti paveikslėlį - - - Save Image - Download Image context menu item - Įrašyti paveikslėlį - - - Copy Image - Copy Link context menu item - Kopijuoti paveikslėlį - - - Open Frame - Open Frame in New Window context menu item - Atverti kadrą - - - Copy - Copy context menu item - Kopijuoti - - - Go Back - Back context menu item - Atgal - - - Go Forward - Forward context menu item - Toliau - - - Stop - Stop context menu item - Stabdyti - - - Reload - Reload context menu item - Įkelti iš naujo - - - Cut - Cut context menu item - Iškirpti - - - Paste - Paste context menu item - Padėti - - - No Guesses Found - No Guesses Found context menu item - Pas de candidat trouvés - - - - Ignore - Ignore Spelling context menu item - Nepaisyti - - - Add To Dictionary - Learn Spelling context menu item - Įtraukti į žodyną - - - Search The Web - Search The Web context menu item - Ieškoti žiniatinklyje - - - Look Up In Dictionary - Look Up in Dictionary context menu item - Ieškoti žodyne - - - Open Link - Open Link context menu item - Atverti nuorodą - - - Ignore - Ignore Grammar context menu item - Nepaisyti - - - Spelling - Spelling and Grammar context sub-menu item - Rašybos tikrinimas - - - Show Spelling and Grammar - menu item title - Rodyti rašybos ir gramatikos tikrinimą - - - Hide Spelling and Grammar - menu item title - Slėpti rašybos ir gramatikos tikrinimą - - - Check Spelling - Check spelling context menu item - Tikrinti rašybą - - - Check Spelling While Typing - Check spelling while typing context menu item - Rašybą tikrinti įvedimo metu - - - Check Grammar With Spelling - Check grammar with spelling context menu item - Tikrinant rašybą, tikrinti ir gramatiką - - - Fonts - Font context sub-menu item - Šriftai - - - Bold - Bold context menu item - Pusjuodis - - - Italic - Italic context menu item - Kursyvinis - - - Underline - Underline context menu item - Pabrauktas - - - Outline - Outline context menu item - Kontūras - - - Direction - Writing direction context sub-menu item - Kryptis - - - Default - Default writing direction context menu item - Numatyta - - - LTR - Left to Right context menu item - Iš kairės į dešinę - - - RTL - Right to Left context menu item - Iš dešinės į kairę - - - Inspect - Inspect Element context menu item - Inspecter - - - - No recent searches - Label for only item in menu that appears when clicking on the search field image, when no searches have been performed - Paieškų nebuvo - - - Recent searches - label for first item in the menu that appears when clicking on the search field image, used as embedded menu title - Paskiausios paieškos - - - Clear recent searches - menu item in Recent Searches menu that empties menu's contents - Išvalyti paskiausias paieškas - - - Unknown - Unknown filesize FTP directory listing item - Nežinoma - - - %1 (%2x%3 pixels) - Title string for images - %1 (%2x%3 tšk) - - - Web Inspector - %2 - Inspecteur Web - %2 - - - - - QWhatsThisAction - - What's This? - Kas tai? - - - - QWidget - - * - * - - - - QWizard - - Go Back - Atgal - - - Continue - Toliau - - - Commit - Įkelti - - - Done - Užbaigti - - - Quit - Baigti - - - Help - Pagalba - - - < &Back - < &Atgal - - - &Finish - &Užbaigti - - - Cancel - Atšaukti - - - &Help - &Pagalba - - - &Next - &Toliau - - - &Next > - &Toliau > - - - - QWorkspace - - &Restore - &Atstatyti - - - &Move - &Perkelti - - - &Size - &Keisti dydį - - - Mi&nimize - Su&mažinti - - - Ma&ximize - Iš&didinti - - - &Close - &Užverti - - - Stay on &Top - &Visada viršuje - - - Sh&ade - &Enrouler - - - - %1 - [%2] - %1 - [%2] - - - Minimize - Sumažinti - - - Restore Down - Restaurer en bas - - - - Close - Užverti - - - &Unshade - &Dérouler - - - - - QXml - - no error occurred - aucune erreur ne s'est produite - jokių klaidų - - - error triggered by consumer - erreur déclenchée par le consommateur - - - - unexpected end of file - fin de fichier impromptue - - - - more than one document type definition - plus d'une définition de type de document - - - - error occurred while parsing element - une erreur s'est produite lors de l'analyse d'un élément - - - - tag mismatch - balise débalancée - - - - error occurred while parsing content - une erreur s'est produise lors de l'analyse du contenu - - - - unexpected character - caractère impromptu - - - - invalid name for processing instruction - nom d'instruction de traitement invalide - - - - version expected while reading the XML declaration - version attendue dans la déclaration XML - - - - wrong value for standalone declaration - - - - encoding declaration or standalone declaration expected while reading the XML declaration - - - - standalone declaration expected while reading the XML declaration - - - - error occurred while parsing document type definition - une erreur s'est produite lors de l'analyse d'une définition de type de document - - - - letter is expected - lettre attendue - - - - error occurred while parsing comment - une erreur s'est produise lors de l'analyse d'un commentaire - - - - error occurred while parsing reference - une erreur s'est produite lors de l'analyse d'une référence - - - - internal general entity reference not allowed in DTD - appel d'entité interne générale non permis dans la DTD - - - - external parsed general entity reference not allowed in attribute value - appel d'entité externe parsée non permis dans la valeur d'un attribut - - - - external parsed general entity reference not allowed in DTD - appel d'entité externe parsée générale non permis dans la DTD - - - - unparsed entity reference in wrong context - appel d'entité non parsée dans un contexte invalide - - - - recursive entities - entités récursives - - - - error in the text declaration of an external entity - - - - - QXmlStream - - Extra content at end of document. - Conteny supplémentaire à la fin du document. - - - - Invalid entity value. - Valeur de l'entité invalide. - - - - Invalid XML character. - Caractère XML invalide. - - - - Sequence ']]>' not allowed in content. - Séquence ']]>' interdite dans le contenu. - - - - Namespace prefix '%1' not declared - Le préfixe de namespace '%1' non déclaré - - - - Attribute redefined. - Attribut redéfini. - - - - Unexpected character '%1' in public id literal. - Caractère '%1' inattendu dans un 'public id literal'. - - - - Invalid XML version string. - Version XML invalide. - - - - Unsupported XML version. - Version XML non supportée. - - - - %1 is an invalid encoding name. - %1 n'est pas un encodage valide. - - - - Encoding %1 is unsupported - Encodage %1 n'est pas supporté - - - - Standalone accepts only yes or no. - 'Standalone' n'accepte que 'yes' ou 'no'. - - - - Invalid attribute in XML declaration. - Attribut invalide dans la déclaration XML. - - - - Premature end of document. - Fin de document prématurée. - - - - Invalid document. - Document invalide. - - - - Expected - Attendu - - - - , but got ' - , mais eu ' - - - - Unexpected ' - Inattendu ' - - - - Expected character data. - Character data attendu. - - - - Recursive entity detected. - Entité recursive détectée. - - - - Start tag expected. - Balise ouvrante attendue. - - - - XML declaration not at start of document. - Déclaration XML après le début du document. - - - - NDATA in parameter entity declaration. - NDATA dans une déclaration d'entité paramètre. - - - - %1 is an invalid processing instruction name. - %1 est un nom d'instruction de traitement invalide. - - - - Invalid processing instruction name. - Nom d'instruction de traitement invalide. - - - - Illegal namespace declaration. - Déclaration de namespace illégale. - - - - Invalid XML name. - Nom XML invalide. - - - - Opening and ending tag mismatch. - Ouverture et fermeture de balise invalide. - - - - Reference to unparsed entity '%1'. - Référence vers une entité non analysée '%1'. - - - - Entity '%1' not declared. - Entité '%1' non déclarée. - - - - Reference to external entity '%1' in attribute value. - Référence vers une entité externe '%1' dans la valeur de l'attribut. - - - - Invalid character reference. - Référence vers un caractère invalide. - - - - Encountered incorrectly encoded content. - Encodage du contenu incorrect. - - - - The standalone pseudo attribute must appear after the encoding. - Le pseudo attribut standalone doit apparaître après l'encodage. - - - - %1 is an invalid PUBLIC identifier. - %1 n'est pas un identifiant PUBLIC valide. - - - - - QtXmlPatterns - - An %1-attribute with value %2 has already been declared. - Un attribute %1 avec la valeur %2 est déjà déclaré. - - - - An %1-attribute must have a valid %2 as value, which %3 isn't. - Un attribute %1 doit avoir un %2 valide, %3 ne l'a pas. - - - - Network timeout. - Tinklo ryšiui laikas baigėsi. - - - Element %1 can't be serialized because it appears outside the document element. - L'élément %1 ne peut pas être sérialisé parce qu'il est hors de l'élément document. - - - - Year %1 is invalid because it begins with %2. - L'année %1 est invalide parce qu'elle commence par %2. - - - - Day %1 is outside the range %2..%3. - Le jour %1 est hors de l'intervalle %2..%3. - - - - Month %1 is outside the range %2..%3. - Le mois %1 est hors de l'intervalle %2..%3. - - - - Overflow: Can't represent date %1. - Overflow: ne peut pas représenter la date %1. - - - - Day %1 is invalid for month %2. - Jour %1 est invalide pour le mois %2. - - - - Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; - L'heure 24:%1:%2.%3 est invalide. L'heure est 24 mais les minutes, seconndes et millisecondes ne sont pas à 0; - - - - Time %1:%2:%3.%4 is invalid. - L'heure %1:%2:%3.%4 est invalide. - - - - Overflow: Date can't be represented. - Overflow : la date ne peut pas être représentée. - - - - At least one component must be present. - Au moins un composant doit être présent. - - - - At least one time component must appear after the %1-delimiter. - Au moins un composant doit apparaître après le délimiteur %1. - - - - No operand in an integer division, %1, can be %2. - Pas d'opérande dans une division entière, %1, peut être %2. - - - - The first operand in an integer division, %1, cannot be infinity (%2). - Le premier opérande dans une division entière, %1, ne peut être infini (%2). - - - - The second operand in a division, %1, cannot be zero (%2). - Le second opérande dans une division, %1, ne peut être nul (%2). - - - - %1 is not a valid value of type %2. - %1 n'est pas une valeur valide du type %2. - - - - When casting to %1 from %2, the source value cannot be %3. - En castant de %2 vers %1, la valeur source ne peut pas être %3. - - - - Integer division (%1) by zero (%2) is undefined. - Division entière (%1) par zéro (%2) indéfinie. - - - - Division (%1) by zero (%2) is undefined. - Division (%1) par zéro (%2) indéfinie. - Dalyba (%1) iš nulio (%2) negalima. - - - Modulus division (%1) by zero (%2) is undefined. - Module division (%1) par zéro (%2) indéfinie. - - - - Dividing a value of type %1 by %2 (not-a-number) is not allowed. - Diviser une valeur du type %1 par %2 (not-a-number) est interdit. - - - - Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. - Diviser une valeur de type %1 par %2 ou %3 (plus ou moins zéro) est interdit. - - - - Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. - La multiplication d'une valeur du type %1 par %2 ou %3 (plus ou moins infini) est interdite. - - - - A value of type %1 cannot have an Effective Boolean Value. - Une valeur de type %1 ne peut pas avoir une Effective Boolean Value. - - - - Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. - Effective Boolean Value ne peut être calculée pour une séquence contenant deux ou plus valeurs atomiques. - - - - Value %1 of type %2 exceeds maximum (%3). - La valeur %1 de type %2 excède le maximum (%3). - - - - Value %1 of type %2 is below minimum (%3). - La valeur %1 de type %2 est inférieur au minimum (%3). - - - - A value of type %1 must contain an even number of digits. The value %2 does not. - Une valeur de type %1 doit contenir un nombre pair de chiffre. La valeur %2 n'est pas conforme. - - - - %1 is not valid as a value of type %2. - %1 n'est pas une valeur valide de type %2. - - - - Operator %1 cannot be used on type %2. - L'opérateur %1 ne peut pas être utilisé pour le type %2. - - - - Operator %1 cannot be used on atomic values of type %2 and %3. - L'opérateur %1 ne peut pas être utilisé pour des valeurs atomiques de type %2 ou %3. - - - - The namespace URI in the name for a computed attribute cannot be %1. - L'URI de namespace dans le nom d'un attribut calculé ne peut pas être %1. - - - - The name for a computed attribute cannot have the namespace URI %1 with the local name %2. - Le nom d'un attribut calculé ne peut pas avoir l'URI de namespace %1 avec le nom local %2. - - - - Type error in cast, expected %1, received %2. - Erreur de type lors du cast, attendu %1 mais reçu %2. - - - - When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. - En castant vers %1 ou des types dérivés, la valeur source doit être du même type ou une chaîne. Le type %2 n'est pas autorisé. - - - - No casting is possible with %1 as the target type. - Aucun cast n'est possible avec %1 comme type de destination. - - - - It is not possible to cast from %1 to %2. - Il est impossible de caster de %1 en %2. - - - - Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. - Caster vers %1 est impossible parce que c'est un type abstrait qui ne peut donc être instancié. - - - - It's not possible to cast the value %1 of type %2 to %3 - I lest impossible de caster la valeur %1 de type %2 en %3 - - - - Failure when casting from %1 to %2: %3 - Echec en castant de %1 ver %2 : %3 - - - - A comment cannot contain %1 - Un commentaire ne peut pas contenir %1 - - - - A comment cannot end with a %1. - Un commentaire ne peut pas finir par %1. - - - - No comparisons can be done involving the type %1. - Aucune comparaison ne peut être faite avec le type %1. - - - - Operator %1 is not available between atomic values of type %2 and %3. - L'opérateur %1 n'est pas disponible entre valeurs atomiques de type %2 et %3. - - - - An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. - Un noeuds attribut ne peut être un fils d'un noeuds document. C'est pourquoi l'attribut %1 est mal placé. - - - - A library module cannot be evaluated directly. It must be imported from a main module. - Un module de bibliothèque ne peut pas être évalué directement. Il doit être importé d'un module principal. - - - - A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. - Une valeur de type %1 ne peut être un prédicat. Un prédicat doit être de type numérique ou un Effective Boolean Value. - - - - A positional predicate must evaluate to a single numeric value. - Un prédicat de position doit être évalué en une unique valeur numérique. - - - - The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. - Le nom de destination dans une instruction de traitement ne peut être %1. %2 est invalide. - - - - %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. - %1 n'est pas un nom de destination valide dans une instruction de traitement. Ce doit être une valeur %2, par ex. %3. - - - - The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. - La dernière étape dans un chemin doit contenir soit des noeuds soit des valeurs atomiques. Cela ne peut pas être un mélange des deux. - - - - The data of a processing instruction cannot contain the string %1 - Les données d'une instruction de traitement ne peut contenir la chaîne %1 - - - - No namespace binding exists for the prefix %1 - Aucun lien de namespace n'existe pour le préfixe %1 - - - - No namespace binding exists for the prefix %1 in %2 - Aucun lien de namespace n'existe pour le préfixe %1 dans %2 - - - - %1 is an invalid %2 - %1 est un ivalide %2 - - - - %1 takes at most %n argument(s). %2 is therefore invalid. - %1 prend au maximum %n argument. %2 est donc invalide. - - - - - - %1 requires at least %n argument(s). %2 is therefore invalid. - %1 requiert au moins %n argument. %2 est donc invalide. - - - - - - The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. - Le premier argument de %1 ne peut être du type %2. Il doit être de type numérique, xs:yearMonthDuration ou xs:dayTimeDuration. - - - - The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - Le premier argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5. - - - - The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - Le deuxième argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5. - - - - %1 is not a valid XML 1.0 character. - %1 n'est pas un caractère XML 1.0 valide. - - - - The first argument to %1 cannot be of type %2. - Le premier argument de %1 ne peut être du type %2. - - - - If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. - Si les deux valeurs ont des décalages de zone, elle doivent avoir le même. %1 et %2 sont différents. - - - - %1 was called. - %1 a été appelé. - - - - %1 must be followed by %2 or %3, not at the end of the replacement string. - %1 doit être suivi par %2 ou %3, et non à la fin de la chaîne de remplacement. - - - - In the replacement string, %1 must be followed by at least one digit when not escaped. - Dans la chaîne de remplacement, %1 doit être suivi par au moins un chiffre s'il n'est pas échappé. - - - - In the replacement string, %1 can only be used to escape itself or %2, not %3 - Dans la chaîne de remplacement, %1 peut seulement être utilisé pour échapper lui-même ou %2 mais pas %3 - - - - %1 matches newline characters - %1 correspond à des caractères de saut de ligne - - - - %1 and %2 match the start and end of a line. - %1 et %2 correspondent au début et à la fin d'une ligne. - - - - Matches are case insensitive - Atitikmenys nepaiso raidžių dydžio - - - Whitespace characters are removed, except when they appear in character classes - Les blancs sont supprimés excepté quand ils apparaissent dans les classes de caractère - - - - %1 is an invalid regular expression pattern: %2 - %1 est un modèle d'expression régulière invalide: %2 - - - - %1 is an invalid flag for regular expressions. Valid flags are: - %1 est un flag invalide pour des expressions régulières. Les flags valides sont : - - - - If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. - Si le premier argument est une sequence vide ou un chaîne vide (sans namespace), un préfixe ne peut être spécifié. Le préfixe %1 a été spécifié. - - - - It will not be possible to retrieve %1. - Il sera impossible de récupérer %1. - - - - The root node of the second argument to function %1 must be a document node. %2 is not a document node. - Le noeuds racine du deuxième argument à la fonction %1 doit être un noeuds document. %2 n'est pas un document. - - - - The default collection is undefined - I'l n'y a pas de collection par défaut - - - - %1 cannot be retrieved - Nepavyksta gauti %1 - - - The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). - Le forme de normalisation %1 n'est pas supportée. Les formes supportées sont %2, %3, %4 et %5, et aucun, ie. une chaîne vide (pas de normalisation). - - - - A zone offset must be in the range %1..%2 inclusive. %3 is out of range. - - - - %1 is not a whole number of minutes. - - - - Required cardinality is %1; got cardinality %2. - La cardinalité requise est %1; reçu %2. - - - - The item %1 did not match the required type %2. - L'item %1 ne correspond pas au type requis %2. - - - - %1 is an unknown schema type. - %1 est un type de schema inconnu. - - - - Only one %1 declaration can occur in the query prolog. - Seulement une déclaration %1 peut intervenir lors du prologue de la requête. - - - - The initialization of variable %1 depends on itself - L'initialisation de la variable %1 dépend d'elle-même - - - - No variable by name %1 exists - Aucun variable nommée %1 existe - - - - The variable %1 is unused - Kintamasis %1 nenaudojamas - - - Version %1 is not supported. The supported XQuery version is 1.0. - Versija %1nepalaikoma. Palaikoma XQuery versija yra 1.0. - - - The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. - L'encodage %1 est invalide. Il doit contenir uniquement des caractères latins, sans blanc et doit être conforme à l'expression régulière %2. - - - - No function with signature %1 is available - Aucune fonction avec la signature %1 n'est disponible - - - - A default namespace declaration must occur before function, variable, and option declarations. - Un déclaration de namespace par défaut doit être placée avant toute fonction, variable ou declaration d'option. - - - - Namespace declarations must occur before function, variable, and option declarations. - Les declarations de namespace doivent être placées avant tout fonction, variable ou déclaration d'option. - - - - Module imports must occur before function, variable, and option declarations. - Les imports de module doivent être placés avant tout fonction, variable ou déclaration d'option. - - - - It is not possible to redeclare prefix %1. - Il est impossible de redéclarer le préfixe %1. - - - - Only the prefix %1 can be declared to bind the namespace %2. By default, it is already bound to the prefix %1. - Seul le préfixe %1 peut être déclaré pour lié le namespace %2. Par défaut, il est déjà lié au préfixe %1. - - - - Prefix %1 is already declared in the prolog. - Le préfixe %1 est déjà déclaré dans le prologue. - - - - The name of an option must have a prefix. There is no default namespace for options. - Le nom d'une option doit avoir un préfixe. Il n'y a pas de namespace par défaut pour les options. - - - - The Schema Import feature is not supported, and therefore %1 declarations cannot occur. - La fonctionnalité "Schema Import" n'est pas supportée et les déclarations %1 ne peuvent donc intervenir. - - - - The target namespace of a %1 cannot be empty. - Le namespace cible d'un %1 ne peut être vide. - - - - The module import feature is not supported - La fonctionnalité "module import" n'est pas supportée - - - - A variable by name %1 has already been declared in the prolog. - Une variable du nom %1 a déjà été déclarée dans le prologue. - - - - No value is available for the external variable by name %1. - Aucune valeur n'est disponible pour la variable externe %1. - - - - The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. - Le namespace %1 est réservé; c'est pourquoi les fonctions définies par l'utilisateur ne peuvent l'utiliser. Essayez le préfixe prédéfini %2 qui existe pour ces cas. - - - - The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 - Le namespace d'une fonction utilisateur dans un module de bibliothèque doit être équivalent au namespace du module. En d'autres mots, il devrait être %1 au lieu de %2 - - - - A function already exists with the signature %1. - Une fonction avec la signature %1 existe déjà. - - - - No external functions are supported. All supported functions can be used directly, without first declaring them as external - Les fonctions externes ne sont pas supportées. Toutes les fonctions supportées peuvent êter utilisées directement sans les déclarer préalablement comme externes - - - - An argument by name %1 has already been declared. Every argument name must be unique. - Un argument nommé %1 a déjà été déclaré. Chaque nom d'argument doit être unique. - - - - The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. - Le nom d'une variable liée dans un expression for doit être different de la variable positionnelle. Les deux variables appelées %1 sont en conflit. - - - - The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. - La fonctionnalité "Schema Validation" n'est pas supportée. Les expressions %1 ne seront pas utilisées. - - - - None of the pragma expressions are supported. Therefore, a fallback expression must be present - Aucune des expressions pragma n'est supportée. Une expression par défault doit être présente - - - - The %1-axis is unsupported in XQuery - L'axe %1 n'est pas supporté dans XQuery - - - - %1 is not a valid numeric literal. - %1 n'est pas une valeur numérique valide. - - - - No function by name %1 is available. - La fonction %1 n'est pas disponible. - - - - The namespace URI cannot be the empty string when binding to a prefix, %1. - L'URI de namespace ne peut être une chaîne vide quand on le lie à un préfixe, %1. - - - - %1 is an invalid namespace URI. - %1 est un URI de namespace invalide. - - - - It is not possible to bind to the prefix %1 - Il est impossible de se lier au préfixe %1 - - - - Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). - Le namespace %1 peut seulement être lié à %2 (et doit être pré-déclaré). - - - - Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). - Le préfixe %1 peut seulement être lié à %2 (et doit être prédéclaré). - - - - Two namespace declaration attributes have the same name: %1. - Deux attributs de déclarations de namespace ont le même nom : %1. - - - - The namespace URI must be a constant and cannot use enclosed expressions. - L'URI de namespace doit être une constante et ne peut contenir d'expressions. - - - - An attribute by name %1 has already appeared on this element. - Un attribute nommé %1 existe déjà pour cet élément. - - - - A direct element constructor is not well-formed. %1 is ended with %2. - Un constructeur direct d'élément est mal-formé. %1 est terminé par %2. - - - - The name %1 does not refer to any schema type. - Le nom %1 ne se réfère à aucun type de schema. - - - - %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. - %1 est une type complexe. Caster vers des types complexes n'est pas possible. Cependant, caster vers des types atomiques comme %2 marche. - - - - %1 is not an atomic type. Casting is only possible to atomic types. - %1 n'est pas un type atomique. Il est uniquement possible de caster vers des types atomiques. - - - - %1 is not a valid name for a processing-instruction. Therefore this name test will never match. - %1 n'est pas un nom valide pour une instruction de traitement. C'est pourquoi ce test de nom ne réussira jamais. - - - - %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. - %1 n'est pas dans les déclaration d'attribut in-scope. La fonctionnalité d'inport de schéma n'est pas supportée. - - - - The name of an extension expression must be in a namespace. - Le nom d'une expression d'extension doit être dans un namespace. - - - - empty - vide - tuščia - - - zero or one - zéro ou un - nulis arba vienas - - - exactly one - exactement un - tik vienas - - - one or more - vienas arba daugiau - - - zero or more - nulis arba daugiau - - - Required type is %1, but %2 was found. - Le type requis est %1, mais %2 a été reçu. - - - - Promoting %1 to %2 may cause loss of precision. - La Promotion de %1 vers %2 peut causer un perte de précision. - - - - The focus is undefined. - Le focus est indéfini. - - - - It's not possible to add attributes after any other kind of node. - Il est impossible d'ajouter des attributs après un autre type de noeuds. - - - - An attribute by name %1 has already been created. - Un attribute de nom %1 a déjà été créé. - - - - Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. - - - - Attribute %1 can't be serialized because it appears at the top level. - L'attribut %1 ne peut pas être sérialisé car il apparaît à la racine. - - - - The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) - - - - - VolumeSlider - - Muted - Nutildyta - - - Volume: %1% - Garsumas: %1% - - - - WebCore::PlatformScrollbar - - Scroll here - Slikti iki čia - - - Left edge - Kairysis kraštas - - - Top - Viršus - - - Right edge - Dešinysis kraštas - - - Bottom - Apačia - - - Page left - Puslapis kairėje - - - Page up - Puslapis viršuje - - - Page right - Puslapis dešinėje - - - Page down - Puslapis apačioje - - - Scroll left - Slinkti kairėn - - - Scroll up - Slikti auktyn - - - Scroll right - Slinkti dešinėn - - - Scroll down - Slinkti žemyn - - - diff --git a/locale/qtwebengine_zh_CN.ts b/locale/qtwebengine_zh_CN.ts deleted file mode 100644 index dd149bd5..00000000 --- a/locale/qtwebengine_zh_CN.ts +++ /dev/null @@ -1,467 +0,0 @@ - - - - - DownloadInterruptReason - - Unknown reason or not interrupted - 未知原因或非中断 - - - General file operation failure - 文件操作失败 - - - The file cannot be written locally, due to access restrictions - 由于访问限制,该文件无法在本地写入 - - - Insufficient space on the target drive - 目标驱动器上的空间不足 - - - The directory or file name is too long - 目录或文件名太长 - - - The file size exceeds the file system limitation - 文件大小超过文件系统限制 - - - The file is infected with a virus - 该文件感染了病毒 - - - Temporary problem (for example file in use, or too many open files) - 临时问题(例如文件正在使用或打开的文件太多) - - - The file was blocked due to local policy - 由于本地政策,该文件被阻止 - - - Checking the safety of the download failed due to unexpected reasons - 由于意外原因,检查下载的安全性失败 - - - File seek past the end of a file (resuming previously interrupted download) - 文件搜索超过文件末尾(恢复先前中断的下载) - - - The partial file did not match the expected hash - 部分文件与预期的哈希不匹配 - - - General network failure - 一般网络故障 - - - The network operation has timed out - 网络操作超时 - - - The network connection has been terminated - 网络连接已终止 - - - The server has gone down - 服务器宕机了 - - - The network request was invalid (for example, the URL or scheme is invalid) - 网络请求无效(例如,URL或scheme无效) - - - General server failure - 一般服务器故障 - - - The server does not have the requested data - 服务器没有请求的数据 - - - The server did not authorize access to the resource - 服务器未授权访问资源 - - - A problem with the server certificate occurred - 服务器证书出现问题 - - - Access forbidden by the server - 服务器禁止访问 - - - Unexpected server response - 意外的服务器响应 - - - Download canceled by the user - 下载被用户取消 - - - - QQuickPdfDocument - - no error - 无错误 - - - data not yet available - 数据不可用 - - - file not found - 文件未找到 - - - invalid file format - 无效文件格式 - - - incorrect password - 密码错误 - - - unsupported security scheme - 不支持的安全方案 - - - unknown error - 未知错误 - - - - QQuickWebEngineView - - Stop - 停止 - - - Reload and Bypass Cache - 重新加载和绕过缓存 - - - Open link in this window - 在当前窗口中打开链接 - - - Toggle Play/Pause - 播放/暂停 - - - Toggle Mute - 静音 - - - Close Page - 关闭页面 - - - Unselect - 取消选择 - - - &Bold - 加粗(&B) - - - &Italic - 斜体(&I) - - - &Underline - 下划线(&U) - - - &Strikethrough - 删除线(&S) - - - Align &Left - 左对齐(&L) - - - Align &Center - 居中(&C) - - - Align &Right - 右对齐(&R) - - - Align &Justified - 对齐(&J) - - - &Indent - 缩进(&I) - - - &Outdent - 突出(&O) - - - Insert &Ordered List - 插入有序列表(&O) - - - Insert &Unordered List - 插入无序列表(&U) - - - - QWebEnginePage - - Stop - 停止 - - - Reload and Bypass Cache - 重新加载和绕过缓存 - - - Toggle Play/Pause - 播放/暂停 - - - Toggle Mute - 静音 - - - Close Page - 关闭页面 - - - Unselect - 取消选择 - - - Are you sure you want to leave this page? Changes that you made may not be saved. - 您确定要离开此页面吗? 您所做的更改不会被保存。 - - - Open link in this window - 在当前窗口中打开链接 - - - Open link in new background tab - 在新的后台选项卡中打开链接 - - - &Bold - 加粗(&B) - - - &Italic - 斜体(&I) - - - &Underline - 下划线(&U) - - - &Strikethrough - 删除线(&S) - - - Align &Left - 左对齐(&L) - - - Align &Center - 居中(&C) - - - Align &Right - 右对齐(&R) - - - Align &Justified - 对齐(&J) - - - &Indent - 缩进(&I) - - - &Outdent - 突出(&O) - - - Insert &Ordered List - 插入有序列表(&O) - - - Insert &Unordered List - 插入无序列表(&U) - - - Select folder to upload - 选择要上传的文件夹 - - - - QtWebEnginePlugin - - Cannot create separate instance of WebEngineNewViewRequest - 无法创建 WebEngineNewViewRequest 的单独实例 - - - Cannot create separate instance of %1 - 无法创建 %1 的单独实例 - - - - QtWebEngineTestSupportPlugin - - Cannot create a separate instance of WebEngineErrorPage - 无法创建 WebEngineErrorPage 的单独实例 - - - Cannot create a separate instance of WebEngineTestEvent - 无法创建单独的 WebEngineTestEvent 实例 - - - - RenderViewContextMenuQt - - Back - 后退 - - - Forward - 前进 - - - Reload - 重载 - - - Cut - 剪切 - - - Copy - 复制 - - - Paste - 粘贴 - - - Undo - 撤销 - - - Redo - 恢复 - - - Select all - 全选 - - - Paste and match style - 粘贴并匹配样式 - - - Open link in new window - 在新窗口中打开链接 - - - Open link in new tab - 在新页签中打开链接 - - - Copy link address - 复制链接地址 - - - Save link - 保存链接 - - - Copy image - 复制图片 - - - Copy image address - 复制图片地址 - - - Save image - 保存图片 - - - Copy media address - 复制媒体链接 - - - Show controls - 显示控制 - - - Loop - 循环 - - - Save media - 保存媒体 - - - Inspect - 审核 - - - Exit full screen - 退出全屏 - - - Save page - 保存页面 - - - View page source - 查看页面源代码 - - - - UIDelegatesManager - - Javascript Alert - %1 - Javascript-警告 - %1 - - - Javascript Confirm - %1 - Javascript-确认 - %1 - - - Javascript Prompt - %1 - Javascript-提醒 - %1 - - - Are you sure you want to leave this page? - 您确定要离开当前页面吗? - - - Changes that you made may not be saved. - 您所做的更改不会被保存。 - - - Connect to proxy "%1" using: - 使用以下命令连接到代理“%1”: - - - Enter username and password for "%1" at %2://%3 - 在 %2://%3 输入“%1”的用户名和密码 - - - - WebContentsAdapter - - HTTP-POST data can only be sent over HTTP(S) protocol - HTTP-POST 数据只能通过 HTTP(S) 协议发送 - - - diff --git a/locale/qu_PE.ts b/locale/qu_PE.ts index add79637..b50394c1 100644 --- a/locale/qu_PE.ts +++ b/locale/qu_PE.ts @@ -596,10 +596,6 @@ chiqan kayninta sumaqyachin) DictInfo - - Edit dictionary - Diccionariota allichay - Open index folder Indice nisqa qillqana mayt’uta kichay @@ -652,12 +648,6 @@ chiqan kayninta sumaqyachin) Full-text search disabled Tukuy qillqasqa maskay mana llamk'achisqa - - Edit the dictionary via command: -%1 - Diccionariota kamachiywan allichay: -%1 - DictListModel @@ -750,10 +740,6 @@ chiqan kayninta sumaqyachin) Open dictionary folder Diccionario nisqa qillqana mayt’uta kichay - - Edit dictionary - Diccionariota allichay - EditDictionaries @@ -2428,10 +2414,6 @@ chiqan kayninta sumaqyachin) Show Names in Dictionary &Bar Sutikunata Diccionariopi rikuchiy &Bar - - Show Small Icons in &Toolbars - &Toolbars nisqapi Huch'uy Iconokunata rikuchiy - &Menubar &Menubar nisqa @@ -2448,10 +2430,6 @@ chiqan kayninta sumaqyachin) Forward Qhipa - - Enable Scanning - Escáner nisqa ruway atichiy - Pronounce Word (Alt+S) Simita parlachiy (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Kunan kaq tablata Favoritos nisqamanta hurquy - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Fallo de inicializar monitoreo de teclas de acceso rápido.<br>Asegúrese que su XServer tiene activada la extensión RECORD. @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Diccionario nisqa qillqana mayt’uta kichay - - Edit dictionary - Diccionariota allichay - Now indexing for full-text search: Kunanqa hunt'asqa qillqa maskanapaq index nisqapi: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? ¿Munasqakunamanta "%1" umalliq simita hurquy? + + Show &Small Icons in Toolbars + &Uchuy Iconokuna Llamkanakuna Barras nisqapi rikuchiy + + + Show &Large Icons in Toolbars + &Hatun Iconokuna Llamkanakuna Barras nisqapi rikuchiy + + + Show &Normal Icons in Toolbars + &Normal Iconos nisqakunata rikuchiy Barras de herramientas nisqapi + + + Toggle clipboard monitoring + Portapapeles nisqa qhawayta tikray + Mdx::MdxArticleRequest @@ -3054,16 +3040,6 @@ cerrar la aplicación. &Popup &Juch'uy qhawanapi mask'ay - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Selecciona si el modo de escaneo está activado por defecto o no. Si está -marcado, el programa siempre iniciará con el modo de escaneo habilitado. - - - Start with popup turned on - Qallarinapaq escaneo popup llank’achisqawan - Send translated word to main window instead of to show it in popup window T'ikrasqa simita hatun ventanata apachiy, popup ventanata qhawachinamantaqa @@ -3178,10 +3154,6 @@ seleccionadas estén oprimidas cuando la selección de la palabra cambie.Auto-pronounce words in main window Qhapaq qhawanapi kunanpacha simikunata parlachiy - - Auto-pronounce words in popup - Juch'uy qhawanapi kunanpacha simikunata parlachiy - Playback Takichina @@ -3570,6 +3542,18 @@ kaqninta Stardict, Babylon chaymanta GLS simi pirwakunamanta Restart needed Wakmanta qallariy necesitakun + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Akllan sichus portapapeles qhawayqa ñawpaqmanta llamk'achisqa kanqa programa's qallariypi. + + + Start with clipboard monitoring turned on + Qallarina portapapeles qhawayta llank’achisqawan + + + Auto-pronounce words in the popup + Chay popup nisqapi simikunata kikillanmanta t’oqyachiy + ProgramTypeEditor @@ -3810,10 +3794,6 @@ kaqninta Stardict, Babylon chaymanta GLS simi pirwakunamanta could be resized or managed in other ways. Utilice esto para fijar la ventana en la pantalla, redimensionarla o gerenciarla en otra manera. - - %1 - GoldenDict-ng - %1 - QuriDict-ng - WARNING: %1 YUYAYCHAY: %1 diff --git a/locale/ru_RU.ts b/locale/ru_RU.ts index eceaac6a..ad654a44 100644 --- a/locale/ru_RU.ts +++ b/locale/ru_RU.ts @@ -598,10 +598,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Редактировать словарь - Open index folder Открыть индексную папку @@ -654,11 +650,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Полнотекстовый поиск отключен - - Edit the dictionary via command: -%1 - Редактировать словарь, команда: %1 - DictListModel @@ -751,10 +742,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Открыть папку словаря - - Edit dictionary - Редактировать словарь - EditDictionaries @@ -2429,10 +2416,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar По&казывать названия в панели словарей - - Show Small Icons in &Toolbars - &Маленькие значки в панели инструментов - &Menubar &Главное меню @@ -2449,10 +2432,6 @@ between classic and school orthography in cyrillic) Forward Вперёд - - Enable Scanning - Включить сканирование - Pronounce Word (Alt+S) Произнести слово (Alt+S) @@ -2547,10 +2526,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Удалить текущую вкладку из Избранного - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Ошибка инициализации механизма отслеживания горячих клавиш.<br>Убедитесь, что ваш XServer поддерживает расширение RECORD. @@ -2704,10 +2679,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Открыть папку словаря - - Edit dictionary - Редактировать словарь - Now indexing for full-text search: Индексируется для полнотекстового поиска: @@ -2716,6 +2687,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Удалить заголовок "%1" из Избранного? + + Show &Small Icons in Toolbars + Показывать &мелкие значки на панелях инструментов + + + Show &Large Icons in Toolbars + Показывать &крупные значки на панелях инструментов + + + Show &Normal Icons in Toolbars + Показывать обычные значки на панелях инструментов + + + Toggle clipboard monitoring + Включить мониторинг буфера обмена + Mdx::MdxArticleRequest @@ -3060,15 +3047,6 @@ the application. &Popup &Всплывающее окно - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Включать или нет режим всплывающего окна при запуске программы. - - - Start with popup turned on - Включить режим всплывающего окна при запуске - Send translated word to main window instead of to show it in popup window Отправлять переводимое слово в главное окно программы вместо перевода его во всплывающем окне @@ -3183,10 +3161,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Автоматически произносить слова в главном окне - - Auto-pronounce words in popup - Автоматически произносить слова во всплывающем окне - Playback Воспроизведение @@ -3579,6 +3553,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Требуется перезагрузка + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Выбирает, будет ли мониторинг буфера обмена включен по умолчанию при запуске программы'. + + + Start with clipboard monitoring turned on + Начните с включенного мониторинга буфера обмена + + + Auto-pronounce words in the popup + Автоматическое произнесение слов во всплывающем окне + ProgramTypeEditor @@ -3820,10 +3806,6 @@ could be resized or managed in other ways. Нажмите, чтобы закрепить окно на экране, изменить его размер или какие-либо другие свойства. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ВНИМАНИЕ: %1 diff --git a/locale/sk_SK.ts b/locale/sk_SK.ts index 0f89527e..6235ea1c 100644 --- a/locale/sk_SK.ts +++ b/locale/sk_SK.ts @@ -596,10 +596,6 @@ medzi klasickou a školskou ortografiou v azbuke) DictInfo - - Edit dictionary - Upraviť slovník - Open index folder Otvorte indexový priečinok @@ -652,12 +648,6 @@ medzi klasickou a školskou ortografiou v azbuke) Full-text search disabled Fulltextové vyhľadávanie je zakázané - - Edit the dictionary via command: -%1 - Upraviť slovník cez príkaz: -%1 - DictListModel @@ -750,10 +740,6 @@ medzi klasickou a školskou ortografiou v azbuke) Open dictionary folder Otvoriť slovníkový priečinok - - Edit dictionary - Upraviť slovník - EditDictionaries @@ -2428,10 +2414,6 @@ medzi klasickou a školskou ortografiou v azbuke) Show Names in Dictionary &Bar Zobraziť názvy v &paneli slovníka - - Show Small Icons in &Toolbars - Zobraziť malé ikony v paneli nás&trojov - &Menubar Panel s p&onukou @@ -2448,10 +2430,6 @@ medzi klasickou a školskou ortografiou v azbuke) Forward Vpred - - Enable Scanning - Povoliť skenovanie - Pronounce Word (Alt+S) Vysloviť slovo (Alt + S) @@ -2546,10 +2524,6 @@ Pre vyhľadanie znakov '*', '?', '[', ']&apos Remove current tab from Favorites Odstrániť aktuálnu kartu z Obľúbených - - %1 - %2 - %1 : %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Nepodarilo sa inicializovať monitorovací mechanizmus klávesových skratiek.<br> Uistite sa, že X server má zapnuté rozšírenie RECORD. @@ -2703,10 +2677,6 @@ Pre vyhľadanie znakov '*', '?', '[', ']&apos Open dictionary folder Otvoriť slovníkový priečinok - - Edit dictionary - Upraviť slovník - Now indexing for full-text search: Prebieha indexovanie pre fulltextové vyhľadávanie: @@ -2715,6 +2685,22 @@ Pre vyhľadanie znakov '*', '?', '[', ']&apos Remove headword "%1" from Favorites? Odstrániť heslové slovo "%1" z Obľúbených? + + Show &Small Icons in Toolbars + Zobraziť &malé ikony na paneloch s nástrojmi + + + Show &Large Icons in Toolbars + Zobraziť &veľké ikony na paneloch s nástrojmi + + + Show &Normal Icons in Toolbars + Zobraziť &normálne ikony na paneloch s nástrojmi + + + Toggle clipboard monitoring + Prepnúť monitorovanie schránky + Mdx::MdxArticleRequest @@ -3052,16 +3038,6 @@ skryje program namiesto jeho ukončenia. &Popup Vys&kakovacie okno - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Určuje, či vyskakovacie okno je automaticky povolené, alebo zakázané. Pokiaľ je zaškrtnuté, -program sa bude spúšťať s automaticky aktivovaným vyskakovacím oknom. - - - Start with popup turned on - Spustiť s povoleným vyskakovacím oknom - Send translated word to main window instead of to show it in popup window Odoslať preložené slovo do hlavného okna namiesto jeho zobrazenia vo vyskakovacom okne @@ -3175,10 +3151,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Automaticky vysloviť slová v hlavnom okne - - Auto-pronounce words in popup - Automaticky vysloviť slová vo vyskakovacom okne - Playback Prehrávanie @@ -3567,6 +3539,18 @@ zo slovníkov Stardict, Babylon a GLS. Restart needed Je potrebný reštart + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Určuje, či bude pri spustení programu'štandardne zapnuté sledovanie schránky. + + + Start with clipboard monitoring turned on + Začnite so zapnutým monitorovaním schránky + + + Auto-pronounce words in the popup + Automaticky vyslovovať slová vo vyskakovacom okne + ProgramTypeEditor @@ -3808,10 +3792,6 @@ could be resized or managed in other ways. Pomocou tohto môžete prišpendliť okno tak, že zostane na obrazovke, môžete mu zmeniť veľkosť alebo ho inak spravovať. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 UPOZORNENIE: %1 diff --git a/locale/sq_AL.ts b/locale/sq_AL.ts index 52b21ee6..7837cfb2 100644 --- a/locale/sq_AL.ts +++ b/locale/sq_AL.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Editoj fjalorin - Open index folder Hapni dosjen e indeksit @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Kërkimi në tekst të plotë është çaktivizuar - - Edit the dictionary via command: -%1 - Editoj fjalorin me komandën: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Hap dosjen e fjalorit - - Edit dictionary - Editoj fjalorin - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Tregoj emrat e &fjalorëve - - Show Small Icons in &Toolbars - Tregoj ikonat e &vogla - &Menubar Brezi i &menysë @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward Para - - Enable Scanning - Aktivizo Skanimin - Pronounce Word (Alt+S) Shqiptoj fjalën (Alt+S) @@ -2545,10 +2523,6 @@ Për të gjetur '*', '?', '[', ']' simbo Remove current tab from Favorites Hiq skedën aktuale nga Të preferuarat - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Dështoi nisja e mekanizmit monitorues të tasteve kryesore.<br>Sigurohuni që XServer e ka të ndezur zgjatimin RECORD. @@ -2701,10 +2675,6 @@ Për të gjetur '*', '?', '[', ']' simbo Open dictionary folder Hap dosjen e fjalorit - - Edit dictionary - Editoj fjalorin - Now indexing for full-text search: Tani indeksoni për kërkimin e tekstit të plotë: @@ -2713,6 +2683,22 @@ Për të gjetur '*', '?', '[', ']' simbo Remove headword "%1" from Favorites? Të hiqet kryefjala "%1" nga Të preferuarat? + + Show &Small Icons in Toolbars + Shfaq ikonat e &të vogla në shiritat e veglave + + + Show &Large Icons in Toolbars + Shfaq ikona &të mëdha në shiritat e veglave + + + Show &Normal Icons in Toolbars + Shfaq ikonat &Normale në shiritat e veglave + + + Toggle clipboard monitoring + Ndrysho monitorimin e kujtesës së fragmenteve + Mdx::MdxArticleRequest @@ -3050,16 +3036,6 @@ the application. &Popup &Skanimi i jashtëm - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Zgjedh nëse mënyra standarde e skanimit të jashtëm është ndezur apo jo. -Kur e zgjedh, programi nis gjithmonë me skanimin e jashtëm aktiv. - - - Start with popup turned on - Nis me skanuesin e ndezur - Send translated word to main window instead of to show it in popup window Dërgon fjalën e përkthyer te dritarja kryesore, jo te dritarja kërcyese @@ -3174,10 +3150,6 @@ janë në gjendjen e shtypur. Auto-pronounce words in main window Autoshqiptoj fjalët në dritaren kryesore - - Auto-pronounce words in popup - Autoshqiptoj fjalët e skanuara - Playback Riprodhimi @@ -3566,6 +3538,18 @@ nga fjalorët Stardict, Babylon dhe GLS Restart needed Nevojitet rinisja + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Zgjedh nëse monitorimi i kujtesës së fragmenteve do të aktivizohet si parazgjedhje në nisjen e programit'. + + + Start with clipboard monitoring turned on + Filloni me monitorimin e kujtesës së fragmenteve të aktivizuar + + + Auto-pronounce words in the popup + Shqiptoni automatikisht fjalët në dritaren kërcyese + ProgramTypeEditor @@ -3807,10 +3791,6 @@ could be resized or managed in other ways. Këtë e përdor për të piketuar dritaren që të qëndrojë mbi ekran, që të marrë një përmasë të re ose për mënyrat e tjera. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 PARALAJMËRIM: %1 diff --git a/locale/sr_SP.ts b/locale/sr_SP.ts index 68f15e98..4459f780 100644 --- a/locale/sr_SP.ts +++ b/locale/sr_SP.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Уреди речник - Open index folder Отворите фасциклу индекса @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Претрага целог текста је онемогућена - - Edit the dictionary via command: -%1 - Уреди речник преко командне: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Отвори фасциклу речника - - Edit dictionary - Уреди речник - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Прикажи називе у картици &речника - - Show Small Icons in &Toolbars - Прикажи малу икону у &алатној траци - &Menubar Главни мени @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward Напред - - Enable Scanning - Омогући скенирање - Pronounce Word (Alt+S) Изговори реч (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Уклони тренутну картицу из омиљених - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Није успело да покрене механизам надгледања пречица.<br>Проверите да ли ваш XServer подржава проширење RECORD. @@ -2703,10 +2677,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Отвори фасциклу речника - - Edit dictionary - Уреди речник - Now indexing for full-text search: Сада се индексира за претрагу целог текста: @@ -2715,6 +2685,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Уклонити насловну реч "%1" из омиљених? + + Show &Small Icons in Toolbars + Прикажи &мале иконе на тракама са алаткама + + + Show &Large Icons in Toolbars + Прикажи &велике иконе на тракама са алаткама + + + Show &Normal Icons in Toolbars + Прикажи &нормалне иконе на тракама са алаткама + + + Toggle clipboard monitoring + Укључите праћење међуспремника + Mdx::MdxArticleRequest @@ -3058,15 +3044,6 @@ the application. &Popup &Искачући прозор - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Укључите или не укључити искачући прозор када програм почиње. - - - Start with popup turned on - Омогући искачући прозор при покретању - Send translated word to main window instead of to show it in popup window Пошаљите преведену реч на главни прозор уместо да га прикаже у искачућем прозору @@ -3181,10 +3158,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Аутоматски изговари речи у главном прозору - - Auto-pronounce words in popup - Аутоматски изговорити речи у искачућем прозору - Playback Репродукција @@ -3576,6 +3549,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Потребан је рестарт + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Бира да ли ће праћење међуспремника бити укључено подразумевано при покретању програма'. + + + Start with clipboard monitoring turned on + Почните са укљученим праћењем међуспремника + + + Auto-pronounce words in the popup + Аутоматски изговор речи у искачућем прозору + ProgramTypeEditor @@ -3817,10 +3802,6 @@ could be resized or managed in other ways. Кликните да усидрите прозор на екрану, промените величину или било које друге особине. - - %1 - GoldenDict-ng - %1 - ГолденДицт-нг - WARNING: %1 УПОЗОРЕЊЕ: %1 diff --git a/locale/sv_SE.ts b/locale/sv_SE.ts index d935c4c1..31e90e76 100644 --- a/locale/sv_SE.ts +++ b/locale/sv_SE.ts @@ -596,10 +596,6 @@ klassisk rättstavning och skolrättstavning i kyrillisk skrift) DictInfo - - Edit dictionary - Redigera ordlista - Open index folder Öppna indexmappen @@ -652,12 +648,6 @@ klassisk rättstavning och skolrättstavning i kyrillisk skrift) Full-text search disabled Fulltextsökning avaktiverad - - Edit the dictionary via command: -%1 - Redigera ordlistan via kommando: -%1 - DictListModel @@ -750,10 +740,6 @@ klassisk rättstavning och skolrättstavning i kyrillisk skrift) Open dictionary folder Öppna ordlistans lagringsmapp - - Edit dictionary - Redigera ordlista - EditDictionaries @@ -2428,10 +2414,6 @@ klassisk rättstavning och skolrättstavning i kyrillisk skrift) Show Names in Dictionary &Bar Visa namn i ordliste&fältet - - Show Small Icons in &Toolbars - Visa små ikoner i &verktygsfält - &Menubar &Menyrad @@ -2448,10 +2430,6 @@ klassisk rättstavning och skolrättstavning i kyrillisk skrift) Forward Framåt - - Enable Scanning - Aktivera skanning - Pronounce Word (Alt+S) Läs upp ord (Alt+S) @@ -2546,10 +2524,6 @@ För att hitta '*', '?', '[', ']' symbol Remove current tab from Favorites Ta bort aktuell flik från Favoriter - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Det gick inte att initiera övervakningsmekanismen för kortkommandon.<br>Säkerställ att tillägget RECORD för din XServer är aktiverat. @@ -2702,10 +2676,6 @@ För att hitta '*', '?', '[', ']' symbol Open dictionary folder Öppna ordlistans mapp - - Edit dictionary - Redigera ordlista - Now indexing for full-text search: Nu indexering för fulltextsökning: @@ -2714,6 +2684,22 @@ För att hitta '*', '?', '[', ']' symbol Remove headword "%1" from Favorites? Ta bort huvudord "%1" från Favoriter? + + Show &Small Icons in Toolbars + Visa &små ikoner i verktygsfält + + + Show &Large Icons in Toolbars + Visa &stora ikoner i verktygsfält + + + Show &Normal Icons in Toolbars + Visa &normala ikoner i verktygsfält + + + Toggle clipboard monitoring + Växla urklippsövervakning + Mdx::MdxArticleRequest @@ -3055,16 +3041,6 @@ minimera fönstret till meddelandefältet istället för att avsluta programmet. &Popup &Sökpopupruta - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Avgör om sökpopuprutelägets standardinställning är PÅ eller AV. Om kryss- -rutan är markerad startar programmet alltid med sökpopuprutan påslagen. - - - Start with popup turned on - Starta med sökpopuprutan påslagen - Send translated word to main window instead of to show it in popup window Skicka översatta ord till huvudfönstret istället för att visa dem i popuprutan. @@ -3179,10 +3155,6 @@ angivna tangenterna är nedtryckta när ordet markeras. Auto-pronounce words in main window Läs automatiskt upp ord i huvudfönstret - - Auto-pronounce words in popup - Läs automatiskt upp ord i popuprutan - Playback Uppspelning @@ -3576,6 +3548,18 @@ från Stardict, Babylon och GLS ordböcker Restart needed Omstart behövs + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Väljer om urklippsövervakningen ska aktiveras som standard vid uppstart av programmet'. + + + Start with clipboard monitoring turned on + Börja med urklippsövervakning påslagen + + + Auto-pronounce words in the popup + Uttala ord automatiskt i popup-fönstret + ProgramTypeEditor @@ -3817,10 +3801,6 @@ could be resized or managed in other ways. Klicka här för att nåla fast rutan så att den stannar kvar på skärmen. Rutan kan storleksändras och hanteras på andra sätt. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 VARNING: %1 diff --git a/locale/tg_TJ.ts b/locale/tg_TJ.ts index c89cd784..311e9765 100644 --- a/locale/tg_TJ.ts +++ b/locale/tg_TJ.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Таҳрир кардани луғат - Open index folder Папкаи индексро кушоед @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Ҷустуҷӯи пурраи матн ғайрифаъол аст - - Edit the dictionary via command: -%1 - Таҳрир кардани луғат тавассути фармон: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Кушодани ҷузвдони луғат - - Edit dictionary - Таҳрир кардани луғат - EditDictionaries @@ -2428,10 +2414,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Номҳоро дар &лавҳаи луғат намоиш додан - - Show Small Icons in &Toolbars - Нишонаҳои хурдро дар панели асбобҳо нишон диҳед - &Menubar &Лавҳаи меню @@ -2448,10 +2430,6 @@ between classic and school orthography in cyrillic) Forward Ба пеш - - Enable Scanning - Сканерро фаъол созед - Pronounce Word (Alt+S) Калимаро талаффуз кардан (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Варақаи ҷориро аз Favorites хориҷ кунед - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Омодасозии механизми назорати тугмаҳои зеркор қатъ карда шуд.<br>Мутмаин шавед, ки имконоти RECORD дар XServer фаъол аст. @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Кушодани ҷузвдони луғат - - Edit dictionary - Таҳрир кардани луғат - Now indexing for full-text search: Дар ҳоли таҳияи индекси ҷустуҷӯ бо матни пурра: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Сарлавҳаи "%1" аз дӯстдоштаҳо хориҷ карда шавад? + + Show &Small Icons in Toolbars + Нишонаҳои &хурдро дар панели асбобҳо нишон диҳед + + + Show &Large Icons in Toolbars + Нишонаҳои &калонро дар панели асбобҳо нишон диҳед + + + Show &Normal Icons in Toolbars + Нишон додани &Нормӣ дар панели асбобҳо + + + Toggle clipboard monitoring + Мониторинги буферро иваз кунед + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ the application. &Popup &Тарҷумаи пайдошаванда - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Барои фаъол ё хомӯш кардани тарҷумаи пайдошаванда, имконоти зеринро истифода баред. -Агар ин имконотро интихоб мекунед, тарҷумаи пайдошаванда ба худкор фаъол мешавад. - - - Start with popup turned on - Барномаро бо хусусияти тарҷумаи пайдошаванда оғоз кардан - Send translated word to main window instead of to show it in popup window Калимаи тарҷумашударо ба ҷои равзанаи пайдошаванда дар равзанаи асосӣ нишон диҳед @@ -3180,10 +3156,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Талаффузи худкори калимаҳо дар равзанаи асосӣ - - Auto-pronounce words in popup - Талаффузи худкори калимаҳо дар тарҷумаи пайдошаванда - Playback Иҷрои аудио @@ -3574,6 +3546,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Аз нав оғоз кардан лозим аст + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Интихоб мекунад, ки мониторинги буфер ба таври нобаёнӣ ҳангоми оғози барнома'фаъол мешавад ё на. + + + Start with clipboard monitoring turned on + Бо фаъол кардани мониторинги буфер оғоз кунед + + + Auto-pronounce words in the popup + Калимаҳоро дар равзанаи пайдошуда худкор талаффуз кунед + ProgramTypeEditor @@ -3815,10 +3799,6 @@ could be resized or managed in other ways. Барои мустаҳкам кардан равзана дар экран, иваз кардани ҳаҷм, ё идоракунии хусусиятҳои дигар инро зер кунед. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 Огоҳӣ: %1 diff --git a/locale/tk_TM.ts b/locale/tk_TM.ts index bbfd19b9..c9406122 100644 --- a/locale/tk_TM.ts +++ b/locale/tk_TM.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Sözlügi üýtget - Open index folder Indeks bukjasyny açyň @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Doly tekst gözlegi ýapyldy - - Edit the dictionary via command: -%1 - Sözlügi şu komanda bilen üýtget: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Sözlügiň bukjasyny aç - - Edit dictionary - Sözlügi üýtget - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Sözlük &tagtasynda atlary görkez - - Show Small Icons in &Toolbars - Kiçi nyşanlary görkez &gurallar-tagtasynda - &Menubar &Menýu zolagy @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward Ugrukdyr - - Enable Scanning - Skaneri açyň - Pronounce Word (Alt+S) Sözi eşitdirmek (Alt+S) @@ -2545,10 +2523,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Häzirki goýmany Halanýanlardan aýyryň - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. “Hotkeys” -e gözegçilik mehanizmini işe girizip bilmedi.<br>XServer-de RECORD giňeltmesiniň açykdygyna göz ýetiriň. @@ -2701,10 +2675,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Sözlügiň bukjasyny aç - - Edit dictionary - Sözlügi üýtget - Now indexing for full-text search: Indi doly tekst gözlegi üçin indeksirleme: @@ -2713,6 +2683,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Halanýanlardan "%1" söz sözüni aýyryň? + + Show &Small Icons in Toolbars + Gurallar panelinde görkeziň we kiçi nyşanlary görkeziň + + + Show &Large Icons in Toolbars + Gurallar panelinde uly nyşanlary görkeziň + + + Show &Normal Icons in Toolbars + Gurallar panelinde adaty nyşanlary görkeziň + + + Toggle clipboard monitoring + Paneli gözegçiligini üýtgediň + Mdx::MdxArticleRequest @@ -3055,16 +3041,6 @@ programmany ýapmagyň ýerine ony gizlärdi. &Popup &Skan popup - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Skaner açylýan re modeimiň deslapkydygyny ýa-da ýokdugyny saýlaýar. Barlanylsa, -programma elmydama skananyň açylmagy bilen işjeň başlar. - - - Start with popup turned on - Skan ýüze çykarmany işledip başlat - Send translated word to main window instead of to show it in popup window Terjime edilen sözleri ýüze çykýan penjireden görkezmän olary baş penjirä iber @@ -3179,10 +3155,6 @@ basylan ýagdaýynda görkeziler. Auto-pronounce words in main window Baş penjirede sözleriň awto-aýdylyşy - - Auto-pronounce words in popup - Skan popup-dan sözleriň awto-aýdylyşy - Playback Oýnatmak @@ -3573,6 +3545,18 @@ arkaly goşmaça makalalary gözlemek üçin bu opsiýany açyň Restart needed Gaýtadan açmaly + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + + + Start with clipboard monitoring turned on + Paneli gözegçilik bilen açyň + + + Auto-pronounce words in the popup + Açylýan ýerdäki sözleri awtomatiki aýdyň + ProgramTypeEditor @@ -3814,10 +3798,6 @@ could be resized or managed in other ways. Penjiräni ekranda saklamak üçin ulanyň, ölçegini üýtgedip ýa-da başga usullar bilen dolandyryp bolar. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 DUNDURYŞ: %1 diff --git a/locale/tr_TR.ts b/locale/tr_TR.ts index 00b69dc9..af75e855 100644 --- a/locale/tr_TR.ts +++ b/locale/tr_TR.ts @@ -596,10 +596,6 @@ arasındaki farkı giderir) DictInfo - - Edit dictionary - Sözlüğü düzenle - Open index folder İndeks klasörünü aç @@ -652,12 +648,6 @@ arasındaki farkı giderir) Full-text search disabled Tam metin arama devre dışı - - Edit the dictionary via command: -%1 - Sözlüğü komut ile düzenleyin: -%1 - DictListModel @@ -750,10 +740,6 @@ arasındaki farkı giderir) Open dictionary folder Sözlük klasörünü aç - - Edit dictionary - Sözlüğü düzenle - EditDictionaries @@ -2428,10 +2414,6 @@ arasındaki farkı giderir) Show Names in Dictionary &Bar Sözlük Çubuğunda Adları Göster - - Show Small Icons in &Toolbars - Araç Çubuklarında Küçük İkonlar Göster - &Menubar &Menü Çubuğu @@ -2448,10 +2430,6 @@ arasındaki farkı giderir) Forward Sonraki - - Enable Scanning - Taramayı Etkinleştir - Pronounce Word (Alt+S) Sözcüğü Seslendir (Alt+S) @@ -2546,10 +2524,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Geçerli sekmeyi favorilerden kaldır - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Kısayol tuşlarını izleme mekanizması başlatılamadı. <br> XServer RECORD uzantısının açık olduğundan emin olun. @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Sözlük klasörünü açın - - Edit dictionary - Sözlüğü düzenle - Now indexing for full-text search: Tam metin araması için dizinlenmekte: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? "%1" madde başı favorilerden çıkarılsın mı? + + Show &Small Icons in Toolbars + Araç Çubuklarında &Küçük Simgeleri Göster + + + Show &Large Icons in Toolbars + Araç Çubuklarında &Büyük Simgeleri Göster + + + Show &Normal Icons in Toolbars + &Normal Simgeleri Araç Çubuklarında Göster + + + Toggle clipboard monitoring + Pano izlemeyi aç/kapat + Mdx::MdxArticleRequest @@ -3053,16 +3039,6 @@ yerine onu gizler. &Popup &Ekranda Kelime Yakala - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Ekranda kelime yakala kipinin öntanımlı olarak etkin olup olmadığını gösterir. -Etkinse, program her zaman aktif kip ile başlar. - - - Start with popup turned on - Ekranda Kelime Yakala'mayı açık olarak başlat - Send translated word to main window instead of to show it in popup window Ana pencereye çevrilmiş kelime göndermek yerine açılır pencerede göster @@ -3177,10 +3153,6 @@ Aksi halde fare, sözcüğün üzerine geldiğinde çeviri yapılır.Auto-pronounce words in main window Ana penceredeki kelimeleri otomatik telaffuz et - - Auto-pronounce words in popup - Ekranda Kelime Yakalarken kelimeleri otomatik seslendir - Playback Oynatma @@ -3569,6 +3541,18 @@ eşanlamlı listeleri aracılığıyla ekstra makale aramasını etkinleştirmek Restart needed Yeniden başlatma gerekli + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Program'başlatıldığında pano izleme özelliğinin varsayılan olarak açılıp açılmayacağını seçer. + + + Start with clipboard monitoring turned on + Pano izlemeyi açarak başlayın + + + Auto-pronounce words in the popup + Açılır pencerede kelimeleri otomatik telaffuz et + ProgramTypeEditor @@ -3810,10 +3794,6 @@ could be resized or managed in other ways. Bu ekranda kalır ve böylece bu pencere, sabitlenebilir. Yeniden boyutlandırma, ya da başka bir şekilde yönetilebilir. - - %1 - GoldenDict-ng - %1 - AltınDict-ng - WARNING: %1 UYARI: %1 diff --git a/locale/uk_UA.ts b/locale/uk_UA.ts index 28bc0161..c5e9a527 100644 --- a/locale/uk_UA.ts +++ b/locale/uk_UA.ts @@ -596,10 +596,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Редагувати словник - Open index folder Відкрити індексну папку @@ -652,12 +648,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Повнотекстовий пошук вимкнено - - Edit the dictionary via command: -%1 - Редагувати словник через команду: -%1 - DictListModel @@ -750,10 +740,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Відкрити словникову теку - - Edit dictionary - Редагувати словник - EditDictionaries @@ -2429,10 +2415,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Відображувати назви у &Рядку словника - - Show Small Icons in &Toolbars - Показувати малі налички у &тулбарі - &Menubar &Лоток меню @@ -2449,10 +2431,6 @@ between classic and school orthography in cyrillic) Forward Вперед - - Enable Scanning - Увімкнути сканування - Pronounce Word (Alt+S) Вимовити слово (Alt+S) @@ -2547,10 +2525,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Вилучити поточну вкладку з Обраного - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Не вдалось запустити механізм стеження за гарячими клавішами.<br>Переконайтесь, що ваш XServer має розширення RECORD увімкнутим. @@ -2703,10 +2677,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Відкрити словникову теку - - Edit dictionary - Редагувати словник - Now indexing for full-text search: Індексування для повнотекстового пошуку: @@ -2715,6 +2685,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Видалити заголовки "%1" з вибраного? + + Show &Small Icons in Toolbars + Показати &маленькі значки на панелях інструментів + + + Show &Large Icons in Toolbars + Показати &великі значки на панелях інструментів + + + Show &Normal Icons in Toolbars + Показати &звичайні значки на панелях інструментів + + + Toggle clipboard monitoring + Увімкнути моніторинг буфера обміну + Mdx::MdxArticleRequest @@ -3056,16 +3042,6 @@ the application. &Popup &Контекстне вікно - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Визначає, чи типово ввімкнуті контекстні вікна, чи ні. Якщо це відмічено, -програма завжди запускатиметься з контекстними меню. - - - Start with popup turned on - Увімкнути контекстні меню при запуску - Send translated word to main window instead of to show it in popup window Послилати перекладене слово до головного вікна, замість того аби показувати його у виринаючому вікні @@ -3181,10 +3157,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Автоматично вимовляти слово в головному меню - - Auto-pronounce words in popup - Автоматично вимовляти слова в контекстному меню - Playback Відтворення @@ -3575,6 +3547,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed Потрібен перезапуск + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Вибирає, чи буде моніторинг буфера обміну ввімкнено за замовчуванням під час запуску програми'. + + + Start with clipboard monitoring turned on + Почніть із увімкненого моніторингу буфера обміну + + + Auto-pronounce words in the popup + Автоматичне вимовляння слів у спливаючому вікні + ProgramTypeEditor @@ -3816,10 +3800,6 @@ could be resized or managed in other ways. Використайте шпильку, щоб вікно залишалось на екрані, можна змінювати розмір або керувати ним у зручний вам спосіб. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 ПОПЕРЕДЖЕННЯ: %1 diff --git a/locale/vi_VN.ts b/locale/vi_VN.ts index 4aeacd21..f7b71be8 100644 --- a/locale/vi_VN.ts +++ b/locale/vi_VN.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - Chỉnh sửa từ điển - Open index folder Mở thư mục chỉ mục @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled Tìm kiếm toàn văn bị vô hiệu hóa - - Edit the dictionary via command: -%1 - Chỉnh sửa từ điển với lệnh: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder Mở thư mục từ điển - - Edit dictionary - Sửa đổi từ điển - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar Hiện tên từ điển trên Thanh &Từ điển - - Show Small Icons in &Toolbars - Hiện &biểu tượng nhỏ trên Thanh công cụ - &Menubar Thanh Trì&nh đơn @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward Tiếp tục - - Enable Scanning - Bật tính năng quét - Pronounce Word (Alt+S) Phát âm (Alt+S) @@ -2545,10 +2523,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites Xóa tab hiện tại khỏi Mục ưa thích - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. Lỗi khởi chạy cơ chế quản lý phím tắt. <br>Hãy kiểm tra XServer đã bật phần mở rộng RECORD. @@ -2701,10 +2675,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder Mở thư mục từ điển - - Edit dictionary - Chỉnh sửa từ điển - Now indexing for full-text search: Hiện đang lập chỉ mục cho tìm kiếm toàn văn: @@ -2713,6 +2683,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? Xóa tiêu đề "%1" khỏi Mục ưa thích? + + Show &Small Icons in Toolbars + Hiển thị &Biểu tượng nhỏ trong Thanh công cụ + + + Show &Large Icons in Toolbars + Hiển thị &Biểu tượng lớn trong Thanh công cụ + + + Show &Normal Icons in Toolbars + Hiển thị &Biểu tượng bình thường trong Thanh công cụ + + + Toggle clipboard monitoring + Bật/tắt giám sát clipboard + Mdx::MdxArticleRequest @@ -3053,16 +3039,6 @@ the application. &Popup &Quét Popup - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - Chọn bật chế độ quét popup mặc định. Nếu chọn, chương trình sẽ khởi động -với tính năng quét popup được bật. - - - Start with popup turned on - Khởi động với quét popup được bật - Send translated word to main window instead of to show it in popup window Hiện từ đã dịch trên cửa sổ chính thay vì cửa sổ popup @@ -3176,10 +3152,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window Tự động phát âm trong cửa sổ chính - - Auto-pronounce words in popup - Tự động phát âm trong quét popup - Playback Phát lại @@ -3567,6 +3539,18 @@ từ các từ điển Stardict, Babylon và GLS Restart needed khởi động lại cần thiết + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + Chọn xem tính năng giám sát bảng tạm có được bật theo mặc định khi chương trình'khởi động hay không. + + + Start with clipboard monitoring turned on + Bắt đầu với chức năng giám sát clipboard được bật + + + Auto-pronounce words in the popup + Tự động phát âm các từ trong cửa sổ bật lên + ProgramTypeEditor @@ -3808,10 +3792,6 @@ could be resized or managed in other ways. Đính cửa sổ trên màn hình, có thể thay đổi kích thước hay quản lý theo nhiều cách khác. - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 CẢNH BÁO: %1 diff --git a/locale/zh_CN.ts b/locale/zh_CN.ts index f5ad7d40..81a048e8 100644 --- a/locale/zh_CN.ts +++ b/locale/zh_CN.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - 编辑词典信息 - Open index folder 打开索引文件夹 @@ -651,11 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled 全文搜索已禁用 - - Edit the dictionary via command: -%1 - 编辑词典信息的命令行:%1 - DictListModel @@ -748,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder 打开词典文件夹 - - Edit dictionary - 编辑词典信息 - EditDictionaries @@ -2426,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar 在词典栏中显示词典名称(&B) - - Show Small Icons in &Toolbars - 在工具栏上显示小图标(&T) - &Menubar 菜单栏(&M) @@ -2446,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward 前进 - - Enable Scanning - 取词弹窗 - Pronounce Word (Alt+S) 朗读词条(Alt+S) @@ -2544,10 +2523,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites 从收藏中删除当前标签页 - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. 初始化热键监视机制失败。<br>请确保你的 XServer 已启用 RECORD 扩展。 @@ -2701,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder 打开词典文件夹 - - Edit dictionary - 编辑词典信息 - Now indexing for full-text search: 正在为全文搜索进行索引: @@ -2713,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? 从收藏中删除标题字“%1”? + + Show &Small Icons in Toolbars + 在工具栏中显示小图标(&S) + + + Show &Large Icons in Toolbars + 在工具栏中显示大图标(&L) + + + Show &Normal Icons in Toolbars + 在工具栏中显示常规图标(&N) + + + Toggle clipboard monitoring + 切换剪贴板监控 + Mdx::MdxArticleRequest @@ -3047,15 +3034,6 @@ the application. &Popup 屏幕取词(&S) - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - 选择是否默认启用屏幕取词模式。如果选中,程序启动时将会自动激活屏幕取词功能。 - - - Start with popup turned on - 启动程序时同时启动屏幕取词 - Send translated word to main window instead of to show it in popup window 将翻译词条发送至主窗口,而非在取词窗口中显示 @@ -3169,10 +3147,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window 自动朗读主窗口中的词条 - - Auto-pronounce words in popup - 自动朗读屏幕取词弹出窗口中的词条 - Playback 播放 @@ -3557,6 +3531,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed 需要重启 + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + 选择在程序'启动时是否默认打开剪贴板监视。 + + + Start with clipboard monitoring turned on + 从打开剪贴板监视开始 + + + Auto-pronounce words in the popup + 在弹出窗口中自动发音 + ProgramTypeEditor @@ -3797,10 +3783,6 @@ from Stardict, Babylon and GLS dictionaries could be resized or managed in other ways. 使用此按钮可以固定窗口,以便它能停留在屏幕上进行改变大小等相关窗口管理操作。 - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 警告: %1 diff --git a/locale/zh_TW.ts b/locale/zh_TW.ts index b91ba6a7..96739205 100644 --- a/locale/zh_TW.ts +++ b/locale/zh_TW.ts @@ -595,10 +595,6 @@ between classic and school orthography in cyrillic) DictInfo - - Edit dictionary - 編輯字典 - Open index folder 打開索引資料夾 @@ -651,12 +647,6 @@ between classic and school orthography in cyrillic) Full-text search disabled 全文搜索已禁用 - - Edit the dictionary via command: -%1 - 以指令編輯字典: -%1 - DictListModel @@ -749,10 +739,6 @@ between classic and school orthography in cyrillic) Open dictionary folder 開啟字典資料夾 - - Edit dictionary - 編輯字典 - EditDictionaries @@ -2427,10 +2413,6 @@ between classic and school orthography in cyrillic) Show Names in Dictionary &Bar 在字典列中顯示字典名稱(&B) - - Show Small Icons in &Toolbars - 在工具列中顯示小型圖示(&T) - &Menubar 選單列(&M) @@ -2447,10 +2429,6 @@ between classic and school orthography in cyrillic) Forward 下一頁 - - Enable Scanning - 啟用掃描 - Pronounce Word (Alt+S) 朗讀詞條(Alt+S) @@ -2545,10 +2523,6 @@ To find '*', '?', '[', ']' symbols use & Remove current tab from Favorites 將目前分頁從我的最愛中移除 - - %1 - %2 - %1 - %2 - Failed to initialize hotkeys monitoring mechanism.<br>Make sure your XServer has RECORD extension turned on. 快速鍵監視機制初始化失敗。<br>請確保您的 XServer 已啟用 RECORD 延伸。 @@ -2702,10 +2676,6 @@ To find '*', '?', '[', ']' symbols use & Open dictionary folder 開啟字典資料夾 - - Edit dictionary - 編輯字典 - Now indexing for full-text search: 正在建立全文搜尋用的索引: @@ -2714,6 +2684,22 @@ To find '*', '?', '[', ']' symbols use & Remove headword "%1" from Favorites? 確定要將詞條 "%1" 從我的最愛中移除嗎? + + Show &Small Icons in Toolbars + 在工具列中顯示小圖示(&S) + + + Show &Large Icons in Toolbars + 在工具列中顯示大圖示(&L) + + + Show &Normal Icons in Toolbars + 在工具列中顯示普通圖示(&N) + + + Toggle clipboard monitoring + 切換剪貼簿監控 + Mdx::MdxArticleRequest @@ -3050,15 +3036,6 @@ the application. &Popup 螢幕取詞(&S) - - Chooses whether the popup mode is on by default or not. If checked, -the program would always start with the popup active. - 選擇是否預設啟用螢幕取詞模式。如果選用,程式啟動時將會自動啟用螢幕取詞功能。 - - - Start with popup turned on - 啟動程式時同時啟動螢幕取詞 - Send translated word to main window instead of to show it in popup window 將翻譯的文字傳送至主視窗,而非顯示在彈出式視窗中 @@ -3172,10 +3149,6 @@ in the pressed state when the word selection changes. Auto-pronounce words in main window 自動朗讀主視窗中的單字 - - Auto-pronounce words in popup - 自動朗讀螢幕取詞彈出視窗中的單字 - Playback 播放 @@ -3563,6 +3536,18 @@ from Stardict, Babylon and GLS dictionaries Restart needed 需要重啟 + + Chooses whether the clipboard monitoring will be turned on by default at the program's startup. + 選擇程式'啟動時是否預設開啟剪貼簿監控。 + + + Start with clipboard monitoring turned on + 從開啟剪貼簿監控開始 + + + Auto-pronounce words in the popup + 自動發音彈出視窗中的單字 + ProgramTypeEditor @@ -3804,10 +3789,6 @@ could be resized or managed in other ways. 使用此按鈕可以釘選視窗,以便它能停留在螢幕上, 調整大小等相關視窗管理操作。 - - %1 - GoldenDict-ng - %1 - GoldenDict-ng - WARNING: %1 警告: %1 diff --git a/package-lock.json b/package-lock.json index 0b2eaaf7..c49f34db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,19 +5,23 @@ "packages": { "": { "devDependencies": { - "prettier": "3.0.0" + "prettier": "3" } }, "node_modules/prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } } } diff --git a/package.json b/package.json index 98061934..80758a8b 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { "devDependencies": { - "prettier": "3.0.0" + "prettier": "3" } } diff --git a/redist/io.github.xiaoyifang.goldendict_ng.metainfo.xml b/redist/io.github.xiaoyifang.goldendict_ng.metainfo.xml index ed2c82a0..d6555729 100644 --- a/redist/io.github.xiaoyifang.goldendict_ng.metainfo.xml +++ b/redist/io.github.xiaoyifang.goldendict_ng.metainfo.xml @@ -14,10 +14,8 @@

- GoldenDict-ng is a feature-rich dictionary lookup program, supporting multiple - dictionary formats, featuring perfect article rendering with the complete - markup, illustrations and other content retained, and allowing you to type - in words without any accents or correct case. + GoldenDict-ng is a advanced dictionary lookup program, supporting many + dictionary formats.

diff --git a/src/ankiconnector.hh b/src/ankiconnector.hh index f5fae87d..e25d0d7c 100644 --- a/src/ankiconnector.hh +++ b/src/ankiconnector.hh @@ -1,5 +1,4 @@ -#ifndef ANKICONNECTOR_H -#define ANKICONNECTOR_H +#pragma once #include "config.hh" @@ -29,5 +28,3 @@ signals: private slots: void finishedSlot( QNetworkReply * reply ); }; - -#endif // ANKICONNECTOR_H diff --git a/src/article_maker.cc b/src/article_maker.cc index d0b10279..dc656fb4 100644 --- a/src/article_maker.cc +++ b/src/article_maker.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include "fmt/core.h" #include "fmt/compile.h" @@ -50,7 +51,8 @@ std::string ArticleMaker::makeHtmlHeader( QString const & word, QString const & // add jquery { result += R"()"; - result += R"()"; + result += R"()"; + result += R"()"; result += R"()"; } @@ -64,13 +66,19 @@ std::string ArticleMaker::makeHtmlHeader( QString const & word, QString const & { result += R"( + }; + + if (document.readyState !== "loading") { + gd_init_QtWebChannel(); + } else { + document.addEventListener("DOMContentLoaded", gd_init_QtWebChannel); + }; + )"; } @@ -144,7 +152,22 @@ std::string ArticleMaker::makeHtmlHeader( QString const & word, QString const & result += R"()"; result += R"()"; - if ( GlobalBroadcaster::instance()->getPreference()->darkReaderMode ) { + /// Handling Dark reader mode. + + bool darkReaderModeEnabled = false; + + if ( GlobalBroadcaster::instance()->getPreference()->darkReaderMode == Config::Dark::On ) { + darkReaderModeEnabled = true; + } + +#if QT_VERSION >= QT_VERSION_CHECK( 6, 5, 0 ) + if ( GlobalBroadcaster::instance()->getPreference()->darkReaderMode == Config::Dark::Auto + && QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark ) { + darkReaderModeEnabled = true; + } +#endif + + if ( darkReaderModeEnabled ) { //only enable this darkmode on modern style. if ( cfg.displayStyle == "modern" ) { result += R"()"; @@ -202,7 +225,7 @@ body { background: #242525; } // load the `article-style.js` in user's config folder if ( auto userJsFile = Config::getUserJsFileName(); userJsFile.has_value() ) { - result += fmt::format( FMT_COMPILE( R"()" ), userJsFile.value() ); + result += fmt::format( FMT_COMPILE( R"()" ), userJsFile.value() ); } result += ""; @@ -308,7 +331,7 @@ sptr< Dictionary::DataRequest > ArticleMaker::makeDefinitionFor( QString const & true ); } - if ( groupId == Instances::Group::HelpGroupId ) { + if ( groupId == GroupId::HelpGroupId ) { if ( word == tr( "Welcome!" ) ) { string welcome = makeWelcomeHtml(); sptr< Dictionary::DataRequestInstant > r = std::make_shared< Dictionary::DataRequestInstant >( true ); @@ -498,7 +521,7 @@ void ArticleRequest::altSearchFinished() vector< wstring > altsVector( alts.begin(), alts.end() ); - wstring wordStd = gd::toWString( word ); + wstring wordStd = word.toStdU32String(); if ( activeDicts.size() <= 1 ) { articleSizeLimit = -1; // Don't collapse article if only one dictionary presented diff --git a/src/article_maker.hh b/src/article_maker.hh index 1dc678c1..a57065e7 100644 --- a/src/article_maker.hh +++ b/src/article_maker.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __ARTICLE_MAKER_HH_INCLUDED__ -#define __ARTICLE_MAKER_HH_INCLUDED__ +#pragma once #include #include @@ -101,8 +100,8 @@ class ArticleRequest: public Dictionary::DataRequest /// A sequence of words and spacings between them, including the initial /// spacing before the first word and the final spacing after the last word. - typedef QList< QString > Words; - typedef QList< QString > Spacings; + using Words = QList< QString >; + using Spacings = QList< QString >; /// Splits the given string into words and spacings between them. std::pair< Words, Spacings > splitIntoWords( QString const & ); @@ -158,6 +157,3 @@ private: int findEndOfCloseDiv( QString const &, int pos ); bool isCollapsable( Dictionary::DataRequest & req, QString const & dictId ); }; - - -#endif diff --git a/src/article_netmgr.cc b/src/article_netmgr.cc index 720fe5bd..33e33963 100644 --- a/src/article_netmgr.cc +++ b/src/article_netmgr.cc @@ -22,9 +22,11 @@ AllowFrameReply::AllowFrameReply( QNetworkReply * _reply ): setRequest( baseReply->request() ); setUrl( baseReply->url() ); - // Signals to own slots - - connect( baseReply, &QNetworkReply::metaDataChanged, this, &AllowFrameReply::applyMetaData ); + QList< QByteArray > rawHeaders = baseReply->rawHeaderList(); + for ( const auto & header : rawHeaders ) { + if ( header.toLower() != "x-frame-options" ) + setRawHeader( header, baseReply->rawHeader( header ) ); + } connect( baseReply, &QNetworkReply::errorOccurred, this, &AllowFrameReply::applyError ); @@ -32,45 +34,11 @@ AllowFrameReply::AllowFrameReply( QNetworkReply * _reply ): // Redirect QNetworkReply signals - connect( baseReply, &QNetworkReply::downloadProgress, this, &QNetworkReply::downloadProgress ); - - connect( baseReply, &QNetworkReply::encrypted, this, &QNetworkReply::encrypted ); - connect( baseReply, &QNetworkReply::finished, this, &QNetworkReply::finished ); - connect( baseReply, - &QNetworkReply::preSharedKeyAuthenticationRequired, - this, - &QNetworkReply::preSharedKeyAuthenticationRequired ); - - connect( baseReply, &QNetworkReply::redirected, this, &QNetworkReply::redirected ); - - connect( baseReply, &QNetworkReply::sslErrors, this, &QNetworkReply::sslErrors ); - - connect( baseReply, &QNetworkReply::uploadProgress, this, &QNetworkReply::uploadProgress ); - - // Redirect QIODevice signals - - connect( baseReply, &QIODevice::aboutToClose, this, &QIODevice::aboutToClose ); - - connect( baseReply, &QIODevice::bytesWritten, this, &QIODevice::bytesWritten ); - - connect( baseReply, &QIODevice::readChannelFinished, this, &QIODevice::readChannelFinished ); - setOpenMode( QIODevice::ReadOnly ); } -void AllowFrameReply::applyMetaData() -{ - // The webengine does not support to customize the headers right now ,maybe until Qt6.7 there should be some api supports -} - -void AllowFrameReply::setReadBufferSize( qint64 size ) -{ - QNetworkReply::setReadBufferSize( size ); - baseReply->setReadBufferSize( size ); -} - qint64 AllowFrameReply::bytesAvailable() const { return baseReply->bytesAvailable(); @@ -89,11 +57,6 @@ qint64 AllowFrameReply::readData( char * data, qint64 maxSize ) baseReply->read( data, size ); return size; } -void AllowFrameReply::finishedSlot() -{ - setFinished( true ); - emit finished(); -} QNetworkReply * ArticleNetworkAccessManager::getArticleReply( QNetworkRequest const & req ) { @@ -258,29 +221,25 @@ sptr< Dictionary::DataRequest > ArticleNetworkAccessManager::getResource( QUrl c contentType = mineType.name(); string id = url.host().toStdString(); - bool search = ( id == "search" ); - - if ( !search ) { - for ( const auto & dictionary : dictionaries ) { - if ( dictionary->getId() == id ) { - if ( url.scheme() == "gico" ) { - QByteArray bytes; - QBuffer buffer( &bytes ); - buffer.open( QIODevice::WriteOnly ); - dictionary->getIcon().pixmap( 64 ).save( &buffer, "PNG" ); - buffer.close(); - sptr< Dictionary::DataRequestInstant > ico = std::make_shared< Dictionary::DataRequestInstant >( true ); - ico->getData().resize( bytes.size() ); - memcpy( &( ico->getData().front() ), bytes.data(), bytes.size() ); - return ico; - } - try { - return dictionary->getResource( Utils::Url::path( url ).mid( 1 ).toUtf8().data() ); - } - catch ( std::exception & e ) { - gdWarning( "getResource request error (%s) in \"%s\"\n", e.what(), dictionary->getName().c_str() ); - return {}; - } + for ( const auto & dictionary : dictionaries ) { + if ( dictionary->getId() == id ) { + if ( url.scheme() == "gico" ) { + QByteArray bytes; + QBuffer buffer( &bytes ); + buffer.open( QIODevice::WriteOnly ); + dictionary->getIcon().pixmap( 64 ).save( &buffer, "PNG" ); + buffer.close(); + sptr< Dictionary::DataRequestInstant > ico = std::make_shared< Dictionary::DataRequestInstant >( true ); + ico->getData().resize( bytes.size() ); + memcpy( &( ico->getData().front() ), bytes.data(), bytes.size() ); + return ico; + } + try { + return dictionary->getResource( Utils::Url::path( url ).mid( 1 ).toUtf8().data() ); + } + catch ( std::exception & e ) { + gdWarning( "getResource request error (%s) in \"%s\"\n", e.what(), dictionary->getName().c_str() ); + return {}; } } } @@ -384,14 +343,21 @@ qint64 ArticleResourceReply::readData( char * out, qint64 maxSize ) return finished ? -1 : 0; } - qint64 const left = avail - alreadyRead; qint64 const toRead = maxSize < left ? maxSize : left; if ( !toRead && finished ) { return -1; } - GD_DPRINTF( "====reading %d of (%lld) bytes . Finished: %d", (int)toRead, avail, finished ); + if ( toRead == 0 ) { + return 0; + } + + GD_DPRINTF( "====reading %lld of (%lld) bytes, %lld bytes readed . Finish status: %d", + toRead, + avail, + alreadyRead, + finished ); try { req->getDataSlice( alreadyRead, toRead, out ); diff --git a/src/article_netmgr.hh b/src/article_netmgr.hh index 3b93a20b..d6932807 100644 --- a/src/article_netmgr.hh +++ b/src/article_netmgr.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __ARTICLE_NETMGR_HH_INCLUDED__ -#define __ARTICLE_NETMGR_HH_INCLUDED__ +#pragma once #include #include @@ -42,84 +41,77 @@ public: delete baseReply; } - // QNetworkReply virtual functions - void setReadBufferSize( qint64 size ); - void close() + void close() override { baseReply->close(); } // QIODevice virtual functions - qint64 bytesAvailable() const; - bool atEnd() const + qint64 bytesAvailable() const override; + bool atEnd() const override { return baseReply->atEnd(); } - qint64 bytesToWrite() const + qint64 bytesToWrite() const override { return baseReply->bytesToWrite(); } - bool canReadLine() const + bool canReadLine() const override { return baseReply->canReadLine(); } - bool isSequential() const + bool isSequential() const override { return baseReply->isSequential(); } - bool waitForReadyRead( int msecs ) + bool waitForReadyRead( int msecs ) override { return baseReply->waitForReadyRead( msecs ); } - bool waitForBytesWritten( int msecs ) + bool waitForBytesWritten( int msecs ) override { return baseReply->waitForBytesWritten( msecs ); } - bool reset() + bool reset() override { return baseReply->reset(); } public slots: - - // Own AllowFrameReply slots - void applyMetaData(); void applyError( QNetworkReply::NetworkError code ); - // void readDataFromBase(); // Redirect QNetworkReply slots - virtual void abort() + void abort() override { baseReply->abort(); } - virtual void ignoreSslErrors() + void ignoreSslErrors() override { baseReply->ignoreSslErrors(); } - void finishedSlot(); protected: // QNetworkReply virtual functions - void ignoreSslErrorsImplementation( const QList< QSslError > & errors ) + void ignoreSslErrorsImplementation( const QList< QSslError > & errors ) override { baseReply->ignoreSslErrors( errors ); } - void setSslConfigurationImplementation( const QSslConfiguration & configuration ) + void setSslConfigurationImplementation( const QSslConfiguration & configuration ) override { baseReply->setSslConfiguration( configuration ); } - void sslConfigurationImplementation( QSslConfiguration & configuration ) const + void sslConfigurationImplementation( QSslConfiguration & configuration ) const override { configuration = baseReply->sslConfiguration(); } // QIODevice virtual functions - qint64 readData( char * data, qint64 maxSize ); - qint64 readLineData( char * data, qint64 maxSize ) + qint64 readData( char * data, qint64 maxSize ) override; + qint64 readLineData( char * data, qint64 maxSize ) override { return baseReply->readLine( data, maxSize ); } - qint64 writeData( const char * data, qint64 maxSize ) + qint64 writeData( const char * data, qint64 maxSize ) override { return baseReply->write( data, maxSize ); } @@ -185,10 +177,10 @@ public: protected: - virtual qint64 bytesAvailable() const; - bool atEnd() const; - virtual void abort() {} - virtual qint64 readData( char * data, qint64 maxSize ); + virtual qint64 bytesAvailable() const override; + bool atEnd() const override; + virtual void abort() override {} + virtual qint64 readData( char * data, qint64 maxSize ) override; // We use the hackery below to work around the fact that we need to emit // ready/finish signals after we've been constructed. @@ -249,4 +241,3 @@ private: ArticleNetworkAccessManager & mManager; QNetworkAccessManager mgr; }; -#endif diff --git a/src/audio/README.md b/src/audio/README.md new file mode 100644 index 00000000..27639114 --- /dev/null +++ b/src/audio/README.md @@ -0,0 +1,3 @@ +Code to support GD's internal/external audio players. + +Only `audioplayerinterface.hh` is supposed to be used outside this folder. diff --git a/src/audiooutput.cc b/src/audio/audiooutput.cc similarity index 87% rename from src/audiooutput.cc rename to src/audio/audiooutput.cc index d6d18f9d..b4d4be13 100644 --- a/src/audiooutput.cc +++ b/src/audio/audiooutput.cc @@ -6,11 +6,7 @@ #include #include #include -#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) - #include -#else - #include -#endif +#include #include #include @@ -23,18 +19,7 @@ static QAudioFormat format( int sampleRate, int channelCount ) out.setSampleRate( sampleRate ); out.setChannelCount( channelCount ); -#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) - out.setByteOrder( QAudioFormat::LittleEndian ); - out.setCodec( QLatin1String( "audio/pcm" ) ); -#endif - -#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) - out.setSampleSize( 16 ); - out.setSampleType( QAudioFormat::SignedInt ); -#else out.setSampleFormat( QAudioFormat::Int16 ); -#endif - return out; } @@ -50,11 +35,8 @@ public: QFuture< void > audioPlayFuture; -#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) - using AudioOutput = QAudioOutput; -#else using AudioOutput = QAudioSink; -#endif + AudioOutput * audioOutput = nullptr; QByteArray buffer; qint64 offset = 0; @@ -185,11 +167,7 @@ AudioOutput::AudioOutput( QObject * parent ): QObject( parent ), d_ptr( new AudioOutputPrivate ) { -#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) - d_ptr->audioPlayFuture = QtConcurrent::run( &d_ptr->threadPool, d_ptr.data(), &AudioOutputPrivate::doPlayAudio ); -#else d_ptr->audioPlayFuture = QtConcurrent::run( &d_ptr->threadPool, &AudioOutputPrivate::doPlayAudio, d_ptr.data() ); -#endif } void AudioOutput::setAudioFormat( int sampleRate, int channels ) diff --git a/src/audiooutput.hh b/src/audio/audiooutput.hh similarity index 86% rename from src/audiooutput.hh rename to src/audio/audiooutput.hh index 369f4615..445e5d5c 100644 --- a/src/audiooutput.hh +++ b/src/audio/audiooutput.hh @@ -1,5 +1,4 @@ -#ifndef AUDIOOUTPUT_H -#define AUDIOOUTPUT_H +#pragma once #include #include @@ -22,6 +21,3 @@ private: Q_DISABLE_COPY( AudioOutput ) Q_DECLARE_PRIVATE( AudioOutput ) }; - - -#endif // AUDIOOUTPUT_H diff --git a/src/audioplayerfactory.cc b/src/audio/audioplayerfactory.cc similarity index 100% rename from src/audioplayerfactory.cc rename to src/audio/audioplayerfactory.cc diff --git a/src/audioplayerfactory.hh b/src/audio/audioplayerfactory.hh similarity index 88% rename from src/audioplayerfactory.hh rename to src/audio/audioplayerfactory.hh index 39abfcc2..54d6d59a 100644 --- a/src/audioplayerfactory.hh +++ b/src/audio/audioplayerfactory.hh @@ -1,8 +1,7 @@ /* This file is (c) 2018 Igor Kushnir * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef AUDIOPLAYERFACTORY_HH_INCLUDED -#define AUDIOPLAYERFACTORY_HH_INCLUDED +#pragma once #include "audioplayerinterface.hh" #include "config.hh" @@ -33,5 +32,3 @@ private: QString audioPlaybackProgram; AudioPlayerPtr playerPtr; }; - -#endif // AUDIOPLAYERFACTORY_HH_INCLUDED diff --git a/src/audioplayerinterface.hh b/src/audio/audioplayerinterface.hh similarity index 79% rename from src/audioplayerinterface.hh rename to src/audio/audioplayerinterface.hh index a88de319..fbb758b8 100644 --- a/src/audioplayerinterface.hh +++ b/src/audio/audioplayerinterface.hh @@ -1,8 +1,7 @@ /* This file is (c) 2018 Igor Kushnir * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef AUDIOPLAYERINTERFACE_HH_INCLUDED -#define AUDIOPLAYERINTERFACE_HH_INCLUDED +#pragma once #include #include @@ -26,6 +25,4 @@ signals: void error( QString message ); }; -typedef QScopedPointer< AudioPlayerInterface > AudioPlayerPtr; - -#endif // AUDIOPLAYERINTERFACE_HH_INCLUDED +using AudioPlayerPtr = QScopedPointer< AudioPlayerInterface >; diff --git a/src/externalaudioplayer.cc b/src/audio/externalaudioplayer.cc similarity index 100% rename from src/externalaudioplayer.cc rename to src/audio/externalaudioplayer.cc diff --git a/src/externalaudioplayer.hh b/src/audio/externalaudioplayer.hh similarity index 90% rename from src/externalaudioplayer.hh rename to src/audio/externalaudioplayer.hh index 02cb5214..767d229b 100644 --- a/src/externalaudioplayer.hh +++ b/src/audio/externalaudioplayer.hh @@ -1,8 +1,7 @@ /* This file is (c) 2018 Igor Kushnir * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef EXTERNALAUDIOPLAYER_HH_INCLUDED -#define EXTERNALAUDIOPLAYER_HH_INCLUDED +#pragma once #include "audioplayerinterface.hh" #include @@ -44,5 +43,3 @@ private: // deleteLater() is safer because viewer actively participates in the QEventLoop. std::unique_ptr< ExternalViewer, QObjectDeleteLater > viewer; }; - -#endif // EXTERNALAUDIOPLAYER_HH_INCLUDED diff --git a/src/ffmpegaudio.cc b/src/audio/ffmpegaudio.cc similarity index 96% rename from src/ffmpegaudio.cc rename to src/audio/ffmpegaudio.cc index d1b2f214..41d3a0cc 100644 --- a/src/ffmpegaudio.cc +++ b/src/audio/ffmpegaudio.cc @@ -2,27 +2,14 @@ #include "audiooutput.hh" #include "ffmpegaudio.hh" - - #include - -extern "C" { - #include - #include - #include - #include "libswresample/swresample.h" -} - - #include - #include - - #include - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 2, 0 ) ) - #include - - #include - #endif #include "gddebug.hh" #include "utils.hh" + #include + #include + #include + #include + #include + #include using std::vector; @@ -284,14 +271,11 @@ void DecoderContext::closeCodec() bool DecoderContext::openOutputDevice( QString & errorString ) { - // only check device when qt version is greater than 6.2 - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 2, 0 ) ) QAudioDevice m_outputDevice = QMediaDevices::defaultAudioOutput(); if ( m_outputDevice.isNull() ) { errorString += QString( "Can not found default audio output device" ); return false; } - #endif if ( audioOutput == nullptr ) { errorString += QStringLiteral( "Failed to create audioOutput." ); diff --git a/src/ffmpegaudio.hh b/src/audio/ffmpegaudio.hh similarity index 90% rename from src/ffmpegaudio.hh rename to src/audio/ffmpegaudio.hh index 9e53b855..56b55b27 100644 --- a/src/ffmpegaudio.hh +++ b/src/audio/ffmpegaudio.hh @@ -1,28 +1,24 @@ -#ifndef __FFMPEGAUDIO_HH_INCLUDED__ -#define __FFMPEGAUDIO_HH_INCLUDED__ +#pragma once #ifdef MAKE_FFMPEG_PLAYER - #include "audiooutput.hh" - #include - #include - #include - #include + extern "C" { #include #include #include #include "libswresample/swresample.h" } - - #include + #include "audiooutput.hh" + #include + #include + #include + #include + #include #include - + #include + #include #include - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 2, 0 ) ) - #include - #include - #endif using std::vector; namespace Ffmpeg { class DecoderThread; @@ -106,5 +102,3 @@ signals: } // namespace Ffmpeg #endif // MAKE_FFMPEG_PLAYER - -#endif // __FFMPEGAUDIO_HH_INCLUDED__ diff --git a/src/ffmpegaudioplayer.hh b/src/audio/ffmpegaudioplayer.hh similarity index 86% rename from src/ffmpegaudioplayer.hh rename to src/audio/ffmpegaudioplayer.hh index 8ceb7c8c..6d71b0d8 100644 --- a/src/ffmpegaudioplayer.hh +++ b/src/audio/ffmpegaudioplayer.hh @@ -1,8 +1,7 @@ /* This file is (c) 2018 Igor Kushnir * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef FFMPEGAUDIOPLAYER_HH_INCLUDED -#define FFMPEGAUDIOPLAYER_HH_INCLUDED +#pragma once #include "audioplayerinterface.hh" #include "ffmpegaudio.hh" @@ -41,5 +40,3 @@ public: } // namespace Ffmpeg #endif // MAKE_FFMPEG_PLAYER - -#endif // FFMPEGAUDIOPLAYER_HH_INCLUDED diff --git a/src/multimediaaudioplayer.cc b/src/audio/multimediaaudioplayer.cc similarity index 59% rename from src/multimediaaudioplayer.cc rename to src/audio/multimediaaudioplayer.cc index c117c629..aecc330b 100644 --- a/src/multimediaaudioplayer.cc +++ b/src/audio/multimediaaudioplayer.cc @@ -4,37 +4,18 @@ #ifdef MAKE_QTMULTIMEDIA_PLAYER #include - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - #include - #endif - #if ( QT_VERSION > QT_VERSION_CHECK( 6, 2, 0 ) ) - #include - #endif + #include #include "multimediaaudioplayer.hh" #include MultimediaAudioPlayer::MultimediaAudioPlayer() - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - : - player( 0, QMediaPlayer::StreamPlayback ) - #endif { - typedef void ( QMediaPlayer::*ErrorSignal )( QMediaPlayer::Error ); - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - connect( &player, - static_cast< ErrorSignal >( &QMediaPlayer::error ), - this, - &MultimediaAudioPlayer::onMediaPlayerError ); - #else player.setAudioOutput( &audioOutput ); connect( &player, &QMediaPlayer::errorChanged, this, &MultimediaAudioPlayer::onMediaPlayerError ); - #endif - #if ( QT_VERSION > QT_VERSION_CHECK( 6, 2, 0 ) ) connect( &mediaDevices, &QMediaDevices::audioOutputsChanged, this, &MultimediaAudioPlayer::audioOutputChange ); - #endif } void MultimediaAudioPlayer::audioOutputChange() @@ -50,15 +31,11 @@ QString MultimediaAudioPlayer::play( const char * data, int size ) if ( !audioBuffer->open( QIODevice::ReadOnly ) ) { return tr( "Couldn't open audio buffer for reading." ); } - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) player.setSourceDevice( audioBuffer ); - #if ( QT_VERSION > QT_VERSION_CHECK( 6, 2, 0 ) ) + audioOutput.setDevice( QMediaDevices::defaultAudioOutput() ); player.setAudioOutput( &audioOutput ); - #endif - #else - player.setMedia( QMediaContent(), audioBuffer ); - #endif + player.play(); return {}; } @@ -66,9 +43,7 @@ QString MultimediaAudioPlayer::play( const char * data, int size ) void MultimediaAudioPlayer::stop() { player.stop(); - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - player.setMedia( QMediaContent() ); // Forget about audioBuffer. - #endif + if ( audioBuffer ) { audioBuffer->close(); audioBuffer->setData( QByteArray() ); // Free memory. diff --git a/src/multimediaaudioplayer.hh b/src/audio/multimediaaudioplayer.hh similarity index 62% rename from src/multimediaaudioplayer.hh rename to src/audio/multimediaaudioplayer.hh index 19d83404..829f5aa7 100644 --- a/src/multimediaaudioplayer.hh +++ b/src/audio/multimediaaudioplayer.hh @@ -1,20 +1,15 @@ /* This file is (c) 2018 Igor Kushnir * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef MULTIMEDIAAUDIOPLAYER_HH_INCLUDED -#define MULTIMEDIAAUDIOPLAYER_HH_INCLUDED +#pragma once #ifdef MAKE_QTMULTIMEDIA_PLAYER - #include - #include #include "audioplayerinterface.hh" - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include - #endif - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 2, 0 ) ) - #include - #endif + #include + #include + #include + #include #include class MultimediaAudioPlayer: public AudioPlayerInterface @@ -35,14 +30,8 @@ private slots: private: QPointer< QBuffer > audioBuffer; QMediaPlayer player; ///< Depends on audioBuffer. - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 2, 0 ) ) QAudioOutput audioOutput; - #endif - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 2, 0 ) ) QMediaDevices mediaDevices; - #endif }; #endif // MAKE_QTMULTIMEDIA_PLAYER - -#endif // MULTIMEDIAAUDIOPLAYER_HH_INCLUDED diff --git a/src/audiolink.cc b/src/audiolink.cc index 1e71f9d5..8093ccfb 100644 --- a/src/audiolink.cc +++ b/src/audiolink.cc @@ -11,40 +11,9 @@ std::string addAudioLink( std::string const & url, std::string const & dictionar std::string addAudioLink( QString const & url, std::string const & dictionaryId ) { - if ( url.isEmpty() || url.length() < 2 ) { + if ( url.isEmpty() ) { return {}; } - GlobalBroadcaster::instance()->pronounce_engine.sendAudio( dictionaryId, url.mid( 1, url.length() - 2 ) ); - - return std::string( "" ); -} - -std::string makeAudioLinkScript( std::string const & url, std::string const & dictionaryId ) -{ - /// Convert "'" to "\'" - this char broke autoplay of audiolinks - - std::string ref; - bool escaped = false; - for ( const char ch : url ) { - if ( escaped ) { - ref += ch; - escaped = false; - continue; - } - if ( ch == '\'' ) { - ref += '\\'; - } - ref += ch; - escaped = ( ch == '\\' ); - } - - const std::string audioLinkForDict = QString::fromStdString( R"( -if(!gdAudioMap.has('%1')){ - gdAudioMap.set('%1',%2); -} -)" ) - .arg( QString::fromStdString( dictionaryId ), QString::fromStdString( url ) ) - .toStdString(); - return "gdAudioLinks.first = gdAudioLinks.first || " + ref + ";" + audioLinkForDict; + GlobalBroadcaster::instance()->pronounce_engine.sendAudio( dictionaryId, url ); + return ""; } diff --git a/src/audiolink.hh b/src/audiolink.hh index 314932a6..12afb20d 100644 --- a/src/audiolink.hh +++ b/src/audiolink.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __AUDIOLINK_HH_INCLUDED__ -#define __AUDIOLINK_HH_INCLUDED__ +#pragma once #include @@ -15,6 +14,3 @@ /// The dictionary id is used to make active dictionary feature work. std::string addAudioLink( std::string const & url, std::string const & dictionaryId ); std::string addAudioLink( QString const & url, std::string const & dictionaryId ); -std::string makeAudioLinkScript( std::string const & url, std::string const & dictionaryId ); - -#endif diff --git a/src/common/0README.md b/src/common/README.md similarity index 100% rename from src/common/0README.md rename to src/common/README.md diff --git a/src/common/base_type.hh b/src/common/base_type.hh index c36ada7b..e8eebe41 100644 --- a/src/common/base_type.hh +++ b/src/common/base_type.hh @@ -1,7 +1,5 @@ -#ifndef BASE_TYPE_H -#define BASE_TYPE_H +#pragma once #include -typedef QMap< QString, QString > Contexts; -#endif // BASE_TYPE_H +using Contexts = QMap< QString, QString >; diff --git a/src/common/ex.hh b/src/common/ex.hh index 4bcbdc6e..aec624b0 100644 --- a/src/common/ex.hh +++ b/src/common/ex.hh @@ -1,26 +1,20 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __EX_HH_INCLUDED__ -#define __EX_HH_INCLUDED__ +#pragma once #include +#include + +// clang-format off /// A way to declare an exception class fast /// Do like this: /// DEF_EX( exErrorInFoo, "An error in foo encountered", std::exception ) /// DEF_EX( exFooNotFound, "Foo was not found", exErrorInFoo ) - -#define DEF_EX( exName, exDescription, exParent ) \ - class exName: public exParent \ - { \ - public: \ - virtual const char * what() const noexcept \ - { \ - return ( exDescription ); \ - } \ - virtual ~exName() noexcept {} \ - }; +#define DEF_EX( exName, exDescription, exParent ) \ + constexpr static char ExStr_## exName[] = exDescription; \ + using exName = defineEx< exParent, ExStr_## exName >; /// Same as DEF_EX, but takes a runtime string argument, which gets concatenated /// with the description. @@ -30,22 +24,36 @@ /// throw exCantOpen( "example.txt" ); /// /// what() would return "can't open file example.txt" +/// +#define DEF_EX_STR( exName, exDescription, exParent ) \ + constexpr static char ExStr_## exName[] = exDescription; \ + using exName = defineExStr< exParent, ExStr_## exName >; -#define DEF_EX_STR( exName, exDescription, exParent ) \ - class exName: public exParent \ - { \ - std::string value; \ - \ - public: \ - explicit exName( std::string const & value_ ): \ - value( std::string( exDescription ) + " " + value_ ) \ - { \ - } \ - virtual const char * what() const noexcept \ - { \ - return value.c_str(); \ - } \ - virtual ~exName() noexcept {} \ - }; +// clang-format on -#endif +template< typename ParentEx, const char * description > +class defineEx: public ParentEx +{ +public: + virtual const char * what() const noexcept + { + return description; + } +}; + +template< typename ParentEx, const char * description > +class defineExStr: public ParentEx +{ +public: + explicit defineExStr( std::string const & message_ ): + message( fmt::format( "{} {}", description, message_ ) ) + { + } + virtual const char * what() const noexcept + { + return message.c_str(); + } + +private: + std::string message; +}; diff --git a/src/common/filetype.hh b/src/common/filetype.hh index f63d9521..4f7b8271 100644 --- a/src/common/filetype.hh +++ b/src/common/filetype.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __FILETYPE_HH_INCLUDED__ -#define __FILETYPE_HH_INCLUDED__ +#pragma once #include @@ -31,5 +30,3 @@ bool isNameOfCSS( string const & ); bool isNameOfSvg( string const & name ); } // namespace Filetype - -#endif diff --git a/src/common/folding.cc b/src/common/folding.cc index a6073342..f737371a 100644 --- a/src/common/folding.cc +++ b/src/common/folding.cc @@ -20,41 +20,23 @@ bool isCombiningMark( wchar ch ) wstring apply( wstring const & in, bool preserveWildcards ) { - //remove space and accent; - auto withPunc = QString::fromStdU32String( in ) - .normalized( QString::NormalizationForm_KD ) - .remove( RX::markSpace ) - .toStdU32String(); - - //First, strip diacritics and apply ws/punctuation removal - wstring withoutDiacritics; - - withoutDiacritics.reserve( withPunc.size() ); - - - for ( auto const & ch : withPunc ) { - - if ( !isPunct( ch ) - || ( preserveWildcards && ( ch == '\\' || ch == '?' || ch == '*' || ch == '[' || ch == ']' ) ) ) { - withoutDiacritics.push_back( ch ); - } - } - - - // Now, fold the case - - wstring caseFolded; - - caseFolded.reserve( withoutDiacritics.size() * foldCaseMaxOut ); - - wchar const * nextChar = withoutDiacritics.data(); - + // remove diacritics (normalization), white space, punt, + auto temp = QString::fromStdU32String( in ) + .normalized( QString::NormalizationForm_KD ) + .remove( RX::markSpace ) + .removeIf( [ preserveWildcards ]( const QChar & ch ) -> bool { + return ch.isPunct() + && !( preserveWildcards && ( ch == '\\' || ch == '?' || ch == '*' || ch == '[' || ch == ']' ) ); + } ) + .toStdU32String(); + // case folding + std::u32string caseFolded; + caseFolded.reserve( temp.size() ); wchar buf[ foldCaseMaxOut ]; - - for ( size_t left = withoutDiacritics.size(); left--; ) { - caseFolded.append( buf, foldCase( *nextChar++, buf ) ); + for ( const char32_t ch : temp ) { + auto n = foldCase( ch, buf ); + caseFolded.append( buf, n ); } - return caseFolded; } diff --git a/src/common/folding.hh b/src/common/folding.hh index 33f82079..9e9caaea 100644 --- a/src/common/folding.hh +++ b/src/common/folding.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __FOLDING_HH_INCLUDED__ -#define __FOLDING_HH_INCLUDED__ +#pragma once #include "wstring.hh" #include @@ -90,5 +89,3 @@ QString escapeWildcardSymbols( QString const & ); bool isCombiningMark( wchar ch ); } // namespace Folding - -#endif diff --git a/src/common/gddebug.cc b/src/common/gddebug.cc index be9d365d..e9982c71 100644 --- a/src/common/gddebug.cc +++ b/src/common/gddebug.cc @@ -1,14 +1,10 @@ /* This file is (c) 2013 Abs62 * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#include #include "gddebug.hh" #include -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#else - #include -#endif +#include +#include QFile * logFilePtr; diff --git a/src/common/gddebug.hh b/src/common/gddebug.hh index 3194ea4d..b14d4d60 100644 --- a/src/common/gddebug.hh +++ b/src/common/gddebug.hh @@ -1,5 +1,4 @@ -#ifndef __GDDEBUG_HH_INCLUDED__ -#define __GDDEBUG_HH_INCLUDED__ +#pragma once #include @@ -28,5 +27,3 @@ void gdDebug( const char *, ... ) ; extern QFile * logFilePtr; - -#endif // __GDDEBUG_HH_INCLUDED__ diff --git a/src/common/globalbroadcaster.hh b/src/common/globalbroadcaster.hh index 744c03ee..c1d985d0 100644 --- a/src/common/globalbroadcaster.hh +++ b/src/common/globalbroadcaster.hh @@ -1,5 +1,4 @@ -#ifndef GLOBAL_GLOBALBROADCASTER_H -#define GLOBAL_GLOBALBROADCASTER_H +#pragma once #include #include @@ -47,5 +46,3 @@ signals: void indexingDictionary( QString ); }; - -#endif // GLOBAL_GLOBALBROADCASTER_H diff --git a/src/common/globalregex.hh b/src/common/globalregex.hh index b3e1a126..85fbc460 100644 --- a/src/common/globalregex.hh +++ b/src/common/globalregex.hh @@ -1,5 +1,4 @@ -#ifndef GLOBALREGEX_HH -#define GLOBALREGEX_HH +#pragma once #include @@ -78,5 +77,3 @@ const static QRegularExpression markSpace( R"([\p{M}\p{Z}\p{C}])", QRegularExpre const static QRegularExpression whiteSpace( "\\s+" ); } // namespace RX - -#endif // GLOBALREGEX_HH diff --git a/src/common/htmlescape.hh b/src/common/htmlescape.hh index e437cde1..5ce96ff1 100644 --- a/src/common/htmlescape.hh +++ b/src/common/htmlescape.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __HTMLESCAPE_HH_INCLUDED__ -#define __HTMLESCAPE_HH_INCLUDED__ +#pragma once #include #include @@ -33,5 +32,3 @@ QString fromHtmlEscaped( QString const & str ); string unescapeUtf8( string const & str, HtmlOption option = HtmlOption::Strip ); } // namespace Html - -#endif diff --git a/src/common/iconv.cc b/src/common/iconv.cc index 0d04bfc4..ded249ba 100644 --- a/src/common/iconv.cc +++ b/src/common/iconv.cc @@ -93,7 +93,7 @@ gd::wstring Iconv::toWstring( char const * fromEncoding, void const * fromData, Iconv ic( fromEncoding ); QString outStr = ic.convert( fromData, dataSize ); - return gd::toWString( outStr ); + return outStr.toStdU32String(); } std::string Iconv::toUtf8( char const * fromEncoding, void const * fromData, size_t dataSize ) diff --git a/src/common/iconv.hh b/src/common/iconv.hh index ca35354a..3c72022b 100644 --- a/src/common/iconv.hh +++ b/src/common/iconv.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __ICONV_HH_INCLUDED__ -#define __ICONV_HH_INCLUDED__ +#pragma once #include @@ -47,5 +46,3 @@ public: // Copying/assigning isn't supported Q_DISABLE_COPY_MOVE( Iconv ); }; - -#endif diff --git a/src/common/sptr.hh b/src/common/sptr.hh index bb325e71..e500ba37 100644 --- a/src/common/sptr.hh +++ b/src/common/sptr.hh @@ -1,11 +1,9 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __SPTR_HH_INCLUDED__ -#define __SPTR_HH_INCLUDED__ +#pragma once #include // A shorthand for std::shared_ptr template< class T > using sptr = std::shared_ptr< T >; -#endif diff --git a/src/common/utf8.hh b/src/common/utf8.hh index 824f9971..4a0d2c88 100644 --- a/src/common/utf8.hh +++ b/src/common/utf8.hh @@ -1,7 +1,6 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __UTF8_HH_INCLUDED__ -#define __UTF8_HH_INCLUDED__ +#pragma once #include #include @@ -67,5 +66,3 @@ struct LineFeed LineFeed initLineFeed( Encoding e ); } // namespace Utf8 - -#endif diff --git a/src/common/utils.cc b/src/common/utils.cc index 9e3e004d..ca119af0 100644 --- a/src/common/utils.cc +++ b/src/common/utils.cc @@ -8,6 +8,7 @@ #include #endif #include +#include using std::string; namespace Utils { @@ -119,3 +120,55 @@ void removeDirectory( string const & directory ) } } // namespace Utils::Fs + +namespace Utils::WebSite { +QString urlReplaceWord( const QString url, QString inputWord ) +{ + //copy temp url + auto urlString = url; + + urlString.replace( "%25GDWORD%25", inputWord.toUtf8().toPercentEncoding() ); + + QTextCodec * codec = QTextCodec::codecForName( "Windows-1251" ); + if ( codec ) { + urlString.replace( "%25GD1251%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); + } + + codec = QTextCodec::codecForName( "Big-5" ); + if ( codec ) { + urlString.replace( "%25GDBIG5%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); + } + + codec = QTextCodec::codecForName( "Big5-HKSCS" ); + if ( codec ) { + urlString.replace( "%25GDBIG5HKSCS%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); + } + + codec = QTextCodec::codecForName( "Shift-JIS" ); + if ( codec ) { + urlString.replace( "%25GDSHIFTJIS%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); + } + + codec = QTextCodec::codecForName( "GB18030" ); + if ( codec ) { + urlString.replace( "%25GDGBK%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); + } + + + // Handle all ISO-8859 encodings + for ( int x = 1; x <= 16; ++x ) { + codec = QTextCodec::codecForName( QString( "ISO 8859-%1" ).arg( x ).toLatin1() ); + if ( codec ) { + urlString.replace( QString( "%25GDISO%1%25" ).arg( x ).toUtf8(), + codec->fromUnicode( inputWord ).toPercentEncoding() ); + } + + // Skip encodings 11..12, they don't exist + if ( x == 10 ) { + x = 12; + } + } + + return urlString; +} +} // namespace Utils::WebSite diff --git a/src/common/utils.hh b/src/common/utils.hh index c794e60f..6722ddbe 100644 --- a/src/common/utils.hh +++ b/src/common/utils.hh @@ -1,7 +1,6 @@ /* Thin wrappers for retaining compatibility for both Qt6.x and Qt5.x */ -#ifndef UTILS_HH -#define UTILS_HH +#pragma once #include #include @@ -341,10 +340,12 @@ void removeDirectory( QString const & directory ); void removeDirectory( string const & directory ); } // namespace Fs +namespace WebSite { +QString urlReplaceWord( const QString url, QString word ); +} + QString escapeAmps( QString const & str ); QString unescapeAmps( QString const & str ); } // namespace Utils - -#endif // UTILS_HH diff --git a/src/common/wildcard.cc b/src/common/wildcard.cc index 624e5f9b..65eac7d0 100644 --- a/src/common/wildcard.cc +++ b/src/common/wildcard.cc @@ -9,11 +9,6 @@ QString wildcardsToRegexp( const QString & wc_str ) { -#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) - //qt 5.X does not offer an unanchored version. the default output is enclosed between \A \z. - auto anchorPattern = QRegularExpression::wildcardToRegularExpression( wc_str ); - return anchorPattern.mid( 2, anchorPattern.length() - 4 ); -#else + // The "anchored" version will enclose the output with \A...\z. return QRegularExpression::wildcardToRegularExpression( wc_str, QRegularExpression::UnanchoredWildcardConversion ); -#endif } diff --git a/src/common/wildcard.hh b/src/common/wildcard.hh index fb042071..c44bc159 100644 --- a/src/common/wildcard.hh +++ b/src/common/wildcard.hh @@ -1,8 +1,5 @@ -#ifndef __WILCARD_HH_INCLUDED__ -#define __WILCARD_HH_INCLUDED__ +#pragma once #include QString wildcardsToRegexp( const QString & wc_str ); - -#endif diff --git a/src/common/wstring.hh b/src/common/wstring.hh index 47a1adb6..4ab689e1 100644 --- a/src/common/wstring.hh +++ b/src/common/wstring.hh @@ -12,6 +12,6 @@ /// namespace gd { -typedef char32_t wchar; -typedef std::u32string wstring; +using wchar = char32_t; +using wstring = std::u32string; } // namespace gd diff --git a/src/common/wstring_qt.cc b/src/common/wstring_qt.cc index 147e1259..17cc867f 100644 --- a/src/common/wstring_qt.cc +++ b/src/common/wstring_qt.cc @@ -2,10 +2,6 @@ #include namespace gd { -wstring toWString( QString const & in ) -{ - return in.toStdU32String(); -} // When convert non-BMP characters to wstring,the ending char maybe \0 .This method remove the tailing \0 from the wstring // as \0 is sensitive in the index. This method will be only used with index related operations like store/query. @@ -35,7 +31,7 @@ wstring removeTrailingZero( QString const & in ) wstring normalize( const wstring & str ) { - return toWString( QString::fromStdU32String( str ).normalized( QString::NormalizationForm_C ) ); + return QString::fromStdU32String( str ).normalized( QString::NormalizationForm_C ).toStdU32String(); } diff --git a/src/common/wstring_qt.hh b/src/common/wstring_qt.hh index 094ee239..982478d4 100644 --- a/src/common/wstring_qt.hh +++ b/src/common/wstring_qt.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __WSTRING_QT_HH_INCLUDED__ -#define __WSTRING_QT_HH_INCLUDED__ +#pragma once /// This file adds conversions between gd::wstring and QString. See wstring.hh /// for more details on gd::wstring. @@ -11,10 +10,7 @@ #include namespace gd { -wstring toWString( QString const & ); wstring removeTrailingZero( wstring const & v ); wstring removeTrailingZero( QString const & in ); wstring normalize( wstring const & ); } // namespace gd - -#endif diff --git a/src/config.cc b/src/config.cc index da51d0cc..117ebc2e 100644 --- a/src/config.cc +++ b/src/config.cc @@ -102,32 +102,24 @@ AnkiConnectServer::AnkiConnectServer(): { } -HotKey::HotKey(): - modifiers( 0 ), - key1( 0 ), - key2( 0 ) -{ -} - -// Does anyone know how to separate modifiers from the keycode? We'll -// use our own mask. - -uint32_t const keyMask = 0x01FFFFFF; - HotKey::HotKey( QKeySequence const & seq ): - modifiers( seq[ 0 ] & ~keyMask ), - key1( seq[ 0 ] & keyMask ), - key2( seq[ 1 ] & keyMask ) + modifiers( seq[ 0 ].keyboardModifiers() ), + key1( seq[ 0 ].key() ), + key2( seq[ 1 ].key() ) { } QKeySequence HotKey::toKeySequence() const { - int v2 = key2 ? ( key2 | modifiers ) : 0; - - return QKeySequence( key1 | modifiers, v2 ); + if ( key2 != 0 && key2 != Qt::Key::Key_unknown ) { + return { QKeyCombination( modifiers, static_cast< Qt::Key >( key1 ) ), + QKeyCombination( modifiers, static_cast< Qt::Key >( key2 ) ) }; + } + return { QKeyCombination( modifiers, static_cast< Qt::Key >( key1 ) ) }; + ; } + bool InternalPlayerBackend::anyAvailable() { #if defined( MAKE_FFMPEG_PLAYER ) || defined( MAKE_QTMULTIMEDIA_PLAYER ) @@ -205,16 +197,11 @@ Preferences::Preferences(): hideSingleTab( false ), mruTabOrder( false ), hideMenubar( false ), - enableTrayIcon( true ), - startToTray( false ), - closeToTray( true ), autoStart( false ), doubleClickTranslates( true ), selectWordBySingleClick( false ), autoScrollToTargetArticle( true ), escKeyHidesMainWindow( false ), - darkMode( false ), - darkReaderMode( false ), alwaysOnTop( false ), searchInDock( false ), // on macOS, register hotkeys will override system shortcuts, disabled for now to avoid troubles. @@ -225,8 +212,8 @@ Preferences::Preferences(): enableMainWindowHotkey( true ), enableClipboardHotkey( true ), #endif - mainWindowHotkey( QKeySequence( "Ctrl+F11,F11" ) ), - clipboardHotkey( QKeySequence( "Ctrl+C,C" ) ), + mainWindowHotkey( QKeySequence( "Ctrl+F11, Ctrl+F11" ) ), + clipboardHotkey( QKeySequence( "Ctrl+C, Ctrl+C" ) ), startWithScanPopupOn( false ), enableScanPopupModifiers( false ), scanPopupModifiers( 0 ), @@ -554,9 +541,13 @@ Class load() if ( QDir( "/usr/share/myspell/dicts" ).exists() ) c.hunspell.dictionariesPath = "/usr/share/myspell/dicts"; - #endif + // Put portable hard-code directory the the config for the first time. + if ( isPortableVersion() ) { + // For portable version, hardcode some settings + c.paths.push_back( Path( getPortableVersionDictionaryDir(), true ) ); + } #ifndef Q_OS_WIN32 c.preferences.audioPlaybackProgram = "mplayer"; @@ -625,6 +616,13 @@ Class load() Class c; + // Put the hard-code portable directory to the first. + // To allow additional directories, this path should not be saved. + if ( isPortableVersion() ) { + // For portable version, hardcode some settings + c.paths.push_back( Path( getPortableVersionDictionaryDir(), true ) ); + } + QDomNode paths = root.namedItem( "paths" ); if ( !paths.isNull() ) { @@ -636,11 +634,6 @@ Class load() } } - if ( Config::isPortableVersion() && c.paths.empty() ) { - // For portable version, hardcode some settings - c.paths.push_back( Config::Path( Config::getPortableVersionDictionaryDir(), true ) ); - } - QDomNode soundDirs = root.namedItem( "sounddirs" ); if ( !soundDirs.isNull() ) { @@ -907,10 +900,11 @@ Class load() c.preferences.hideSingleTab = ( preferences.namedItem( "hideSingleTab" ).toElement().text() == "1" ); c.preferences.mruTabOrder = ( preferences.namedItem( "mruTabOrder" ).toElement().text() == "1" ); c.preferences.hideMenubar = ( preferences.namedItem( "hideMenubar" ).toElement().text() == "1" ); - +#ifndef Q_OS_MACOS // // macOS uses the dock menu instead of the tray icon c.preferences.enableTrayIcon = ( preferences.namedItem( "enableTrayIcon" ).toElement().text() == "1" ); c.preferences.startToTray = ( preferences.namedItem( "startToTray" ).toElement().text() == "1" ); c.preferences.closeToTray = ( preferences.namedItem( "closeToTray" ).toElement().text() == "1" ); +#endif c.preferences.autoStart = ( preferences.namedItem( "autoStart" ).toElement().text() == "1" ); c.preferences.alwaysOnTop = ( preferences.namedItem( "alwaysOnTop" ).toElement().text() == "1" ); c.preferences.searchInDock = ( preferences.namedItem( "searchInDock" ).toElement().text() == "1" ); @@ -941,11 +935,12 @@ Class load() } if ( !preferences.namedItem( "darkMode" ).isNull() ) { - c.preferences.darkMode = ( preferences.namedItem( "darkMode" ).toElement().text() == "1" ); + c.preferences.darkMode = static_cast< Dark >( preferences.namedItem( "darkMode" ).toElement().text().toInt() ); } if ( !preferences.namedItem( "darkReaderMode" ).isNull() ) { - c.preferences.darkReaderMode = ( preferences.namedItem( "darkReaderMode" ).toElement().text() == "1" ); + c.preferences.darkReaderMode = + static_cast< Dark >( preferences.namedItem( "darkReaderMode" ).toElement().text().toInt() ); } if ( !preferences.namedItem( "zoomFactor" ).isNull() ) { @@ -1391,7 +1386,11 @@ void save( Class const & c ) QDomElement paths = dd.createElement( "paths" ); root.appendChild( paths ); - for ( const auto & i : c.paths ) { + // Save all paths except the hard-code portable path, + // which is stored in the first element of list. + qsizetype pos = Config::isPortableVersion(); + + for ( const auto & i : c.paths.mid( pos ) ) { QDomElement path = dd.createElement( "path" ); paths.appendChild( path ); @@ -1872,11 +1871,11 @@ void save( Class const & c ) preferences.appendChild( opt ); opt = dd.createElement( "darkMode" ); - opt.appendChild( dd.createTextNode( c.preferences.darkMode ? "1" : "0" ) ); + opt.appendChild( dd.createTextNode( QString::number( static_cast< int >( c.preferences.darkMode ) ) ) ); preferences.appendChild( opt ); opt = dd.createElement( "darkReaderMode" ); - opt.appendChild( dd.createTextNode( c.preferences.darkReaderMode ? "1" : "0" ) ); + opt.appendChild( dd.createTextNode( QString::number( static_cast< int >( c.preferences.darkReaderMode ) ) ) ); preferences.appendChild( opt ); opt = dd.createElement( "zoomFactor" ); diff --git a/src/config.hh b/src/config.hh index b4fd242f..ab38f110 100644 --- a/src/config.hh +++ b/src/config.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __CONFIG_HH_INCLUDED__ -#define __CONFIG_HH_INCLUDED__ +#pragma once #include #include @@ -18,11 +17,25 @@ #include #include +/// Special group IDs +enum GroupId : unsigned { + AllGroupId = UINT_MAX - 1, /// The 'All' group + HelpGroupId = UINT_MAX, /// The fictitious 'Help' group + NoGroupId = 0, /// Invalid value, used to specify that no group id is specified at all. +}; + /// GoldenDict's configuration namespace Config { +// Tri states enum for Dark and Dark reader mode +enum class Dark : std::uint8_t { + Off = 0, + On = 1, + Auto = 2, +}; + /// Dictionaries which are temporarily disabled via the dictionary bar. -typedef QSet< QString > MutedDictionaries; +using MutedDictionaries = QSet< QString >; /// A path where to search for the dictionaries struct Path @@ -47,7 +60,7 @@ struct Path }; /// A list of paths where to search for the dictionaries -typedef QList< Path > Paths; +using Paths = QList< Path >; /// A directory holding bunches of audiofiles, which is indexed into a separate /// dictionary. @@ -72,7 +85,7 @@ struct SoundDir }; /// A list of SoundDirs -typedef QList< SoundDir > SoundDirs; +using SoundDirs = QList< SoundDir >; struct DictionaryRef { @@ -178,14 +191,11 @@ struct HotKey Qt::KeyboardModifiers modifiers; int key1, key2; - HotKey(); - /// Hotkey's constructor, take a QKeySequence's first two keys /// 1st key's modifier will be the `modifiers` above /// 1st key without modifier will becomes `key1` /// 2nd key without modifier will becomes `key2` /// The relation between the int and qt's KeyCode should consult qt's doc - HotKey( QKeySequence const & ); QKeySequence toKeySequence() const; @@ -331,9 +341,17 @@ struct Preferences bool hideSingleTab; bool mruTabOrder; bool hideMenubar; - bool enableTrayIcon; - bool startToTray; - bool closeToTray; + +#ifdef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon + bool closeToTray = false; + bool enableTrayIcon = false; + bool startToTray = false; +#else + bool enableTrayIcon = true; + bool closeToTray = true; + bool startToTray = false; +#endif + bool autoStart; bool doubleClickTranslates; bool selectWordBySingleClick; @@ -413,8 +431,14 @@ struct Preferences // Appearances - bool darkMode; - bool darkReaderMode; + Dark darkMode = Dark::Off; + Dark darkReaderMode = +#if defined( Q_OS_MACOS ) + Dark::Auto; +#else + Dark::Off; +#endif + QString addonStyle; QString displayStyle; // Article Display style (Which also affect interface style on windows) @@ -468,7 +492,7 @@ struct WebSite QString id, name, url; bool enabled; QString iconFilename; - bool inside_iframe; + bool inside_iframe = false; WebSite(): enabled( false ) @@ -498,7 +522,7 @@ struct WebSite }; /// All the WebSites -typedef QList< WebSite > WebSites; +using WebSites = QList< WebSite >; /// Any DICT server struct DictServer @@ -539,14 +563,14 @@ struct DictServer }; /// All the DictServers -typedef QList< DictServer > DictServers; +using DictServers = QList< DictServer >; /// Hunspell configuration struct Hunspell { QString dictionariesPath; - typedef QList< QString > Dictionaries; + using Dictionaries = QList< QString >; Dictionaries enabledDictionaries; @@ -562,7 +586,7 @@ struct Hunspell }; /// All the MediaWikis -typedef QList< MediaWiki > MediaWikis; +using MediaWikis = QList< MediaWiki >; /// Chinese transliteration configuration @@ -674,7 +698,7 @@ struct Transliteration struct Lingua { - bool enable; + bool enable = false; QString languageCodes; bool operator==( Lingua const & other ) const @@ -713,13 +737,16 @@ struct Forvo struct Program { bool enabled; + // NOTE: the value of this enum is used for config enum Type { - Audio, - PlainText, - Html, - PrefixMatch, - MaxTypeValue - } type; + Invalid = -1, // Init value + Audio = 0, + PlainText = 1, + Html = 2, + PrefixMatch = 3, + MaxTypeValue = 4 + }; + Type type = Invalid; QString id, name, commandLine; QString iconFilename; @@ -755,7 +782,7 @@ struct Program } }; -typedef QList< Program > Programs; +using Programs = QList< Program >; #ifndef NO_TTS_SUPPORT struct VoiceEngine @@ -801,7 +828,7 @@ struct VoiceEngine } }; -typedef QList< VoiceEngine > VoiceEngines; +using VoiceEngines = QList< VoiceEngine >; #endif struct HeadwordsDialog @@ -827,6 +854,13 @@ enum class ToolbarsIconSize : std::uint8_t { Large = 2, }; +struct GroupBackup +{ + Group dictionaryOrder; + Group inactiveDictionaries; + Groups groups; +}; + struct Class { Paths paths; @@ -861,7 +895,7 @@ struct Class QString articleSavePath; // Path to save articles bool pinPopupWindow; // Last pin status - bool popupWindowAlwaysOnTop; // Last status of pinned popup window + bool popupWindowAlwaysOnTop = false; // Last status of pinned popup window QByteArray mainWindowState; // Binary state saved by QMainWindow QByteArray mainWindowGeometry; // Geometry saved by QMainWindow @@ -898,7 +932,7 @@ struct Class Group const * getGroup( unsigned id ) const; //disable tts dictionary. does not need to save to persistent file bool notts = false; - bool resetState; + bool resetState = false; }; /// Configuration-specific events. Some parts of the program need to react @@ -1004,5 +1038,3 @@ QString getStylesDir(); QString getCacheDir() noexcept; } // namespace Config - -#endif diff --git a/src/delegate.hh b/src/delegate.hh index 62b044ca..684ca78f 100644 --- a/src/delegate.hh +++ b/src/delegate.hh @@ -1,5 +1,4 @@ -#ifndef __DELEGATE_HH_INCLUDED__ -#define __DELEGATE_HH_INCLUDED__ +#pragma once #include #include @@ -13,5 +12,3 @@ public: private: QStyledItemDelegate * mainDelegate; }; - -#endif diff --git a/src/dict/aard.cc b/src/dict/aard.cc index 97ae8c4e..003f5f85 100644 --- a/src/dict/aard.cc +++ b/src/dict/aard.cc @@ -46,10 +46,6 @@ using BtreeIndexing::IndexInfo; namespace { -DEF_EX_STR( exNotAardFile, "Not an AARD file", Dictionary::Ex ) -DEF_EX_STR( exWordIsTooLarge, "Enountered a word that is too large:", Dictionary::Ex ) -DEF_EX_STR( exSuddenEndOfFile, "Sudden end of file", Dictionary::Ex ) - #pragma pack( push, 1 ) /// AAR file header diff --git a/src/dict/aard.hh b/src/dict/aard.hh index a9583665..038bfae6 100644 --- a/src/dict/aard.hh +++ b/src/dict/aard.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __AARD_HH_INCLUDED__ -#define __AARD_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -18,5 +17,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f unsigned maxHeadwordsToExpand ); } // namespace Aard - -#endif diff --git a/src/dict/belarusiantranslit.hh b/src/dict/belarusiantranslit.hh index 4ea452db..43b06ce3 100644 --- a/src/dict/belarusiantranslit.hh +++ b/src/dict/belarusiantranslit.hh @@ -1,8 +1,7 @@ /* This file is (c) 2013 Maksim Tamkovicz * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __BELARUSIANTRANSLIT_HH_INCLUDED__ -#define __BELARUSIANTRANSLIT_HH_INCLUDED__ +#pragma once #include #include "dictionary.hh" @@ -12,5 +11,3 @@ namespace BelarusianTranslit { std::vector< sptr< Dictionary::Class > > makeDictionaries(); } - -#endif diff --git a/src/dict/bgl.cc b/src/dict/bgl.cc index 0dc1734b..9d38ba9f 100644 --- a/src/dict/bgl.cc +++ b/src/dict/bgl.cc @@ -169,10 +169,6 @@ void addEntryToIndex( string & word, indexedWords.addWord( Utf8::decode( word ), articleOffset ); } - -DEF_EX( exFailedToDecompressArticle, "Failed to decompress article's body", Dictionary::Ex ) -DEF_EX( exChunkIndexOutOfRange, "Chunk index is out of range", Dictionary::Ex ) - class BglDictionary: public BtreeIndexing::BtreeDictionary { QMutex idxMutex; @@ -721,8 +717,8 @@ void BglArticleRequest::run() string const & targetHeadword = displayedHeadword.size() ? displayedHeadword : headword; QCryptographicHash hash( QCryptographicHash::Md5 ); - hash.addData( targetHeadword.data(), targetHeadword.size() + 1 ); // with 0 - hash.addData( articleText.data(), articleText.size() ); + hash.addData( { targetHeadword.data(), static_cast< qsizetype >( targetHeadword.size() + 1 ) } ); // with 0 + hash.addData( { articleText.data(), static_cast< qsizetype >( articleText.size() ) } ); if ( !articleBodiesIncluded.insert( hash.result() ).second ) { continue; // Already had this body diff --git a/src/dict/bgl.hh b/src/dict/bgl.hh index de630d16..6cf8fa5c 100644 --- a/src/dict/bgl.hh +++ b/src/dict/bgl.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __BGL_HH_INCLUDED__ -#define __BGL_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -23,5 +22,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace Bgl - -#endif diff --git a/src/dict/bgl_babylon.hh b/src/dict/bgl_babylon.hh index 565c201c..54bc3a79 100644 --- a/src/dict/bgl_babylon.hh +++ b/src/dict/bgl_babylon.hh @@ -18,8 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef BABYLON_H -#define BABYLON_H +#pragma once #include #include @@ -115,20 +114,20 @@ const std::vector< std::string > bgl_charset = { "WINDOWS-1252", /*Default*/ const std::array< std::string, 11 > partOfSpeech = { "n.", "adj.", "v.", "adv.", "interj.", "pron.", "prep.", "conj.", "suff.", "pref.", "art." }; -typedef struct +struct bgl_block { unsigned type; unsigned length; char * data; -} bgl_block; +}; -typedef struct +struct bgl_entry { std::string headword; std::string definition; std::string displayedHeadword; std::vector< std::string > alternates; -} bgl_entry; +}; class Babylon { @@ -229,5 +228,3 @@ private: BGL_TARGET_CHARSET }; }; - -#endif // BABYLON_H diff --git a/src/dict/btreeidx.hh b/src/dict/btreeidx.hh index b029adcd..2a077ec8 100644 --- a/src/dict/btreeidx.hh +++ b/src/dict/btreeidx.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __BTREEIDX_HH_INCLUDED__ -#define __BTREEIDX_HH_INCLUDED__ +#pragma once #include "dict/dictionary.hh" #include "dictfile.hh" @@ -46,9 +45,9 @@ DEF_EX( exCorruptedChainData, "Corrupted chain data in the leaf of a btree encou struct WordArticleLink { string word, prefix; // in utf8 - uint32_t articleOffset; + uint32_t articleOffset = 0; - WordArticleLink() {} + WordArticleLink() = default; WordArticleLink( string const & word_, uint32_t articleOffset_, string const & prefix_ = string() ): word( word_ ), @@ -270,5 +269,3 @@ struct IndexedWords: public map< string, vector< WordArticleLink > > IndexInfo buildIndex( IndexedWords const &, File::Index & file ); } // namespace BtreeIndexing - -#endif diff --git a/src/dict/chinese.hh b/src/dict/chinese.hh index cc3054de..4c4fcc64 100644 --- a/src/dict/chinese.hh +++ b/src/dict/chinese.hh @@ -1,8 +1,7 @@ /* This file is (c) 2015 Zhe Wang <0x1997@gmail.com> * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __CHINESE_HH_INCLUDED__ -#define __CHINESE_HH_INCLUDED__ +#pragma once #include #include "config.hh" @@ -13,5 +12,3 @@ namespace Chinese { std::vector< sptr< Dictionary::Class > > makeDictionaries( Config::Chinese const & ); } - -#endif diff --git a/src/dict/chunkedstorage.hh b/src/dict/chunkedstorage.hh index 7d231f2c..86c74ea5 100644 --- a/src/dict/chunkedstorage.hh +++ b/src/dict/chunkedstorage.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __CHUNKEDSTORAGE_HH_INCLUDED__ -#define __CHUNKEDSTORAGE_HH_INCLUDED__ +#pragma once #include "ex.hh" #include "dictfile.hh" @@ -86,5 +85,3 @@ public: }; } // namespace ChunkedStorage - -#endif diff --git a/src/dict/customtransliteration.hh b/src/dict/customtransliteration.hh index caaa9bb5..e09882c4 100644 --- a/src/dict/customtransliteration.hh +++ b/src/dict/customtransliteration.hh @@ -1,5 +1,4 @@ -#ifndef CUSTOMTRANSLITERATION_HH -#define CUSTOMTRANSLITERATION_HH +#pragma once #include @@ -23,4 +22,3 @@ private: std::vector< sptr< Dictionary::Class > > makeDictionaries( Config::CustomTrans const & ); } // namespace CustomTranslit -#endif // CUSTOMTRANSLITERATION_HH diff --git a/src/dict/dictdfiles.hh b/src/dict/dictdfiles.hh index 6c86cfae..91765338 100644 --- a/src/dict/dictdfiles.hh +++ b/src/dict/dictdfiles.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __DICTDFILES_HH_INCLUDED__ -#define __DICTDFILES_HH_INCLUDED__ +#pragma once #include "dict/dictionary.hh" @@ -16,5 +15,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace DictdFiles - -#endif diff --git a/src/dict/dictionary.cc b/src/dict/dictionary.cc index bd5929b2..3224e5f7 100644 --- a/src/dict/dictionary.cc +++ b/src/dict/dictionary.cc @@ -181,13 +181,11 @@ sptr< WordSearchRequest > Class::stemmedMatch( wstring const & /*str*/, unsigned /*minLength*/, unsigned /*maxSuffixVariation*/, unsigned long /*maxResults*/ ) - { return std::make_shared< WordSearchRequestInstant >(); } sptr< WordSearchRequest > Class::findHeadwordsForSynonym( wstring const & ) - { return std::make_shared< WordSearchRequestInstant >(); } diff --git a/src/dict/dictionary.hh b/src/dict/dictionary.hh index 2b12fc8b..0d194838 100644 --- a/src/dict/dictionary.hh +++ b/src/dict/dictionary.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __DICTIONARY_HH_INCLUDED__ -#define __DICTIONARY_HH_INCLUDED__ +#pragma once #include #include @@ -291,7 +290,8 @@ enum Feature { /// No features NoFeatures = 0, /// The dictionary is suitable to query when searching for compound expressions. - SuitableForCompoundSearching = 1 + SuitableForCompoundSearching = 1, + WebSite = 2 }; Q_DECLARE_FLAGS( Features, Feature ) @@ -583,5 +583,3 @@ QString generateRandomDictionaryId(); QMap< std::string, sptr< Dictionary::Class > > dictToMap( std::vector< sptr< Dictionary::Class > > const & dicts ); } // namespace Dictionary - -#endif diff --git a/src/dict/dictserver.cc b/src/dict/dictserver.cc index ef1e9bcf..a30ba09a 100644 --- a/src/dict/dictserver.cc +++ b/src/dict/dictserver.cc @@ -424,7 +424,7 @@ public: if ( countn ) { QMutexLocker _( &dataMutex ); for ( int x = 0; x < countn; x++ ) { - matches.emplace_back( gd::toWString( matchesList.at( x ) ) ); + matches.emplace_back( matchesList.at( x ).toStdU32String() ); } } finish(); @@ -538,11 +538,13 @@ void DictServerWordSearchRequest::readMatchData( QByteArray & reply ) if ( word.endsWith( '\"' ) ) { word.chop( 1 ); } - if ( word[ 0 ] == '\"' ) { - word = word.mid( 1 ); + if ( word.startsWith( '\"' ) ) { + word = word.remove( 0, 1 ); } - this->addMatchedWord( word ); + if ( !word.isEmpty() ) { + this->addMatchedWord( word ); + } } reply = this->dictImpl->socket.readLine(); diff --git a/src/dict/dictserver.hh b/src/dict/dictserver.hh index 3a69a10d..2076decc 100644 --- a/src/dict/dictserver.hh +++ b/src/dict/dictserver.hh @@ -1,5 +1,4 @@ -#ifndef __DICTSERVER_HH__INCLUDED__ -#define __DICTSERVER_HH__INCLUDED__ +#pragma once #include "dict/dictionary.hh" #include "config.hh" @@ -13,5 +12,3 @@ using std::string; vector< sptr< Dictionary::Class > > makeDictionaries( Config::DictServers const & servers ); } // namespace DictServer - -#endif // __DICTSERVER_HH__INCLUDED__ diff --git a/src/dict/dsl.cc b/src/dict/dsl.cc index 7dca49b4..120ce813 100644 --- a/src/dict/dsl.cc +++ b/src/dict/dsl.cc @@ -540,7 +540,7 @@ void DslDictionary::loadArticle( uint32_t address, if ( !articleBody ) { // throw exCantReadFile( getDictionaryFilenames()[ 0 ] ); - articleData = U"\n\r\t" + gd::toWString( QString( "DICTZIP error: " ) + dict_error_str( dz ) ); + articleData = U"\n\r\tDICTZIP error: " + QString( dict_error_str( dz ) ).toStdU32String(); } else { try { @@ -851,24 +851,17 @@ string DslDictionary::nodeToHtml( ArticleDom::Node const & node ) string n = resourceDir1 + filename; if ( Filetype::isNameOfSound( filename ) ) { - // If we have the file here, do the exact reference to this dictionary. - // Otherwise, make a global 'search' one. - - bool search = !File::exists( n ) && !File::exists( resourceDir2 + filename ) - && !File::exists( getContainingFolder().toStdString() + Utils::Fs::separator() + filename ) - && ( !resourceZip.isOpen() || !resourceZip.hasFile( Utf8::decode( filename ) ) ); - QUrl url; url.setScheme( "gdau" ); - url.setHost( QString::fromUtf8( search ? "search" : getId().c_str() ) ); + url.setHost( QString::fromUtf8( getId().c_str() ) ); url.setPath( Utils::Url::ensureLeadingSlash( QString::fromUtf8( filename.c_str() ) ) ); - if ( search && idxHeader.hasSoundDictionaryName ) { + if ( idxHeader.hasSoundDictionaryName ) { Utils::Url::setFragment( url, QString::fromUtf8( preferredSoundDictionary.c_str() ) ); } string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; @@ -973,7 +966,7 @@ string DslDictionary::nodeToHtml( ArticleDom::Node const & node ) if ( n >= 0 ) { int n2 = attr.indexOf( '\"', n + 6 ); if ( n2 > 0 ) { - quint32 id = dslLanguageToId( gd::toWString( attr.mid( n + 6, n2 - n - 6 ) ) ); + quint32 id = dslLanguageToId( attr.mid( n + 6, n2 - n - 6 ).toStdU32String() ); langcode = LangCoder::intToCode2( id ).toStdString(); } } @@ -1096,7 +1089,7 @@ QString const & DslDictionary::getDescription() for ( ;; ) { data.clear(); langStr = str.mid( 10 ).replace( '\"', ' ' ).trimmed(); - annLang = LangCoder::findIdForLanguage( gd::toWString( langStr ) ); + annLang = LangCoder::findIdForLanguage( langStr.toStdU32String() ); do { str = annStream.readLine(); if ( str.left( 10 ).compare( "#LANGUAGE " ) == 0 ) { @@ -1398,7 +1391,7 @@ void DslDictionary::getArticleText( uint32_t articleAddress, QString & headword, if ( haveInsidedCards ) { // Use base DSL parser for articles with insided cards - ArticleDom dom( gd::toWString( text ), getName(), articleHeadword ); + ArticleDom dom( text.toStdU32String(), getName(), articleHeadword ); text = QString::fromStdU32String( dom.root.renderAsText( true ) ); } else { diff --git a/src/dict/dsl.hh b/src/dict/dsl.hh index 1360fcae..3e4b69ce 100644 --- a/src/dict/dsl.hh +++ b/src/dict/dsl.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __DSL_HH_INCLUDED__ -#define __DSL_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -18,5 +17,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f unsigned int maxHeadwordSize ); } // namespace Dsl - -#endif diff --git a/src/dict/dsl_details.hh b/src/dict/dsl_details.hh index a74cafdf..8eaa7481 100644 --- a/src/dict/dsl_details.hh +++ b/src/dict/dsl_details.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __DSL_DETAILS_HH_INCLUDED__ -#define __DSL_DETAILS_HH_INCLUDED__ +#pragma once #include #include @@ -10,11 +9,7 @@ #include #include "dictionary.hh" #include "iconv.hh" -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#else - #include -#endif +#include #include #include "utf8.hh" @@ -223,5 +218,3 @@ quint32 dslLanguageToId( wstring const & name ); } // namespace Details } // namespace Dsl - -#endif diff --git a/src/dict/epwing.cc b/src/dict/epwing.cc index 6cdfcb32..315064f5 100644 --- a/src/dict/epwing.cc +++ b/src/dict/epwing.cc @@ -994,7 +994,7 @@ void EpwingWordSearchRequest::findMatches() QMutexLocker _( &dataMutex ); for ( const auto & headword : headwords ) - addMatch( gd::toWString( headword ) ); + addMatch( headword.toStdU32String() ); break; } @@ -1047,7 +1047,7 @@ void addWordToChunks( Epwing::Book::EpwingHeadword & head, chunks.addToBlock( &head.page, sizeof( head.page ) ); chunks.addToBlock( &head.offset, sizeof( head.offset ) ); - wstring hw = gd::toWString( head.headword ); + wstring hw = head.headword.toStdU32String(); indexedWords.addWord( hw, offset ); wordCount++; diff --git a/src/dict/epwing.hh b/src/dict/epwing.hh index 8c9c6241..bc4890c9 100644 --- a/src/dict/epwing.hh +++ b/src/dict/epwing.hh @@ -1,5 +1,4 @@ -#ifndef __EPWING_HH__INCLUDED__ -#define __EPWING_HH__INCLUDED__ +#pragma once #include "dict/dictionary.hh" #include "epwing_book.hh" @@ -20,5 +19,3 @@ void addWordToChunks( Epwing::Book::EpwingHeadword & head, vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace Epwing - -#endif // __EPWING_HH__INCLUDED__ diff --git a/src/dict/epwing_book.cc b/src/dict/epwing_book.cc index f7bf1f40..22dd5069 100644 --- a/src/dict/epwing_book.cc +++ b/src/dict/epwing_book.cc @@ -541,11 +541,7 @@ bool EpwingBook::setSubBook( int book_nom ) QFile f( fileName ); if ( f.open( QFile::ReadOnly | QFile::Text ) ) { QTextStream ts( &f ); - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - ts.setCodec( "UTF-8" ); - #else ts.setEncoding( QStringConverter::Utf8 ); - #endif QString line = ts.readLine(); while ( !line.isEmpty() ) { @@ -1141,7 +1137,7 @@ void EpwingBook::fixHeadword( QString & headword ) // return; //} - gd::wstring folded = Folding::applyPunctOnly( gd::toWString( fixed ) ); + gd::wstring folded = Folding::applyPunctOnly( fixed.toStdU32String() ); //fixed = QString::fromStdU32String( folded ); //if( isHeadwordCorrect( fixed ) ) @@ -1569,7 +1565,7 @@ QByteArray EpwingBook::handleWave( EB_Hook_Code code, const unsigned int * argv url.setPath( Utils::Url::ensureLeadingSlash( name ) ); string ref = string( "\"" ) + url.toEncoded().data() + "\""; - QByteArray result = addAudioLink( ref, dictID.toUtf8().data() ).c_str(); + QByteArray result = addAudioLink( url.toEncoded(), dictID.toUtf8().data() ).c_str(); result += QByteArray( ""; diff --git a/src/dict/epwing_book.hh b/src/dict/epwing_book.hh index 403034cc..25655455 100644 --- a/src/dict/epwing_book.hh +++ b/src/dict/epwing_book.hh @@ -1,5 +1,4 @@ -#ifndef __EPWING_BOOK_HH_INCLUDED__ -#define __EPWING_BOOK_HH_INCLUDED__ +#pragma once #include "dict/dictionary.hh" #include "ex.hh" @@ -17,12 +16,7 @@ #endif #include -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#else - #include -#endif - +#include #ifdef _MSC_VER #include @@ -58,7 +52,7 @@ struct EpwingHeadword class EpwingBook { - typedef std::pair< int, int > EWPos; + using EWPos = std::pair< int, int >; void setErrorString( QString const & func, EB_Error_Code code ); @@ -270,6 +264,3 @@ struct EContainer } // namespace Book } // namespace Epwing - - -#endif // __EPWING_BOOK_HH_INCLUDED__ diff --git a/src/dict/epwing_charmap.hh b/src/dict/epwing_charmap.hh index 66e37ffd..26212084 100644 --- a/src/dict/epwing_charmap.hh +++ b/src/dict/epwing_charmap.hh @@ -1,5 +1,4 @@ -#ifndef __EPWING_CHARMAP_HH_INCLUDED_ -#define __EPWING_CHARMAP_HH_INCLUDED_ +#pragma once #include #include @@ -22,5 +21,3 @@ private: }; } // namespace Epwing - -#endif // __EPWING_CHARMAP_HH_INCLUDED_ diff --git a/src/dict/forvo.cc b/src/dict/forvo.cc index df862ea1..1e010959 100644 --- a/src/dict/forvo.cc +++ b/src/dict/forvo.cc @@ -93,7 +93,7 @@ class ForvoArticleRequest: public Dictionary::DataRequest } }; - typedef std::list< NetReply > NetReplies; + using NetReplies = std::list< NetReply >; NetReplies netReplies; QString apiKey, languageCode; string dictionaryId; @@ -107,7 +107,7 @@ public: string const & dictionaryId_, QNetworkAccessManager & mgr ); - virtual void cancel(); + void cancel() override; private: @@ -260,7 +260,7 @@ void ForvoArticleRequest::requestFinished( QNetworkReply * r ) string ref = string( "\"" ) + url.toEncoded().data() + "\""; - articleBody += addAudioLink( ref, dictionaryId ).c_str(); + articleBody += addAudioLink( url.toEncoded(), dictionaryId ).c_str(); bool isMale = ( item.namedItem( "sex" ).toElement().text().toLower() != "f" ); diff --git a/src/dict/forvo.hh b/src/dict/forvo.hh index a6528441..2d584832 100644 --- a/src/dict/forvo.hh +++ b/src/dict/forvo.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __FORVO_HH_INCLUDED__ -#define __FORVO_HH_INCLUDED__ +#pragma once #include "dictionary.hh" #include "config.hh" @@ -15,5 +14,3 @@ std::vector< sptr< Dictionary::Class > > makeDictionaries( Dictionary::Initializing &, Config::Forvo const &, QNetworkAccessManager & ); } // namespace Forvo - -#endif diff --git a/src/dict/german.hh b/src/dict/german.hh index 46b80416..69bc7431 100644 --- a/src/dict/german.hh +++ b/src/dict/german.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef GERMAN_HH -#define GERMAN_HH +#pragma once #include "dictionary.hh" @@ -11,5 +10,3 @@ namespace GermanTranslit { sptr< Dictionary::Class > makeDictionary(); } - -#endif // GERMAN_HH diff --git a/src/dict/gls.cc b/src/dict/gls.cc index 901cadee..d2893698 100644 --- a/src/dict/gls.cc +++ b/src/dict/gls.cc @@ -32,11 +32,8 @@ #include #include -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#else - #include -#endif +#include + #include #include #include @@ -301,7 +298,6 @@ namespace { ////////////////// GLS Dictionary using Dictionary::exCantReadFile; -DEF_EX( exUserAbort, "User abort", Dictionary::Ex ) DEF_EX_STR( exDictzipError, "DICTZIP error", Dictionary::Ex ) enum { @@ -789,9 +785,11 @@ QString & GlsDictionary::filterResource( QString & article ) articleNewText += match.captured(); } else { - std::string href = "\"gdau://" + getId() + "/" + src.toUtf8().data() + "\""; - QString newTag = QString::fromUtf8( - ( addAudioLink( href, getId() ) + "" ).c_str() ); + std::string audioLink = "gdau://" + getId() + "/" + src.toUtf8().data(); + std::string href = "\"" + audioLink + "\""; + + QString newTag = QString::fromUtf8( + ( addAudioLink( audioLink, getId() ) + "" ).c_str() ); newTag += match.captured( 4 ); if ( match.captured( 4 ).indexOf( "Play)"; diff --git a/src/dict/gls.hh b/src/dict/gls.hh index 26244ea9..e8ba2ac3 100644 --- a/src/dict/gls.hh +++ b/src/dict/gls.hh @@ -1,5 +1,4 @@ -#ifndef __GLS_HH_INCLUDED__ -#define __GLS_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -13,5 +12,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace Gls - -#endif // __GLS_HH_INCLUDED__ diff --git a/src/dict/greektranslit.hh b/src/dict/greektranslit.hh index b6fe3f39..83331146 100644 --- a/src/dict/greektranslit.hh +++ b/src/dict/greektranslit.hh @@ -1,8 +1,7 @@ /* This file is (c) 2010 Jennie Petoumenou * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef GREEKTRANSLIT_HH -#define GREEKTRANSLIT_HH +#pragma once #include "dictionary.hh" @@ -11,5 +10,3 @@ namespace GreekTranslit { sptr< Dictionary::Class > makeDictionary(); } - -#endif // GREEKTRANSLIT_HH diff --git a/src/dict/hunspell.cc b/src/dict/hunspell.cc index 6d9bf531..1a603337 100644 --- a/src/dict/hunspell.cc +++ b/src/dict/hunspell.cc @@ -413,7 +413,7 @@ QList< wstring > suggest( wstring & word, QMutex & hunspellMutex, Hunspell & hun auto match = cutStem.match( suggestion.trimmed() ); if ( match.hasMatch() ) { - wstring alt = gd::toWString( match.captured( 1 ) ); + wstring alt = match.captured( 1 ).toStdU32String(); if ( Folding::applySimpleCaseOnly( alt ) != lowercasedWord ) // No point in providing same word { @@ -643,7 +643,7 @@ wstring decodeFromHunspell( Hunspell & hunspell, char const * str ) size_t outLeft = result.size() * sizeof( wchar ); QString convStr = conv.convert( in, inLeft ); - return gd::toWString( convStr ); + return convStr.toStdU32String(); } } // namespace diff --git a/src/dict/hunspell.hh b/src/dict/hunspell.hh index 5c8237c7..6be3cf1c 100644 --- a/src/dict/hunspell.hh +++ b/src/dict/hunspell.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __HUNSPELL_HH_INCLUDED__ -#define __HUNSPELL_HH_INCLUDED__ +#pragma once #ifdef _MSC_VER #define HUNSPELL_STATIC @@ -41,5 +40,3 @@ vector< DataFiles > findDataFiles( QString const & path ); vector< sptr< Dictionary::Class > > makeDictionaries( Config::Hunspell const & ); } // namespace HunspellMorpho - -#endif diff --git a/src/dict/lingualibre.cc b/src/dict/lingualibre.cc index d6446d6b..fbf213af 100644 --- a/src/dict/lingualibre.cc +++ b/src/dict/lingualibre.cc @@ -33,7 +33,7 @@ class LinguaArticleRequest: public Dictionary::DataRequest } }; - typedef std::list< NetReply > NetReplies; + using NetReplies = std::list< NetReply >; NetReplies netReplies; QString languageCode, langWikipediaID; string dictionaryId; @@ -47,7 +47,7 @@ public: string const & dictionaryId_, QNetworkAccessManager & mgr ); - virtual void cancel(); + void cancel() override; private: @@ -357,7 +357,7 @@ void LinguaArticleRequest::requestFinished( QNetworkReply * r ) string title = pageJsonObj[ "title" ].toString().toHtmlEscaped().toStdString(); string audiolink = pageJsonObj[ "imageinfo" ].toArray().at( 0 ).toObject()[ "url" ].toString().toHtmlEscaped().toStdString(); - articleBody += addAudioLink( "\"" + audiolink + "\"", dictionaryId ); + articleBody += addAudioLink( audiolink, dictionaryId ); articleBody += R"()"; diff --git a/src/dict/lingualibre.hh b/src/dict/lingualibre.hh index 733d2108..ee78675a 100644 --- a/src/dict/lingualibre.hh +++ b/src/dict/lingualibre.hh @@ -1,5 +1,4 @@ -#ifndef GOLDENDICT_LINGUALIBRE_H -#define GOLDENDICT_LINGUALIBRE_H +#pragma once #include "dictionary.hh" #include "config.hh" @@ -11,5 +10,3 @@ std::vector< sptr< Dictionary::Class > > makeDictionaries( Dictionary::Initializing &, Config::Lingua const &, QNetworkAccessManager & ); } // namespace Lingua - -#endif //GOLDENDICT_LINGUALIBRE_H diff --git a/src/dict/loaddictionaries.hh b/src/dict/loaddictionaries.hh index ca060bb1..8768a61d 100644 --- a/src/dict/loaddictionaries.hh +++ b/src/dict/loaddictionaries.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __LOADDICTIONARIES_HH_INCLUDED__ -#define __LOADDICTIONARIES_HH_INCLUDED__ +#pragma once #include "initializing.hh" #include "config.hh" @@ -75,4 +74,3 @@ void loadDictionaries( QWidget * parent, /// Runs deferredInit() on all the given dictionaries. Useful when /// loadDictionaries() was previously called with doDeferredInit = false. void doDeferredInit( std::vector< sptr< Dictionary::Class > > & ); -#endif diff --git a/src/dict/lsa.cc b/src/dict/lsa.cc index fd073f41..72c878fb 100644 --- a/src/dict/lsa.cc +++ b/src/dict/lsa.cc @@ -277,7 +277,7 @@ sptr< Dictionary::DataRequest > LsaDictionary::getArticle( wstring const & word, string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; result += "" + i->second + ""; @@ -294,7 +294,7 @@ sptr< Dictionary::DataRequest > LsaDictionary::getArticle( wstring const & word, string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; result += "" + i->second + ""; diff --git a/src/dict/lsa.hh b/src/dict/lsa.hh index cfece681..ff4f3d3a 100644 --- a/src/dict/lsa.hh +++ b/src/dict/lsa.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __L9SA_HH_INCLUDED__ -#define __L9SA_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -16,5 +15,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace Lsa - -#endif diff --git a/src/dict/mdictparser.cc b/src/dict/mdictparser.cc index b2072852..5ff991c9 100644 --- a/src/dict/mdictparser.cc +++ b/src/dict/mdictparser.cc @@ -32,11 +32,8 @@ #include #include #include -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#else - #include -#endif +#include + #include "decompress.hh" #include "gddebug.hh" #include "ripemd.hh" @@ -264,14 +261,12 @@ bool MdictParser::parseCompressedBlock( qint64 compressedBlockSize, case 0x02000000: // zlib compression - decompressedBlock = zlibDecompress( buf, size ); - - if ( !checkAdler32( decompressedBlock.constData(), decompressedBlock.size(), checksum ) ) { - gdWarning( "MDict: parseCompressedBlock: zlib: checksum does not match" ); + decompressedBlock = zlibDecompress( buf, size, checksum ); + if ( decompressedBlock.isEmpty() ) { + gdWarning( "MDict: parseCompressedBlock: zlib: failed to decompress or checksum does not match" ); return false; } break; - default: gdWarning( "MDict: parseCompressedBlock: unknown type" ); return false; diff --git a/src/dict/mdictparser.hh b/src/dict/mdictparser.hh index a4d44edd..67153471 100644 --- a/src/dict/mdictparser.hh +++ b/src/dict/mdictparser.hh @@ -18,8 +18,7 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -#ifndef __MDICTPARSER_HH_INCLUDED__ -#define __MDICTPARSER_HH_INCLUDED__ +#pragma once #include #include @@ -112,9 +111,9 @@ public: virtual void handleRecord( QString const & name, RecordInfo const & recordInfo ) = 0; }; - typedef vector< pair< qint64, qint64 > > BlockInfoVector; - typedef vector< pair< qint64, QString > > HeadWordIndex; - typedef map< qint32, pair< QString, QString > > StyleSheets; + using BlockInfoVector = vector< pair< qint64, qint64 > >; + using HeadWordIndex = vector< pair< qint64, QString > >; + using StyleSheets = map< qint32, pair< QString, QString > >; inline QString const & title() const { @@ -215,5 +214,3 @@ protected: }; } // namespace Mdict - -#endif // __MDICTPARSER_HH_INCLUDED__ diff --git a/src/dict/mdx.cc b/src/dict/mdx.cc index 81b0ec8e..7b788ace 100644 --- a/src/dict/mdx.cc +++ b/src/dict/mdx.cc @@ -317,6 +317,12 @@ MdxDictionary::MdxDictionary( string const & id, string const & indexFile, vecto dictionaryName = string( &buf.front(), len ); } + //fallback, use filename as dictionary name + if ( dictionaryName.empty() ) { + QFileInfo f( QString::fromUtf8( dictionaryFiles[ 0 ].c_str() ) ); + dictionaryName = f.baseName().toStdString(); + } + // then read the dictionary's encoding len = idx.read< uint32_t >(); if ( len > 0 ) { @@ -615,7 +621,7 @@ void MdxArticleRequest::run() } QCryptographicHash hash( QCryptographicHash::Md5 ); - hash.addData( articleBody.data(), articleBody.size() ); + hash.addData( { articleBody.data(), static_cast< qsizetype >( articleBody.length() ) } ); if ( !articleBodiesIncluded.insert( hash.result() ).second ) { continue; // Already had this body } @@ -779,7 +785,7 @@ void MddResourceRequest::run() data.push_back( '\0' ); QString target = MdictParser::toUtf16( "UTF-16LE", &data.front() + sizeof( pattern ), data.size() - sizeof( pattern ) ); - resourceName = gd::toWString( target.trimmed() ); + resourceName = target.trimmed().toStdU32String(); continue; } } @@ -920,11 +926,10 @@ void MdxDictionary::replaceLinks( QString & id, QString & article ) QRegularExpressionMatch match = RX::Mdx::audioRe.match( newLink ); if ( match.hasMatch() ) { // sounds and audio link script - QString newTxt = - match.captured( 1 ) + match.captured( 2 ) + "gdau://" + id + "/" + match.captured( 3 ) + match.captured( 2 ); - newLink = - QString::fromUtf8( - addAudioLink( "\"gdau://" + getId() + "/" + match.captured( 3 ).toUtf8().data() + "\"", getId() ).c_str() ) + QString newTxt = match.captured( 1 ) + match.captured( 2 ) + "gdau://" + id + "/" + match.captured( 3 ) + + match.captured( 2 ) + R"( onclick="return false;" )"; + newLink = QString::fromUtf8( + addAudioLink( "gdau://" + getId() + "/" + match.captured( 3 ).toUtf8().data(), getId() ).c_str() ) + newLink.replace( match.capturedStart(), match.capturedLength(), newTxt ); } @@ -981,7 +986,7 @@ void MdxDictionary::replaceLinks( QString & id, QString & article ) continue; } else { - //audio ,video ,html5 tags fall here. + //audio ,script,video ,html5 tags fall here. match = RX::Mdx::srcRe.match( linkTxt ); if ( match.hasMatch() ) { QString newText; @@ -993,9 +998,15 @@ void MdxDictionary::replaceLinks( QString & id, QString & article ) else { scheme = "bres://"; } + newText = match.captured( 1 ) + match.captured( 2 ) + scheme + id + "/" + match.captured( 3 ) + match.captured( 2 ); + //add defer to script tag + if ( linkType.compare( "script" ) == 0 ) { + newText = newText + " defer "; + } + newLink = linkTxt.replace( match.capturedStart(), match.capturedLength(), newText ); } else { @@ -1189,7 +1200,7 @@ QString MdxDictionary::getCachedFileName( QString filename ) data.push_back( '\0' ); QString target = MdictParser::toUtf16( "UTF-16LE", &data.front() + sizeof( pattern ), data.size() - sizeof( pattern ) ); - resourceName = gd::toWString( target.trimmed() ); + resourceName = target.trimmed().toStdU32String(); continue; } break; @@ -1238,14 +1249,14 @@ static void addEntryToIndex( QString const & word, uint32_t offset, IndexedWords { // Strip any leading or trailing whitespaces QString wordTrimmed = word.trimmed(); - indexedWords.addWord( gd::toWString( wordTrimmed ), offset ); + indexedWords.addWord( wordTrimmed.toStdU32String(), offset ); } static void addEntryToIndexSingle( QString const & word, uint32_t offset, IndexedWords & indexedWords ) { // Strip any leading or trailing whitespaces QString wordTrimmed = word.trimmed(); - indexedWords.addSingleWord( gd::toWString( wordTrimmed ), offset ); + indexedWords.addSingleWord( wordTrimmed.toStdU32String(), offset ); } class ArticleHandler: public MdictParser::RecordHandler diff --git a/src/dict/mdx.hh b/src/dict/mdx.hh index f2d09c64..52b60d1c 100644 --- a/src/dict/mdx.hh +++ b/src/dict/mdx.hh @@ -1,8 +1,7 @@ /* This file is (c) 2013 Timon Wong * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __MDX_HH_INCLUDED__ -#define __MDX_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -15,5 +14,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace Mdx - -#endif // __MDX_HH_INCLUDED__ diff --git a/src/dict/mediawiki.cc b/src/dict/mediawiki.cc index 216f0df4..00fb683c 100644 --- a/src/dict/mediawiki.cc +++ b/src/dict/mediawiki.cc @@ -223,7 +223,7 @@ void MediaWikiWordSearchRequest::downloadFinished() qDebug() << "matches" << matches.size(); for ( int x = 0; x < nl.length(); ++x ) { - matches.emplace_back( gd::toWString( nl.item( x ).toElement().attribute( "title" ) ) ); + matches.emplace_back( nl.item( x ).toElement().attribute( "title" ).toStdU32String() ); } } } @@ -389,7 +389,7 @@ void MediaWikiSectionsParser::closeListTags( int currentLevel ) class MediaWikiArticleRequest: public MediaWikiDataRequestSlots { - typedef std::list< std::pair< QNetworkReply *, bool > > NetReplies; + using NetReplies = std::list< std::pair< QNetworkReply *, bool > >; NetReplies netReplies; QString url; QString lang; @@ -608,7 +608,7 @@ void MediaWikiArticleRequest::requestFinished( QNetworkReply * r ) if ( ref.startsWith( "//" ) ) { ref = wikiUrl.scheme() + ":" + ref; } - auto script = addAudioLink( "\"" + ref + "\"", this->dictPtr->getId() ); + auto script = addAudioLink( ref, this->dictPtr->getId() ); QString audio_url = QString::fromStdString( script ) + "Play)"; articleNewString += audio_url; diff --git a/src/dict/mediawiki.hh b/src/dict/mediawiki.hh index d1008549..257ff92b 100644 --- a/src/dict/mediawiki.hh +++ b/src/dict/mediawiki.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __MEDIAWIKI_HH_INCLUDED__ -#define __MEDIAWIKI_HH_INCLUDED__ +#pragma once #include "dictionary.hh" #include "config.hh" @@ -18,5 +17,3 @@ makeDictionaries( Dictionary::Initializing &, Config::MediaWikis const & wikis, } // namespace MediaWiki - -#endif diff --git a/src/dict/programs.cc b/src/dict/programs.cc index ef04f92d..1b1cd079 100644 --- a/src/dict/programs.cc +++ b/src/dict/programs.cc @@ -95,7 +95,7 @@ ProgramsDictionary::getArticle( wstring const & word, vector< wstring > const &, string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; result += "" + Html::escape( wordUtf8 ) + ""; @@ -334,7 +334,7 @@ void ProgramWordSearchRequest::instanceFinished( QByteArray output, QString erro QStringList result = QString::fromUtf8( output ).split( "\n", Qt::SkipEmptyParts ); for ( const auto & x : result ) { - matches.push_back( Dictionary::WordMatch( gd::toWString( x ) ) ); + matches.push_back( Dictionary::WordMatch( x.toStdU32String() ) ); } if ( !error.isEmpty() ) { diff --git a/src/dict/programs.hh b/src/dict/programs.hh index 60e37baf..772cecf9 100644 --- a/src/dict/programs.hh +++ b/src/dict/programs.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __PROGRAMS_HH_INCLUDED__ -#define __PROGRAMS_HH_INCLUDED__ +#pragma once #include #include "dictionary.hh" @@ -79,5 +78,3 @@ private slots: }; } // namespace Programs - -#endif diff --git a/src/dict/romaji.hh b/src/dict/romaji.hh index 2de2f3cc..1469d088 100644 --- a/src/dict/romaji.hh +++ b/src/dict/romaji.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __ROMAJI_HH_INCLUDED__ -#define __ROMAJI_HH_INCLUDED__ +#pragma once #include "transliteration.hh" #include "config.hh" @@ -14,5 +13,3 @@ using std::vector; vector< sptr< Dictionary::Class > > makeDictionaries( Config::Romaji const & ); } // namespace Romaji - -#endif diff --git a/src/dict/russiantranslit.hh b/src/dict/russiantranslit.hh index b3cd93c3..4980bd21 100644 --- a/src/dict/russiantranslit.hh +++ b/src/dict/russiantranslit.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __RUSSIANTRANSLIT_HH_INCLUDED__ -#define __RUSSIANTRANSLIT_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -11,5 +10,3 @@ namespace RussianTranslit { sptr< Dictionary::Class > makeDictionary(); } - -#endif diff --git a/src/dict/sdict.cc b/src/dict/sdict.cc index e84eb019..3a34a8c0 100644 --- a/src/dict/sdict.cc +++ b/src/dict/sdict.cc @@ -1,36 +1,31 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#include "sdict.hh" #include "btreeidx.hh" -#include "folding.hh" -#include "utf8.hh" #include "chunkedstorage.hh" -#include "langcoder.hh" -#include "gddebug.hh" - #include "decompress.hh" -#include "htmlescape.hh" +#include "folding.hh" #include "ftshelpers.hh" - +#include "gddebug.hh" +#include "htmlescape.hh" +#include "langcoder.hh" +#include "sdict.hh" +#include "utf8.hh" #include +#include +#include +#include +#include #include #include +#include "utils.hh" + + #ifdef _MSC_VER #include #endif -#include -#include -#include -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#endif -#include - -#include "utils.hh" - namespace Sdict { using std::map; diff --git a/src/dict/sdict.hh b/src/dict/sdict.hh index a6b0a5ff..04cfc6d8 100644 --- a/src/dict/sdict.hh +++ b/src/dict/sdict.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __SDICT_HH_INCLUDED__ -#define __SDICT_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -16,5 +15,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace Sdict - -#endif diff --git a/src/dict/slob.cc b/src/dict/slob.cc index 25b79861..e5154dfb 100644 --- a/src/dict/slob.cc +++ b/src/dict/slob.cc @@ -109,8 +109,8 @@ bool indexIsOldOrBad( string const & indexFile ) class SlobFile { public: - typedef std::pair< quint64, quint32 > RefEntryOffsetItem; - typedef QList< RefEntryOffsetItem > RefOffsetsVector; + using RefEntryOffsetItem = std::pair< quint64, quint32 >; + using RefOffsetsVector = QList< RefEntryOffsetItem >; private: enum Compressions { @@ -1315,10 +1315,10 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f || contentType.startsWith( "text/plain", Qt::CaseInsensitive ) ) { //Article if ( maxHeadwordsToExpand && entries > maxHeadwordsToExpand ) { - indexedWords.addSingleWord( gd::toWString( refEntry.key ), offsets[ i ].second ); + indexedWords.addSingleWord( refEntry.key.toStdU32String(), offsets[ i ].second ); } else { - indexedWords.addWord( gd::toWString( refEntry.key ), offsets[ i ].second ); + indexedWords.addWord( refEntry.key.toStdU32String(), offsets[ i ].second ); } wordCount += 1; @@ -1330,7 +1330,7 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f } } else { - indexedResources.addSingleWord( gd::toWString( refEntry.key ), offsets[ i ].second ); + indexedResources.addSingleWord( refEntry.key.toStdU32String(), offsets[ i ].second ); } } sf.clearRefOffsets(); diff --git a/src/dict/slob.hh b/src/dict/slob.hh index 0513e015..4691659b 100644 --- a/src/dict/slob.hh +++ b/src/dict/slob.hh @@ -1,5 +1,4 @@ -#ifndef __SLOB_HH_INCLUDED__ -#define __SLOB_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -15,5 +14,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f unsigned maxHeadwordsToExpand ); } // namespace Slob - -#endif // __SLOB_HH_INCLUDED__ diff --git a/src/dict/sounddir.cc b/src/dict/sounddir.cc index 0a71de23..2c725476 100644 --- a/src/dict/sounddir.cc +++ b/src/dict/sounddir.cc @@ -229,7 +229,7 @@ sptr< Dictionary::DataRequest > SoundDirDictionary::getArticle( wstring const & string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; result += "" + _displayName + ""; @@ -277,7 +277,7 @@ sptr< Dictionary::DataRequest > SoundDirDictionary::getArticle( wstring const & string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; result += "" + _displayName + ""; @@ -409,7 +409,7 @@ void addDir( QDir const & baseDir, const uint32_t articleOffset = chunks.startNewBlock(); chunks.addToBlock( fileName.c_str(), fileName.size() + 1 ); - wstring name = gd::toWString( i->fileName() ); + wstring name = i->fileName().toStdU32String(); const wstring::size_type pos = name.rfind( L'.' ); diff --git a/src/dict/sounddir.hh b/src/dict/sounddir.hh index 7e2ee63e..2c5a5ab2 100644 --- a/src/dict/sounddir.hh +++ b/src/dict/sounddir.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __SOUNDDIR_HH_INCLUDED__ -#define __SOUNDDIR_HH_INCLUDED__ +#pragma once #include "dictionary.hh" #include "config.hh" @@ -17,5 +16,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( Config::SoundDirs const &, string const & indicesDir, Dictionary::Initializing & ); } // namespace SoundDir - -#endif diff --git a/src/dict/sources.cc b/src/dict/sources.cc index b96b18b8..223f9e05 100644 --- a/src/dict/sources.cc +++ b/src/dict/sources.cc @@ -55,6 +55,8 @@ Sources::Sources( QWidget * parent, Config::Class const & cfg ): ui.webSites->setTabKeyNavigation( true ); ui.webSites->setModel( &webSitesModel ); + //[As link] column. + ui.webSites->setColumnHidden( 1, true ); ui.webSites->resizeColumnToContents( 0 ); ui.webSites->resizeColumnToContents( 1 ); ui.webSites->resizeColumnToContents( 2 ); @@ -1171,6 +1173,13 @@ Qt::ItemFlags PathsModel::flags( QModelIndex const & index ) const { Qt::ItemFlags result = QAbstractItemModel::flags( index ); + if ( Config::isPortableVersion() ) { + if ( index.isValid() && index.row() == 0 ) { + result &= ~Qt::ItemIsSelectable; + result &= ~Qt::ItemIsEnabled; + } + } + if ( index.isValid() && index.column() == 1 ) { result |= Qt::ItemIsUserCheckable; } diff --git a/src/dict/sources.hh b/src/dict/sources.hh index 0754f7aa..e7232750 100644 --- a/src/dict/sources.hh +++ b/src/dict/sources.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __SOURCES_HH_INCLUDED__ -#define __SOURCES_HH_INCLUDED__ +#pragma once #include "ui_sources.h" #include "config.hh" @@ -360,5 +359,3 @@ private slots: void on_rescan_clicked(); }; - -#endif diff --git a/src/dict/stardict.cc b/src/dict/stardict.cc index 8b6a0dd1..decdacb6 100644 --- a/src/dict/stardict.cc +++ b/src/dict/stardict.cc @@ -64,14 +64,11 @@ DEF_EX( exNotAnIfoFile, "Not an .ifo file", Dictionary::Ex ) DEF_EX_STR( exBadFieldInIfo, "Bad field in .ifo file encountered:", Dictionary::Ex ) DEF_EX_STR( exNoIdxFile, "No corresponding .idx file was found for", Dictionary::Ex ) DEF_EX_STR( exNoDictFile, "No corresponding .dict file was found for", Dictionary::Ex ) -DEF_EX_STR( exNoSynFile, "No corresponding .syn file was found for", Dictionary::Ex ) DEF_EX( ex64BitsNotSupported, "64-bit indices are not presently supported, sorry", Dictionary::Ex ) DEF_EX( exDicttypeNotSupported, "Dictionaries with dicttypes are not supported, sorry", Dictionary::Ex ) using Dictionary::exCantReadFile; -DEF_EX_STR( exWordIsTooLarge, "Enountered a word that is too large:", Dictionary::Ex ) -DEF_EX_STR( exSuddenEndOfFile, "Sudden end of file", Dictionary::Ex ) DEF_EX_STR( exDictzipError, "DICTZIP error", Dictionary::Ex ) DEF_EX_STR( exIncorrectOffset, "Incorrect offset encountered in file", Dictionary::Ex ) @@ -456,7 +453,7 @@ string StardictDictionary::handleResource( char type, char const * resource, siz // See "Type identifiers" at http://www.huzheng.org/stardict/StarDictFileFormat switch ( type ) { case 'x': // Xdxf content - return Xdxf2Html::convert( string( resource, size ), Xdxf2Html::STARDICT, NULL, this, &resourceZip ); + return Xdxf2Html::convert( string( resource, size ), Xdxf2Html::STARDICT, NULL, this ); case 'h': // Html content { QString articleText = QString( "
" ) + QString::fromUtf8( resource, size ) + "
"; @@ -543,8 +540,9 @@ string StardictDictionary::handleResource( char type, char const * resource, siz articleNewText += match.captured(); } else { - std::string href = "\"gdau://" + getId() + "/" + src.toUtf8().data() + "\""; - std::string newTag = addAudioLink( href, getId() ) + ""; + std::string audioLink = "gdau://" + getId() + "/" + src.toUtf8().data(); + std::string href = "\"" + audioLink + "\""; + std::string newTag = addAudioLink( audioLink, getId() ) + ""; newTag += match.captured( 4 ).toUtf8().constData(); if ( match.captured( 4 ).indexOf( "Play)"; diff --git a/src/dict/stardict.hh b/src/dict/stardict.hh index e4cd3a5f..e271cca9 100644 --- a/src/dict/stardict.hh +++ b/src/dict/stardict.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __STARTDICT_HH_INCLUDED__ -#define __STARTDICT_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -18,5 +17,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f unsigned maxHeadwordsToExpand ); } // namespace Stardict - -#endif diff --git a/src/dict/transliteration.hh b/src/dict/transliteration.hh index 3a66cb48..a5623038 100644 --- a/src/dict/transliteration.hh +++ b/src/dict/transliteration.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __TRANSLITERATION_HH_INCLUDED__ -#define __TRANSLITERATION_HH_INCLUDED__ +#pragma once #include "dictionary.hh" #include @@ -84,5 +83,3 @@ public: }; } // namespace Transliteration - -#endif diff --git a/src/dict/utils/decompress.cc b/src/dict/utils/decompress.cc index 25e6efc3..e9f7967d 100644 --- a/src/dict/utils/decompress.cc +++ b/src/dict/utils/decompress.cc @@ -3,20 +3,21 @@ #include #include -#define CHUNK_SIZE 2048 +using std::string; -QByteArray zlibDecompress( const char * bufptr, unsigned length ) +static constexpr qsizetype CHUNK_SIZE = 2048; + +QByteArray zlibDecompress( const char * bufptr, unsigned length, uLong adler32_checksum ) { - z_stream zs; - char buf[ CHUNK_SIZE ]; + z_stream zs{}; QByteArray str; - int res; - memset( &zs, 0, sizeof( zs ) ); + int res = Z_OK; zs.next_in = (Bytef *)bufptr; zs.avail_in = length; res = inflateInit( &zs ); if ( res == Z_OK ) { + char buf[ CHUNK_SIZE ]; while ( res != Z_STREAM_END ) { zs.next_out = (Bytef *)buf; zs.avail_out = CHUNK_SIZE; @@ -27,9 +28,7 @@ QByteArray zlibDecompress( const char * bufptr, unsigned length ) } } } - - inflateEnd( &zs ); - if ( res != Z_STREAM_END ) { + if ( inflateEnd( &zs ) != Z_OK || res != Z_STREAM_END || ( adler32_checksum != 0 && zs.adler != adler32_checksum ) ) { str.clear(); } return str; @@ -37,7 +36,7 @@ QByteArray zlibDecompress( const char * bufptr, unsigned length ) string decompressZlib( const char * bufptr, unsigned length ) { - QByteArray b = zlibDecompress( bufptr, length ); + QByteArray b = zlibDecompress( bufptr, length, 0 ); return string( b.constData(), b.size() ); } diff --git a/src/dict/utils/decompress.hh b/src/dict/utils/decompress.hh index c5352415..2f217788 100644 --- a/src/dict/utils/decompress.hh +++ b/src/dict/utils/decompress.hh @@ -1,17 +1,13 @@ -#ifndef __DECOMPRESS_HH_INCLUDED__ -#define __DECOMPRESS_HH_INCLUDED__ +#pragma once #include #include -using std::string; +/// @param adler32_checksum 0 to skip checksum +QByteArray zlibDecompress( const char * bufptr, unsigned length, unsigned long adler32_checksum ); -QByteArray zlibDecompress( const char * bufptr, unsigned length ); +std::string decompressZlib( const char * bufptr, unsigned length ); -string decompressZlib( const char * bufptr, unsigned length ); +std::string decompressBzip2( const char * bufptr, unsigned length ); -string decompressBzip2( const char * bufptr, unsigned length ); - -string decompressLzma2( const char * bufptr, unsigned length, bool raw_decoder = false ); - -#endif // DECOMPRESS_HH +std::string decompressLzma2( const char * bufptr, unsigned length, bool raw_decoder = false ); diff --git a/src/dict/utils/dictfile.hh b/src/dict/utils/dictfile.hh index 0cfc0017..809cd402 100644 --- a/src/dict/utils/dictfile.hh +++ b/src/dict/utils/dictfile.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef GOLDENDICT_FILE_HH -#define GOLDENDICT_FILE_HH +#pragma once #include "ex.hh" @@ -125,5 +124,3 @@ private: }; } // namespace File - -#endif diff --git a/src/dict/utils/dictzip.hh b/src/dict/utils/dictzip.hh index f9838168..7c9a6f22 100644 --- a/src/dict/utils/dictzip.hh +++ b/src/dict/utils/dictzip.hh @@ -21,8 +21,7 @@ * 51 Franklin Street, Suite 500, Boston, MA 02110, USA. */ -#ifndef _DICTZIP_H_ -#define _DICTZIP_H_ +#pragma once #include #include @@ -112,5 +111,3 @@ extern int mmap_mode; #ifdef __cplusplus } /* end extern "C" */ #endif - -#endif /* _DICTZIP_H_ */ diff --git a/src/dict/utils/indexedzip.cc b/src/dict/utils/indexedzip.cc index 4955ade2..834a4725 100644 --- a/src/dict/utils/indexedzip.cc +++ b/src/dict/utils/indexedzip.cc @@ -8,11 +8,8 @@ #include "utf8.hh" #include "iconv.hh" #include "wstring_qt.hh" -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#else - #include -#endif +#include + #include using namespace BtreeIndexing; @@ -214,7 +211,7 @@ bool IndexedZip::indexFile( BtreeIndexing::IndexedWords & zipFileNames, quint32 // System locale if ( localeCodec ) { QString name = localeCodec->toUnicode( entry.fileName.constData(), entry.fileName.size() ); - nameInSystemLocale = gd::toWString( name ); + nameInSystemLocale = name.toStdU32String(); if ( !nameInSystemLocale.empty() ) { zipFileNames.addSingleWord( nameInSystemLocale, entry.localHeaderOffset ); diff --git a/src/dict/utils/indexedzip.hh b/src/dict/utils/indexedzip.hh index 20466720..750f2b15 100644 --- a/src/dict/utils/indexedzip.hh +++ b/src/dict/utils/indexedzip.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __INDEXEDZIP_HH_INCLUDED__ -#define __INDEXEDZIP_HH_INCLUDED__ +#pragma once #include "btreeidx.hh" #include @@ -48,5 +47,3 @@ public: /// Index compressed files in zip file bool indexFile( BtreeIndexing::IndexedWords & zipFileNames, quint32 * filesCount = 0 ); }; - -#endif diff --git a/src/dict/utils/ripemd.hh b/src/dict/utils/ripemd.hh index 2863a021..21bc9508 100644 --- a/src/dict/utils/ripemd.hh +++ b/src/dict/utils/ripemd.hh @@ -16,8 +16,7 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -#ifndef __RIPEMD_HH_INCLUDED__ -#define __RIPEMD_HH_INCLUDED__ +#pragma once #include #include @@ -42,5 +41,3 @@ private: void transform( const uchar buffer[ 64 ] ); }; - -#endif // __RIPEMD_HH_INCLUDED__ diff --git a/src/dict/utils/splitfile.hh b/src/dict/utils/splitfile.hh index 63f1b08b..9ac2457c 100644 --- a/src/dict/utils/splitfile.hh +++ b/src/dict/utils/splitfile.hh @@ -1,5 +1,4 @@ -#ifndef __SPLITFILE_HH_INCLUDED__ -#define __SPLITFILE_HH_INCLUDED__ +#pragma once #include #include @@ -51,5 +50,3 @@ public: }; } // namespace SplitFile - -#endif // __SPLITFILE_HH_INCLUDED__ diff --git a/src/dict/utils/ufile.hh b/src/dict/utils/ufile.hh index 4435e3f4..0d29b5f6 100644 --- a/src/dict/utils/ufile.hh +++ b/src/dict/utils/ufile.hh @@ -1,5 +1,4 @@ -#ifndef UFILE_HH_INCLUDED -#define UFILE_HH_INCLUDED +#pragma once // Don't use this thing. // Use QFile instead. @@ -29,5 +28,3 @@ gzFile gd_gzopen( const char * filename ); #define gd_fopen fopen #define gd_gzopen( filename ) gzopen( filename, "rb" ) #endif - -#endif // UFILE_HH diff --git a/src/dict/utils/zipfile.hh b/src/dict/utils/zipfile.hh index debf16ec..ed2625a4 100644 --- a/src/dict/utils/zipfile.hh +++ b/src/dict/utils/zipfile.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __ZIPFILE_HH_INCLUDED__ -#define __ZIPFILE_HH_INCLUDED__ +#pragma once #include #include @@ -72,5 +71,3 @@ bool readNextEntry( SplitZipFile &, CentralDirEntry & ); bool readLocalHeader( SplitZipFile &, LocalFileHeader & ); } // namespace ZipFile - -#endif diff --git a/src/dict/voiceengines.cc b/src/dict/voiceengines.cc index 0870f1bd..8e988f09 100644 --- a/src/dict/voiceengines.cc +++ b/src/dict/voiceengines.cc @@ -98,7 +98,7 @@ VoiceEnginesDictionary::getArticle( wstring const & word, vector< wstring > cons string encodedUrl = url.toEncoded().data(); string ref = string( "\"" ) + encodedUrl + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( encodedUrl, getId() ); result += "Play)"; result += "" + Html::escape( wordUtf8 ) + ""; diff --git a/src/dict/website.cc b/src/dict/website.cc index 4deeb70e..ca03d6b4 100644 --- a/src/dict/website.cc +++ b/src/dict/website.cc @@ -10,6 +10,7 @@ #include #include "gddebug.hh" #include "globalbroadcaster.hh" +#include "fmt/compile.h" #include @@ -81,6 +82,11 @@ public: void isolateWebCSS( QString & css ); + Features getFeatures() const noexcept override + { + return Dictionary::WebSite; + } + protected: void loadIcon() noexcept override; @@ -307,73 +313,23 @@ void WebSiteArticleRequest::requestFinished( QNetworkReply * r ) } } - disconnect( netReply, 0, 0, 0 ); + disconnect( netReply, nullptr, 0, 0 ); netReply->deleteLater(); finish(); } -sptr< DataRequest > -WebSiteDictionary::getArticle( wstring const & str, vector< wstring > const &, wstring const & context, bool ) - +sptr< DataRequest > WebSiteDictionary::getArticle( wstring const & str, + vector< wstring > const & /*alts*/, + wstring const & context, + bool /*ignoreDiacritics*/ ) { - QByteArray urlString; - - // Context contains the right url to go to - if ( context.size() ) { - urlString = Utf8::encode( context ).c_str(); - } - else { - urlString = urlTemplate; - - QString inputWord = QString::fromStdU32String( str ); - - urlString.replace( "%25GDWORD%25", inputWord.toUtf8().toPercentEncoding() ); - - QTextCodec * codec = QTextCodec::codecForName( "Windows-1251" ); - if ( codec ) { - urlString.replace( "%25GD1251%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); - } - - codec = QTextCodec::codecForName( "Big-5" ); - if ( codec ) { - urlString.replace( "%25GDBIG5%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); - } - - codec = QTextCodec::codecForName( "Big5-HKSCS" ); - if ( codec ) { - urlString.replace( "%25GDBIG5HKSCS%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); - } - - codec = QTextCodec::codecForName( "Shift-JIS" ); - if ( codec ) { - urlString.replace( "%25GDSHIFTJIS%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); - } - - codec = QTextCodec::codecForName( "GB18030" ); - if ( codec ) { - urlString.replace( "%25GDGBK%25", codec->fromUnicode( inputWord ).toPercentEncoding() ); - } - - - // Handle all ISO-8859 encodings - for ( int x = 1; x <= 16; ++x ) { - codec = QTextCodec::codecForName( QString( "ISO 8859-%1" ).arg( x ).toLatin1() ); - if ( codec ) { - urlString.replace( QString( "%25GDISO%1%25" ).arg( x ).toUtf8(), - codec->fromUnicode( inputWord ).toPercentEncoding() ); - } - - if ( x == 10 ) { - x = 12; // Skip encodings 11..12, they don't exist - } - } - } + QString urlString = Utils::WebSite::urlReplaceWord( QString( urlTemplate ), QString::fromStdU32String( str ) ); if ( inside_iframe ) { // Just insert link in "; + fmt::format_to( std::back_inserter( result ), + R"()", + getId(), + encodeUrl.toStdString(), + getId() ); auto dr = std::make_shared< DataRequestInstant >( true ); dr->appendString( result ); diff --git a/src/dict/website.hh b/src/dict/website.hh index f1fb9658..f19c8a80 100644 --- a/src/dict/website.hh +++ b/src/dict/website.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __WEBSITE_HH_INCLUDED__ -#define __WEBSITE_HH_INCLUDED__ +#pragma once #include "dictionary.hh" #include "config.hh" @@ -17,5 +16,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( Config::WebSites const &, } // namespace WebSite - -#endif diff --git a/src/dict/xdxf.cc b/src/dict/xdxf.cc index 5e4a27b7..c0288676 100644 --- a/src/dict/xdxf.cc +++ b/src/dict/xdxf.cc @@ -81,7 +81,6 @@ namespace { using Dictionary::exCantReadFile; DEF_EX_STR( exNotXdxfFile, "The file is not an XDXF file:", Dictionary::Ex ) -DEF_EX( exCorruptedIndex, "The index file is corrupted", Dictionary::Ex ) DEF_EX_STR( exDictzipError, "DICTZIP error", Dictionary::Ex ) enum { @@ -633,7 +632,6 @@ void XdxfDictionary::loadArticle( uint32_t address, string & articleText, QStrin Xdxf2Html::XDXF, idxHeader.hasAbrv ? &abrv : NULL, this, - &resourceZip, fType == Logical, idxHeader.revisionNumber, headword ); @@ -905,7 +903,7 @@ void indexArticle( GzippedFile & gzFile, // Add words to index for ( const auto & word : words ) { - indexedWords.addWord( gd::toWString( word ), offset ); + indexedWords.addWord( word.toStdU32String(), offset ); } ++articleCount; @@ -1228,7 +1226,7 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f while ( !( stream.isEndElement() && stream.name() == u"abbr_def" ) || !stream.atEnd() ) { if ( stream.isStartElement() && stream.name() == u"abbr_k" ) { s = readElementText( stream ); - keys.push_back( gd::toWString( s ) ); + keys.push_back( s.toStdU32String() ); } else if ( stream.isStartElement() && stream.name() == u"abbr_v" ) { s = readElementText( stream ); @@ -1248,7 +1246,7 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f while ( !( stream.isEndElement() && stream.name() == u"abr_def" ) || !stream.atEnd() ) { if ( stream.isStartElement() && stream.name() == u"k" ) { s = readElementText( stream ); - keys.push_back( gd::toWString( s ) ); + keys.push_back( s.toStdU32String() ); } else if ( stream.isStartElement() && stream.name() == u"v" ) { s = readElementText( stream ); diff --git a/src/dict/xdxf.hh b/src/dict/xdxf.hh index bab8336f..b6aeee6a 100644 --- a/src/dict/xdxf.hh +++ b/src/dict/xdxf.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2009 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __XDXF_HH_INCLUDED__ -#define __XDXF_HH_INCLUDED__ +#pragma once #include "dictionary.hh" @@ -18,5 +17,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace Xdxf - -#endif diff --git a/src/dict/xdxf2html.cc b/src/dict/xdxf2html.cc index bb86ce7d..d9e0abc4 100644 --- a/src/dict/xdxf2html.cc +++ b/src/dict/xdxf2html.cc @@ -70,7 +70,6 @@ string convert( string const & in, DICT_TYPE type, map< string, string > const * pAbrv, Dictionary::Class * dictPtr, - IndexedZip * resourceZip, bool isLogicalFormat, unsigned revisionNumber, QString * headword ) @@ -103,8 +102,7 @@ string convert( string const & in, } break; } - // Fall-through - + [[fallthrough]]; default: inConverted.push_back( i ); afterEol = false; @@ -631,7 +629,7 @@ string convert( string const & in, // if( type == XDXF && dictPtr != NULL && !el.hasAttribute( "start" ) ) if ( dictPtr != NULL && !el.hasAttribute( "start" ) ) { - string filename = Utf8::encode( gd::toWString( el.text() ) ); + string filename = Utf8::encode( el.text().toStdU32String() ); if ( Filetype::isNameOfPicture( filename ) ) { QUrl url; @@ -654,32 +652,15 @@ string convert( string const & in, QDomElement el_script = dd.createElement( "script" ); QDomNode parent = el.parentNode(); if ( !parent.isNull() ) { - bool search = false; - if ( type == STARDICT ) { - string n = dictPtr->getContainingFolder().toStdString() + Utils::Fs::separator() + string( "res" ) - + Utils::Fs::separator() + filename; - search = !File::exists( n ) - && ( !resourceZip || !resourceZip->isOpen() || !resourceZip->hasFile( Utf8::decode( filename ) ) ); - } - else { - string n = dictPtr->getDictionaryFilenames()[ 0 ] + ".files" + Utils::Fs::separator() + filename; - search = !File::exists( n ) - && !File::exists( dictPtr->getContainingFolder().toStdString() + Utils::Fs::separator() + filename ) - && ( !resourceZip || !resourceZip->isOpen() || !resourceZip->hasFile( Utf8::decode( filename ) ) ); - } - - QUrl url; url.setScheme( "gdau" ); - url.setHost( QString::fromUtf8( search ? "search" : dictPtr->getId().c_str() ) ); + url.setHost( QString::fromUtf8( dictPtr->getId().c_str() ) ); url.setPath( Utils::Url::ensureLeadingSlash( QString::fromUtf8( filename.c_str() ) ) ); el_script.setAttribute( "type", "text/javascript" ); parent.replaceChild( el_script, el ); - QDomText el_txt = dd.createTextNode( - makeAudioLinkScript( string( "\"" ) + url.toEncoded().data() + "\"", dictPtr->getId() ).c_str() ); - el_script.appendChild( el_txt ); + addAudioLink( string( "\"" ) + url.toEncoded().data() + "\"", dictPtr->getId() ); QDomElement el_span = dd.createElement( "span" ); el_span.setAttribute( "class", "xdxf_wav" ); diff --git a/src/dict/xdxf2html.hh b/src/dict/xdxf2html.hh index 42e936a0..c2d3d903 100644 --- a/src/dict/xdxf2html.hh +++ b/src/dict/xdxf2html.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __XDXF2HTML_HH_INCLUDED__ -#define __XDXF2HTML_HH_INCLUDED__ +#pragma once #include #include @@ -27,11 +26,8 @@ string convert( string const &, DICT_TYPE type, map< string, string > const * pAbrv, Dictionary::Class * dictPtr, - IndexedZip * resourceZip, bool isLogicalFormat = false, unsigned revisionNumber = 0, QString * headword = 0 ); } // namespace Xdxf2Html - -#endif diff --git a/src/dict/zim.hh b/src/dict/zim.hh index 0bd86c2f..04f4fd23 100644 --- a/src/dict/zim.hh +++ b/src/dict/zim.hh @@ -1,5 +1,4 @@ -#ifndef __ZIM_HH_INCLUDED__ -#define __ZIM_HH_INCLUDED__ +#pragma once #ifdef MAKE_ZIM_SUPPORT @@ -19,5 +18,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f } // namespace Zim #endif - -#endif diff --git a/src/dict/zipsounds.cc b/src/dict/zipsounds.cc index 6c33d955..9d3a1231 100644 --- a/src/dict/zipsounds.cc +++ b/src/dict/zipsounds.cc @@ -263,7 +263,7 @@ sptr< Dictionary::DataRequest > ZipSoundsDictionary::getArticle( wstring const & string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; result += "" + Html::escape( displayedName ) + ""; @@ -305,7 +305,7 @@ sptr< Dictionary::DataRequest > ZipSoundsDictionary::getArticle( wstring const & string ref = string( "\"" ) + url.toEncoded().data() + "\""; - result += addAudioLink( ref, getId() ); + result += addAudioLink( url.toEncoded(), getId() ); result += "Play)"; result += "" + Html::escape( displayedName ) + ""; diff --git a/src/dict/zipsounds.hh b/src/dict/zipsounds.hh index a0b7c5c8..c101fb64 100644 --- a/src/dict/zipsounds.hh +++ b/src/dict/zipsounds.hh @@ -1,7 +1,6 @@ /* This file is part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef ZIPSOUNDS_HH -#define ZIPSOUNDS_HH +#pragma once #include "dictionary.hh" @@ -15,5 +14,3 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & fileNames, string const & indicesDir, Dictionary::Initializing & ); } // namespace ZipSounds - -#endif // ZIPSOUNDS_HH diff --git a/src/dictionary_group.hh b/src/dictionary_group.hh index b1d95ca1..2396e520 100644 --- a/src/dictionary_group.hh +++ b/src/dictionary_group.hh @@ -1,7 +1,6 @@ /* Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef DICTIONARYGROUP_HH_INCLUDED -#define DICTIONARYGROUP_HH_INCLUDED +#pragma once #include "sptr.hh" #include "dict/dictionary.hh" @@ -30,5 +29,3 @@ private: std::vector< sptr< Dictionary::Class > > const & allDictionaries; Instances::Groups const & groups; }; - -#endif // DICTIONARYGROUP_HH_INCLUDED diff --git a/src/externalviewer.hh b/src/externalviewer.hh index 55188a29..395dab3b 100644 --- a/src/externalviewer.hh +++ b/src/externalviewer.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __EXTERNALVIEWER_HH_INCLUDED__ -#define __EXTERNALVIEWER_HH_INCLUDED__ +#pragma once #include #include @@ -44,5 +43,3 @@ public: /// Call this function instead of simply deleting viewer to prevent the /// "QProcess: Destroyed while process X is still running." warning in log. void stopAndDestroySynchronously( ExternalViewer * viewer ); - -#endif diff --git a/src/ftshelpers.hh b/src/ftshelpers.hh index cca71938..9172f485 100644 --- a/src/ftshelpers.hh +++ b/src/ftshelpers.hh @@ -1,5 +1,4 @@ -#ifndef __FTSHELPERS_HH_INCLUDED__ -#define __FTSHELPERS_HH_INCLUDED__ +#pragma once #include #include @@ -71,5 +70,3 @@ public: }; } // namespace FtsHelpers - -#endif // __FTSHELPERS_HH_INCLUDED__ diff --git a/src/fulltextsearch.cc b/src/fulltextsearch.cc index 5f14613d..edfb815f 100644 --- a/src/fulltextsearch.cc +++ b/src/fulltextsearch.cc @@ -494,7 +494,7 @@ void FullTextSearchDialog::updateDictionaries() Config::Group const * grp = cfg.getGroup( group ); Config::MutedDictionaries const * mutedDicts; - if ( group == Instances::Group::AllGroupId ) { + if ( group == GroupId::AllGroupId ) { mutedDicts = &cfg.mutedDictionaries; } else { diff --git a/src/fulltextsearch.hh b/src/fulltextsearch.hh index 1662f207..d4a63db8 100644 --- a/src/fulltextsearch.hh +++ b/src/fulltextsearch.hh @@ -1,5 +1,4 @@ -#ifndef __FULLTEXTSEARCH_HH_INCLUDED__ -#define __FULLTEXTSEARCH_HH_INCLUDED__ +#pragma once #include #include @@ -261,5 +260,3 @@ signals: } // namespace FTS - -#endif // __FULLTEXTSEARCH_HH_INCLUDED__ diff --git a/src/gestures.cc b/src/gestures.cc index ddbf1191..aa752238 100644 --- a/src/gestures.cc +++ b/src/gestures.cc @@ -81,16 +81,16 @@ QGestureRecognizer::Result GDPinchGestureRecognizer::recognize( QGesture * state case QEvent::TouchUpdate: { gest->scaleChanged = false; const QTouchEvent * const ev = static_cast< const QTouchEvent * >( event ); - fewTouchPointsPresented = ( ev->touchPoints().size() > 1 ); - if ( ev->touchPoints().size() == 2 ) { - QTouchEvent::TouchPoint p1 = ev->touchPoints().at( 0 ); - QTouchEvent::TouchPoint p2 = ev->touchPoints().at( 1 ); + fewTouchPointsPresented = ( ev->points().size() > 1 ); + if ( ev->points().size() == 2 ) { + QTouchEvent::TouchPoint p1 = ev->points().at( 0 ); + QTouchEvent::TouchPoint p2 = ev->points().at( 1 ); - QPointF centerPoint = ( p1.screenPos() + p2.screenPos() ) / 2.0; + QPointF centerPoint = ( p1.globalPosition() + p2.globalPosition() ) / 2.0; gest->setHotSpot( centerPoint ); if ( gest->isNewSequence ) { - gest->startPosition[ 0 ] = p1.screenPos(); - gest->startPosition[ 1 ] = p2.screenPos(); + gest->startPosition[ 0 ] = p1.globalPosition(); + gest->startPosition[ 1 ] = p2.globalPosition(); gest->lastCenterPoint = centerPoint; } else { @@ -105,8 +105,8 @@ QGestureRecognizer::Result GDPinchGestureRecognizer::recognize( QGesture * state } else { gest->lastScaleFactor = gest->scaleFactor; - QLineF line( p1.screenPos(), p2.screenPos() ); - QLineF lastLine( p1.lastScreenPos(), p2.lastScreenPos() ); + QLineF line( p1.globalPosition(), p2.globalPosition() ); + QLineF lastLine( p1.globalLastPosition(), p2.globalLastPosition() ); gest->scaleFactor = line.length() / lastLine.length(); } @@ -210,28 +210,28 @@ QGestureRecognizer::Result GDSwipeGestureRecognizer::recognize( QGesture * state } case QEvent::TouchUpdate: { const QTouchEvent * const ev = static_cast< const QTouchEvent * >( event ); - fewTouchPointsPresented = ( ev->touchPoints().size() > 1 ); + fewTouchPointsPresented = ( ev->points().size() > 1 ); if ( !swipe->started ) result = QGestureRecognizer::CancelGesture; - else if ( ev->touchPoints().size() == 2 ) { + else if ( ev->points().size() == 2 ) { //2-point gesture - QTouchEvent::TouchPoint p1 = ev->touchPoints().at( 0 ); - QTouchEvent::TouchPoint p2 = ev->touchPoints().at( 1 ); + QTouchEvent::TouchPoint p1 = ev->points().at( 0 ); + QTouchEvent::TouchPoint p2 = ev->points().at( 1 ); if ( swipe->lastPositions[ 0 ].isNull() ) { - swipe->lastPositions[ 0 ] = p1.startScreenPos().toPoint(); - swipe->lastPositions[ 1 ] = p2.startScreenPos().toPoint(); + swipe->lastPositions[ 0 ] = p1.globalPressPosition().toPoint(); + swipe->lastPositions[ 1 ] = p2.globalPressPosition().toPoint(); } if ( !swipe->hasHotSpot() ) { - swipe->setHotSpot( ( p1.startScreenPos() + p2.startScreenPos() ) / 2 ); + swipe->setHotSpot( ( p1.globalPressPosition() + p2.globalPressPosition() ) / 2 ); } - int dx1 = p1.screenPos().toPoint().x() - swipe->lastPositions[ 0 ].x(); - int dx2 = p2.screenPos().toPoint().x() - swipe->lastPositions[ 1 ].x(); - int dy1 = p1.screenPos().toPoint().y() - swipe->lastPositions[ 0 ].y(); - int dy2 = p2.screenPos().toPoint().y() - swipe->lastPositions[ 1 ].y(); + int dx1 = p1.globalPosition().toPoint().x() - swipe->lastPositions[ 0 ].x(); + int dx2 = p2.globalPosition().toPoint().x() - swipe->lastPositions[ 1 ].x(); + int dy1 = p1.globalPosition().toPoint().y() - swipe->lastPositions[ 0 ].y(); + int dy2 = p2.globalPosition().toPoint().y() - swipe->lastPositions[ 1 ].y(); if ( qAbs( ( dx1 + dx2 ) / 2.0 ) >= MOVE_X_TRESHOLD || qAbs( ( dy1 + dy2 ) / 2.0 ) >= MOVE_Y_TRESHOLD ) { qreal angle1 = computeAngle( dx1, dy1 ); @@ -255,8 +255,8 @@ QGestureRecognizer::Result GDSwipeGestureRecognizer::recognize( QGesture * state swipe->vertDirection = vertDir; swipe->horizDirection = horizDir; - swipe->lastPositions[ 0 ] = p1.screenPos().toPoint(); - swipe->lastPositions[ 1 ] = p2.screenPos().toPoint(); + swipe->lastPositions[ 0 ] = p1.globalPosition().toPoint(); + swipe->lastPositions[ 1 ] = p2.globalPosition().toPoint(); result = QGestureRecognizer::TriggerGesture; } diff --git a/src/headwordsmodel.hh b/src/headwordsmodel.hh index d68df718..5a0857b8 100644 --- a/src/headwordsmodel.hh +++ b/src/headwordsmodel.hh @@ -1,5 +1,4 @@ -#ifndef HEADWORDSMODEL_H -#define HEADWORDSMODEL_H +#pragma once #include "dict/dictionary.hh" @@ -53,5 +52,3 @@ private: QMutex lock; std::list< sptr< Dictionary::WordSearchRequest > > queuedRequests; }; - -#endif // HEADWORDSMODEL_H diff --git a/src/history.hh b/src/history.hh index e2dfda33..f23dae18 100644 --- a/src/history.hh +++ b/src/history.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __HISTORY_HH_INCLUDED__ -#define __HISTORY_HH_INCLUDED__ +#pragma once #include #include @@ -114,5 +113,3 @@ private: protected: virtual void timerEvent( QTimerEvent * ); }; - -#endif diff --git a/src/hotkeywrapper.cc b/src/hotkeywrapper.cc index 557cb414..c46c8c23 100644 --- a/src/hotkeywrapper.cc +++ b/src/hotkeywrapper.cc @@ -1,17 +1,10 @@ -#ifdef __WIN32 // Q_OS_WIN32 isn't available at this point - #define _WIN32_WINNT 0x0430 - #include -#endif - #include "hotkeywrapper.hh" #include "gddebug.hh" - -#include #include +#include #include - #ifdef Q_OS_WIN - #include "mainwindow.hh" + #include #endif ////////////////////////////////////////////////////////////////////////// @@ -100,11 +93,6 @@ HotkeyStruct::HotkeyStruct( quint32 key_, quint32 key2_, quint32 modifier_, int modifier( modifier_ ), handle( handle_ ), id( id_ ) -#ifdef Q_OS_MAC - , - hkRef( 0 ), - hkRef2( 0 ) -#endif { } @@ -115,14 +103,7 @@ HotkeyWrapper::HotkeyWrapper( QObject * parent ): QThread( parent ), state2( false ) { - #ifdef Q_OS_WIN - hwnd = (HWND)( ( static_cast< QMainWindow * >( parent ) )->winId() ); - - gdDebug( "Handle global hotkeys via RegisterHotkey()" ); - - #else init(); - #endif ( static_cast< QHotkeyApplication * >( qApp ) )->registerWrapper( this ); } @@ -164,7 +145,8 @@ bool HotkeyWrapper::checkState( quint32 vk, quint32 mod ) if ( hs.key == vk && hs.modifier == mod ) { #ifdef Q_OS_WIN32 - + // If that was a copy-to-clipboard shortcut, re-emit it back so it could + // reach its original destination so it could be acted upon. if ( hs.key2 != 0 || ( mod == MOD_CONTROL && ( vk == VK_INSERT || vk == 'c' || vk == 'C' ) ) ) { // Pass-through first part of compound hotkey or clipdoard copy command @@ -270,262 +252,8 @@ bool HotkeyWrapper::checkState( quint32 vk, quint32 mod ) return false; } -////////////////////////////////////////////////////////////////////////// - #ifdef Q_OS_WIN - -void HotkeyWrapper::init() -{ - QWidget * root = qApp->topLevelWidgets().value( 0 ); - hwnd = (HWND)root->winId(); -} - -bool HotkeyWrapper::setGlobalKey( QKeySequence const & seq, int handle ) -{ - Config::HotKey hk( seq ); - return setGlobalKey( hk.key1, hk.key2, hk.modifiers, handle ); -} - -bool HotkeyWrapper::setGlobalKey( int key, int key2, Qt::KeyboardModifiers modifier, int handle ) -{ - if ( !key ) - return false; // We don't monitor empty combinations - - static int id = 0; - if ( id > 0xBFFF - 1 ) - id = 0; - - quint32 mod = 0; - if ( modifier & Qt::CTRL ) - mod |= MOD_CONTROL; - if ( modifier & Qt::ALT ) - mod |= MOD_ALT; - if ( modifier & Qt::SHIFT ) - mod |= MOD_SHIFT; - if ( modifier & Qt::META ) - mod |= MOD_WIN; - - quint32 vk = nativeKey( key ); - quint32 vk2 = key2 ? nativeKey( key2 ) : 0; - - hotkeys.append( HotkeyStruct( vk, vk2, mod, handle, id ) ); - - if ( !RegisterHotKey( hwnd, id++, mod, vk ) ) - return false; - - if ( key2 && key2 != key ) - return RegisterHotKey( hwnd, id++, mod, vk2 ); - - return true; -} - - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) -bool HotkeyWrapper::winEvent( MSG * message, long * result ) - #else -bool HotkeyWrapper::winEvent( MSG * message, qintptr * result ) - #endif -{ - (void)result; - if ( message->message == WM_HOTKEY ) - return checkState( ( message->lParam >> 16 ), ( message->lParam & 0xffff ) ); - - return false; -} - -quint32 HotkeyWrapper::nativeKey( int key ) -{ - if ( key >= Qt::Key_0 && key <= Qt::Key_9 ) - return VK_NUMPAD0 + ( key - Qt::Key_0 ); - - if ( key >= Qt::Key_A && key <= Qt::Key_Z ) - return key; - - switch ( key ) { - case Qt::Key_Space: - return VK_SPACE; - case Qt::Key_Asterisk: - return VK_MULTIPLY; - case Qt::Key_Plus: - return VK_ADD; - case Qt::Key_Comma: - return VK_SEPARATOR; - case Qt::Key_Minus: - return VK_SUBTRACT; - case Qt::Key_Slash: - return VK_DIVIDE; - case Qt::Key_Tab: - case Qt::Key_Backtab: - return VK_TAB; - case Qt::Key_Backspace: - return VK_BACK; - case Qt::Key_Return: - case Qt::Key_Escape: - return VK_ESCAPE; - case Qt::Key_Enter: - return VK_RETURN; - case Qt::Key_Insert: - return VK_INSERT; - case Qt::Key_Delete: - return VK_DELETE; - case Qt::Key_Pause: - return VK_PAUSE; - case Qt::Key_Print: - return VK_PRINT; - case Qt::Key_Clear: - return VK_CLEAR; - case Qt::Key_Home: - return VK_HOME; - case Qt::Key_End: - return VK_END; - case Qt::Key_Up: - return VK_UP; - case Qt::Key_Down: - return VK_DOWN; - case Qt::Key_Left: - return VK_LEFT; - case Qt::Key_Right: - return VK_RIGHT; - case Qt::Key_PageUp: - return VK_PRIOR; - case Qt::Key_PageDown: - return VK_NEXT; - case Qt::Key_F1: - return VK_F1; - case Qt::Key_F2: - return VK_F2; - case Qt::Key_F3: - return VK_F3; - case Qt::Key_F4: - return VK_F4; - case Qt::Key_F5: - return VK_F5; - case Qt::Key_F6: - return VK_F6; - case Qt::Key_F7: - return VK_F7; - case Qt::Key_F8: - return VK_F8; - case Qt::Key_F9: - return VK_F9; - case Qt::Key_F10: - return VK_F10; - case Qt::Key_F11: - return VK_F11; - case Qt::Key_F12: - return VK_F12; - case Qt::Key_F13: - return VK_F13; - case Qt::Key_F14: - return VK_F14; - case Qt::Key_F15: - return VK_F15; - case Qt::Key_F16: - return VK_F16; - case Qt::Key_F17: - return VK_F17; - case Qt::Key_F18: - return VK_F18; - case Qt::Key_F19: - return VK_F19; - case Qt::Key_F20: - return VK_F20; - case Qt::Key_F21: - return VK_F21; - case Qt::Key_F22: - return VK_F22; - case Qt::Key_F23: - return VK_F23; - case Qt::Key_F24: - return VK_F24; - case Qt::Key_Colon: - case Qt::Key_Semicolon: - return VK_OEM_1; - case Qt::Key_Question: - return VK_OEM_2; - case Qt::Key_AsciiTilde: - case Qt::Key_QuoteLeft: - return VK_OEM_3; - case Qt::Key_BraceLeft: - case Qt::Key_BracketLeft: - return VK_OEM_4; - case Qt::Key_Bar: - case Qt::Key_Backslash: - return VK_OEM_5; - case Qt::Key_BraceRight: - case Qt::Key_BracketRight: - return VK_OEM_6; - case Qt::Key_QuoteDbl: - case Qt::Key_Apostrophe: - return VK_OEM_7; - case Qt::Key_Less: - return VK_OEM_COMMA; - case Qt::Key_Greater: - return VK_OEM_PERIOD; - case Qt::Key_Equal: - return VK_OEM_PLUS; - case Qt::Key_ParenRight: - return 0x30; - case Qt::Key_Exclam: - return 0x31; - case Qt::Key_At: - return 0x32; - case Qt::Key_NumberSign: - return 0x33; - case Qt::Key_Dollar: - return 0x34; - case Qt::Key_Percent: - return 0x35; - case Qt::Key_AsciiCircum: - return 0x36; - case Qt::Key_Ampersand: - return 0x37; - case Qt::Key_copyright: - return 0x38; - case Qt::Key_ParenLeft: - return 0x39; - case Qt::Key_Underscore: - return VK_OEM_MINUS; - default:; - } - - return key; -} - -void HotkeyWrapper::unregister() -{ - for ( int i = 0; i < hotkeys.count(); i++ ) { - HotkeyStruct const & hk = hotkeys.at( i ); - - UnregisterHotKey( hwnd, hk.id ); - - if ( hk.key2 && hk.key2 != hk.key ) - UnregisterHotKey( hwnd, hk.id + 1 ); - } - - ( static_cast< QHotkeyApplication * >( qApp ) )->unregisterWrapper( this ); -} - - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) -bool QHotkeyApplication::nativeEventFilter( const QByteArray & /*eventType*/, void * message, long * result ) - #else -bool QHotkeyApplication::nativeEventFilter( const QByteArray & /*eventType*/, void * message, qintptr * result ) - #endif -{ - MSG * msg = reinterpret_cast< MSG * >( message ); - - if ( msg->message == WM_HOTKEY ) { - for ( int i = 0; i < hotkeyWrappers.size(); i++ ) { - if ( hotkeyWrappers.at( i )->winEvent( msg, result ) ) - return true; - } - } - - return false; -} - - ////////////////////////////////////////////////////////////////////////// - - #else + #ifndef Q_OS_WIN ////////////////////////////////////////////////////////////////////////// @@ -698,7 +426,7 @@ bool HotkeyWrapper::isKeyGrabbed( quint32 keyCode, quint32 modifiers ) const namespace { -typedef int ( *X11ErrorHandler )( Display * display, XErrorEvent * event ); +using X11ErrorHandler = int ( * )( Display * display, XErrorEvent * event ); class X11GrabUngrabErrorHandler { diff --git a/src/hotkeywrapper.hh b/src/hotkeywrapper.hh index 6d2705a0..07309382 100644 --- a/src/hotkeywrapper.hh +++ b/src/hotkeywrapper.hh @@ -1,5 +1,11 @@ -#ifndef HOTKEYWRAPPER_H -#define HOTKEYWRAPPER_H +#pragma once + +/// @file +/// Handling global hotkeys and some tricks +/// Part of this header are implmented in +/// + `winhotkeywrapper.cc` +/// + `machotkeywrapper.hh` +/// #include #include @@ -31,23 +37,24 @@ #endif #ifdef Q_OS_MAC - #define __SECURITYHI__ - #include + #import #endif ////////////////////////////////////////////////////////////////////////// struct HotkeyStruct { - HotkeyStruct() {} + HotkeyStruct() = default; HotkeyStruct( quint32 key, quint32 key2, quint32 modifier, int handle, int id ); - quint32 key, key2; - quint32 modifier; - int handle; - int id; + quint32 key = 0; + quint32 key2 = 0; + quint32 modifier = 0; + int handle = 0; + int id = 0; #ifdef Q_OS_MAC - EventHotKeyRef hkRef, hkRef2; + EventHotKeyRef hkRef = 0; + EventHotKeyRef hkRef2 = 0; #endif }; @@ -100,15 +107,11 @@ private: HotkeyStruct state2waiter; #ifdef Q_OS_WIN32 - - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - virtual bool winEvent( MSG * message, long * result ); - #else virtual bool winEvent( MSG * message, qintptr * result ); - #endif HWND hwnd; +#endif -#elif defined( Q_OS_MAC ) +#ifdef Q_OS_MAC public: void activated( int hkId ); @@ -119,9 +122,9 @@ private: static EventHandlerUPP hotKeyFunction; quint32 keyC; EventHandlerRef handlerRef; +#endif -#else - +#ifdef HAVE_X11 static void recordEventCallback( XPointer, XRecordInterceptData * ); /// Called by recordEventCallback() @@ -142,7 +145,7 @@ private: /// Holds all the keys currently grabbed. /// The first value is keycode, the second is modifiers - typedef std::set< std::pair< quint32, quint32 > > GrabbedKeys; + using GrabbedKeys = std::set< std::pair< quint32, quint32 > >; GrabbedKeys grabbedKeys; GrabbedKeys::iterator keyToUngrab; // Used for second stage grabs @@ -207,19 +210,11 @@ protected: void registerWrapper( HotkeyWrapper * wrapper ); void unregisterWrapper( HotkeyWrapper * wrapper ); -#ifdef Q_OS_WIN32 - - #if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - virtual bool nativeEventFilter( const QByteArray & eventType, void * message, long * result ); - #else +#ifdef Q_OS_WIN virtual bool nativeEventFilter( const QByteArray & eventType, void * message, qintptr * result ); - #endif +#endif -protected: -#endif // Q_OS_WIN32 QList< HotkeyWrapper * > hotkeyWrappers; }; ////////////////////////////////////////////////////////////////////////// - -#endif // HOTKEYWRAPPER_H diff --git a/src/iframeschemehandler.cc b/src/iframeschemehandler.cc index 74744f27..9bf6d677 100644 --- a/src/iframeschemehandler.cc +++ b/src/iframeschemehandler.cc @@ -105,15 +105,8 @@ void IframeSchemeHandler::requestStarted( QWebEngineUrlRequestJob * requestJob ) buffer->setData( articleString.toUtf8() ); -#if QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) requestJob->reply( "text/html; charset=utf-8", buffer ); -#else - #if defined( Q_OS_WIN32 ) || defined( Q_OS_MAC ) - requestJob->reply( contentType, buffer ); - #else - requestJob->reply( "text/html", buffer ); - #endif -#endif + }; connect( reply, &QNetworkReply::finished, requestJob, finishAction ); diff --git a/src/iframeschemehandler.hh b/src/iframeschemehandler.hh index 700de6ae..fd8c7836 100644 --- a/src/iframeschemehandler.hh +++ b/src/iframeschemehandler.hh @@ -1,5 +1,4 @@ -#ifndef IFRAMESCHEMEHANDLER_H -#define IFRAMESCHEMEHANDLER_H +#pragma once #include "article_netmgr.hh" @@ -16,5 +15,3 @@ protected: private: QNetworkAccessManager mgr; }; - -#endif // IFRAMESCHEMEHANDLER_H diff --git a/src/initializing.hh b/src/initializing.hh index 7f4104c4..3429b263 100644 --- a/src/initializing.hh +++ b/src/initializing.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __INITIALIZING_HH_INCLUDED__ -#define __INITIALIZING_HH_INCLUDED__ +#pragma once #include "ui_initializing.h" @@ -26,5 +25,3 @@ private: Ui::Initializing ui; }; - -#endif diff --git a/src/instances.cc b/src/instances.cc index 8c817295..151831a5 100644 --- a/src/instances.cc +++ b/src/instances.cc @@ -31,7 +31,8 @@ Group::Group( Config::Group const & cfgGroup, for ( auto const & dict : cfgGroup.dictionaries ) { std::string const dictId = dict.id.toStdString(); - if ( dictMap.contains( dictId ) ) { + //avoid duplicate dictionary in groups in config file. + if ( dictMap.contains( dictId ) && !dictOrderList.contains( dictId ) ) { groupDicts.insert( dictId, dictMap[ dictId ] ); dictOrderList.push_back( dictId ); } @@ -52,9 +53,8 @@ Group::Group( Config::Group const & cfgGroup, } } -Group::Group( QString name_ ): - id( 0 ), - name( std::move( name_ ) ) +Group::Group(): + id( 0 ) { } diff --git a/src/instances.hh b/src/instances.hh index 56a87d28..f423b3ff 100644 --- a/src/instances.hh +++ b/src/instances.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __INSTANCES_HH_INCLUDED__ -#define __INSTANCES_HH_INCLUDED__ +#pragma once #include "config.hh" #include "dict/dictionary.hh" @@ -33,7 +32,7 @@ struct Group Config::Group const & inactiveGroup ); /// Creates an empty group. - explicit Group( QString name_ ); + explicit Group(); Group( unsigned id, QString name_ ); @@ -45,17 +44,6 @@ struct Group /// Remove id's if not presented in group dictionaries void checkMutedDictionaries( Config::MutedDictionaries * mutedDictionaries ) const; - - // Some constants - - /// The id of the 'All' group - static const unsigned AllGroupId = UINT_MAX - 1; - - /// The id of the fictious 'Help' group - static const unsigned HelpGroupId = UINT_MAX; - - /// Invalid value, used to specify that no group id is specified at all. - static const unsigned NoGroupId = 0; }; struct Groups: public vector< Group > @@ -90,5 +78,3 @@ void updateNames( Config::Class &, vector< sptr< Dictionary::Class > > const & a QIcon iconFromData( QByteArray const & ); } // namespace Instances - -#endif diff --git a/src/keyboardstate.hh b/src/keyboardstate.hh index 09a19917..7c12de5a 100644 --- a/src/keyboardstate.hh +++ b/src/keyboardstate.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __KEYBOARDSTATE_HH_INCLUDED__ -#define __KEYBOARDSTATE_HH_INCLUDED__ +#pragma once /// Since Qt doesn't provide a way to test for keyboard modifiers state /// when the app isn't in focus, we have to implement this separately for @@ -22,5 +21,3 @@ public: /// right now. bool static checkModifiersPressed( int mask ); }; - -#endif diff --git a/src/langcoder.hh b/src/langcoder.hh index e4aa53c7..647730f8 100644 --- a/src/langcoder.hh +++ b/src/langcoder.hh @@ -1,5 +1,4 @@ -#ifndef LANGCODER_H -#define LANGCODER_H +#pragma once #include #include @@ -59,6 +58,3 @@ private: /////////////////////////////////////////////////////////////////////////////// #define LangCodeRole Qt::UserRole - - -#endif // LANGCODER_H diff --git a/src/language.hh b/src/language.hh index bdcb5a96..01e974bb 100644 --- a/src/language.hh +++ b/src/language.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __LANGUAGE_HH_INCLUDED__ -#define __LANGUAGE_HH_INCLUDED__ +#pragma once #include #include "wstring_qt.hh" @@ -11,7 +10,7 @@ namespace Language { /// This identifies any language uniquely within the program. It also has /// two special meanings - Unknown and Any. -typedef quint32 Id; +using Id = quint32; enum { /// Value for Id which signifies that the language is unknown or unspecified. @@ -50,5 +49,3 @@ struct BabylonLang BabylonLang getBabylonLangByIndex( int index ); quint32 findBlgLangIDByEnglishName( gd::wstring const & lang ); } // namespace Language - -#endif diff --git a/src/macos/machotkeywrapper.mm b/src/macos/machotkeywrapper.mm index 12c01ed8..8ab0d7b5 100644 --- a/src/macos/machotkeywrapper.mm +++ b/src/macos/machotkeywrapper.mm @@ -2,11 +2,13 @@ * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ #include "hotkeywrapper.hh" -#include #include -#include #include +#include +#include + #include +#include #import @@ -23,120 +25,107 @@ /// https://github.com/sindresorhus/KeyboardShortcuts/blob/9369a045a72a5296150879781321aecd228171db/readme.md?plain=1#L207 /// -namespace MacKeyMapping -{ +namespace MacKeyMapping { // Convert Qt key codes to Mac OS X native codes -struct ReverseMapEntry -{ - UniChar character; - UInt16 keyCode; +struct ReverseMapEntry { + UniChar character; + UInt16 keyCode; }; -static struct ReverseMapEntry * mapping; -static int mapEntries = 0; +static std::vector mapping; +/// References: +/// * https://github.com/libsdl-org/SDL/blob/fc12cc6dfd859a4e01376162a58f12208e539ac6/src/video/cocoa/SDL_cocoakeyboard.m#L345 +/// * https://github.com/qt/qtbase/blob/922369844fcb75386237bca3eef59edd5093f58d/src/gui/platform/darwin/qapplekeymapper.mm#L449 +/// +/// Known possible flaws 1) UCKeyTranslate doesn't handle modifiers at all 2) Handling keyboard switching void createMapping() { - if( mapping == NULL ) - { - TISInputSourceRef inputSourceRef = TISCopyInputSourceForLanguage( CFSTR( "en" ) ); - if ( !inputSourceRef ) { - inputSourceRef = TISCopyCurrentKeyboardInputSource(); -} - if ( !inputSourceRef ) { - return; -} + if (mapping.empty()) { + mapping.reserve(128); - CFDataRef dataRef = ( CFDataRef )TISGetInputSourceProperty( inputSourceRef, - kTISPropertyUnicodeKeyLayoutData ); - // this method returns null under macos Japanese input method(and also Chinese), which causes cmd+C+C not to be registered as a hotkey - if( !dataRef ) - { - // solve the null value under Japanese keyboard - inputSourceRef = TISCopyCurrentKeyboardLayoutInputSource(); - dataRef = static_cast((TISGetInputSourceProperty(inputSourceRef, kTISPropertyUnicodeKeyLayoutData))); - if (!dataRef) { - return; + TISInputSourceRef inputSourceRef = TISCopyCurrentKeyboardLayoutInputSource(); + if (!inputSourceRef) { + return; } - } - const UCKeyboardLayout * keyboardLayoutPtr = ( const UCKeyboardLayout * )CFDataGetBytePtr( dataRef ); - if( !keyboardLayoutPtr ) { - return; -} + CFDataRef uchrDataRef = (CFDataRef)TISGetInputSourceProperty(inputSourceRef, kTISPropertyUnicodeKeyLayoutData); - mapping = ( struct ReverseMapEntry * )calloc( 128 , sizeof(struct ReverseMapEntry) ); - if( !mapping ) { - return; -} + const UCKeyboardLayout* UCKeyboardLayoutPtr; - mapEntries = 0; - - for( int i = 0; i < 128; i++ ) - { - UInt32 theDeadKeyState = 0; - UniCharCount theLength = 0; - if( UCKeyTranslate( keyboardLayoutPtr, i, kUCKeyActionDisplay, 0, LMGetKbdType(), - kUCKeyTranslateNoDeadKeysBit, &theDeadKeyState, 1, &theLength, - &mapping[ mapEntries ].character ) == noErr && theLength > 0 ) - { - if( isprint( mapping[ mapEntries ].character ) ) - { - mapping[ mapEntries++ ].keyCode = i; + if (uchrDataRef) { + UCKeyboardLayoutPtr = (const UCKeyboardLayout*)CFDataGetBytePtr(uchrDataRef); } - } + + if (!UCKeyboardLayoutPtr) { + return; + } + + for (UInt16 i = 0; i < 128; i++) { + UInt32 theDeadKeyState = 0; + UniCharCount theLength = 0; + UniChar temp_char_buf; + if (UCKeyTranslate(UCKeyboardLayoutPtr, i, kUCKeyActionDown, 0, LMGetKbdType(), + kUCKeyTranslateNoDeadKeysBit, &theDeadKeyState, 1, &theLength, + &temp_char_buf) + == noErr + && theLength > 0) { + if (isprint(temp_char_buf)) { + mapping.emplace_back(ReverseMapEntry { temp_char_buf, i }); + } + } + } + mapping.shrink_to_fit(); } - } } -quint32 qtKeyToNativeKey( quint32 key ) +quint32 qtKeyToNativeKey(UniChar key) { - createMapping(); - if( mapping == NULL ) { + createMapping(); + if (mapping.empty()) { + return 0; + } + + for (auto& m : mapping) { + if (m.character == key) { + return m.keyCode; + } + } + return 0; } - for( int i = 0; i < mapEntries; i++ ) - { - if( mapping[ i ].character == key ) { - return mapping[ i ].keyCode; -} - } - - return 0; -} - } // namespace MacKeyMapping -static pascal OSStatus hotKeyHandler( EventHandlerCallRef /* nextHandler */, EventRef theEvent, void * userData ) +static pascal OSStatus hotKeyHandler(EventHandlerCallRef /* nextHandler */, EventRef theEvent, void* userData) { - EventHotKeyID hkID; - GetEventParameter( theEvent, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(EventHotKeyID), NULL, &hkID ); - static_cast< HotkeyWrapper * >( userData )->activated( hkID.id ); - return noErr; + EventHotKeyID hkID; + GetEventParameter(theEvent, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(EventHotKeyID), NULL, &hkID); + static_cast(userData)->activated(hkID.id); + return noErr; } -HotkeyWrapper::HotkeyWrapper( QObject *parent ) +HotkeyWrapper::HotkeyWrapper(QObject* parent) { -(void) parent; - hotKeyFunction = NewEventHandlerUPP( hotKeyHandler ); - EventTypeSpec type; - type.eventClass = kEventClassKeyboard; - type.eventKind = kEventHotKeyPressed; - InstallApplicationEventHandler( hotKeyFunction, 1, &type, this, &handlerRef ); - keyC = nativeKey( 'c' ); + (void)parent; + hotKeyFunction = NewEventHandlerUPP(hotKeyHandler); + EventTypeSpec type; + type.eventClass = kEventClassKeyboard; + type.eventKind = kEventHotKeyPressed; + InstallApplicationEventHandler(hotKeyFunction, 1, &type, this, &handlerRef); + keyC = nativeKey('c'); } HotkeyWrapper::~HotkeyWrapper() { - unregister(); - RemoveEventHandler( handlerRef ); + unregister(); + RemoveEventHandler(handlerRef); } void HotkeyWrapper::waitKey2() { - state2 = false; + state2 = false; } void checkAndRequestAccessibilityPermission() { @@ -159,196 +148,220 @@ void checkAndRequestAccessibilityPermission() } } -void HotkeyWrapper::activated( int hkId ) +void HotkeyWrapper::activated(int hkId) { - if ( state2 ) - { // wait for 2nd key + if (state2) { // wait for 2nd key - waitKey2(); // Cancel the 2nd-key wait stage + waitKey2(); // Cancel the 2nd-key wait stage - if ( hkId == state2waiter.id + 1 || - ( hkId == state2waiter.id && state2waiter.key == state2waiter.key2 ) ) - { - emit hotkeyActivated( state2waiter.handle ); - return; + if (hkId == state2waiter.id + 1 || (hkId == state2waiter.id && state2waiter.key == state2waiter.key2)) { + emit hotkeyActivated(state2waiter.handle); + return; + } } - } - for ( int i = 0; i < hotkeys.count(); i++ ) - { - HotkeyStruct &hs = hotkeys[ i ]; - if( hkId == hs.id ) - { - if( hs.key == keyC && hs.modifier == cmdKey ) - { - checkAndRequestAccessibilityPermission(); - - // If that was a copy-to-clipboard shortcut, re-emit it back so it could - // reach its original destination so it could be acted upon. - UnregisterEventHotKey( hs.hkRef ); + for (int i = 0; i < hotkeys.count(); i++) { + HotkeyStruct& hs = hotkeys[i]; + if (hkId == hs.id) { + if (hs.key == keyC && hs.modifier == cmdKey) { + checkAndRequestAccessibilityPermission(); - sendCmdC(); + // If that was a copy-to-clipboard shortcut, re-emit it back so it could + // reach its original destination so it could be acted upon. + UnregisterEventHotKey(hs.hkRef); - EventHotKeyID hotKeyID; - hotKeyID.signature = 'GDHK'; - hotKeyID.id = hs.id; + sendCmdC(); - RegisterEventHotKey( hs.key, hs.modifier, hotKeyID, GetApplicationEventTarget(), 0, &hs.hkRef ); - } + EventHotKeyID hotKeyID; + hotKeyID.signature = 'GDHK'; + hotKeyID.id = hs.id; - if ( hs.key2 == 0 ) { - emit hotkeyActivated( hs.handle ); - return; - } + RegisterEventHotKey(hs.key, hs.modifier, hotKeyID, GetApplicationEventTarget(), 0, &hs.hkRef); + } - state2 = true; - state2waiter = hs; - QTimer::singleShot( 500, this, SLOT( waitKey2() ) ); - return; + if (hs.key2 == 0) { + emit hotkeyActivated(hs.handle); + return; + } + + state2 = true; + state2waiter = hs; + QTimer::singleShot(500, this, SLOT(waitKey2())); + return; + } } - } - state2 = false; - return; + state2 = false; + return; } void HotkeyWrapper::unregister() { - for ( int i = 0; i < hotkeys.count(); i++ ) - { - HotkeyStruct const & hk = hotkeys.at( i ); + for (int i = 0; i < hotkeys.count(); i++) { + HotkeyStruct const& hk = hotkeys.at(i); - UnregisterEventHotKey( hk.hkRef ); + UnregisterEventHotKey(hk.hkRef); - if ( hk.key2 && hk.key2 != hk.key ) { - UnregisterEventHotKey( hk.hkRef2 ); -} - } + if (hk.key2 && hk.key2 != hk.key) { + UnregisterEventHotKey(hk.hkRef2); + } + } - (static_cast< QHotkeyApplication * >( qApp ))->unregisterWrapper( this ); + (static_cast(qApp))->unregisterWrapper(this); } -bool HotkeyWrapper::setGlobalKey( QKeySequence const & seq, int handle ) +bool HotkeyWrapper::setGlobalKey(QKeySequence const& seq, int handle) { - Config::HotKey hk(seq); - return setGlobalKey(hk.key1,hk.key2,hk.modifiers,handle); + Config::HotKey hk(seq); + return setGlobalKey(hk.key1, hk.key2, hk.modifiers, handle); } -bool HotkeyWrapper::setGlobalKey( int key, int key2, Qt::KeyboardModifiers modifier, int handle ) +bool HotkeyWrapper::setGlobalKey(int key, int key2, Qt::KeyboardModifiers modifier, int handle) { - if ( !key ) { - return false; // We don't monitor empty combinations + if (!key) { + return false; // We don't monitor empty combinations + } + + quint32 vk = nativeKey(key); + + if (vk == 0) { + return false; + } + + quint32 vk2 = key2 ? nativeKey(key2) : 0; + + static int nextId = 1; + if (nextId > 0xBFFF - 1) { + nextId = 1; + } + + quint32 mod = 0; + if (modifier & Qt::CTRL) { + mod |= cmdKey; + } + if (modifier & Qt::ALT) { + mod |= optionKey; + } + if (modifier & Qt::SHIFT) { + mod |= shiftKey; + } + if (modifier & Qt::META) { + mod |= controlKey; + } + + hotkeys.append(HotkeyStruct(vk, vk2, mod, handle, nextId)); + HotkeyStruct& hk = hotkeys.last(); + + EventHotKeyID hotKeyID; + hotKeyID.signature = 'GDHK'; + hotKeyID.id = nextId; + + OSStatus ret = RegisterEventHotKey(vk, mod, hotKeyID, GetApplicationEventTarget(), 0, &hk.hkRef); + if (ret != 0) { + return false; + } + + if (vk2 && vk2 != vk) { + hotKeyID.id = nextId + 1; + ret = RegisterEventHotKey(vk2, mod, hotKeyID, GetApplicationEventTarget(), 0, &hk.hkRef2); + } + + nextId += 2; + + return ret == 0; } - quint32 vk = nativeKey( key ); - - if( vk == 0 ) { - return false; -} - - quint32 vk2 = key2 ? nativeKey( key2 ) : 0; - - static int nextId = 1; - if( nextId > 0xBFFF - 1 ) { - nextId = 1; -} - - quint32 mod = 0; - if( modifier & Qt::CTRL ) { - mod |= cmdKey; -} - if( modifier & Qt::ALT ) { - mod |= optionKey; -} - if( modifier & Qt::SHIFT ) { - mod |= shiftKey; -} - if( modifier & Qt::META ) { - mod |= controlKey; -} - - hotkeys.append( HotkeyStruct( vk, vk2, mod, handle, nextId ) ); - HotkeyStruct &hk = hotkeys.last(); - - EventHotKeyID hotKeyID; - hotKeyID.signature = 'GDHK'; - hotKeyID.id = nextId; - - OSStatus ret = RegisterEventHotKey( vk, mod, hotKeyID, GetApplicationEventTarget(), 0, &hk.hkRef ); - if ( ret != 0 ) { - return false; -} - - if ( vk2 && vk2 != vk ) - { - hotKeyID.id = nextId + 1; - ret = RegisterEventHotKey( vk2, mod, hotKeyID, GetApplicationEventTarget(), 0, &hk.hkRef2 ); - } - - nextId += 2; - - return ret == 0; -} - -quint32 HotkeyWrapper::nativeKey( int key ) +quint32 HotkeyWrapper::nativeKey(int key) { - switch( key ) { - case Qt::Key_Escape: return 0x35; - case Qt::Key_Tab: return 0x30; - case Qt::Key_Backspace: return 0x33; - case Qt::Key_Return: return 0x24; - case Qt::Key_Enter: return 0x4c; - case Qt::Key_Delete: return 0x75; - case Qt::Key_Clear: return 0x47; - case Qt::Key_Home: return 0x73; - case Qt::Key_End: return 0x77; - case Qt::Key_Left: return 0x7b; - case Qt::Key_Up: return 0x7e; - case Qt::Key_Right: return 0x7c; - case Qt::Key_Down: return 0x7d; - case Qt::Key_PageUp: return 0x74; - case Qt::Key_PageDown: return 0x79; - case Qt::Key_CapsLock: return 0x57; - case Qt::Key_F1: return 0x7a; - case Qt::Key_F2: return 0x78; - case Qt::Key_F3: return 0x63; - case Qt::Key_F4: return 0x76; - case Qt::Key_F5: return 0x60; - case Qt::Key_F6: return 0x61; - case Qt::Key_F7: return 0x62; - case Qt::Key_F8: return 0x64; - case Qt::Key_F9: return 0x65; - case Qt::Key_F10: return 0x6d; - case Qt::Key_F11: return 0x67; - case Qt::Key_F12: return 0x6f; - case Qt::Key_F13: return 0x69; - case Qt::Key_F14: return 0x6b; - case Qt::Key_F15: return 0x71; - case Qt::Key_Help: return 0x72; + switch (key) { + case Qt::Key_Escape: + return 0x35; + case Qt::Key_Tab: + return 0x30; + case Qt::Key_Backspace: + return 0x33; + case Qt::Key_Return: + return 0x24; + case Qt::Key_Enter: + return 0x4c; + case Qt::Key_Delete: + return 0x75; + case Qt::Key_Clear: + return 0x47; + case Qt::Key_Home: + return 0x73; + case Qt::Key_End: + return 0x77; + case Qt::Key_Left: + return 0x7b; + case Qt::Key_Up: + return 0x7e; + case Qt::Key_Right: + return 0x7c; + case Qt::Key_Down: + return 0x7d; + case Qt::Key_PageUp: + return 0x74; + case Qt::Key_PageDown: + return 0x79; + case Qt::Key_CapsLock: + return 0x57; + case Qt::Key_F1: + return 0x7a; + case Qt::Key_F2: + return 0x78; + case Qt::Key_F3: + return 0x63; + case Qt::Key_F4: + return 0x76; + case Qt::Key_F5: + return 0x60; + case Qt::Key_F6: + return 0x61; + case Qt::Key_F7: + return 0x62; + case Qt::Key_F8: + return 0x64; + case Qt::Key_F9: + return 0x65; + case Qt::Key_F10: + return 0x6d; + case Qt::Key_F11: + return 0x67; + case Qt::Key_F12: + return 0x6f; + case Qt::Key_F13: + return 0x69; + case Qt::Key_F14: + return 0x6b; + case Qt::Key_F15: + return 0x71; + case Qt::Key_Help: + return 0x72; default:; - } - return MacKeyMapping::qtKeyToNativeKey( QChar( key ).toLower().toLatin1() ); + } + return MacKeyMapping::qtKeyToNativeKey(QChar(key).toLower().unicode()); } void HotkeyWrapper::sendCmdC() { - CGEventFlags flags = kCGEventFlagMaskCommand; - CGEventRef ev; - CGEventSourceRef source = CGEventSourceCreate( kCGEventSourceStateCombinedSessionState ); + CGEventFlags flags = kCGEventFlagMaskCommand; + CGEventRef ev; + CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); - //press down - ev = CGEventCreateKeyboardEvent( source, keyC, true ); - CGEventSetFlags( ev, CGEventFlags( flags | CGEventGetFlags( ev ) ) ); //combine flags - CGEventPost( kCGAnnotatedSessionEventTap, ev ); - CFRelease( ev ); + // press down + ev = CGEventCreateKeyboardEvent(source, keyC, true); + CGEventSetFlags(ev, CGEventFlags(flags | CGEventGetFlags(ev))); // combine flags + CGEventPost(kCGAnnotatedSessionEventTap, ev); + CFRelease(ev); - //press up - ev = CGEventCreateKeyboardEvent( source, keyC, false ); - CGEventSetFlags( ev, CGEventFlags( flags | CGEventGetFlags( ev ) ) ); //combine flags - CGEventPost( kCGAnnotatedSessionEventTap, ev ); - CFRelease( ev ); + // press up + ev = CGEventCreateKeyboardEvent(source, keyC, false); + CGEventSetFlags(ev, CGEventFlags(flags | CGEventGetFlags(ev))); // combine flags + CGEventPost(kCGAnnotatedSessionEventTap, ev); + CFRelease(ev); - CFRelease( source ); + CFRelease(source); } EventHandlerUPP HotkeyWrapper::hotKeyFunction = NULL; diff --git a/src/macos/macmouseover.hh b/src/macos/macmouseover.hh index e1bbe7dc..57479579 100644 --- a/src/macos/macmouseover.hh +++ b/src/macos/macmouseover.hh @@ -1,15 +1,14 @@ #ifdef __APPLE__ - #ifndef __MACMOUSEOVER_HH_INCLUDED__ - #define __MACMOUSEOVER_HH_INCLUDED__ + #pragma once - #include - #include - #include - #include "config.hh" - #include "keyboardstate.hh" - #include - #include + #include + #include + #include + #include "config.hh" + #include "keyboardstate.hh" + #include + #include /// This is a mouseover feature interface, where you can point your mouse at /// any word in any window and wait a little, and it would provide that word @@ -66,6 +65,4 @@ private: bool mouseOverEnabled; }; - #endif - #endif diff --git a/src/macos/macmouseover.mm b/src/macos/macmouseover.mm index f17523e1..03377c6b 100644 --- a/src/macos/macmouseover.mm +++ b/src/macos/macmouseover.mm @@ -1,372 +1,344 @@ #include "macmouseover.hh" -#include -#include -#include -#include -#include - -#ifndef AVAILABLE_MAC_OS_X_VERSION_10_11_AND_LATER -#define kAXValueTypeCGPoint kAXValueCGPointType -#define kAXValueTypeCFRange kAXValueCFRangeType -#endif +#import const int mouseOverInterval = 300; -CGEventRef eventCallback( CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon ) +CGEventRef eventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void* refcon) { -(void) proxy; - if( type != kCGEventMouseMoved ) { + (void)proxy; + if (type != kCGEventMouseMoved) { + return event; + } + static_cast(refcon)->mouseMoved(); return event; } - static_cast< MacMouseOver * >( refcon )->mouseMoved(); - return event; -} -static CGPoint carbonScreenPointFromCocoaScreenPoint( NSPoint cocoaPoint ) +static CGPoint carbonScreenPointFromCocoaScreenPoint(NSPoint cocoaPoint) { - NSScreen *foundScreen = nil; - CGPoint thePoint; + NSScreen* foundScreen = nil; + CGPoint thePoint; - for (NSScreen *screen in [NSScreen screens]) { - if (NSPointInRect(cocoaPoint, [screen frame])) { - foundScreen = screen; + for (NSScreen* screen in [NSScreen screens]) { + if (NSPointInRect(cocoaPoint, [screen frame])) { + foundScreen = screen; + } } - } - if (foundScreen) { - CGFloat screenHeight = [foundScreen frame].size.height; - thePoint = CGPointMake(cocoaPoint.x, screenHeight - cocoaPoint.y - 1); - } - else { - thePoint = CGPointMake(0.0, 0.0); + if (foundScreen) { + CGFloat screenHeight = [foundScreen frame].size.height; + thePoint = CGPointMake(cocoaPoint.x, screenHeight - cocoaPoint.y - 1); + } else { + thePoint = CGPointMake(0.0, 0.0); + } + + return thePoint; } - return thePoint; -} - -MacMouseOver & MacMouseOver::instance() +MacMouseOver& MacMouseOver::instance() { - static MacMouseOver m; + static MacMouseOver m; - return m; + return m; } -MacMouseOver::MacMouseOver() : - pPref(NULL) -, tapRef( 0 ) -, loop( 0 ) +MacMouseOver::MacMouseOver() + : pPref(NULL) + , tapRef(0) + , loop(0) { - mouseTimer.setSingleShot( true ); - connect( &mouseTimer, SIGNAL( timeout() ), this, SLOT( timerShot() ) ); + mouseTimer.setSingleShot(true); + connect(&mouseTimer, SIGNAL(timeout()), this, SLOT(timerShot())); - elementSystemWide = AXUIElementCreateSystemWide(); + elementSystemWide = AXUIElementCreateSystemWide(); } MacMouseOver::~MacMouseOver() { - disableMouseOver(); + disableMouseOver(); - if( tapRef ) { - CFRelease( tapRef ); + if (tapRef) { + CFRelease(tapRef); + } + + if (loop) { + CFRelease(loop); + } + + if (elementSystemWide) { + CFRelease(elementSystemWide); + } } - if( loop ) { - CFRelease( loop ); -} - - if( elementSystemWide ) { - CFRelease( elementSystemWide ); -} -} - -QString MacMouseOver::CFStringRefToQString( CFStringRef str ) +QString MacMouseOver::CFStringRefToQString(CFStringRef str) { - int length = CFStringGetLength( str ); - if( length == 0 ) { - return QString(); -} + int length = CFStringGetLength(str); + if (length == 0) { + return QString(); + } - UniChar *chars = new UniChar[ length ]; - CFStringGetCharacters( str, CFRangeMake( 0, length ), chars ); + UniChar* chars = new UniChar[length]; + CFStringGetCharacters(str, CFRangeMake(0, length), chars); - QString result = QString::fromUtf16( chars, length ); + QString result = QString::fromUtf16((char16_t*)chars, length); - delete[] chars; - return result; + delete[] chars; + return result; } void MacMouseOver::mouseMoved() { - mouseTimer.start( mouseOverInterval ); + mouseTimer.start(mouseOverInterval); } void MacMouseOver::enableMouseOver() { - mouseTimer.stop(); - if( !isAXAPIEnabled() ) { - return; -} - if( !tapRef ) { - tapRef = CGEventTapCreate( kCGAnnotatedSessionEventTap, kCGHeadInsertEventTap, - kCGEventTapOptionListenOnly, - CGEventMaskBit( kCGEventMouseMoved ), - eventCallback, this ); -} - if( !tapRef ) { - return; -} - if( !loop ) { - loop = CFMachPortCreateRunLoopSource( kCFAllocatorDefault, tapRef, 0 ); -} - if( loop ) { - CFRunLoopAddSource( CFRunLoopGetMain(), loop, kCFRunLoopCommonModes ); -} + mouseTimer.stop(); + if (!isAXAPIEnabled()) { + return; + } + if (!tapRef) { + tapRef = CGEventTapCreate(kCGAnnotatedSessionEventTap, kCGHeadInsertEventTap, + kCGEventTapOptionListenOnly, + CGEventMaskBit(kCGEventMouseMoved), + eventCallback, this); + } + if (!tapRef) { + return; + } + if (!loop) { + loop = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, tapRef, 0); + } + if (loop) { + CFRunLoopAddSource(CFRunLoopGetMain(), loop, kCFRunLoopCommonModes); + } } void MacMouseOver::disableMouseOver() { - mouseTimer.stop(); - if( loop ) { - CFRunLoopRemoveSource( CFRunLoopGetMain(), loop, kCFRunLoopCommonModes ); -} + mouseTimer.stop(); + if (loop) { + CFRunLoopRemoveSource(CFRunLoopGetMain(), loop, kCFRunLoopCommonModes); + } } void MacMouseOver::timerShot() { - if( mouseMutex.tryLock( 0 ) ) { - mouseMutex.unlock(); - } else { - return; -} - if( !pPref ) { - return; -} - if( !pPref->enableScanPopupModifiers || checkModifiersPressed( pPref->scanPopupModifiers ) ) { - handlePosition(); -} + if (mouseMutex.tryLock(0)) { + mouseMutex.unlock(); + } else { + return; + } + if (!pPref) { + return; + } + if (!pPref->enableScanPopupModifiers || checkModifiersPressed(pPref->scanPopupModifiers)) { + handlePosition(); + } } void MacMouseOver::handlePosition() { - QMutexLocker _( &mouseMutex ); + QMutexLocker _(&mouseMutex); - QString strToTranslate; + QString strToTranslate; - NSAutoreleasePool * pool = [ [ NSAutoreleasePool alloc ] init ]; - CGPoint pt = carbonScreenPointFromCocoaScreenPoint( [NSEvent mouseLocation] ); - [ pool drain ]; + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + CGPoint pt = carbonScreenPointFromCocoaScreenPoint([NSEvent mouseLocation]); + [pool drain]; - CFArrayRef names = 0; + CFArrayRef names = 0; - AXUIElementRef elem = 0; - AXError err = AXUIElementCopyElementAtPosition( elementSystemWide, pt.x, pt.y, &elem ); + AXUIElementRef elem = 0; + AXError err = AXUIElementCopyElementAtPosition(elementSystemWide, pt.x, pt.y, &elem); - if( err != kAXErrorSuccess ) { - return; -} + if (err != kAXErrorSuccess) { + return; + } - for( ; ; ) - { - CFTypeRef parameter = AXValueCreate( kAXValueTypeCGPoint, &pt ); - CFTypeRef rangeValue; - err = AXUIElementCopyParameterizedAttributeNames( elem, &names ); - if( err != kAXErrorSuccess ) { - break; -} - - int numOfAttributes = CFArrayGetCount( names ); - if( CFArrayContainsValue( names, CFRangeMake( 0, numOfAttributes ), CFSTR( "AXRangeForPosition" ) ) ) - { - // Standard interface - err = AXUIElementCopyParameterizedAttributeValue( elem, kAXRangeForPositionParameterizedAttribute, - parameter, ( CFTypeRef * )&rangeValue ); - CFRelease( parameter ); - if( err != kAXErrorSuccess ) { - break; -} - - CFStringRef stringValue; - - CFRange decodedRange = CFRangeMake( 0, 0 ); - bool b = AXValueGetValue( (AXValueRef)rangeValue, kAXValueTypeCFRange, &decodedRange ); - CFRelease( rangeValue ); - if( b ) - { - int fromPos = decodedRange.location - 127; - if( fromPos < 0 ) { - fromPos = 0; -} - int wordPos = decodedRange.location - fromPos; // Cursor position in result string - - CFRange range = CFRangeMake( fromPos, wordPos + 1 ); - parameter = AXValueCreate( kAXValueTypeCFRange, &range ); - err = AXUIElementCopyParameterizedAttributeValue( elem, kAXStringForRangeParameterizedAttribute, - parameter, (CFTypeRef *)&stringValue ); - CFRelease( parameter ); - if( err != kAXErrorSuccess ) { - break; -} - - strToTranslate = CFStringRefToQString( stringValue ); - CFRelease( stringValue ); - - // Read string further - for( int i = 1; i < 128; i++ ) - { - range = CFRangeMake( decodedRange.location + i, 1 ); - parameter = AXValueCreate( kAXValueTypeCFRange, &range ); - err = AXUIElementCopyParameterizedAttributeValue( elem, kAXStringForRangeParameterizedAttribute, - parameter, (CFTypeRef *)&stringValue ); - CFRelease( parameter ); - - if( err != kAXErrorSuccess ) { + for (;;) { + CFTypeRef parameter = AXValueCreate(kAXValueTypeCGPoint, &pt); + CFTypeRef rangeValue; + err = AXUIElementCopyParameterizedAttributeNames(elem, &names); + if (err != kAXErrorSuccess) { break; -} - - QString s = CFStringRefToQString( stringValue ); - CFRelease( stringValue ); - - if( s[ 0 ].isLetterOrNumber() || s[ 0 ] == '-' ) { - strToTranslate += s; - } else { - break; -} } - handleRetrievedString( strToTranslate, wordPos ); - } - } - else if( CFArrayContainsValue( names, CFRangeMake( 0, numOfAttributes ), CFSTR( "AXTextMarkerForPosition" ) ) ) - { - // Safari interface - CFTypeRef marker, range; - CFStringRef str; - err = AXUIElementCopyParameterizedAttributeValue( elem, CFSTR( "AXTextMarkerForPosition" ), - parameter, ( CFTypeRef * )&marker ); - CFRelease( parameter ); - if( err != kAXErrorSuccess ) { + int numOfAttributes = CFArrayGetCount(names); + if (CFArrayContainsValue(names, CFRangeMake(0, numOfAttributes), CFSTR("AXRangeForPosition"))) { + // Standard interface + err = AXUIElementCopyParameterizedAttributeValue(elem, kAXRangeForPositionParameterizedAttribute, + parameter, (CFTypeRef*)&rangeValue); + CFRelease(parameter); + if (err != kAXErrorSuccess) { + break; + } + + CFStringRef stringValue; + + CFRange decodedRange = CFRangeMake(0, 0); + bool b = AXValueGetValue((AXValueRef)rangeValue, kAXValueTypeCFRange, &decodedRange); + CFRelease(rangeValue); + if (b) { + int fromPos = decodedRange.location - 127; + if (fromPos < 0) { + fromPos = 0; + } + int wordPos = decodedRange.location - fromPos; // Cursor position in result string + + CFRange range = CFRangeMake(fromPos, wordPos + 1); + parameter = AXValueCreate(kAXValueTypeCFRange, &range); + err = AXUIElementCopyParameterizedAttributeValue(elem, kAXStringForRangeParameterizedAttribute, + parameter, (CFTypeRef*)&stringValue); + CFRelease(parameter); + if (err != kAXErrorSuccess) { + break; + } + + strToTranslate = CFStringRefToQString(stringValue); + CFRelease(stringValue); + + // Read string further + for (int i = 1; i < 128; i++) { + range = CFRangeMake(decodedRange.location + i, 1); + parameter = AXValueCreate(kAXValueTypeCFRange, &range); + err = AXUIElementCopyParameterizedAttributeValue(elem, kAXStringForRangeParameterizedAttribute, + parameter, (CFTypeRef*)&stringValue); + CFRelease(parameter); + + if (err != kAXErrorSuccess) { + break; + } + + QString s = CFStringRefToQString(stringValue); + CFRelease(stringValue); + + if (s[0].isLetterOrNumber() || s[0] == '-') { + strToTranslate += s; + } else { + break; + } + } + + handleRetrievedString(strToTranslate, wordPos); + } + } else if (CFArrayContainsValue(names, CFRangeMake(0, numOfAttributes), CFSTR("AXTextMarkerForPosition"))) { + // Safari interface + CFTypeRef marker, range; + CFStringRef str; + err = AXUIElementCopyParameterizedAttributeValue(elem, CFSTR("AXTextMarkerForPosition"), + parameter, (CFTypeRef*)&marker); + CFRelease(parameter); + if (err != kAXErrorSuccess) { + break; + } + + err = AXUIElementCopyParameterizedAttributeValue(elem, CFSTR("AXLeftWordTextMarkerRangeForTextMarker"), + marker, (CFTypeRef*)&range); + CFRelease(marker); + if (err != kAXErrorSuccess) { + break; + } + + err = AXUIElementCopyParameterizedAttributeValue(elem, CFSTR("AXStringForTextMarkerRange"), + range, (CFTypeRef*)&str); + CFRelease(range); + if (err == kAXErrorSuccess) { + strToTranslate = CFStringRefToQString(str); + CFRelease(str); + handleRetrievedString(strToTranslate, 0); + } + } break; -} - - err = AXUIElementCopyParameterizedAttributeValue( elem, CFSTR( "AXLeftWordTextMarkerRangeForTextMarker" ), - marker, ( CFTypeRef * )&range ); - CFRelease( marker ); - if( err != kAXErrorSuccess ) { - break; -} - - err = AXUIElementCopyParameterizedAttributeValue( elem, CFSTR( "AXStringForTextMarkerRange" ), - range, ( CFTypeRef * )&str ); - CFRelease( range ); - if( err == kAXErrorSuccess ) - { - strToTranslate = CFStringRefToQString( str ); - CFRelease( str ); - handleRetrievedString( strToTranslate, 0 ); - } } - break; - } - if( elem ) { - CFRelease( elem ); -} - if( names ) { - CFRelease( names ); -} + if (elem) { + CFRelease(elem); + } + if (names) { + CFRelease(names); + } } -void MacMouseOver::handleRetrievedString( QString & wordSeq, int wordSeqPos ) +void MacMouseOver::handleRetrievedString(QString& wordSeq, int wordSeqPos) { - if( wordSeq.isEmpty() ) { - return; -} - - // locate the word inside the sequence - - QString word; - - if ( wordSeq[ wordSeqPos ].isSpace() ) - { - // Currently we ignore such cases - return; - } - else - if ( !wordSeq[ wordSeqPos ].isLetterOrNumber() ) - { - // Special case: the cursor points to something which doesn't look like a - // middle of the word -- assume that it's something that joins two words - // together. - - int begin = wordSeqPos; - - for( ; begin; --begin ) { - if ( !wordSeq[ begin - 1 ].isLetterOrNumber() ) { - break; -} -} - - int end = wordSeqPos; - - while( ++end < wordSeq.size() ) { - if ( !wordSeq[ end ].isLetterOrNumber() ) { - break; -} -} - - if ( end - begin == 1 ) - { - // Well, turns out it was just a single non-letter char, discard it - return; + if (wordSeq.isEmpty()) { + return; } - word = wordSeq.mid( begin, end - begin ); - } - else - { - // Cursor points to a letter -- cut the word it points to + // locate the word inside the sequence - int begin = wordSeqPos; + QString word; - for( ; begin; --begin ) { - if ( !wordSeq[ begin - 1 ].isLetterOrNumber() ) { - break; -} -} + if (wordSeq[wordSeqPos].isSpace()) { + // Currently we ignore such cases + return; + } else if (!wordSeq[wordSeqPos].isLetterOrNumber()) { + // Special case: the cursor points to something which doesn't look like a + // middle of the word -- assume that it's something that joins two words + // together. - int end = wordSeqPos; + int begin = wordSeqPos; - while( ++end < wordSeq.size() ) - { - if ( !wordSeq[ end ].isLetterOrNumber() ) { - break; -} + for (; begin; --begin) { + if (!wordSeq[begin - 1].isLetterOrNumber()) { + break; + } + } + + int end = wordSeqPos; + + while (++end < wordSeq.size()) { + if (!wordSeq[end].isLetterOrNumber()) { + break; + } + } + + if (end - begin == 1) { + // Well, turns out it was just a single non-letter char, discard it + return; + } + + word = wordSeq.mid(begin, end - begin); + } else { + // Cursor points to a letter -- cut the word it points to + + int begin = wordSeqPos; + + for (; begin; --begin) { + if (!wordSeq[begin - 1].isLetterOrNumber()) { + break; + } + } + + int end = wordSeqPos; + + while (++end < wordSeq.size()) { + if (!wordSeq[end].isLetterOrNumber()) { + break; + } + } + word = wordSeq.mid(begin, end - begin); } - word = wordSeq.mid( begin, end - begin ); - } - // See if we have an RTL char. Reverse the whole string if we do. + // See if we have an RTL char. Reverse the whole string if we do. - for( int x = 0; x < word.size(); ++x ) - { - QChar::Direction d = word[ x ].direction(); + for (int x = 0; x < word.size(); ++x) { + QChar::Direction d = word[x].direction(); - if ( d == QChar::DirR || d == QChar::DirAL || - d == QChar::DirRLE || d == QChar::DirRLO ) - { - std::reverse( word.begin(), word.end() ); - break; + if (d == QChar::DirR || d == QChar::DirAL || d == QChar::DirRLE || d == QChar::DirRLO) { + std::reverse(word.begin(), word.end()); + break; + } } - } - emit instance().hovered( word, false ); + emit instance().hovered(word, false); } bool MacMouseOver::isAXAPIEnabled() { - if( NSFoundationVersionNumber >= 1000 ) { // MacOS 10.9+ - return AXIsProcessTrusted(); -} + if (NSFoundationVersionNumber >= 1000) { // MacOS 10.9+ + return AXIsProcessTrusted(); + } - return AXAPIEnabled(); + return AXAPIEnabled(); } diff --git a/src/main.cc b/src/main.cc index dd3e179b..38fba190 100644 --- a/src/main.cc +++ b/src/main.cc @@ -307,15 +307,7 @@ void processCommandLine( QCoreApplication * app, GDOptions * result ) // Handle cases where we get encoded URL if ( result->word.startsWith( QStringLiteral( "xn--" ) ) ) { // For `kde-open` or `gio` or others, URL are encoded into ACE or Punycode - #if QT_VERSION >= QT_VERSION_CHECK( 6, 3, 0 ) result->word = QUrl::fromAce( result->word.toLatin1(), QUrl::IgnoreIDNWhitelist ); - #else - // Old Qt's fromAce only applies to whitelisted domains, so we add .com to bypass this restriction :) - // https://bugreports.qt.io/browse/QTBUG-29080 - result->word.append( QStringLiteral( ".com" ) ); - result->word = QUrl::fromAce( result->word.toLatin1() ); - result->word.chop( 4 ); - #endif } else if ( result->word.startsWith( QStringLiteral( "%" ) ) ) { // For Firefox or other browsers where URL are percent encoded @@ -349,8 +341,11 @@ int main( int argc, char ** argv ) // attach the new console to this application's process if ( AttachConsole( ATTACH_PARENT_PROCESS ) ) { // reopen the std I/O streams to redirect I/O to the new console - freopen( "CON", "w", stdout ); - freopen( "CON", "w", stderr ); + auto ret1 = freopen( "CON", "w", stdout ); + auto ret2 = freopen( "CON", "w", stderr ); + if ( ret1 == nullptr || ret2 == nullptr ) { + qDebug() << "Attaching console stdout or stderr failed"; + } } qputenv( "QT_QPA_PLATFORM", "windows:darkmode=1" ); @@ -359,10 +354,6 @@ int main( int argc, char ** argv ) //high dpi screen support -#if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - QApplication::setAttribute( Qt::AA_EnableHighDpiScaling ); - QApplication::setAttribute( Qt::AA_UseHighDpiPixmaps ); -#endif qputenv( "QT_ENABLE_HIGHDPI_SCALING", "1" ); QApplication::setHighDpiScaleFactorRoundingPolicy( Qt::HighDpiScaleFactorRoundingPolicy::PassThrough ); @@ -564,18 +555,35 @@ int main( int argc, char ** argv ) QLocale::setDefault( locale ); QApplication::setLayoutDirection( locale.textDirection() ); - if ( !qtTranslator.load( "qt_extra_" + localeName, Config::getLocDir() ) ) { - qtTranslator.load( "qt_extra_" + localeName, QLibraryInfo::location( QLibraryInfo::TranslationsPath ) ); + // Load Qt translators + // For Windows, windeployqt will combine multiple qt modules translations into `qt_*` + // Thus, after deployment, loading `qtwebengine_*` is guaranteed to fail on Windows. + if ( qtTranslator.load( locale, "qt", "_", QLibraryInfo::path( QLibraryInfo::TranslationsPath ) ) ) { app.installTranslator( &qtTranslator ); + qDebug() << "qt translator loaded: " << qtTranslator.filePath(); + } + else { + qDebug() << "qt translator didn't load anything."; } - - translator.load( Config::getLocDir() + "/" + localeName ); - app.installTranslator( &translator ); QTranslator webengineTs; - if ( webengineTs.load( "qtwebengine_" + localeName, Config::getLocDir() ) ) { + if ( webengineTs.load( locale, "qtwebengine", "_", QLibraryInfo::path( QLibraryInfo::TranslationsPath ) ) ) { app.installTranslator( &webengineTs ); + qDebug() << "qt webengine translator loaded: " << webengineTs.filePath(); } + else { + qDebug() << "qt webengine translator may or may not be loaded."; + } + + // Load GD's translations, note GD has local names beyond what's supported by QLocal + if ( translator.load( localeName, Config::getLocDir() ) ) { + app.installTranslator( &translator ); + qDebug() << "gd translator loaded: " << translator.filePath(); + } + else { + qDebug() << "gd translator didn't load anything"; + } + // Prevent app from quitting spontaneously when it works with popup // and with the main window closed. diff --git a/src/pronounceengine.cc b/src/pronounceengine.cc index 83e56a30..1391de7c 100644 --- a/src/pronounceengine.cc +++ b/src/pronounceengine.cc @@ -8,7 +8,6 @@ PronounceEngine::PronounceEngine( QObject * parent ): { } - void PronounceEngine::reset() { QMutexLocker _( &mutex ); @@ -48,6 +47,7 @@ void PronounceEngine::finishDictionary( std::string dictId ) } state = PronounceState::OCCUPIED; } - emit emitAudio( dictAudioMap[ dictId ].first() ); + auto link = dictAudioMap[ dictId ].first(); + emit emitAudio( link ); } } diff --git a/src/pronounceengine.hh b/src/pronounceengine.hh index 4a807469..2b28b34d 100644 --- a/src/pronounceengine.hh +++ b/src/pronounceengine.hh @@ -1,5 +1,4 @@ -#ifndef PRONOUNCEENGINE_HH -#define PRONOUNCEENGINE_HH +#pragma once #include #include @@ -27,5 +26,3 @@ public: signals: void emitAudio( QString audioLink ); }; - -#endif // PRONOUNCEENGINE_HH diff --git a/src/resourceschemehandler.hh b/src/resourceschemehandler.hh index 3df002ca..660fcb95 100644 --- a/src/resourceschemehandler.hh +++ b/src/resourceschemehandler.hh @@ -1,5 +1,4 @@ -#ifndef RESOURCESCHEMEHANDLER_H -#define RESOURCESCHEMEHANDLER_H +#pragma once #include "article_netmgr.hh" @@ -18,5 +17,3 @@ private: ArticleNetworkAccessManager & mManager; QMimeDatabase db; }; - -#endif // RESOURCESCHEMEHANDLER_H diff --git a/src/scripts/Readme.md b/src/scripts/README.md similarity index 100% rename from src/scripts/Readme.md rename to src/scripts/README.md diff --git a/src/scripts/gd-builtin.js b/src/scripts/gd-builtin.js index 583ba0ce..edc6913d 100644 --- a/src/scripts/gd-builtin.js +++ b/src/scripts/gd-builtin.js @@ -1,20 +1,12 @@ -// seperate from cpp code. -var gdAudioLinks = { - first: null, - current: null, -}; - -//store dictionary audio link. -var gdAudioMap = new Map(); - function gdMakeArticleActive(newId, noEvent) { - var gdCurrentArticle = $_$(".gdactivearticle").attr("id"); + const gdCurrentArticle = + document.querySelector(".gdactivearticle").attributes.id; if (gdCurrentArticle !== "gdfrom-" + newId) { - $_$(".gdactivearticle").removeClass("gdactivearticle"); - var newFormId = "gdfrom-" + newId; - $_$("#" + newFormId).addClass("gdactivearticle"); - gdCurrentArticle = "gdfrom-" + newId; - gdAudioLinks.current = newId; + document + .querySelector(".gdactivearticle") + .classList.remove("gdactivearticle"); + const newFormId = "gdfrom-" + newId; + document.querySelector(`#${newFormId}`).classList.add("gdactivearticle"); if (!noEvent) articleview.onJsActiveArticleChanged("gdfrom-" + newId); } } diff --git a/src/scripts/gd-custom.js b/src/scripts/gd-custom.js index 1d9a989d..b41ce40a 100644 --- a/src/scripts/gd-custom.js +++ b/src/scripts/gd-custom.js @@ -65,4 +65,4 @@ autoResize: false, }); }); -})($_$); +})(jQuery); diff --git a/src/speechclient.cc b/src/speechclient.cc index 58a0318c..f66bea2c 100644 --- a/src/speechclient.cc +++ b/src/speechclient.cc @@ -39,7 +39,7 @@ SpeechClient::Engines SpeechClient::availableEngines() for ( const QVoice & voice : sp->availableVoices() ) { const QString name( QString( "%4 - %3 %1 (%2)" ) .arg( QLocale::languageToString( locale.language() ), - ( QLocale::countryToString( locale.country() ) ), + ( QLocale::territoryToString( locale.territory() ) ), voice.name(), engine_name ) ); Engine engine( Config::VoiceEngine( engine_name, name, voice.name(), QLocale( locale ), 50, 0 ) ); diff --git a/src/termination.hh b/src/termination.hh index 3d63dbb6..04e549d9 100644 --- a/src/termination.hh +++ b/src/termination.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef TERMINATION_HH -#define TERMINATION_HH +#pragma once #include @@ -11,5 +10,3 @@ extern QFile * logFilePtr; // Installs the termination handler which attempts to pop Qt's dialog showing // the exception and backtrace, and then aborts. void installTerminationHandler(); - -#endif // TERMINATION_HH diff --git a/src/tiff.hh b/src/tiff.hh index 7e70426b..6b4274e3 100644 --- a/src/tiff.hh +++ b/src/tiff.hh @@ -1,5 +1,4 @@ -#ifndef __TIFF_HH_INCLUDED__ -#define __TIFF_HH_INCLUDED__ +#pragma once #include #include @@ -8,6 +7,3 @@ namespace GdTiff { void tiff2img( std::vector< char > & data, const char * format = "webp" ); } - - -#endif // TIFF_HH diff --git a/src/ui/about.hh b/src/ui/about.hh index 955c080e..f101bfc5 100644 --- a/src/ui/about.hh +++ b/src/ui/about.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef ABOUT_HH -#define ABOUT_HH +#pragma once #include "ui_about.h" #include "sptr.hh" @@ -21,5 +20,3 @@ private: Ui::About ui; }; - -#endif // ABOUT_HH diff --git a/src/ui/about.ui b/src/ui/about.ui index b0434ecc..7d13a55c 100644 --- a/src/ui/about.ui +++ b/src/ui/about.ui @@ -3,7 +3,7 @@ About - Qt::WindowModality::NonModal + Qt::NonModal @@ -46,7 +46,7 @@ true - Qt::AlignmentFlag::AlignCenter + Qt::AlignCenter 10 @@ -66,7 +66,7 @@ GoldenDict-ng dictionary lookup program, version - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -79,7 +79,7 @@ #.# - Qt::TextInteractionFlag::TextEditorInteraction + Qt::TextEditorInteraction @@ -91,7 +91,7 @@ (c) 2008-2013 Konstantin Isakov (ikm@goldendict.org) - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -101,7 +101,7 @@ Licensed under GNU GPLv3 or later - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -111,7 +111,7 @@ Based on Qt #.#.# (GCC #.#, 32/64 bit) - Qt::TextInteractionFlag::TextEditorInteraction + Qt::TextEditorInteraction @@ -146,7 +146,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -168,7 +168,7 @@ Credits: - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -188,10 +188,10 @@ - Qt::Orientation::Horizontal + Qt::Horizontal - QDialogButtonBox::StandardButton::Ok + QDialogButtonBox::Ok true diff --git a/src/ui/article_inspect.cc b/src/ui/article_inspect.cc index e2943516..6eac73f4 100644 --- a/src/ui/article_inspect.cc +++ b/src/ui/article_inspect.cc @@ -1,8 +1,6 @@ #include "article_inspect.hh" #include -#if ( QT_VERSION > QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#endif +#include ArticleInspector::ArticleInspector( QWidget * parent ): QWidget( parent, Qt::WindowType::Window ) { @@ -39,9 +37,7 @@ void ArticleInspector::triggerAction( QWebEnginePage * page ) return; } -#if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) || QT_VERSION > QT_VERSION_CHECK( 6, 3, 0 ) ) page->triggerAction( QWebEnginePage::InspectElement ); -#endif } void ArticleInspector::closeEvent( QCloseEvent * ) diff --git a/src/ui/article_inspect.hh b/src/ui/article_inspect.hh index 29fc523a..26aa6b9d 100644 --- a/src/ui/article_inspect.hh +++ b/src/ui/article_inspect.hh @@ -1,5 +1,4 @@ -#ifndef ARTICLE_INSPECT_H -#define ARTICLE_INSPECT_H +#pragma once #include #include @@ -21,5 +20,3 @@ private: virtual void closeEvent( QCloseEvent * ); }; - -#endif // ARTICLE_INSPECT_H diff --git a/src/ui/articleview.cc b/src/ui/articleview.cc index df32714d..b551fc9c 100644 --- a/src/ui/articleview.cc +++ b/src/ui/articleview.cc @@ -31,15 +31,9 @@ #include #include #include - -#if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) && QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - #include -#endif -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) - #include - #include - #include -#endif +#include +#include +#include #ifdef Q_OS_WIN32 #include #include @@ -214,15 +208,7 @@ ArticleView::ArticleView( QWidget * parent, QWebEngineSettings * settings = webview->settings(); settings->setUnknownUrlSchemePolicy( QWebEngineSettings::UnknownUrlSchemePolicy::DisallowUnknownUrlSchemes ); -#if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - settings->defaultSettings()->setAttribute( QWebEngineSettings::LocalContentCanAccessRemoteUrls, true ); - settings->defaultSettings()->setAttribute( QWebEngineSettings::LocalContentCanAccessFileUrls, true ); - settings->defaultSettings()->setAttribute( QWebEngineSettings::ErrorPageEnabled, false ); - settings->defaultSettings()->setAttribute( QWebEngineSettings::LinksIncludedInFocusChain, false ); - settings->defaultSettings()->setAttribute( QWebEngineSettings::PlaybackRequiresUserGesture, false ); - settings->defaultSettings()->setAttribute( QWebEngineSettings::JavascriptCanAccessClipboard, true ); - settings->defaultSettings()->setAttribute( QWebEngineSettings::PrintElementBackgrounds, false ); -#else + settings->setAttribute( QWebEngineSettings::LocalContentCanAccessRemoteUrls, true ); settings->setAttribute( QWebEngineSettings::LocalContentCanAccessFileUrls, true ); settings->setAttribute( QWebEngineSettings::ErrorPageEnabled, false ); @@ -230,7 +216,6 @@ ArticleView::ArticleView( QWidget * parent, settings->setAttribute( QWebEngineSettings::PlaybackRequiresUserGesture, false ); settings->setAttribute( QWebEngineSettings::JavascriptCanAccessClipboard, true ); settings->setAttribute( QWebEngineSettings::PrintElementBackgrounds, false ); -#endif auto html = articleNetMgr.getHtml( ResourceType::UNTITLE ); @@ -277,6 +262,16 @@ unsigned ArticleView::getCurrentGroupId() return currentGroupId; } +void ArticleView::setAudioLink( QString audioLink ) +{ + audioLink_ = audioLink; +} + +QString ArticleView::getAudioLink() const +{ + return audioLink_; +} + ArticleView::~ArticleView() { cleanupTemp(); @@ -302,6 +297,7 @@ void ArticleView::showDefinition( QString const & word, currentActiveDictIds.clear(); // first, let's stop the player audioPlayer->stop(); + audioLink_.clear(); QUrl req; Contexts contexts( contexts_ ); @@ -330,13 +326,9 @@ void ArticleView::showDefinition( QString const & word, if ( contexts.size() ) { QBuffer buf; - buf.open( QIODevice::WriteOnly ); - QDataStream stream( &buf ); - stream << contexts; - buf.close(); Utils::Url::addQueryItem( req, "contexts", QString::fromLatin1( buf.buffer().toBase64() ) ); @@ -376,6 +368,7 @@ void ArticleView::showDefinition( QString const & word, currentActiveDictIds.clear(); // first, let's stop the player audioPlayer->stop(); + audioLink_.clear(); QUrl req; @@ -432,17 +425,16 @@ void ArticleView::inspectElement() void ArticleView::loadFinished( bool result ) { setZoomFactor( cfg.preferences.zoomFactor ); - QUrl url = webview->url(); - qDebug() << "article view loaded url:" << url.url().left( 200 ) << result; - - if ( url.url() == "about:blank" ) { - return; - } - + webview->unsetCursor(); if ( !result ) { qWarning() << "article loaded unsuccessful"; return; } + QUrl url = webview->url(); + if ( url.url() == "about:blank" ) { + return; + } + qDebug() << "article view loaded url:" << url.url().left( 50 ) << result; if ( cfg.preferences.autoScrollToTargetArticle ) { QString const scrollTo = Utils::Url::queryItemValue( url, "scrollto" ); @@ -458,7 +450,6 @@ void ArticleView::loadFinished( bool result ) setActiveArticleId( "" ); } - webview->unsetCursor(); // Expand collapsed article if only one loaded webview->page()->runJavaScript( QString( "gdCheckArticlesNumber();" ) ); @@ -772,38 +763,9 @@ bool ArticleView::eventFilter( QObject * obj, QEvent * ev ) QString ArticleView::getMutedForGroup( unsigned group ) { - if ( dictionaryBarToggled && dictionaryBarToggled->isChecked() ) { - // Dictionary bar is active -- mute the muted dictionaries - Instances::Group const * groupInstance = dictionaryGroup->getGroupById( group ); - - // Find muted dictionaries for current group - Config::Group const * grp = cfg.getGroup( group ); - Config::MutedDictionaries const * mutedDictionaries; - if ( group == Instances::Group::AllGroupId ) { - mutedDictionaries = popupView ? &cfg.popupMutedDictionaries : &cfg.mutedDictionaries; - } - else { - mutedDictionaries = grp ? ( popupView ? &grp->popupMutedDictionaries : &grp->mutedDictionaries ) : nullptr; - } - if ( !mutedDictionaries ) { - return {}; - } - - QStringList mutedDicts; - - if ( groupInstance ) { - for ( const auto & dictionarie : groupInstance->dictionaries ) { - QString id = QString::fromStdString( dictionarie->getId() ); - - if ( mutedDictionaries->contains( id ) ) { - mutedDicts.append( id ); - } - } - } - - if ( !mutedDicts.empty() ) { - return mutedDicts.join( "," ); - } + auto mutedDicts = getMutedDictionaries( group ); + if ( !mutedDicts.empty() ) { + return mutedDicts.join( "," ); } return {}; @@ -818,7 +780,7 @@ QStringList ArticleView::getMutedDictionaries( unsigned group ) // Find muted dictionaries for current group Config::Group const * grp = cfg.getGroup( group ); Config::MutedDictionaries const * mutedDictionaries; - if ( group == Instances::Group::AllGroupId ) { + if ( group == GroupId::AllGroupId ) { mutedDictionaries = popupView ? &cfg.popupMutedDictionaries : &cfg.mutedDictionaries; } else { @@ -1000,14 +962,6 @@ void ArticleView::openLink( QUrl const & url, QUrl const & ref, QString const & QString( "window.location = \"%1\"" ).arg( QString::fromUtf8( url.toEncoded() ) ) ); } else { - if ( Utils::Url::hasQueryItem( ref, "dictionaries" ) ) { - // Specific dictionary group from full-text search - QStringList dictsList = Utils::Url::queryItemValue( ref, "dictionaries" ).split( ",", Qt::SkipEmptyParts ); - - showDefinition( url.path().mid( 1 ), dictsList, getGroup( ref ), false ); - return; - } - if ( Utils::Url::hasQueryItem( url, "dictionaries" ) ) { // Specific dictionary group from full-text search QStringList dictsList = Utils::Url::queryItemValue( url, "dictionaries" ).split( ",", Qt::SkipEmptyParts ); @@ -1037,91 +991,12 @@ void ArticleView::openLink( QUrl const & url, QUrl const & ref, QString const & || Utils::Url::isAudioUrl( url ) ) { // Download it - // Clear any pending ones - - resourceDownloadRequests.clear(); - - resourceDownloadUrl = url; - if ( Utils::Url::isWebAudioUrl( url ) ) { sptr< Dictionary::DataRequest > req = std::make_shared< Dictionary::WebMultimediaDownload >( url, articleNetMgr ); - resourceDownloadRequests.push_back( req ); - - connect( req.get(), &Dictionary::Request::finished, this, &ArticleView::resourceDownloadFinished ); - } - else if ( url.scheme() == "gdau" && url.host() == "search" ) { - // Since searches should be limited to current group, we just do them - // here ourselves since otherwise we'd need to pass group id to netmgr - // and it should've been having knowledge of the current groups, too. - - unsigned currentGroup = getGroup( ref ); - - std::vector< sptr< Dictionary::Class > > const * activeDicts = - dictionaryGroup->getActiveDictionaries( currentGroup ); - - if ( activeDicts ) { - unsigned preferred = UINT_MAX; - if ( url.hasFragment() ) { - // Find sound in the preferred dictionary - QString preferredName = Utils::Url::fragment( url ); - try { - for ( unsigned x = 0; x < activeDicts->size(); ++x ) { - if ( preferredName.compare( QString::fromUtf8( ( *activeDicts )[ x ]->getName().c_str() ) ) == 0 ) { - preferred = x; - sptr< Dictionary::DataRequest > req = - ( *activeDicts )[ x ]->getResource( url.path().mid( 1 ).toUtf8().data() ); - - resourceDownloadRequests.push_back( req ); - - if ( !req->isFinished() ) { - // Queued loading - connect( req.get(), &Dictionary::Request::finished, this, &ArticleView::resourceDownloadFinished ); - } - else { - // Immediate loading - if ( req->dataSize() > 0 ) { - // Resource already found, stop next search - resourceDownloadFinished(); - return; - } - } - break; - } - } - } - catch ( std::exception & e ) { - emit statusBarMessage( tr( "ERROR: %1" ).arg( e.what() ), 10000, QPixmap( ":/icons/error.svg" ) ); - } - } - for ( unsigned x = 0; x < activeDicts->size(); ++x ) { - try { - if ( x == preferred ) { - continue; - } - - sptr< Dictionary::DataRequest > req = - ( *activeDicts )[ x ]->getResource( url.path().mid( 1 ).toUtf8().data() ); - - resourceDownloadRequests.push_back( req ); - - if ( !req->isFinished() ) { - // Queued loading - connect( req.get(), &Dictionary::Request::finished, this, &ArticleView::resourceDownloadFinished ); - } - else { - // Immediate loading - if ( req->dataSize() > 0 ) { - // Resource already found, stop next search - break; - } - } - } - catch ( std::exception & e ) { - emit statusBarMessage( tr( "ERROR: %1" ).arg( e.what() ), 10000, QPixmap( ":/icons/error.svg" ) ); - } - } - } + connect( req.get(), &Dictionary::Request::finished, this, [ req, url, this ]() { + resourceDownloadFinished( req, url ); + } ); } else { // Normal resource download @@ -1135,28 +1010,16 @@ void ArticleView::openLink( QUrl const & url, QUrl const & ref, QString const & } else if ( req->isFinished() && req->dataSize() >= 0 ) { // Have data ready, handle it - resourceDownloadRequests.push_back( req ); - resourceDownloadFinished(); + resourceDownloadFinished( req, url ); return; } else if ( !req->isFinished() ) { - // Queue to be handled when done - - resourceDownloadRequests.push_back( req ); - - connect( req.get(), &Dictionary::Request::finished, this, &ArticleView::resourceDownloadFinished ); + connect( req.get(), &Dictionary::Request::finished, this, [ req, url, this ]() { + resourceDownloadFinished( req, url ); + } ); } } - - if ( resourceDownloadRequests.empty() ) // No requests were queued - { - qDebug() << tr( "The referenced resource doesn't exist." ); - return; - } - else { - resourceDownloadFinished(); // Check any requests finished already - } } else if ( url.scheme() == "gdprg" ) { // Program. Run it. @@ -1213,86 +1076,64 @@ void ArticleView::openLink( QUrl const & url, QUrl const & ref, QString const & } } -ResourceToSaveHandler * ArticleView::saveResource( const QUrl & url, const QString & fileName ) +void ArticleView::playAudio( QUrl const & url ) { - return saveResource( url, webview->url(), fileName ); + audioPlayer->stop(); + qDebug() << "play audio [url]:" << url; + + if ( url.scheme() == "bres" || url.scheme() == "gdau" || url.scheme() == "gdvideo" + || Utils::Url::isAudioUrl( url ) ) { + + // Download it + if ( Utils::Url::isWebAudioUrl( url ) ) { + sptr< Dictionary::DataRequest > req = std::make_shared< Dictionary::WebMultimediaDownload >( url, articleNetMgr ); + + connect( req.get(), &Dictionary::Request::finished, this, [ req, this ]() { + audioDownloadFinished( req ); + } ); + } + else if ( url.scheme() == "gdau" ) { + // Since searches should be limited to current group, we just do them + // here ourselves since otherwise we'd need to pass group id to netmgr + // and it should've been having knowledge of the current groups, too. + + sptr< Dictionary::Class > dict = dictionaryGroup->getDictionaryById( url.host().toStdString() ); + + if ( dict ) { + try { + sptr< Dictionary::DataRequest > req = dict->getResource( url.path().mid( 1 ).toUtf8().data() ); + + if ( !req->isFinished() ) { + // Queued loading + connect( req.get(), &Dictionary::Request::finished, this, [ req, this ]() { + audioDownloadFinished( req ); + } ); + } + else { + // Immediate loading + audioDownloadFinished( req ); + } + } + catch ( std::exception & e ) { + emit statusBarMessage( tr( "ERROR: %1" ).arg( e.what() ), 10000, QPixmap( ":/icons/error.svg" ) ); + } + } + } + } } -ResourceToSaveHandler * ArticleView::saveResource( const QUrl & url, const QUrl & ref, const QString & fileName ) +ResourceToSaveHandler * ArticleView::saveResource( const QUrl & url, const QString & fileName ) { ResourceToSaveHandler * handler = new ResourceToSaveHandler( this, fileName ); sptr< Dictionary::DataRequest > req; if ( url.scheme() == "bres" || url.scheme() == "gico" || url.scheme() == "gdau" || url.scheme() == "gdvideo" ) { - if ( url.host() == "search" ) { - // Since searches should be limited to current group, we just do them - // here ourselves since otherwise we'd need to pass group id to netmgr - // and it should've been having knowledge of the current groups, too. + // Normal resource download + QString contentType; + req = articleNetMgr.getResource( url, contentType ); - unsigned currentGroup = getGroup( ref ); - - std::vector< sptr< Dictionary::Class > > const * activeDicts = - dictionaryGroup->getActiveDictionaries( currentGroup ); - - if ( activeDicts ) { - unsigned preferred = UINT_MAX; - if ( url.hasFragment() && url.scheme() == "gdau" ) { - // Find sound in the preferred dictionary - QString preferredName = Utils::Url::fragment( url ); - for ( unsigned x = 0; x < activeDicts->size(); ++x ) { - try { - if ( preferredName.compare( QString::fromUtf8( ( *activeDicts )[ x ]->getName().c_str() ) ) == 0 ) { - preferred = x; - sptr< Dictionary::DataRequest > data_request = - ( *activeDicts )[ x ]->getResource( url.path().mid( 1 ).toUtf8().data() ); - - handler->addRequest( data_request ); - - if ( data_request->isFinished() && data_request->dataSize() > 0 ) { - handler->downloadFinished(); - return handler; - } - break; - } - } - catch ( std::exception & e ) { - gdWarning( "getResource request error (%s) in \"%s\"\n", - e.what(), - ( *activeDicts )[ x ]->getName().c_str() ); - } - } - } - for ( unsigned x = 0; x < activeDicts->size(); ++x ) { - try { - if ( x == preferred ) { - continue; - } - - req = ( *activeDicts )[ x ]->getResource( Utils::Url::path( url ).mid( 1 ).toUtf8().data() ); - - handler->addRequest( req ); - - if ( req->isFinished() && req->dataSize() > 0 ) { - // Resource already found, stop next search - break; - } - } - catch ( std::exception & e ) { - gdWarning( "getResource request error (%s) in \"%s\"\n", - e.what(), - ( *activeDicts )[ x ]->getName().c_str() ); - } - } - } - } - else { - // Normal resource download - QString contentType; - req = articleNetMgr.getResource( url, contentType ); - - if ( req.get() ) { - handler->addRequest( req ); - } + if ( req.get() ) { + handler->addRequest( req ); } } else { @@ -1370,7 +1211,7 @@ void ArticleView::syncBackgroundColorWithCfgDarkReader() const { // Only works Qt6.6.3+ https://bugreports.qt.io/browse/QTBUG-112013 #if QT_VERSION >= QT_VERSION_CHECK( 6, 6, 3 ) - if ( cfg.preferences.darkReaderMode ) { + if ( cfg.preferences.darkReaderMode == Config::Dark::On ) { webview->page()->setBackgroundColor( QColor( 39, 40, 40 ) ); } else { @@ -1417,33 +1258,14 @@ void ArticleView::reload() void ArticleView::hasSound( const std::function< void( bool ) > & callback ) { - webview->page()->runJavaScript( R"(if(typeof(gdAudioLinks)!="undefined") gdAudioLinks.first)", - [ callback ]( const QVariant & v ) { - bool has = false; - if ( v.type() == QVariant::String ) { - has = !v.toString().isEmpty(); - } - callback( has ); - } ); + callback( !audioLink_.isEmpty() ); } -//use webengine javascript to playsound void ArticleView::playSound() { - QString variable = R"( (function(){ var link=gdAudioMap.get(gdAudioLinks.current); - if(link==undefined){ - link=gdAudioLinks.first; - } - return link;})(); )"; - - webview->page()->runJavaScript( variable, [ this ]( const QVariant & result ) { - if ( result.typeId() == qMetaTypeId< QString >() ) { - QString soundScript = result.toString(); - if ( !soundScript.isEmpty() ) { - openLink( QUrl::fromEncoded( soundScript.toUtf8() ), webview->url() ); - } - } - } ); + if ( !audioLink_.isEmpty() ) { + playAudio( QUrl::fromEncoded( audioLink_.toUtf8() ) ); + } } void ArticleView::stopSound() @@ -1492,12 +1314,10 @@ void ArticleView::print( QPrinter * printer ) const result = success; loop.quit(); }; -#if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - webview->page()->print( printer, std::move( printPreview ) ); -#else + connect( webview, &QWebEngineView::printFinished, &loop, std::move( printPreview ) ); webview->print( printer ); -#endif + loop.exec(); if ( !result ) { qDebug() << "print failed"; @@ -1526,11 +1346,7 @@ void ArticleView::contextMenuRequested( QPoint const & pos ) QAction * saveSoundAction = nullptr; QAction * saveBookmark = nullptr; -#if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - const QWebEngineContextMenuData * menuData = &( r->contextMenuData() ); -#else QWebEngineContextMenuRequest * menuData = webview->lastContextMenuRequest(); -#endif QUrl targetUrl( menuData->linkUrl() ); Contexts contexts; @@ -1555,12 +1371,8 @@ void ArticleView::contextMenuRequested( QPoint const & pos ) } QUrl imageUrl; -#if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - if ( !popupView && menuData->mediaType() == QWebEngineContextMenuData::MediaTypeImage ) -#else - if ( !popupView && menuData->mediaType() == QWebEngineContextMenuRequest::MediaType::MediaTypeImage ) -#endif - { + + if ( !popupView && menuData->mediaType() == QWebEngineContextMenuRequest::MediaType::MediaTypeImage ) { imageUrl = menuData->mediaUrl(); if ( !imageUrl.isEmpty() ) { menu.addAction( webview->pageAction( QWebEnginePage::CopyImageToClipboard ) ); @@ -1795,7 +1607,7 @@ void ArticleView::contextMenuRequested( QPoint const & pos ) if ( !fileName.isEmpty() ) { QFileInfo fileInfo( fileName ); emit storeResourceSavePath( QDir::toNativeSeparators( fileInfo.absoluteDir().absolutePath() ) ); - saveResource( url, webview->url(), fileName ); + saveResource( url, fileName ); } } else if ( result == openImageAction ) { @@ -1818,7 +1630,7 @@ void ArticleView::contextMenuRequested( QPoint const & pos ) if ( !fileName.isEmpty() ) { QFileInfo fileInfo( fileName ); - auto handler = saveResource( url, webview->url(), fileName ); + auto handler = saveResource( url, fileName ); if ( !handler->isEmpty() ) { connect( handler, &ResourceToSaveHandler::done, this, [ fileName ]() { @@ -1847,83 +1659,71 @@ void ArticleView::contextMenuRequested( QPoint const & pos ) qDebug() << "title = " << r->title(); } -void ArticleView::resourceDownloadFinished() +void ArticleView::resourceDownloadFinished( const sptr< Dictionary::DataRequest > & req, + const QUrl & resourceDownloadUrl ) { - if ( resourceDownloadRequests.empty() ) { - return; // Stray signal + if ( !req->isFinished() ) { + return; } + if ( req->dataSize() >= 0 ) { + vector< char > const & data = req->getFullData(); - // Find any finished resources - for ( list< sptr< Dictionary::DataRequest > >::iterator i = resourceDownloadRequests.begin(); - i != resourceDownloadRequests.end(); ) { - if ( ( *i )->isFinished() ) { - if ( ( *i )->dataSize() >= 0 ) { - // Ok, got one finished, all others are irrelevant now + if ( resourceDownloadUrl.scheme() == "gdau" || Utils::Url::isWebAudioUrl( resourceDownloadUrl ) ) { + // Audio data + audioPlayer->stop(); + connect( audioPlayer.data(), + &AudioPlayerInterface::error, + this, + &ArticleView::audioPlayerError, + Qt::UniqueConnection ); + QString errorMessage = audioPlayer->play( data.data(), data.size() ); + if ( !errorMessage.isEmpty() ) { + QMessageBox::critical( this, "GoldenDict", tr( "Failed to play sound file: %1" ).arg( errorMessage ) ); + } + } + else { + QString fileName; - vector< char > const & data = ( *i )->getFullData(); - - if ( resourceDownloadUrl.scheme() == "gdau" || Utils::Url::isWebAudioUrl( resourceDownloadUrl ) ) { - // Audio data - audioPlayer->stop(); - connect( audioPlayer.data(), - &AudioPlayerInterface::error, - this, - &ArticleView::audioPlayerError, - Qt::UniqueConnection ); - QString errorMessage = audioPlayer->play( data.data(), data.size() ); - if ( !errorMessage.isEmpty() ) { - QMessageBox::critical( this, "GoldenDict", tr( "Failed to play sound file: %1" ).arg( errorMessage ) ); - } - } - else { - // Create a temporary file - // Remove the ones previously used, if any - cleanupTemp(); - QString fileName; - - { - QTemporaryFile tmp( QDir::temp().filePath( "XXXXXX-" + resourceDownloadUrl.path().section( '/', -1 ) ), - this ); - - if ( !tmp.open() || (size_t)tmp.write( &data.front(), data.size() ) != data.size() ) { - QMessageBox::critical( this, "GoldenDict", tr( "Failed to create temporary file." ) ); - return; - } - - tmp.setAutoRemove( false ); - - desktopOpenedTempFiles.insert( fileName = tmp.fileName() ); - } - - if ( !QDesktopServices::openUrl( QUrl::fromLocalFile( fileName ) ) ) { - QMessageBox::critical( - this, - "GoldenDict", - tr( "Failed to auto-open resource file, try opening manually: %1." ).arg( fileName ) ); - } - } - - // Ok, whatever it was, it's finished. Remove this and any other - // requests and finish. - - resourceDownloadRequests.clear(); + QTemporaryFile tmp( QDir::temp().filePath( "XXXXXX-" + resourceDownloadUrl.path().section( '/', -1 ) ), this ); + if ( !tmp.open() || (size_t)tmp.write( &data.front(), data.size() ) != data.size() ) { + QMessageBox::critical( this, "GoldenDict", tr( "Failed to create temporary file." ) ); return; } - else { - // This one had no data. Erase it. - resourceDownloadRequests.erase( i++ ); + + tmp.setAutoRemove( false ); + + desktopOpenedTempFiles.insert( fileName = tmp.fileName() ); + + if ( !QDesktopServices::openUrl( QUrl::fromLocalFile( fileName ) ) ) { + QMessageBox::critical( this, + "GoldenDict", + tr( "Failed to auto-open resource file, try opening manually: %1." ).arg( fileName ) ); } } - else { // Unfinished, wait. - break; - } + return; } +} - if ( resourceDownloadRequests.empty() ) { - // emit statusBarMessage( - // tr("WARNING: %1").arg(tr("The referenced resource failed to download.")), - // 10000, QPixmap(":/icons/error.svg")); + +void ArticleView::audioDownloadFinished( const sptr< Dictionary::DataRequest > & req ) +{ + if ( req->dataSize() >= 0 ) { + // Ok, got one finished, all others are irrelevant now + qDebug() << "audio download finished. Playing..."; + vector< char > const & data = req->getFullData(); + + // Audio data + audioPlayer->stop(); + connect( audioPlayer.data(), + &AudioPlayerInterface::error, + this, + &ArticleView::audioPlayerError, + Qt::UniqueConnection ); + QString errorMessage = audioPlayer->play( data.data(), data.size() ); + if ( !errorMessage.isEmpty() ) { + QMessageBox::critical( this, "GoldenDict", tr( "Failed to play sound file: %1" ).arg( errorMessage ) ); + } } } @@ -1938,7 +1738,7 @@ void ArticleView::pasteTriggered() if ( !word.isEmpty() ) { unsigned groupId = getGroup( webview->url() ); - if ( groupId == 0 || groupId == Instances::Group::HelpGroupId ) { + if ( groupId == 0 || groupId == GroupId::HelpGroupId ) { // We couldn't figure out the group out of the URL, // so let's try the currently selected group. groupId = currentGroupId; @@ -2080,7 +1880,7 @@ void ArticleView::doubleClicked( QPoint pos ) emit sendWordToInputLine( selectedText ); // Do some checks to make sure there's a sensible selection indeed - if ( Folding::applyWhitespaceOnly( gd::toWString( selectedText ) ).size() && selectedText.size() < 60 ) { + if ( Folding::applyWhitespaceOnly( selectedText.toStdU32String() ).size() && selectedText.size() < 60 ) { // Initiate translation Qt::KeyboardModifiers kmod = QApplication::keyboardModifiers(); if ( kmod & ( Qt::ControlModifier | Qt::ShiftModifier ) ) { // open in new tab @@ -2090,7 +1890,7 @@ void ArticleView::doubleClicked( QPoint pos ) QUrl const & ref = webview->url(); auto groupId = getGroup( ref ); - if ( groupId == 0 || groupId == Instances::Group::HelpGroupId ) { + if ( groupId == 0 || groupId == GroupId::HelpGroupId ) { groupId = currentGroupId; } if ( Utils::Url::hasQueryItem( ref, "dictionaries" ) ) { @@ -2130,19 +1930,12 @@ void ArticleView::findText( QString & text, const QWebEnginePage::FindFlags & f, const std::function< void( bool match ) > & callback ) { -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) webview->findText( text, f, [ callback ]( const QWebEngineFindTextResult & result ) { auto r = result.numberOfMatches() > 0; if ( callback ) { callback( r ); } } ); -#else - webview->findText( text, f, [ callback ]( bool result ) { - if ( callback ) - callback( result ); - } ); -#endif } bool ArticleView::closeSearch() @@ -2199,11 +1992,19 @@ void ArticleView::highlightFTSResults() return; } + QString accuracy = "exactly"; + + if ( std::any_of( regString.begin(), regString.end(), []( QChar & a ) { + return a.script() == QChar::Script_Han; + } ) ) { + accuracy = "partially"; + } + QString script = QString( "var context = document.querySelector(\"body\");\n" "var instance = new Mark(context);\n instance.unmark();\n" - "instance.mark(\"%1\",{\"accuracy\": \"exactly\"});" ) - .arg( regString ); + "instance.mark(\"%1\",{\"accuracy\": \"%2\"});" ) + .arg( regString, accuracy ); webview->page()->runJavaScript( script ); auto parts = regString.split( " ", Qt::SkipEmptyParts ); @@ -2219,13 +2020,14 @@ void ArticleView::highlightFTSResults() } ftsSearchPanel->show(); + performFtsFindOperation( true ); } void ArticleView::setActiveDictIds( const ActiveDictIds & ad ) { auto groupId = ad.groupId; if ( groupId == 0 ) { - groupId = Instances::Group::AllGroupId; + groupId = GroupId::AllGroupId; } if ( ( ad.word == currentWord && groupId == getCurrentGroup() ) || historyMode ) { // ignore all other signals. @@ -2240,7 +2042,7 @@ void ArticleView::dictionaryClear( const ActiveDictIds & ad ) { auto groupId = ad.groupId; if ( groupId == 0 ) { - groupId = Instances::Group::AllGroupId; + groupId = GroupId::AllGroupId; } // ignore all other signals. if ( ad.word == currentWord && groupId == getCurrentGroup() ) { @@ -2265,7 +2067,6 @@ void ArticleView::performFtsFindOperation( bool backwards ) QWebEnginePage::FindFlags flags( 0 ); if ( backwards ) { -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) webview->findText( firstAvailableText, flags | QWebEnginePage::FindBackward, [ this ]( const QWebEngineFindTextResult & result ) { @@ -2280,16 +2081,8 @@ void ArticleView::performFtsFindOperation( bool backwards ) ftsSearchPanel->statusLabel->setText( searchStatusMessage( result.activeMatch(), result.numberOfMatches() ) ); } ); -#else - webview->findText( firstAvailableText, flags | QWebEnginePage::FindBackward, [ this ]( bool res ) { - ftsSearchPanel->previous->setEnabled( res ); - if ( !ftsSearchPanel->next->isEnabled() ) - ftsSearchPanel->next->setEnabled( res ); - } ); -#endif } else { -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) webview->findText( firstAvailableText, flags, [ this ]( const QWebEngineFindTextResult & result ) { if ( result.numberOfMatches() == 0 ) { return; @@ -2301,15 +2094,6 @@ void ArticleView::performFtsFindOperation( bool backwards ) ftsSearchPanel->statusLabel->setText( searchStatusMessage( result.activeMatch(), result.numberOfMatches() ) ); } ); -#else - - webview->findText( firstAvailableText, flags, [ this ]( bool res ) { - ftsSearchPanel->next->setEnabled( res ); - if ( !ftsSearchPanel->previous->isEnabled() ) - ftsSearchPanel->previous->setEnabled( res ); - } ); - -#endif } } diff --git a/src/ui/articleview.hh b/src/ui/articleview.hh index 2aa82f8f..144d6d43 100644 --- a/src/ui/articleview.hh +++ b/src/ui/articleview.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef GOLDENDICT_ARTICLEVIEW_H -#define GOLDENDICT_ARTICLEVIEW_H +#pragma once #include #include @@ -11,7 +10,7 @@ #include #include #include "article_netmgr.hh" -#include "audioplayerinterface.hh" +#include "audio/audioplayerinterface.hh" #include "instances.hh" #include "groupcombobox.hh" #include "globalbroadcaster.hh" @@ -52,13 +51,6 @@ class ArticleView: public QWidget /// An action used to create Anki notes. QAction sendToAnkiAction{ tr( "&Create Anki note" ), this }; - /// Any resource we've decided to download off the dictionary gets stored here. - /// Full vector capacity is used for search requests, where we have to make - /// a multitude of requests. - std::list< sptr< Dictionary::DataRequest > > resourceDownloadRequests; - /// Url of the resourceDownloadRequests - QUrl resourceDownloadUrl; - /// For resources opened via desktop services QSet< QString > desktopOpenedTempFiles; @@ -78,6 +70,8 @@ class ArticleView: public QWidget //current active dictionary id; QString activeDictId; + QString audioLink_; + /// Search in results of full-text search QString firstAvailableText; QStringList uniqueMatches; @@ -106,7 +100,10 @@ public: void setCurrentGroupId( unsigned currengGrgId ); unsigned getCurrentGroupId(); - virtual QSize minimumSizeHint() const; + void setAudioLink( QString audioLink ); + QString getAudioLink() const; + + QSize minimumSizeHint() const override; void clearContent(); ~ArticleView(); @@ -152,6 +149,8 @@ public: QUrl const & referrer, QString const & scrollTo = QString(), Contexts const & contexts = Contexts() ); + void playAudio( QUrl const & url ); + void audioDownloadFinished( const sptr< Dictionary::DataRequest > & req ); /// Called when the state of dictionary bar changes and the view is active. /// The function reloads content if the change affects it. @@ -248,7 +247,6 @@ public: void setActiveArticleId( QString const & ); ResourceToSaveHandler * saveResource( const QUrl & url, const QString & fileName ); - ResourceToSaveHandler * saveResource( const QUrl & url, const QUrl & ref, const QString & fileName ); void findText( QString & text, const QWebEnginePage::FindFlags & f, @@ -341,7 +339,7 @@ private slots: return ( targetUrl.scheme() == "gdau" || Utils::Url::isAudioUrl( targetUrl ) ); } - void resourceDownloadFinished(); + void resourceDownloadFinished( const sptr< Dictionary::DataRequest > & req, const QUrl & resourceDownloadUrl ); /// We handle pasting by attempting to define the word in clipboard. void pasteTriggered(); @@ -454,5 +452,3 @@ public slots: Q_INVOKABLE void linkClickedInHtml( QUrl const & ); Q_INVOKABLE void collapseInHtml( QString const & dictId, bool on = true ) const; }; - -#endif diff --git a/src/ui/articlewebpage.hh b/src/ui/articlewebpage.hh index 603b45e6..39baf1b6 100644 --- a/src/ui/articlewebpage.hh +++ b/src/ui/articlewebpage.hh @@ -1,5 +1,4 @@ -#ifndef ARTICLEWEBPAGE_H -#define ARTICLEWEBPAGE_H +#pragma once #include @@ -24,5 +23,3 @@ protected: private: LastReqInfo lastReq; }; - -#endif // ARTICLEWEBPAGE_H diff --git a/src/ui/articlewebview.hh b/src/ui/articlewebview.hh index f60296d1..7629c876 100644 --- a/src/ui/articlewebview.hh +++ b/src/ui/articlewebview.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __ARTICLEWEBVIEW_HH_INCLUDED__ -#define __ARTICLEWEBVIEW_HH_INCLUDED__ +#pragma once #include "config.hh" #include @@ -75,5 +74,3 @@ public slots: //receive signal ,a link has been clicked. void linkClickedInHtml( QUrl const & url ); }; - -#endif diff --git a/src/ui/authentication.ui b/src/ui/authentication.ui index 79051160..9fcdca5d 100644 --- a/src/ui/authentication.ui +++ b/src/ui/authentication.ui @@ -6,8 +6,8 @@ 0 0 - 428 - 150 + 389 + 120 @@ -44,24 +44,24 @@ - QLineEdit::EchoMode::Password + QLineEdit::Password - Qt::Orientation::Horizontal + Qt::Horizontal - QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Ok - Qt::Orientation::Vertical + Qt::Vertical diff --git a/src/ui/chineseconversion.hh b/src/ui/chineseconversion.hh index 00541067..83fffbf3 100644 --- a/src/ui/chineseconversion.hh +++ b/src/ui/chineseconversion.hh @@ -1,8 +1,7 @@ /* This file is (c) 2015 Zhe Wang <0x1997@gmail.com> * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __CHINESE_CONVERSION_HH_INCLUDED__ -#define __CHINESE_CONVERSION_HH_INCLUDED__ +#pragma once #include #include "config.hh" @@ -24,5 +23,3 @@ public: private: Ui::ChineseConversion * ui; }; - -#endif // __CHINESE_CONVERSION_HH_INCLUDED__ diff --git a/src/ui/dictgroupwidget.ui b/src/ui/dictgroupwidget.ui index 714df8d3..3865de47 100644 --- a/src/ui/dictgroupwidget.ui +++ b/src/ui/dictgroupwidget.ui @@ -35,7 +35,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal diff --git a/src/ui/dictheadwords.cc b/src/ui/dictheadwords.cc index a6d658ef..5ca138fa 100644 --- a/src/ui/dictheadwords.cc +++ b/src/ui/dictheadwords.cc @@ -420,10 +420,6 @@ void DictHeadwords::saveHeadersToFile() // Write UTF-8 BOM QTextStream out( &file ); out.setGenerateByteOrderMark( true ); -//qt 6 will use utf-8 default. -#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) - out.setCodec( "UTF-8" ); -#endif exportAllWords( progress, out ); diff --git a/src/ui/dictheadwords.hh b/src/ui/dictheadwords.hh index 51dc3c83..724ff96d 100644 --- a/src/ui/dictheadwords.hh +++ b/src/ui/dictheadwords.hh @@ -1,5 +1,4 @@ -#ifndef __DICTHEADWORDS_H_INCLUDED__ -#define __DICTHEADWORDS_H_INCLUDED__ +#pragma once #include #include @@ -64,5 +63,3 @@ signals: void headwordSelected( QString const &, QString const & ); void closeDialog(); }; - -#endif // __DICTHEADWORDS_H_INCLUDED__ diff --git a/src/ui/dictheadwords.ui b/src/ui/dictheadwords.ui index afc3881a..ab6599fc 100644 --- a/src/ui/dictheadwords.ui +++ b/src/ui/dictheadwords.ui @@ -101,35 +101,35 @@ - - - Specify the maximum filtered headwords returned. - - - Filter max results: - - + + + Specify the maximum filtered headwords returned. + + + Filter max results: + + - - - - - - - 10 - - - 3000 - - - 10 - - - - + + + + + + + 10 + + + 3000 + + + 10 + + + + - Qt::Orientation::Vertical + Qt::Vertical diff --git a/src/ui/dictinfo.hh b/src/ui/dictinfo.hh index 13a7e205..9f9e0b56 100644 --- a/src/ui/dictinfo.hh +++ b/src/ui/dictinfo.hh @@ -1,5 +1,4 @@ -#ifndef DICTINFO_HH -#define DICTINFO_HH +#pragma once #include #include "ui_dictinfo.h" @@ -32,5 +31,3 @@ private slots: void on_headwordsButton_clicked(); void on_openIndexFolder_clicked(); }; - -#endif // DICTINFO_HH diff --git a/src/ui/dictinfo.ui b/src/ui/dictinfo.ui index 21d90e6e..d799a6f9 100644 --- a/src/ui/dictinfo.ui +++ b/src/ui/dictinfo.ui @@ -50,7 +50,7 @@ - Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse @@ -60,7 +60,7 @@ - Qt::AlignmentFlag::AlignCenter + Qt::AlignCenter @@ -98,7 +98,7 @@ - Qt::AlignmentFlag::AlignCenter + Qt::AlignCenter @@ -160,7 +160,7 @@ false - QPlainTextEdit::LineWrapMode::NoWrap + QPlainTextEdit::NoWrap true @@ -183,7 +183,7 @@ - Qt::ScrollBarPolicy::ScrollBarAlwaysOff + Qt::ScrollBarAlwaysOff true @@ -205,7 +205,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -228,7 +228,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal diff --git a/src/ui/dictionarybar.hh b/src/ui/dictionarybar.hh index 9f38f942..3b35fcff 100644 --- a/src/ui/dictionarybar.hh +++ b/src/ui/dictionarybar.hh @@ -1,5 +1,4 @@ -#ifndef __DICTIONARYBAR_HH_INCLUDED__ -#define __DICTIONARYBAR_HH_INCLUDED__ +#pragma once #include #include @@ -91,5 +90,3 @@ public slots: void dictsPaneClicked( QString const & ); }; - -#endif diff --git a/src/ui/dictspanewidget.hh b/src/ui/dictspanewidget.hh index bebde145..da18c431 100644 --- a/src/ui/dictspanewidget.hh +++ b/src/ui/dictspanewidget.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __DICTSPANEWIDGET_HH_INCLUDED__ -#define __DICTSPANEWIDGET_HH_INCLUDED__ +#pragma once #include #include @@ -24,5 +23,3 @@ public: return QSize( 204, 204 ); } }; - -#endif diff --git a/src/ui/editdictionaries.cc b/src/ui/editdictionaries.cc index 0730d61e..01af97e4 100644 --- a/src/ui/editdictionaries.cc +++ b/src/ui/editdictionaries.cc @@ -19,7 +19,6 @@ EditDictionaries::EditDictionaries( QWidget * parent, dictionaries( dictionaries_ ), groupInstances( groupInstances_ ), dictNetMgr( dictNetMgr_ ), - origCfg( cfg ), sources( this, cfg ), orderAndProps( new OrderAndProps( this, cfg.dictionaryOrder, cfg.inactiveDictionaries, dictionaries ) ), groups( new Groups( this, dictionaries, cfg.groups, orderAndProps->getCurrentDictionaryOrder() ) ), @@ -31,9 +30,9 @@ EditDictionaries::EditDictionaries( QWidget * parent, // would like to preserve them if no edits were done. To that end, we save // the initial group readings so that if no edits were really done, we won't // be changing groups. - origCfg.groups = groups->getGroups(); - origCfg.dictionaryOrder = orderAndProps->getCurrentDictionaryOrder(); - origCfg.inactiveDictionaries = orderAndProps->getCurrentInactiveDictionaries(); + origGroups.groups = groups->getGroups(); + origGroups.dictionaryOrder = orderAndProps->getCurrentDictionaryOrder(); + origGroups.inactiveDictionaries = orderAndProps->getCurrentInactiveDictionaries(); ui.setupUi( this ); @@ -75,7 +74,7 @@ void EditDictionaries::editGroup( unsigned id ) { ui.tabs->setTabVisible( 0, false ); - if ( id == Instances::Group::AllGroupId ) { + if ( id == GroupId::AllGroupId ) { ui.tabs->setCurrentIndex( 1 ); } else { @@ -94,8 +93,8 @@ void EditDictionaries::save( bool rebuildGroups ) acceptChangedSources( rebuildGroups ); } - if ( origCfg.groups != newGroups || origCfg.dictionaryOrder != newOrder - || origCfg.inactiveDictionaries != newInactive ) { + if ( origGroups.groups != newGroups || origGroups.dictionaryOrder != newOrder + || origGroups.inactiveDictionaries != newInactive ) { groupsChanged = true; cfg.groups = newGroups; cfg.dictionaryOrder = newOrder; @@ -201,7 +200,7 @@ void EditDictionaries::acceptChangedSources( bool rebuildGroups ) #ifndef NO_TTS_SUPPORT cfg.voiceEngines = sources.getVoiceEngines(); #endif - ui.tabs->setUpdatesEnabled( false ); + setUpdatesEnabled( false ); // Those hold pointers to dictionaries, we need to free them. groupInstances.clear(); @@ -210,29 +209,8 @@ void EditDictionaries::acceptChangedSources( bool rebuildGroups ) loadDictionaries( this, cfg, dictionaries, dictNetMgr ); - // If no changes to groups were made, update the original data - const bool noGroupEdits = ( origCfg.groups == savedGroups ); - - if ( noGroupEdits ) { - savedGroups = cfg.groups; - } - Instances::updateNames( savedGroups, dictionaries ); - - const bool noOrderEdits = ( origCfg.dictionaryOrder == savedOrder ); - - if ( noOrderEdits ) { - savedOrder = cfg.dictionaryOrder; - } - Instances::updateNames( savedOrder, dictionaries ); - - const bool noInactiveEdits = ( origCfg.inactiveDictionaries == savedInactive ); - - if ( noInactiveEdits ) { - savedInactive = cfg.inactiveDictionaries; - } - Instances::updateNames( savedInactive, dictionaries ); if ( rebuildGroups ) { @@ -246,20 +224,8 @@ void EditDictionaries::acceptChangedSources( bool rebuildGroups ) ui.tabs->insertTab( 2, groups, QIcon( ":/icons/bookcase.svg" ), tr( "&Groups" ) ); connect( groups, &Groups::showDictionaryInfo, this, &EditDictionaries::showDictionaryInfo ); connect( orderAndProps, &OrderAndProps::showDictionaryHeadwords, this, &EditDictionaries::showDictionaryHeadwords ); - - if ( noGroupEdits ) { - origCfg.groups = groups->getGroups(); - } - - if ( noOrderEdits ) { - origCfg.dictionaryOrder = orderAndProps->getCurrentDictionaryOrder(); - } - - if ( noInactiveEdits ) { - origCfg.inactiveDictionaries = orderAndProps->getCurrentInactiveDictionaries(); - } } - ui.tabs->setUpdatesEnabled( true ); + setUpdatesEnabled( true ); } EditDictionaries::~EditDictionaries() { diff --git a/src/ui/editdictionaries.hh b/src/ui/editdictionaries.hh index 526f9bf1..14c48a83 100644 --- a/src/ui/editdictionaries.hh +++ b/src/ui/editdictionaries.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __EDITDICTIONARIES_HH_INCLUDED__ -#define __EDITDICTIONARIES_HH_INCLUDED__ +#pragma once #include "config.hh" #include "dict/dictionary.hh" @@ -79,7 +78,7 @@ private: QNetworkAccessManager & dictNetMgr; // Backed up to decide later if something was changed or not - Config::Class origCfg; + Config::GroupBackup origGroups; Ui::EditDictionaries ui; Sources sources; @@ -93,5 +92,3 @@ private: QAction helpAction; }; - -#endif diff --git a/src/ui/editdictionaries.ui b/src/ui/editdictionaries.ui index a376e21f..4553d692 100644 --- a/src/ui/editdictionaries.ui +++ b/src/ui/editdictionaries.ui @@ -29,10 +29,10 @@ - Qt::Orientation::Horizontal + Qt::Horizontal - QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Help|QDialogButtonBox::StandardButton::Ok + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok diff --git a/src/ui/favoritespanewidget.hh b/src/ui/favoritespanewidget.hh index ce55ec5c..c1c202ce 100644 --- a/src/ui/favoritespanewidget.hh +++ b/src/ui/favoritespanewidget.hh @@ -1,8 +1,7 @@ /* This file is (c) 2017 Abs62 * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __FAVORITIESPANEWIDGET_HH__INCLUDED__ -#define __FAVORITIESPANEWIDGET_HH__INCLUDED__ +#pragma once #include #include @@ -85,13 +84,13 @@ private slots: private: virtual bool eventFilter( QObject *, QEvent * ); - Config::Class * m_cfg; - QTreeView * m_favoritesTree; - QMenu * m_favoritesMenu; - QAction * m_deleteSelectedAction; - QAction * m_separator; - QAction * m_copySelectedToClipboard; - QAction * m_addFolder; + Config::Class * m_cfg = nullptr; + QTreeView * m_favoritesTree = nullptr; + QMenu * m_favoritesMenu = nullptr; + QAction * m_deleteSelectedAction = nullptr; + QAction * m_separator = nullptr; + QAction * m_copySelectedToClipboard = nullptr; + QAction * m_addFolder = nullptr; QWidget favoritesPaneTitleBar; QHBoxLayout favoritesPaneTitleBarLayout; @@ -310,5 +309,3 @@ private: QStringList mimeFormats; QModelIndexList indexes; }; - -#endif // __FAVORITIESPANEWIDGET_HH__INCLUDED__ diff --git a/src/ui/ftssearchpanel.hh b/src/ui/ftssearchpanel.hh index 0339e5f2..9436493f 100644 --- a/src/ui/ftssearchpanel.hh +++ b/src/ui/ftssearchpanel.hh @@ -1,5 +1,4 @@ -#ifndef GOLDENDICT_FTSSEARCHPANEL_H -#define GOLDENDICT_FTSSEARCHPANEL_H +#pragma once #include #include @@ -15,6 +14,3 @@ public: QPushButton * previous; QPushButton * next; }; - - -#endif //GOLDENDICT_FTSSEARCHPANEL_H diff --git a/src/ui/fulltextsearch.ui b/src/ui/fulltextsearch.ui index 48c69429..fb213151 100644 --- a/src/ui/fulltextsearch.ui +++ b/src/ui/fulltextsearch.ui @@ -73,7 +73,7 @@ -1 - Qt::AlignmentFlag::AlignCenter + Qt::AlignCenter @@ -142,7 +142,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -168,7 +168,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -188,7 +188,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -208,7 +208,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal diff --git a/src/ui/groupcombobox.hh b/src/ui/groupcombobox.hh index 2ef672b6..2a2de608 100644 --- a/src/ui/groupcombobox.hh +++ b/src/ui/groupcombobox.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __GROUPCOMBOBOX_HH_INCLUDED__ -#define __GROUPCOMBOBOX_HH_INCLUDED__ +#pragma once #include #include @@ -54,5 +53,3 @@ private: QAction selectNextAction, selectPreviousAction; QMap< int, int > shortcuts; }; - -#endif diff --git a/src/ui/groups.hh b/src/ui/groups.hh index 8366f1e2..b6bbac08 100644 --- a/src/ui/groups.hh +++ b/src/ui/groups.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __GROUPS_HH_INCLUDED__ -#define __GROUPS_HH_INCLUDED__ +#pragma once #include "ui_groups.h" #include "config.hh" @@ -62,5 +61,3 @@ private slots: signals: void showDictionaryInfo( QString const & id ); }; - -#endif diff --git a/src/ui/groups.ui b/src/ui/groups.ui index 33482f7a..3d542e0e 100644 --- a/src/ui/groups.ui +++ b/src/ui/groups.ui @@ -36,7 +36,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -99,7 +99,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -123,10 +123,10 @@ - QTabWidget::TabPosition::North + QTabWidget::North - Qt::TextElideMode::ElideNone + Qt::ElideNone @@ -180,7 +180,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -224,7 +224,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal diff --git a/src/ui/groups_widgets.cc b/src/ui/groups_widgets.cc index c23975bf..3fc2139b 100644 --- a/src/ui/groups_widgets.cc +++ b/src/ui/groups_widgets.cc @@ -29,7 +29,8 @@ DictGroupWidget::DictGroupWidget( QWidget * parent, vector< sptr< Dictionary::Class > > const & dicts, Config::Group const & group ): QWidget( parent ), - groupId( group.id ) + groupId( group.id ), + groupName( group.name ) { ui.setupUi( this ); ui.dictionaries->populate( Instances::Group( group, dicts, Config::Group() ).dictionaries, dicts ); @@ -121,7 +122,7 @@ void DictGroupWidget::groupIconActivated( int index ) Config::Group DictGroupWidget::makeGroup() const { - Instances::Group g( "" ); + Instances::Group g; g.id = groupId; @@ -139,6 +140,7 @@ Config::Group DictGroupWidget::makeGroup() const g.favoritesFolder = ui.favoritesFolder->text().replace( '\\', '/' ); + g.name = groupName; return g.makeConfigGroup(); } @@ -558,8 +560,7 @@ void DictGroupsWidget::populate( Config::Groups const & groups, connect( gr, &DictGroupWidget::showDictionaryInfo, this, &DictGroupsWidget::showDictionaryInfo ); connect( gr->getModel(), &DictListModel::contentChanged, this, &DictGroupsWidget::tabDataChanged ); - QString toolTipStr = - "\"" + tabText( x ) + "\"\n" + tr( "Dictionaries: " ) + QString::number( getDictionaryCountAt( x ) ); + QString toolTipStr = tr( "Dictionaries: " ) + QString::number( getDictionaryCountAt( x ) ); setTabToolTip( x, toolTipStr ); } @@ -577,7 +578,6 @@ Config::Groups DictGroupsWidget::makeGroups() const for ( int x = 0; x < count(); ++x ) { result.push_back( dynamic_cast< DictGroupWidget & >( *widget( x ) ).makeGroup() ); - result.back().name = Utils::unescapeAmps( tabText( x ) ); } return result; @@ -648,6 +648,7 @@ int DictGroupsWidget::addNewGroup( QString const & name ) Config::Group newGroup; newGroup.id = nextId++; + newGroup.name = name; const auto gr = new DictGroupWidget( this, *allDicts, newGroup ); const int idx = insertTab( currentIndex() + 1, gr, Utils::escapeAmps( name ) ); @@ -655,8 +656,7 @@ int DictGroupsWidget::addNewGroup( QString const & name ) connect( gr->getModel(), &DictListModel::contentChanged, this, &DictGroupsWidget::tabDataChanged ); - const QString toolTipStr = - "\"" + tabText( idx ) + "\"\n" + tr( "Dictionaries: " ) + QString::number( getDictionaryCountAt( idx ) ); + const QString toolTipStr = tr( "Dictionaries: " ) + QString::number( getDictionaryCountAt( idx ) ); setTabToolTip( idx, toolTipStr ); return idx; } @@ -910,13 +910,13 @@ void DictGroupsWidget::groupsByMetadata() addGroupBasedOnMap( groupToDicts ); } - QString DictGroupsWidget::getCurrentGroupName() const { const int current = currentIndex(); if ( current >= 0 ) { - return Utils::unescapeAmps( tabText( current ) ); + auto * w = qobject_cast< DictGroupWidget * >( widget( current ) ); + return w->name(); } return {}; @@ -927,6 +927,8 @@ void DictGroupsWidget::renameCurrentGroup( QString const & name ) const int current = currentIndex(); if ( current >= 0 ) { + auto * w = dynamic_cast< DictGroupWidget * >( widget( current ) ); + w->setName( name ); setTabText( current, Utils::escapeAmps( name ) ); } } @@ -971,8 +973,7 @@ void DictGroupsWidget::combineGroups( int source, int target ) connect( model, &DictListModel::contentChanged, this, &DictGroupsWidget::tabDataChanged ); - const QString toolTipStr = "\"" + tabText( target ) + "\"\n" + tr( "Dictionaries: " ) - + QString::number( model->getCurrentDictionaries().size() ); + const QString toolTipStr = tr( "Dictionaries: " ) + QString::number( model->getCurrentDictionaries().size() ); setTabToolTip( target, toolTipStr ); } @@ -1124,8 +1125,8 @@ void DictGroupsWidget::contextMenu( QPoint const & pos ) void DictGroupsWidget::tabDataChanged() { - const QString toolTipStr = "\"" + tabText( currentIndex() ) + "\"\n" + tr( "Dictionaries: " ) - + QString::number( getCurrentModel()->getCurrentDictionaries().size() ); + const QString toolTipStr = + tr( "Dictionaries: " ) + QString::number( getCurrentModel()->getCurrentDictionaries().size() ); setTabToolTip( currentIndex(), toolTipStr ); } diff --git a/src/ui/groups_widgets.hh b/src/ui/groups_widgets.hh index 4c28974a..950f1ca4 100644 --- a/src/ui/groups_widgets.hh +++ b/src/ui/groups_widgets.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __GROUPS_WIDGETS_HH_INCLUDED__ -#define __GROUPS_WIDGETS_HH_INCLUDED__ +#pragma once // Various custom widgets used in the Groups dialog @@ -121,9 +120,6 @@ class DictGroupWidget: public QWidget public: DictGroupWidget( QWidget * parent, std::vector< sptr< Dictionary::Class > > const &, Config::Group const & ); - /// Makes the group's configuration out of the data currently held. - /// Since the group's name is not part of the widget by design right now - /// (it is known by the containing tab widget only), it is returned as empty. Config::Group makeGroup() const; DictListModel * getModel() const @@ -136,6 +132,16 @@ public: return ui.dictionaries->selectionModel(); } + QString name() + { + return groupName; + } + + void setName( const QString & name ) + { + groupName = name; + } + private slots: void groupIconActivated( int ); @@ -145,6 +151,7 @@ private slots: private: Ui::DictGroupWidget ui; unsigned groupId; + QString groupName; signals: void showDictionaryInfo( QString const & id ); @@ -254,5 +261,3 @@ private slots: signals: void filterChanged( QString const & filter ); }; - -#endif diff --git a/src/ui/historypanewidget.hh b/src/ui/historypanewidget.hh index 722dc1df..ff3d2d20 100644 --- a/src/ui/historypanewidget.hh +++ b/src/ui/historypanewidget.hh @@ -1,8 +1,7 @@ /* This file is (c) 2013 Tvangeste * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __HISTORYPANEWIDGET_HH_INCLUDED__ -#define __HISTORYPANEWIDGET_HH_INCLUDED__ +#pragma once #include #include @@ -54,13 +53,13 @@ private slots: private: virtual bool eventFilter( QObject *, QEvent * ); - Config::Class * m_cfg; - History * m_history; - QListView * m_historyList; - QMenu * m_historyMenu; - QAction * m_deleteSelectedAction; - QAction * m_separator; - QAction * m_copySelectedToClipboard; + Config::Class * m_cfg = nullptr; + History * m_history = nullptr; + QListView * m_historyList = nullptr; + QMenu * m_historyMenu = nullptr; + QAction * m_deleteSelectedAction = nullptr; + QAction * m_separator = nullptr; + QAction * m_copySelectedToClipboard = nullptr; QWidget historyPaneTitleBar; QHBoxLayout historyPaneTitleBarLayout; @@ -91,5 +90,3 @@ private slots: private: History * m_history; }; - -#endif // HISTORYPANEWIDGET_HH diff --git a/src/ui/initializing.ui b/src/ui/initializing.ui index 0df55571..59358217 100644 --- a/src/ui/initializing.ui +++ b/src/ui/initializing.ui @@ -3,7 +3,7 @@ Initializing - Qt::WindowModality::ApplicationModal + Qt::ApplicationModal @@ -75,7 +75,7 @@ -1 - Qt::AlignmentFlag::AlignCenter + Qt::AlignCenter @@ -105,7 +105,7 @@ Indexing: - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -127,7 +127,7 @@ Dictionary Name - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true diff --git a/src/ui/mainstatusbar.hh b/src/ui/mainstatusbar.hh index 3052d674..49ec24b0 100644 --- a/src/ui/mainstatusbar.hh +++ b/src/ui/mainstatusbar.hh @@ -1,8 +1,7 @@ /* This file is (c) 2012 Tvangeste * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef MAINSTATUSBAR_HH -#define MAINSTATUSBAR_HH +#pragma once #include #include @@ -40,5 +39,3 @@ private: bool eventFilter( QObject * obj, QEvent * event ) override; }; - -#endif // MAINSTATUSBAR_HH diff --git a/src/ui/maintabwidget.hh b/src/ui/maintabwidget.hh index ceabc507..31d83c20 100644 --- a/src/ui/maintabwidget.hh +++ b/src/ui/maintabwidget.hh @@ -1,8 +1,7 @@ /* This file is (c) 2012 Tvangeste * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef MAINTABWIDGET_HH -#define MAINTABWIDGET_HH +#pragma once #include #include @@ -31,5 +30,3 @@ private: bool hideSingleTab; }; - -#endif // MAINTABWIDGET_HH diff --git a/src/ui/mainwindow.cc b/src/ui/mainwindow.cc index 78689ba7..085acd45 100644 --- a/src/ui/mainwindow.cc +++ b/src/ui/mainwindow.cc @@ -36,6 +36,8 @@ #include #include #include +#include + #include "weburlrequestinterceptor.hh" #include "folding.hh" @@ -61,6 +63,7 @@ #include #endif +#include #include #include @@ -144,8 +147,9 @@ MainWindow::MainWindow( Config::Class & cfg_ ): switchToNextTabAction( this ), switchToPrevTabAction( this ), showDictBarNamesAction( tr( "Show Names in Dictionary &Bar" ), this ), - useSmallIconsInToolbarsAction( tr( "Show Small Icons in &Toolbars" ), this ), - useLargeIconsInToolbarsAction( tr( "Show Large Icons in &Toolbars" ), this ), + useSmallIconsInToolbarsAction( tr( "Show &Small Icons in Toolbars" ), this ), + useLargeIconsInToolbarsAction( tr( "Show &Large Icons in Toolbars" ), this ), + useNormalIconsInToolbarsAction( tr( "Show &Normal Icons in Toolbars" ), this ), toggleMenuBarAction( tr( "&Menubar" ), this ), focusHeadwordsDlgAction( this ), focusArticleViewAction( this ), @@ -397,15 +401,18 @@ MainWindow::MainWindow( Config::Class & cfg_ ): connect( wordsZoomOut, &QAction::triggered, this, &MainWindow::doWordsZoomOut ); connect( wordsZoomBase, &QAction::triggered, this, &MainWindow::doWordsZoomBase ); - // tray icon - connect( trayIconMenu.addAction( tr( "Show &Main Window" ) ), - &QAction::triggered, - this, - &MainWindow::showMainWindow ); +// tray icon +#ifndef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon + connect( trayIconMenu.addAction( tr( "Show &Main Window" ) ), &QAction::triggered, this, [ this ] { + this->toggleMainWindow( true ); + } ); +#endif trayIconMenu.addAction( enableScanningAction ); +#ifndef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon trayIconMenu.addSeparator(); connect( trayIconMenu.addAction( tr( "&Quit" ) ), &QAction::triggered, this, &MainWindow::quitApp ); +#endif addGlobalAction( &escAction, [ this ]() { handleEsc(); @@ -500,25 +507,24 @@ MainWindow::MainWindow( Config::Class & cfg_ ): tabMenu->addAction( &addAllTabToFavoritesAction ); // Dictionary bar names - showDictBarNamesAction.setCheckable( true ); showDictBarNamesAction.setChecked( cfg.showingDictBarNames ); connect( &showDictBarNamesAction, &QAction::triggered, this, &MainWindow::showDictBarNamesTriggered ); - // Use small icons in toolbars - useSmallIconsInToolbarsAction.setCheckable( true ); useSmallIconsInToolbarsAction.setChecked( cfg.usingToolbarsIconSize == Config::ToolbarsIconSize::Small ); - - connect( &useSmallIconsInToolbarsAction, &QAction::triggered, this, &MainWindow::useSmallIconsInToolbarsTriggered ); - - // Use large icons in toolbars - useLargeIconsInToolbarsAction.setCheckable( true ); useLargeIconsInToolbarsAction.setChecked( cfg.usingToolbarsIconSize == Config::ToolbarsIconSize::Large ); + useNormalIconsInToolbarsAction.setCheckable( true ); + useNormalIconsInToolbarsAction.setChecked( cfg.usingToolbarsIconSize == Config::ToolbarsIconSize::Normal ); - connect( &useLargeIconsInToolbarsAction, &QAction::triggered, this, &MainWindow::useLargeIconsInToolbarsTriggered ); + // icon action group,default exclusive option. + smallLargeIconGroup->addAction( &useLargeIconsInToolbarsAction ); + smallLargeIconGroup->addAction( &useSmallIconsInToolbarsAction ); + smallLargeIconGroup->addAction( &useNormalIconsInToolbarsAction ); + + connect( smallLargeIconGroup, &QActionGroup::triggered, this, &MainWindow::iconSizeActionTriggered ); // Toggle Menubar toggleMenuBarAction.setCheckable( true ); @@ -528,7 +534,6 @@ MainWindow::MainWindow( Config::Class & cfg_ ): connect( &toggleMenuBarAction, &QAction::triggered, this, &MainWindow::toggleMenuBarTriggered ); // Populate 'View' menu - ui.menuView->addAction( &toggleMenuBarAction ); ui.menuView->addSeparator(); ui.menuView->addAction( ui.searchPane->toggleViewAction() ); @@ -543,7 +548,9 @@ MainWindow::MainWindow( Config::Class & cfg_ ): ui.menuView->addAction( navToolbar->toggleViewAction() ); ui.menuView->addSeparator(); ui.menuView->addAction( &showDictBarNamesAction ); + ui.menuView->addSeparator(); ui.menuView->addAction( &useSmallIconsInToolbarsAction ); + ui.menuView->addAction( &useNormalIconsInToolbarsAction ); ui.menuView->addAction( &useLargeIconsInToolbarsAction ); ui.menuView->addSeparator(); ui.alwaysOnTop->setChecked( cfg.preferences.alwaysOnTop ); @@ -552,7 +559,7 @@ MainWindow::MainWindow( Config::Class & cfg_ ): // Dictionary bar Instances::Group const * igrp = groupInstances.findGroup( cfg.lastMainGroupId ); - if ( cfg.lastMainGroupId == Instances::Group::AllGroupId ) { + if ( cfg.lastMainGroupId == GroupId::AllGroupId ) { if ( igrp ) { igrp->checkMutedDictionaries( &cfg.mutedDictionaries ); } @@ -717,13 +724,14 @@ MainWindow::MainWindow( Config::Class & cfg_ ): &PronounceEngine::emitAudio, this, [ this ]( auto audioUrl ) { + auto view = getCurrentArticleView(); + view->setAudioLink( audioUrl ); if ( !isActiveWindow() ) { return; } - auto view = getCurrentArticleView(); if ( ( cfg.preferences.pronounceOnLoadMain ) && view != nullptr ) { - view->openLink( QUrl::fromEncoded( audioUrl.toUtf8() ), {} ); + view->playAudio( QUrl::fromEncoded( audioUrl.toUtf8() ) ); } } ); applyProxySettings(); @@ -752,11 +760,7 @@ MainWindow::MainWindow( Config::Class & cfg_ ): #if defined( Q_OS_LINUX ) - #if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) defaultInterfaceStyle = QApplication::style()->name(); - #else - defaultInterfaceStyle = QApplication::style()->objectName(); - #endif #elif defined( Q_OS_MAC ) defaultInterfaceStyle = "Fusion"; #endif @@ -774,7 +778,7 @@ MainWindow::MainWindow( Config::Class & cfg_ ): addNewTab(); ArticleView * view = getCurrentArticleView(); history.enableAdd( false ); - view->showDefinition( tr( "Welcome!" ), Instances::Group::HelpGroupId ); + view->showDefinition( tr( "Welcome!" ), GroupId::HelpGroupId ); history.enableAdd( cfg.preferences.storeHistory ); // restore should be called after all UI initialized but not necessarily after show() @@ -921,9 +925,7 @@ MainWindow::MainWindow( Config::Class & cfg_ ): urlRegistry.endGroup(); #endif - useSmallIconsInToolbarsTriggered(); - useLargeIconsInToolbarsTriggered(); - + iconSizeActionTriggered( nullptr ); if ( cfg.preferences.checkForNewReleases ) { QTimer::singleShot( 0, this, &MainWindow::checkNewRelease ); @@ -1318,7 +1320,7 @@ QPrinter & MainWindow::getPrinter() void MainWindow::updateAppearances( QString const & addonStyle, QString const & displayStyle, - bool const & darkMode + Config::Dark darkMode #if !defined( Q_OS_WIN ) , const QString & interfaceStyle @@ -1326,7 +1328,7 @@ void MainWindow::updateAppearances( QString const & addonStyle, ) { #ifdef Q_OS_WIN32 - if ( darkMode ) { + if ( darkMode == Config::Dark::On ) { //https://forum.qt.io/topic/101391/windows-10-dark-theme QPalette darkPalette; @@ -1381,7 +1383,7 @@ void MainWindow::updateAppearances( QString const & addonStyle, // Load an additional stylesheet // Dark Mode doesn't work nice with custom qt style sheets, - if ( !darkMode ) { + if ( darkMode == Config::Dark::Off ) { QFile additionalStyle( QString( ":qt-%1.css" ).arg( displayStyle ) ); if ( additionalStyle.open( QFile::ReadOnly ) ) { css += additionalStyle.readAll(); @@ -1406,7 +1408,7 @@ void MainWindow::updateAppearances( QString const & addonStyle, } #ifdef Q_OS_WIN32 - if ( darkMode ) { + if ( darkMode == Config::Dark::On ) { css += "QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }"; } #endif @@ -1418,6 +1420,11 @@ void MainWindow::updateAppearances( QString const & addonStyle, void MainWindow::trayIconUpdateOrInit() { +#ifdef Q_OS_MACOS + trayIconMenu.setAsDockMenu(); + ui.actionCloseToTray->setVisible( false ); +#else + if ( !cfg.preferences.enableTrayIcon ) { if ( trayIcon ) { delete trayIcon; @@ -1441,6 +1448,7 @@ void MainWindow::trayIconUpdateOrInit() // The 'Close to tray' action is associated with the tray icon, so we hide // or show it here. ui.actionCloseToTray->setVisible( cfg.preferences.enableTrayIcon ); +#endif } void MainWindow::wheelEvent( QWheelEvent * ev ) @@ -1640,7 +1648,7 @@ void MainWindow::updateGroupList( bool reload ) dictionaries ); g.name = tr( "All" ); - g.id = Instances::Group::AllGroupId; + g.id = GroupId::AllGroupId; g.icon = "folder.png"; groupInstances.push_back( g ); @@ -1685,7 +1693,7 @@ void MainWindow::updateDictionaryBar() dictionaryBar.setMutedDictionaries( nullptr ); if ( grp ) { // Should always be !0, but check as a safeguard - if ( currentId == Instances::Group::AllGroupId ) { + if ( currentId == GroupId::AllGroupId ) { dictionaryBar.setMutedDictionaries( &cfg.mutedDictionaries ); } else { @@ -2205,7 +2213,7 @@ void MainWindow::editDictionaries( unsigned editDictionaryGroup ) connect( &dicts, &EditDictionaries::showDictionaryHeadwords, this, &MainWindow::showDictionaryHeadwords ); - if ( editDictionaryGroup != Instances::Group::NoGroupId ) { + if ( editDictionaryGroup != GroupId::NoGroupId ) { dicts.editGroup( editDictionaryGroup ); } @@ -2219,7 +2227,7 @@ void MainWindow::editDictionaries( unsigned editDictionaryGroup ) // Set muted dictionaries from old groups for ( auto & group : newCfg.groups ) { unsigned id = group.id; - if ( id != Instances::Group::NoGroupId ) { + if ( id != GroupId::NoGroupId ) { Config::Group const * grp = cfg.getGroup( id ); if ( grp ) { group.mutedDictionaries = grp->mutedDictionaries; @@ -2321,6 +2329,7 @@ void MainWindow::editPreferences() || cfg.preferences.collapseBigArticles != p.collapseBigArticles || cfg.preferences.articleSizeLimit != p.articleSizeLimit || cfg.preferences.alwaysExpandOptionalParts != p.alwaysExpandOptionalParts // DSL format's special feature + || p.darkReaderMode == Config::Dark::Auto // We cannot know if a reload is needed, just do it regardless. ); // This line must be here because the components below require cfg's value to reconfigure @@ -2336,6 +2345,15 @@ void MainWindow::editPreferences() if ( needReload ) { view.reload(); } + +#if QT_VERSION >= QT_VERSION_CHECK( 6, 5, 0 ) + if ( cfg.preferences.darkReaderMode == Config::Dark::Auto ) { + connect( QGuiApplication::styleHints(), &QStyleHints::colorSchemeChanged, &view, &ArticleView::reload ); + } + else { + disconnect( QGuiApplication::styleHints(), &QStyleHints::colorSchemeChanged, &view, &ArticleView::reload ); + } +#endif } audioPlayerFactory.setPreferences( cfg.preferences ); @@ -2373,7 +2391,7 @@ void MainWindow::currentGroupChanged( int ) unsigned grg_id = groupList->getCurrentGroup(); cfg.lastMainGroupId = grg_id; Instances::Group const * igrp = groupInstances.findGroup( grg_id ); - if ( grg_id == Instances::Group::AllGroupId ) { + if ( grg_id == GroupId::AllGroupId ) { if ( igrp ) { igrp->checkMutedDictionaries( &cfg.mutedDictionaries ); } @@ -2519,7 +2537,7 @@ void MainWindow::handleEsc() } if ( cfg.preferences.escKeyHidesMainWindow ) { - toggleMainWindow(); + toggleMainWindow( false ); } else { focusTranslateLine(); @@ -2860,7 +2878,7 @@ void MainWindow::showTranslationForDicts( QString const & inWord, ignoreDiacritics ); } -void MainWindow::toggleMainWindow( bool onlyShow ) +void MainWindow::toggleMainWindow( bool ensureShow ) { bool shown = false; @@ -2893,7 +2911,7 @@ void MainWindow::toggleMainWindow( bool onlyShow ) } shown = true; } - else if ( !onlyShow ) { + else if ( !ensureShow ) { // On Windows and Linux, a hidden window won't show a task bar icon // When trayicon is enabled, the duplication is unneeded @@ -2977,7 +2995,7 @@ void MainWindow::installHotKeys() void MainWindow::hotKeyActivated( int hk ) { if ( !hk ) { - toggleMainWindow(); + toggleMainWindow( false ); } else if ( scanPopup ) { #ifdef HAVE_X11 @@ -3062,7 +3080,7 @@ void MainWindow::trayIconActivated( QSystemTrayIcon::ActivationReason r ) switch ( r ) { case QSystemTrayIcon::Trigger: // Left click toggles the visibility of main window - toggleMainWindow(); + toggleMainWindow( false ); break; case QSystemTrayIcon::MiddleClick: @@ -3075,10 +3093,6 @@ void MainWindow::trayIconActivated( QSystemTrayIcon::ActivationReason r ) } } -void MainWindow::showMainWindow() -{ - toggleMainWindow( true ); -} void MainWindow::visitHomepage() { @@ -3111,48 +3125,23 @@ void MainWindow::showDictBarNamesTriggered() cfg.showingDictBarNames = show; } -void MainWindow::useSmallIconsInToolbarsTriggered() -{ - bool useSmallIcons = useSmallIconsInToolbarsAction.isChecked(); - if ( useSmallIcons ) { - cfg.usingToolbarsIconSize = Config::ToolbarsIconSize::Small; - useLargeIconsInToolbarsAction.setChecked( false ); - } - else if ( !useLargeIconsInToolbarsAction.isChecked() ) { - cfg.usingToolbarsIconSize = Config::ToolbarsIconSize::Normal; - } - - int extent = useSmallIcons ? QApplication::style()->pixelMetric( QStyle::PM_SmallIconSize ) : - QApplication::style()->pixelMetric( QStyle::PM_ToolBarIconSize ); - - navToolbar->setIconSize( QSize( extent, extent ) ); - - // additional fix for #176 - menuButton->setIconSize( QSize( extent, extent ) ); - - updateDictionaryBar(); - - - scanPopup->setDictionaryIconSize(); -} - -void MainWindow::useLargeIconsInToolbarsTriggered() +void MainWindow::iconSizeActionTriggered( QAction * /*action*/ ) { bool useLargeIcons = useLargeIconsInToolbarsAction.isChecked(); + int extent = QApplication::style()->pixelMetric( QStyle::PM_ToolBarIconSize ); if ( useLargeIcons ) { cfg.usingToolbarsIconSize = Config::ToolbarsIconSize::Large; - useSmallIconsInToolbarsAction.setChecked( false ); + extent = QApplication::style()->pixelMetric( QStyle::PM_LargeIconSize ); } - else if ( !useSmallIconsInToolbarsAction.isChecked() ) { + else if ( useSmallIconsInToolbarsAction.isChecked() ) { + cfg.usingToolbarsIconSize = Config::ToolbarsIconSize::Small; + extent = QApplication::style()->pixelMetric( QStyle::PM_SmallIconSize ); + } + else { cfg.usingToolbarsIconSize = Config::ToolbarsIconSize::Normal; } - int extent = useLargeIcons ? QApplication::style()->pixelMetric( QStyle::PM_LargeIconSize ) : - QApplication::style()->pixelMetric( QStyle::PM_ToolBarIconSize ); - navToolbar->setIconSize( QSize( extent, extent ) ); - - menuButton->setIconSize( QSize( extent, extent ) ); updateDictionaryBar(); @@ -3742,13 +3731,6 @@ void MainWindow::wordReceived( const QString & word ) respondToTranslationRequest( word, false ); } -void MainWindow::headwordReceived( const QString & word, const QString & ID ) -{ - toggleMainWindow( true ); - setInputLineText( word, WildcardPolicy::EscapeWildcards, NoPopupChange ); - respondToTranslationRequest( word, false, ArticleView::scrollToFromDictionaryId( ID ), false ); -} - void MainWindow::updateFavoritesMenu() { if ( ui.favoritesPane->isVisible() ) { @@ -4153,7 +4135,13 @@ void MainWindow::showDictionaryHeadwords( Dictionary::Class * dict ) headwordsDlg = new DictHeadwords( this, cfg, dict ); addGlobalActionsToDialog( headwordsDlg ); addGroupComboBoxActionsToDialog( headwordsDlg, groupList ); - connect( headwordsDlg, &DictHeadwords::headwordSelected, this, &MainWindow::headwordReceived ); + connect( headwordsDlg, + &DictHeadwords::headwordSelected, + this, + [ this ]( QString const & headword, QString const & dictID ) { + setInputLineText( headword, WildcardPolicy::EscapeWildcards, NoPopupChange ); + respondToTranslationRequest( headword, false, ArticleView::scrollToFromDictionaryId( dictID ), false ); + } ); connect( headwordsDlg, &DictHeadwords::closeDialog, this, diff --git a/src/ui/mainwindow.hh b/src/ui/mainwindow.hh index d8f22ba4..7a082ceb 100644 --- a/src/ui/mainwindow.hh +++ b/src/ui/mainwindow.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __MAINWINDOW_HH_INCLUDED__ -#define __MAINWINDOW_HH_INCLUDED__ +#pragma once #include #include @@ -15,7 +14,7 @@ #include "config.hh" #include "dict/dictionary.hh" #include "article_netmgr.hh" -#include "audioplayerfactory.hh" +#include "audio/audioplayerfactory.hh" #include "instances.hh" #include "article_maker.hh" #include "scanpopup.hh" @@ -29,7 +28,6 @@ #include "dictheadwords.hh" #include "fulltextsearch.hh" #include "base_type.hh" - #include "hotkeywrapper.hh" #include "resourceschemehandler.hh" #include "iframeschemehandler.hh" @@ -40,6 +38,8 @@ #if defined( Q_OS_MAC ) #include "macos/gd_clipboard.hh" #endif +//must place the qactiongroup after fixx11h.h, None in QActionGroup conflict with X.h's macro None. +#include using std::string; using std::vector; @@ -67,7 +67,6 @@ public slots: void messageFromAnotherInstanceReceived( QString const & ); void showStatusBarMessage( QString const &, int, QPixmap const & ); void wordReceived( QString const & ); - void headwordReceived( QString const &, QString const & ); void headwordFromFavorites( QString const &, QString const & ); void quitApp(); @@ -106,9 +105,12 @@ private: QFont wordListDefaultFont, translateLineDefaultFont, groupListDefaultFont; QAction escAction, focusTranslateLineAction, addTabAction, closeCurrentTabAction, closeAllTabAction, - closeRestTabAction, switchToNextTabAction, switchToPrevTabAction, showDictBarNamesAction, - useSmallIconsInToolbarsAction, useLargeIconsInToolbarsAction, toggleMenuBarAction, focusHeadwordsDlgAction, - focusArticleViewAction, addAllTabToFavoritesAction; + closeRestTabAction, switchToNextTabAction, switchToPrevTabAction, showDictBarNamesAction, toggleMenuBarAction, + focusHeadwordsDlgAction, focusArticleViewAction, addAllTabToFavoritesAction; + + QAction useSmallIconsInToolbarsAction, useLargeIconsInToolbarsAction, useNormalIconsInToolbarsAction; + + QActionGroup * smallLargeIconGroup = new QActionGroup( this ); QAction stopAudioAction; QToolBar * navToolbar; @@ -186,7 +188,7 @@ private: /// Applies Qt stylesheets, use Windows dark palette etc.... void updateAppearances( const QString & addonStyle, const QString & displayStyle, - const bool & darkMode + Config::Dark darkMode #if !defined( Q_OS_WIN ) , const QString & interfaceStyle @@ -223,9 +225,8 @@ private: /// group, or to all dictionaries if there are no groups. vector< sptr< Dictionary::Class > > const & getActiveDicts(); - /// Brings the main window to front if it's not currently, or hides it - /// otherwise. The hiding part is omitted if onlyShow is true. - void toggleMainWindow( bool onlyShow = false ); + /// @param ensureShow only ensure the window will be shown and no "toggling" + void toggleMainWindow( bool ensureShow ); /// Creates hotkeyWrapper and hooks the currently set keys for it void installHotKeys(); @@ -341,7 +342,7 @@ private slots: /// If editDictionaryGroup is specified, the dialog positions on that group /// initially. - void editDictionaries( unsigned editDictionaryGroup = Instances::Group::NoGroupId ); + void editDictionaries( unsigned editDictionaryGroup = GroupId::NoGroupId ); /// Edits current group when triggered from the dictionary bar. void editCurrentGroup(); void editPreferences(); @@ -395,16 +396,13 @@ private slots: void setAutostart( bool ); - void showMainWindow(); - void visitHomepage(); void visitForum(); void openConfigFolder(); void showAbout(); void showDictBarNamesTriggered(); - void useSmallIconsInToolbarsTriggered(); - void useLargeIconsInToolbarsTriggered(); + void iconSizeActionTriggered( QAction * action ); void toggleMenuBarTriggered( bool announce = true ); void on_clearHistory_triggered(); @@ -502,5 +500,3 @@ public slots: setValue( progress ); } }; - -#endif diff --git a/src/ui/mainwindow.ui b/src/ui/mainwindow.ui index bbb47d60..056fbc21 100644 --- a/src/ui/mainwindow.ui +++ b/src/ui/mainwindow.ui @@ -39,7 +39,7 @@ - Qt::TextElideMode::ElideRight + Qt::ElideRight @@ -293,7 +293,7 @@ F3 - QAction::MenuRole::NoRole + QAction::NoRole @@ -308,7 +308,7 @@ F4 - QAction::MenuRole::PreferencesRole + QAction::PreferencesRole @@ -316,7 +316,7 @@ &Homepage - QAction::MenuRole::NoRole + QAction::NoRole @@ -327,7 +327,7 @@ About GoldenDict-ng - QAction::MenuRole::AboutRole + QAction::AboutRole @@ -341,7 +341,7 @@ Ctrl+Q - QAction::MenuRole::QuitRole + QAction::QuitRole @@ -349,7 +349,7 @@ &Forum - QAction::MenuRole::NoRole + QAction::NoRole @@ -363,7 +363,7 @@ Ctrl+F4 - QAction::MenuRole::NoRole + QAction::NoRole @@ -382,7 +382,7 @@ F2 - QAction::MenuRole::NoRole + QAction::NoRole @@ -397,7 +397,7 @@ Ctrl+P - QAction::MenuRole::NoRole + QAction::NoRole @@ -405,7 +405,7 @@ Page Set&up - QAction::MenuRole::NoRole + QAction::NoRole @@ -413,7 +413,7 @@ Print Pre&view - QAction::MenuRole::NoRole + QAction::NoRole @@ -424,7 +424,7 @@ Ctrl+F5 - QAction::MenuRole::NoRole + QAction::NoRole @@ -432,7 +432,7 @@ &Clear - QAction::MenuRole::NoRole + QAction::NoRole @@ -447,10 +447,10 @@ Ctrl+T - Qt::ShortcutContext::WidgetShortcut + Qt::WidgetShortcut - QAction::MenuRole::NoRole + QAction::NoRole @@ -458,7 +458,7 @@ &Configuration Folder - QAction::MenuRole::NoRole + QAction::NoRole @@ -469,7 +469,7 @@ Ctrl+H - QAction::MenuRole::NoRole + QAction::NoRole @@ -477,7 +477,7 @@ &Export - QAction::MenuRole::NoRole + QAction::NoRole @@ -485,7 +485,7 @@ &Import - QAction::MenuRole::NoRole + QAction::NoRole @@ -522,7 +522,7 @@ Ctrl+F - QAction::MenuRole::TextHeuristicRole + QAction::TextHeuristicRole @@ -533,10 +533,10 @@ Ctrl+Shift+F - Qt::ShortcutContext::WidgetWithChildrenShortcut + Qt::WidgetWithChildrenShortcut - QAction::MenuRole::TextHeuristicRole + QAction::TextHeuristicRole diff --git a/src/ui/mruqmenu.hh b/src/ui/mruqmenu.hh index 238dc6db..6a0fcd96 100644 --- a/src/ui/mruqmenu.hh +++ b/src/ui/mruqmenu.hh @@ -1,5 +1,4 @@ -#ifndef MRUQMENU_HH -#define MRUQMENU_HH +#pragma once #include #include @@ -19,6 +18,3 @@ private: signals: void requestTabChange( int index ); }; - - -#endif // MRUQMENU_HH diff --git a/src/ui/orderandprops.cc b/src/ui/orderandprops.cc index be92334d..08e5a898 100644 --- a/src/ui/orderandprops.cc +++ b/src/ui/orderandprops.cc @@ -135,7 +135,7 @@ OrderAndProps::OrderAndProps( QWidget * parent, Config::Group OrderAndProps::getCurrentDictionaryOrder() const { - Instances::Group g( "" ); + Instances::Group g; g.dictionaries = ui.dictionaryOrder->getCurrentDictionaries(); @@ -144,7 +144,7 @@ Config::Group OrderAndProps::getCurrentDictionaryOrder() const Config::Group OrderAndProps::getCurrentInactiveDictionaries() const { - Instances::Group g( "" ); + Instances::Group g; g.dictionaries = ui.inactiveDictionaries->getCurrentDictionaries(); diff --git a/src/ui/orderandprops.hh b/src/ui/orderandprops.hh index dce11782..99c154e8 100644 --- a/src/ui/orderandprops.hh +++ b/src/ui/orderandprops.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __ORDERANDPROPS_HH_INCLUDED__ -#define __ORDERANDPROPS_HH_INCLUDED__ +#pragma once #include "ui_orderandprops.h" #include "groups_widgets.hh" @@ -40,5 +39,3 @@ private: signals: void showDictionaryHeadwords( Dictionary::Class * dict ); }; - -#endif diff --git a/src/ui/orderandprops.ui b/src/ui/orderandprops.ui index 71b465f2..ceb388e7 100644 --- a/src/ui/orderandprops.ui +++ b/src/ui/orderandprops.ui @@ -82,10 +82,10 @@ TextLabel - Qt::TextFormat::PlainText + Qt::PlainText - Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse @@ -95,7 +95,7 @@ TextLabel - Qt::TextFormat::PlainText + Qt::PlainText @@ -119,7 +119,7 @@ TextLabel - Qt::TextFormat::PlainText + Qt::PlainText @@ -143,7 +143,7 @@ TextLabel - Qt::TextFormat::RichText + Qt::RichText @@ -153,7 +153,7 @@ TextLabel - Qt::TextFormat::RichText + Qt::RichText @@ -169,7 +169,7 @@ - QFrame::Shape::NoFrame + QFrame::NoFrame true @@ -179,7 +179,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -192,7 +192,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -230,10 +230,10 @@ - QFrame::Shape::NoFrame + QFrame::NoFrame - QPlainTextEdit::LineWrapMode::NoWrap + QPlainTextEdit::NoWrap true diff --git a/src/ui/preferences.cc b/src/ui/preferences.cc index 9b97c9ef..9d4578be 100644 --- a/src/ui/preferences.cc +++ b/src/ui/preferences.cc @@ -174,6 +174,11 @@ Preferences::Preferences( QWidget * parent, Config::Class & cfg_ ): ui.hideSingleTab->setChecked( p.hideSingleTab ); ui.mruTabOrder->setChecked( p.mruTabOrder ); ui.enableTrayIcon->setChecked( p.enableTrayIcon ); + +#ifdef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon + ui.enableTrayIcon->hide(); +#endif + ui.startToTray->setChecked( p.startToTray ); ui.closeToTray->setChecked( p.closeToTray ); ui.cbAutostart->setChecked( p.autoStart ); @@ -181,17 +186,42 @@ Preferences::Preferences( QWidget * parent, Config::Class & cfg_ ): ui.selectBySingleClick->setChecked( p.selectWordBySingleClick ); ui.autoScrollToTargetArticle->setChecked( p.autoScrollToTargetArticle ); ui.escKeyHidesMainWindow->setChecked( p.escKeyHidesMainWindow ); - ui.darkMode->setChecked( p.darkMode ); - ui.darkReaderMode->setChecked( p.darkReaderMode ); + + ui.darkMode->addItem( tr( "On" ), QVariant::fromValue( Config::Dark::On ) ); + ui.darkMode->addItem( tr( "Off" ), QVariant::fromValue( Config::Dark::Off ) ); + + if ( auto i = ui.darkMode->findData( QVariant::fromValue( p.darkMode ) ); i != -1 ) { + ui.darkMode->setCurrentIndex( i ); + } + + ui.darkReaderMode->addItem( tr( "Auto" ), QVariant::fromValue( Config::Dark::Auto ) ); + ui.darkReaderMode->setItemData( 0, tr( "Auto does nothing on some systems." ), Qt::ToolTipRole ); + ui.darkReaderMode->addItem( tr( "On" ), QVariant::fromValue( Config::Dark::On ) ); + ui.darkReaderMode->addItem( tr( "Off" ), QVariant::fromValue( Config::Dark::Off ) ); + + if ( auto i = ui.darkReaderMode->findData( QVariant::fromValue( p.darkReaderMode ) ); i != -1 ) { + ui.darkReaderMode->setCurrentIndex( i ); + } + + #ifndef Q_OS_WIN32 + // TODO: make this availiable on other platforms + ui.darkModeLabel->hide(); ui.darkMode->hide(); #endif + /// Hotkey Tab ui.enableMainWindowHotkey->setChecked( p.enableMainWindowHotkey ); ui.mainWindowHotkey->setKeySequence( p.mainWindowHotkey ); ui.enableClipboardHotkey->setChecked( p.enableClipboardHotkey ); ui.clipboardHotkey->setKeySequence( p.clipboardHotkey ); +#if QT_VERSION >= QT_VERSION_CHECK( 6, 5, 0 ) + // Bound by current global hotkey implementations + ui.mainWindowHotkey->setMaximumSequenceLength( 2 ); + ui.clipboardHotkey->setMaximumSequenceLength( 2 ); +#endif + ui.startWithScanPopupOn->setChecked( p.startWithScanPopupOn ); ui.enableScanPopupModifiers->setChecked( p.enableScanPopupModifiers ); @@ -413,8 +443,9 @@ Config::Preferences Preferences::getPreferences() p.autoScrollToTargetArticle = ui.autoScrollToTargetArticle->isChecked(); p.escKeyHidesMainWindow = ui.escKeyHidesMainWindow->isChecked(); - p.darkMode = ui.darkMode->isChecked(); - p.darkReaderMode = ui.darkReaderMode->isChecked(); + p.darkMode = ui.darkMode->currentData().value< Config::Dark >(); + p.darkReaderMode = ui.darkReaderMode->currentData().value< Config::Dark >(); + p.enableMainWindowHotkey = ui.enableMainWindowHotkey->isChecked(); p.mainWindowHotkey = ui.mainWindowHotkey->keySequence(); p.enableClipboardHotkey = ui.enableClipboardHotkey->isChecked(); diff --git a/src/ui/preferences.hh b/src/ui/preferences.hh index f5abf147..af6ac28f 100644 --- a/src/ui/preferences.hh +++ b/src/ui/preferences.hh @@ -1,5 +1,4 @@ -#ifndef __PREFERENCES_HH_INCLUDED__ -#define __PREFERENCES_HH_INCLUDED__ +#pragma once #include #include @@ -54,5 +53,3 @@ private slots: void on_collapseBigArticles_toggled( bool checked ); void on_limitInputPhraseLength_toggled( bool checked ); }; - -#endif diff --git a/src/ui/preferences.ui b/src/ui/preferences.ui index 1c513cef..6c2bba01 100644 --- a/src/ui/preferences.ui +++ b/src/ui/preferences.ui @@ -33,7 +33,7 @@ - Qt::TextElideMode::ElideNone + Qt::ElideNone false @@ -179,7 +179,7 @@ to open main window and perform other tasks. Enable system tray icon - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false @@ -219,7 +219,7 @@ the application. - Qt::Orientation::Vertical + Qt::Vertical @@ -322,7 +322,7 @@ the application.
- QComboBox::SizeAdjustPolicy::AdjustToContents + QComboBox::AdjustToContents @@ -397,29 +397,51 @@ the application.
- - - Turn the UI to dark. - - - Dark Mode - - + + + + + Turn the UI to dark. + + + Dark Mode + + + + + + + Turn the UI to dark. + + + + - - - Turn the article display style to dark. - - - Dark Reader Mode - - + + + + + Turn the article display style to dark. + + + Dark Reader Mode + + + + + + + Turn the article display style to dark. + + + + - Qt::Orientation::Vertical + Qt::Vertical @@ -508,7 +530,7 @@ the application.
- QFontComboBox::FontFilter::MonospacedFonts + QFontComboBox::MonospacedFonts @@ -562,7 +584,7 @@ the application.
Track Selection change - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true @@ -582,10 +604,10 @@ in the pressed state when the word selection changes.
- QFrame::Shape::NoFrame + QFrame::NoFrame - QFrame::Shadow::Plain + QFrame::Plain 0 @@ -608,7 +630,7 @@ in the pressed state when the word selection changes.
- Qt::Orientation::Horizontal + Qt::Horizontal @@ -665,10 +687,10 @@ in the pressed state when the word selection changes.
- QFrame::Shape::NoFrame + QFrame::NoFrame - QFrame::Shadow::Raised + QFrame::Raised 0 @@ -749,7 +771,7 @@ in the pressed state when the word selection changes. - Qt::Orientation::Vertical + Qt::Vertical @@ -782,7 +804,7 @@ in the pressed state when the word selection changes. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -809,7 +831,7 @@ in the pressed state when the word selection changes. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -827,10 +849,10 @@ in the pressed state when the word selection changes. - Qt::Orientation::Vertical + Qt::Vertical - QSizePolicy::Policy::Fixed + QSizePolicy::Fixed @@ -853,7 +875,7 @@ in the pressed state when the word selection changes. - Qt::Orientation::Vertical + Qt::Vertical @@ -946,7 +968,7 @@ in the pressed state when the word selection changes. - Qt::Orientation::Vertical + Qt::Vertical @@ -1072,7 +1094,7 @@ for all program's network requests. - QLineEdit::EchoMode::Password + QLineEdit::Password @@ -1138,7 +1160,7 @@ for all program's network requests. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1175,7 +1197,7 @@ for all program's network requests. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1300,7 +1322,7 @@ clears its network cache from disk during exit. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1329,7 +1351,7 @@ download page. - Qt::Orientation::Vertical + Qt::Vertical @@ -1468,7 +1490,7 @@ download page. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1511,7 +1533,7 @@ download page. - Qt::Orientation::Vertical + Qt::Vertical @@ -1584,7 +1606,7 @@ download page. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1631,7 +1653,7 @@ download page. - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1646,7 +1668,7 @@ download page. - Qt::Orientation::Vertical + Qt::Vertical @@ -1721,7 +1743,7 @@ download page. - Qt::Orientation::Vertical + Qt::Vertical @@ -1799,7 +1821,7 @@ from mouse-over, selection, clipboard or command line - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1855,7 +1877,7 @@ from mouse-over, selection, clipboard or command line - Qt::Orientation::Horizontal + Qt::Horizontal @@ -1922,7 +1944,7 @@ from Stardict, Babylon and GLS dictionaries - Qt::Orientation::Vertical + Qt::Vertical @@ -1939,10 +1961,10 @@ from Stardict, Babylon and GLS dictionaries - Qt::Orientation::Horizontal + Qt::Horizontal - QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Help|QDialogButtonBox::StandardButton::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok diff --git a/src/ui/scanflag.hh b/src/ui/scanflag.hh index ffdb6090..9f11a546 100644 --- a/src/ui/scanflag.hh +++ b/src/ui/scanflag.hh @@ -1,5 +1,4 @@ -#ifndef SCAN_FLAG_H -#define SCAN_FLAG_H +#pragma once #include #include @@ -25,5 +24,3 @@ private: QTimer hideTimer; QPushButton * pushButton; }; - -#endif // SCAN_FLAG_H diff --git a/src/ui/scanpopup.cc b/src/ui/scanpopup.cc index 95a90f58..3b3a5845 100644 --- a/src/ui/scanpopup.cc +++ b/src/ui/scanpopup.cc @@ -8,11 +8,6 @@ #include #include #include -#if ( QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) ) - #include - #include - #include -#endif #include "gddebug.hh" #include "gestures.hh" @@ -140,7 +135,7 @@ ScanPopup::ScanPopup( QWidget * parent, dictionaryBar.setFloatable( false ); Instances::Group const * igrp = groups.findGroup( cfg.lastPopupGroupId ); - if ( cfg.lastPopupGroupId == Instances::Group::AllGroupId ) { + if ( cfg.lastPopupGroupId == GroupId::AllGroupId ) { if ( igrp ) { igrp->checkMutedDictionaries( &cfg.popupMutedDictionaries ); } @@ -165,12 +160,12 @@ ScanPopup::ScanPopup( QWidget * parent, &PronounceEngine::emitAudio, this, [ this ]( auto audioUrl ) { + definition->setAudioLink( audioUrl ); if ( !isActiveWindow() ) { return; } if ( cfg.preferences.pronounceOnLoadPopup ) { - - definition->openLink( QUrl::fromEncoded( audioUrl.toUtf8() ), {} ); + definition->playAudio( QUrl::fromEncoded( audioUrl.toUtf8() ) ); } } ); pinnedGeometry = cfg.popupWindowGeometry; @@ -591,7 +586,7 @@ void ScanPopup::currentGroupChanged( int ) { cfg.lastPopupGroupId = ui.groupList->getCurrentGroup(); Instances::Group const * igrp = groups.findGroup( cfg.lastPopupGroupId ); - if ( cfg.lastPopupGroupId == Instances::Group::AllGroupId ) { + if ( cfg.lastPopupGroupId == GroupId::AllGroupId ) { if ( igrp ) { igrp->checkMutedDictionaries( &cfg.popupMutedDictionaries ); } @@ -727,7 +722,7 @@ bool ScanPopup::eventFilter( QObject * watched, QEvent * event ) if ( event->type() == QEvent::MouseMove ) { QMouseEvent * mouseEvent = (QMouseEvent *)event; - reactOnMouseMove( mouseEvent->globalPos() ); + reactOnMouseMove( mouseEvent->globalPosition() ); } } @@ -751,9 +746,9 @@ bool ScanPopup::eventFilter( QObject * watched, QEvent * event ) return QMainWindow::eventFilter( watched, event ); } -void ScanPopup::reactOnMouseMove( QPoint const & p ) +void ScanPopup::reactOnMouseMove( QPointF const & p ) { - if ( geometry().contains( p ) ) { + if ( geometry().contains( p.toPoint() ) ) { // GD_DPRINTF( "got inside\n" ); hideTimer.stop(); @@ -773,7 +768,7 @@ void ScanPopup::reactOnMouseMove( QPoint const & p ) // receiving this event, meaning there's basically nothing under the // cursor. if ( /*watched == this &&*/ - !frameGeometry().adjusted( -proximity, -proximity, proximity, proximity ).contains( p ) ) { + !frameGeometry().adjusted( -proximity, -proximity, proximity, proximity ).contains( p.toPoint() ) ) { // We've way too far from the window -- hide the popup // If the mouse never entered the popup, hide the window instantly -- @@ -794,14 +789,14 @@ void ScanPopup::mousePressEvent( QMouseEvent * ev ) // With mouse grabs, the press can occur anywhere on the screen, which // might mean hiding the window. - if ( !frameGeometry().contains( ev->globalPos() ) ) { + if ( !frameGeometry().contains( ev->globalPosition().toPoint() ) ) { hideWindow(); return; } if ( ev->button() == Qt::LeftButton ) { - startPos = ev->globalPos(); + startPos = ev->globalPosition(); setCursor( Qt::ClosedHandCursor ); } @@ -811,15 +806,13 @@ void ScanPopup::mousePressEvent( QMouseEvent * ev ) void ScanPopup::mouseMoveEvent( QMouseEvent * event ) { if ( event->buttons() && cursor().shape() == Qt::ClosedHandCursor ) { - QPoint newPos = event->globalPos(); - - QPoint delta = newPos - startPos; + QPointF newPos = event->globalPosition(); + QPointF delta = newPos - startPos; startPos = newPos; // Move the window - - move( pos() + delta ); + move( ( pos() + delta ).toPoint() ); } QMainWindow::mouseMoveEvent( event ); @@ -848,11 +841,7 @@ void ScanPopup::leaveEvent( QEvent * event ) } } -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) void ScanPopup::enterEvent( QEnterEvent * event ) -#else -void ScanPopup::enterEvent( QEvent * event ) -#endif { QMainWindow::enterEvent( event ); @@ -1086,7 +1075,7 @@ void ScanPopup::updateDictionaryBar() dictionaryBar.setDictionaries( grp->dictionaries ); } - if ( currentId == Instances::Group::AllGroupId ) { + if ( currentId == GroupId::AllGroupId ) { dictionaryBar.setMutedDictionaries( &cfg.popupMutedDictionaries ); } else { diff --git a/src/ui/scanpopup.hh b/src/ui/scanpopup.hh index adcaa0ad..8d2f9c37 100644 --- a/src/ui/scanpopup.hh +++ b/src/ui/scanpopup.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __SCANPOPUP_HH_INCLUDED__ -#define __SCANPOPUP_HH_INCLUDED__ +#pragma once #include "article_netmgr.hh" #include "ui/articleview.hh" @@ -148,7 +147,7 @@ private: bool mouseEnteredOnce = false; bool mouseIntercepted = false; - QPoint startPos; // For window moving + QPointF startPos; // For window moving QByteArray pinnedGeometry; QTimer hideTimer; // When mouse leaves the window, a grace period is @@ -169,17 +168,13 @@ private: /// Called from event filter or from mouseGrabPoll to handle mouse event /// while it is being intercepted. - void reactOnMouseMove( QPoint const & p ); + void reactOnMouseMove( QPointF const & p ); virtual void mousePressEvent( QMouseEvent * ); virtual void mouseMoveEvent( QMouseEvent * ); virtual void mouseReleaseEvent( QMouseEvent * ); virtual void leaveEvent( QEvent * event ); -#if ( QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) ) virtual void enterEvent( QEnterEvent * event ); -#else - virtual void enterEvent( QEvent * event ); -#endif virtual void showEvent( QShowEvent * ); virtual void closeEvent( QCloseEvent * ); virtual void moveEvent( QMoveEvent * ); @@ -233,5 +228,3 @@ private slots: void titleChanged( ArticleView *, QString const & title ) const; }; - -#endif diff --git a/src/ui/scanpopup.ui b/src/ui/scanpopup.ui index accc7a51..e9550651 100644 --- a/src/ui/scanpopup.ui +++ b/src/ui/scanpopup.ui @@ -36,10 +36,10 @@ - QFrame::Shape::NoFrame + QFrame::NoFrame - QFrame::Shadow::Raised + QFrame::Raised 0 @@ -76,7 +76,7 @@ - QComboBox::SizeAdjustPolicy::AdjustToContents + QComboBox::AdjustToContents @@ -177,7 +177,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal diff --git a/src/ui/searchpanel.hh b/src/ui/searchpanel.hh index 6d84e6a0..b1b3f580 100644 --- a/src/ui/searchpanel.hh +++ b/src/ui/searchpanel.hh @@ -1,5 +1,4 @@ -#ifndef GOLDENDICT_SEARCHPANEL_H -#define GOLDENDICT_SEARCHPANEL_H +#pragma once #include #include @@ -18,6 +17,3 @@ public: QPushButton * next; QCheckBox * caseSensitive; }; - - -#endif //GOLDENDICT_SEARCHPANEL_H diff --git a/src/ui/searchpanewidget.hh b/src/ui/searchpanewidget.hh index 02065ae4..ecf1f387 100644 --- a/src/ui/searchpanewidget.hh +++ b/src/ui/searchpanewidget.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __SEARCHPANEWIDGET_HH_INCLUDED__ -#define __SEARCHPANEWIDGET_HH_INCLUDED__ +#pragma once #include #include @@ -23,5 +22,3 @@ public: return QSize( 10, 204 ); } }; - -#endif diff --git a/src/ui/sources.ui b/src/ui/sources.ui index a5ebfc20..c47ab90a 100644 --- a/src/ui/sources.ui +++ b/src/ui/sources.ui @@ -26,7 +26,7 @@ - Qt::TextElideMode::ElideNone + Qt::ElideNone true @@ -71,7 +71,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -134,7 +134,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -207,7 +207,7 @@ Add appropriate dictionaries to the bottoms of the appropriate groups to use them. - Qt::TextFormat::PlainText + Qt::PlainText false @@ -258,10 +258,10 @@ of the appropriate groups to use them. - Qt::Orientation::Vertical + Qt::Vertical - QSizePolicy::Policy::Expanding + QSizePolicy::Expanding @@ -317,7 +317,7 @@ of the appropriate groups to use them. - Qt::Orientation::Vertical + Qt::Vertical @@ -331,14 +331,6 @@ of the appropriate groups to use them. - - - - Alternatively, use %GD1251% for CP1251, %GDISO1%...%GDISO16% for ISO 8859-1...ISO 8859-16 respectively, -%GDBIG5% for Big-5, %GDBIG5HKSCS% for Big5-HKSCS, %GDGBK% for GBK and GB18030, %GDSHIFTJIS% for Shift-JIS. - - - @@ -381,7 +373,7 @@ of the appropriate groups to use them. - Qt::Orientation::Vertical + Qt::Vertical @@ -440,7 +432,7 @@ of the appropriate groups to use them. - Qt::Orientation::Vertical + Qt::Vertical @@ -512,7 +504,7 @@ Full list of availiable languages can be found <a href="https://linguali - Qt::Orientation::Vertical + Qt::Vertical @@ -567,7 +559,7 @@ Full list of availiable languages can be found <a href="https://linguali - QFormLayout::FieldGrowthPolicy::ExpandingFieldsGrow + QFormLayout::ExpandingFieldsGrow @@ -586,10 +578,10 @@ Full list of availiable languages can be found <a href="https://linguali - Qt::Orientation::Horizontal + Qt::Horizontal - QSizePolicy::Policy::Fixed + QSizePolicy::Fixed @@ -629,10 +621,10 @@ Full list of availiable languages can be found <a href="https://linguali - Qt::Orientation::Horizontal + Qt::Horizontal - QSizePolicy::Policy::Fixed + QSizePolicy::Fixed @@ -657,7 +649,7 @@ Full list of availiable languages can be found <a href="https://linguali - Qt::Orientation::Vertical + Qt::Vertical diff --git a/src/ui/stylescombobox.hh b/src/ui/stylescombobox.hh index 2d4c1f6f..2381dac0 100644 --- a/src/ui/stylescombobox.hh +++ b/src/ui/stylescombobox.hh @@ -1,7 +1,6 @@ /* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __STYLESCOMBOBOX_HH_INCLUDED__ -#define __STYLESCOMBOBOX_HH_INCLUDED__ +#pragma once #include #include @@ -25,5 +24,3 @@ public: /// Returns current style. QString getCurrentStyle() const; }; - -#endif // __STYLESCOMBOBOX_HH_INCLUDED__ diff --git a/src/ui/texttospeechsource.ui b/src/ui/texttospeechsource.ui index c1b9a58c..8b7975f9 100644 --- a/src/ui/texttospeechsource.ui +++ b/src/ui/texttospeechsource.ui @@ -51,7 +51,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -90,10 +90,10 @@ false - Qt::Orientation::Horizontal + Qt::Horizontal - QSlider::TickPosition::TicksAbove + QSlider::TicksAbove 10 @@ -128,10 +128,10 @@ false - Qt::Orientation::Horizontal + Qt::Horizontal - QSlider::TickPosition::TicksAbove + QSlider::TicksAbove 10 @@ -192,7 +192,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal diff --git a/src/ui/translatebox.hh b/src/ui/translatebox.hh index e6a3b2b8..272d0a8b 100644 --- a/src/ui/translatebox.hh +++ b/src/ui/translatebox.hh @@ -1,8 +1,7 @@ /* This file is (c) 2012 Tvangeste * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef TRANSLATEBOX_HH -#define TRANSLATEBOX_HH +#pragma once #include #include @@ -40,5 +39,3 @@ private: QCompleter * completer; QStringList words; }; - -#endif // TRANSLATEBOX_HH diff --git a/src/version.hh b/src/version.hh index 7eba944b..1b3d181d 100644 --- a/src/version.hh +++ b/src/version.hh @@ -27,7 +27,7 @@ const QLatin1String flags = QLatin1String( const QLatin1String compiler = QLatin1String( #if defined( Q_CC_MSVC ) - "Visual C++ Compiler " QT_STRINGIFY( _MSC_FULL_VER ) + "MSVC " QT_STRINGIFY( _MSC_FULL_VER ) #elif defined( Q_CC_CLANG ) "Clang " __clang_version__ #elif defined( Q_CC_GNU ) diff --git a/src/webmultimediadownload.hh b/src/webmultimediadownload.hh index db9ccd7e..81827dc0 100644 --- a/src/webmultimediadownload.hh +++ b/src/webmultimediadownload.hh @@ -1,5 +1,4 @@ -#ifndef WEBMULTIMEDIADOWNLOAD_HH -#define WEBMULTIMEDIADOWNLOAD_HH +#pragma once #include "dict/dictionary.hh" #include @@ -28,5 +27,3 @@ private slots: }; } // namespace Dictionary - -#endif // WEBMULTIMEDIADOWNLOAD_HH diff --git a/src/weburlrequestinterceptor.hh b/src/weburlrequestinterceptor.hh index 5bb46c8e..cfef8f40 100644 --- a/src/weburlrequestinterceptor.hh +++ b/src/weburlrequestinterceptor.hh @@ -1,5 +1,4 @@ -#ifndef WEBURLREQUESTINTERCEPTOR_H -#define WEBURLREQUESTINTERCEPTOR_H +#pragma once #include @@ -13,5 +12,3 @@ public: signals: void linkClicked( const QUrl & url ); }; - -#endif // WEBURLREQUESTINTERCEPTOR_H diff --git a/src/windows/stub_msvc.h b/src/windows/stub_msvc.h index 34b8b684..b3a7ebd7 100644 --- a/src/windows/stub_msvc.h +++ b/src/windows/stub_msvc.h @@ -1,3 +1,5 @@ +#pragma once + #include #ifdef _MSC_VER #if !defined(strcasecmp) diff --git a/src/windows/winhotkeywrapper.cc b/src/windows/winhotkeywrapper.cc new file mode 100644 index 00000000..8f1f0696 --- /dev/null +++ b/src/windows/winhotkeywrapper.cc @@ -0,0 +1,256 @@ +#include +#ifdef Q_OS_WIN + #include "hotkeywrapper.hh" + #include + #include + +/// Implementation is pretty much using RegisterHotKey & UnregisterHotKey +/// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerhotkey + +void HotkeyWrapper::init() +{ + hwnd = (HWND)( ( static_cast< QWidget * >( this->parent() ) )->winId() ); +} + +bool HotkeyWrapper::setGlobalKey( QKeySequence const & seq, int handle ) +{ + Config::HotKey hk( seq ); + return setGlobalKey( hk.key1, hk.key2, hk.modifiers, handle ); +} + +bool HotkeyWrapper::setGlobalKey( int key, int key2, Qt::KeyboardModifiers modifier, int handle ) +{ + if ( !key ) + return false; // We don't monitor empty combinations + + static int id = 0; + if ( id > 0xBFFF - 1 ) + id = 0; + + quint32 mod = 0; + if ( modifier & Qt::CTRL ) + mod |= MOD_CONTROL; + if ( modifier & Qt::ALT ) + mod |= MOD_ALT; + if ( modifier & Qt::SHIFT ) + mod |= MOD_SHIFT; + if ( modifier & Qt::META ) + mod |= MOD_WIN; + + quint32 vk = nativeKey( key ); + quint32 vk2 = key2 ? nativeKey( key2 ) : 0; + + hotkeys.append( HotkeyStruct( vk, vk2, mod, handle, id ) ); + + if ( !RegisterHotKey( hwnd, id++, mod, vk ) ) + return false; + + if ( key2 && key2 != key ) + return RegisterHotKey( hwnd, id++, mod, vk2 ); + + return true; +} + + +bool HotkeyWrapper::winEvent( MSG * message, qintptr * result ) +{ + Q_UNUSED( result ); + if ( message->message == WM_HOTKEY ) + return checkState( ( message->lParam >> 16 ), ( message->lParam & 0xffff ) ); + + return false; +} + +void HotkeyWrapper::unregister() +{ + for ( int i = 0; i < hotkeys.count(); i++ ) { + HotkeyStruct const & hk = hotkeys.at( i ); + + UnregisterHotKey( hwnd, hk.id ); + + if ( hk.key2 && hk.key2 != hk.key ) + UnregisterHotKey( hwnd, hk.id + 1 ); + } + + ( static_cast< QHotkeyApplication * >( qApp ) )->unregisterWrapper( this ); +} + +bool QHotkeyApplication::nativeEventFilter( const QByteArray & /*eventType*/, void * message, qintptr * result ) +{ + MSG * msg = reinterpret_cast< MSG * >( message ); + + if ( msg->message == WM_HOTKEY ) { + for ( int i = 0; i < hotkeyWrappers.size(); i++ ) { + if ( hotkeyWrappers.at( i )->winEvent( msg, result ) ) + return true; + } + } + + return false; +} + + +/// References: +/// https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes +/// https://doc.qt.io/qt-6/qt.html#Key-enum +quint32 HotkeyWrapper::nativeKey( int key ) +{ + // Qt's 0-9 & A-Z overlaps with Windows's VK + if ( key >= Qt::Key_0 && key <= Qt::Key_9 || key >= Qt::Key_A && key <= Qt::Key_Z ) { + return key; + } + + switch ( key ) { + case Qt::Key_Space: + return VK_SPACE; + case Qt::Key_Asterisk: + return VK_MULTIPLY; + case Qt::Key_Plus: + return VK_ADD; + case Qt::Key_Comma: + return VK_SEPARATOR; + case Qt::Key_Minus: + return VK_SUBTRACT; + case Qt::Key_Slash: + return VK_DIVIDE; + case Qt::Key_Tab: + case Qt::Key_Backtab: + return VK_TAB; + case Qt::Key_Backspace: + return VK_BACK; + case Qt::Key_Return: + case Qt::Key_Escape: + return VK_ESCAPE; + case Qt::Key_Enter: + return VK_RETURN; + case Qt::Key_Insert: + return VK_INSERT; + case Qt::Key_Delete: + return VK_DELETE; + case Qt::Key_Pause: + return VK_PAUSE; + case Qt::Key_Print: + return VK_PRINT; + case Qt::Key_Clear: + return VK_CLEAR; + case Qt::Key_Home: + return VK_HOME; + case Qt::Key_End: + return VK_END; + case Qt::Key_Up: + return VK_UP; + case Qt::Key_Down: + return VK_DOWN; + case Qt::Key_Left: + return VK_LEFT; + case Qt::Key_Right: + return VK_RIGHT; + case Qt::Key_PageUp: + return VK_PRIOR; + case Qt::Key_PageDown: + return VK_NEXT; + case Qt::Key_F1: + return VK_F1; + case Qt::Key_F2: + return VK_F2; + case Qt::Key_F3: + return VK_F3; + case Qt::Key_F4: + return VK_F4; + case Qt::Key_F5: + return VK_F5; + case Qt::Key_F6: + return VK_F6; + case Qt::Key_F7: + return VK_F7; + case Qt::Key_F8: + return VK_F8; + case Qt::Key_F9: + return VK_F9; + case Qt::Key_F10: + return VK_F10; + case Qt::Key_F11: + return VK_F11; + case Qt::Key_F12: + return VK_F12; + case Qt::Key_F13: + return VK_F13; + case Qt::Key_F14: + return VK_F14; + case Qt::Key_F15: + return VK_F15; + case Qt::Key_F16: + return VK_F16; + case Qt::Key_F17: + return VK_F17; + case Qt::Key_F18: + return VK_F18; + case Qt::Key_F19: + return VK_F19; + case Qt::Key_F20: + return VK_F20; + case Qt::Key_F21: + return VK_F21; + case Qt::Key_F22: + return VK_F22; + case Qt::Key_F23: + return VK_F23; + case Qt::Key_F24: + return VK_F24; + case Qt::Key_Colon: + case Qt::Key_Semicolon: + return VK_OEM_1; + case Qt::Key_Question: + return VK_OEM_2; + case Qt::Key_AsciiTilde: + case Qt::Key_QuoteLeft: + return VK_OEM_3; + case Qt::Key_BraceLeft: + case Qt::Key_BracketLeft: + return VK_OEM_4; + case Qt::Key_Bar: + case Qt::Key_Backslash: + return VK_OEM_5; + case Qt::Key_BraceRight: + case Qt::Key_BracketRight: + return VK_OEM_6; + case Qt::Key_QuoteDbl: + case Qt::Key_Apostrophe: + return VK_OEM_7; + case Qt::Key_Less: + return VK_OEM_COMMA; + case Qt::Key_Greater: + return VK_OEM_PERIOD; + case Qt::Key_Equal: + return VK_OEM_PLUS; + case Qt::Key_ParenRight: + return 0x30; + case Qt::Key_Exclam: + return 0x31; + case Qt::Key_At: + return 0x32; + case Qt::Key_NumberSign: + return 0x33; + case Qt::Key_Dollar: + return 0x34; + case Qt::Key_Percent: + return 0x35; + case Qt::Key_AsciiCircum: + return 0x36; + case Qt::Key_Ampersand: + return 0x37; + case Qt::Key_copyright: + return 0x38; + case Qt::Key_ParenLeft: + return 0x39; + case Qt::Key_Underscore: + return VK_OEM_MINUS; + case Qt::Key_Meta: + return VK_LWIN; + default:; + } + + return key; +} + +#endif diff --git a/src/wordfinder.cc b/src/wordfinder.cc index 8394da84..a08f0c6f 100644 --- a/src/wordfinder.cc +++ b/src/wordfinder.cc @@ -131,7 +131,7 @@ void WordFinder::startSearch() allWordWritings.resize( 1 ); } - allWordWritings[ 0 ] = gd::toWString( inputWord ); + allWordWritings[ 0 ] = inputWord.toStdU32String(); for ( const auto & inputDict : *inputDicts ) { vector< wstring > writings = inputDict->getAlternateWritings( allWordWritings[ 0 ] ); diff --git a/src/wordfinder.hh b/src/wordfinder.hh index 8c7fcd23..49f938bc 100644 --- a/src/wordfinder.hh +++ b/src/wordfinder.hh @@ -1,8 +1,7 @@ /* This file is (c) 2008-2012 Konstantin Isakov * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ -#ifndef __WORDFINDER_HH_INCLUDED__ -#define __WORDFINDER_HH_INCLUDED__ +#pragma once #include #include @@ -60,8 +59,8 @@ private: // Maps lowercased string to the original one. This catches all duplicates // without case sensitivity. Made as an array and a map indexing that array. - typedef std::list< OneResult > ResultsArray; - typedef std::map< gd::wstring, ResultsArray::iterator > ResultsIndex; + using ResultsArray = std::list< OneResult >; + using ResultsIndex = std::map< gd::wstring, ResultsArray::iterator >; ResultsArray resultsArray; ResultsIndex resultsIndex; @@ -196,5 +195,3 @@ private: } }; }; - -#endif diff --git a/thirdparty/breakpad/Readme.md b/thirdparty/breakpad/Readme.md deleted file mode 100644 index df770b73..00000000 --- a/thirdparty/breakpad/Readme.md +++ /dev/null @@ -1,2 +0,0 @@ -This is is a placeholder for breakpad. -the lib and include files will be copied here with vcpkg. \ No newline at end of file diff --git a/thirdparty/fmt/README_about_upgrade.md b/thirdparty/fmt/README.md similarity index 100% rename from thirdparty/fmt/README_about_upgrade.md rename to thirdparty/fmt/README.md diff --git a/tools/generators/readme.txt b/tools/generators/README.md similarity index 100% rename from tools/generators/readme.txt rename to tools/generators/README.md diff --git a/website/README.md b/website/README.md index 616a2e5d..91694ed6 100644 --- a/website/README.md +++ b/website/README.md @@ -3,10 +3,10 @@ With venv ``` cd ./website -python -m venv ./venv/ +python3 -m venv ./venv/ source ./venv/bin/activate # source ./venv/bin/activate.fish -pip install mkdocs-material +pip3 install mkdocs-material ``` Then diff --git a/website/docs/custom_dictionary.md b/website/docs/custom_dictionary.md index 4ee0eb60..9dc68914 100644 --- a/website/docs/custom_dictionary.md +++ b/website/docs/custom_dictionary.md @@ -46,3 +46,5 @@ will disable the current dictionary's full-text search. You can check the full-text search status on each dictionary's info dialog. ![](img/dictionary-info-fullindex.png) + +Note that it is possible to enable full text for a single dictionary by disabling full-text search in the Preferences dialog, and set `fts=true` for that dictionary. \ No newline at end of file diff --git a/website/docs/dictformats.md b/website/docs/dictformats.md index 6b4275b2..b833554b 100644 --- a/website/docs/dictformats.md +++ b/website/docs/dictformats.md @@ -34,7 +34,7 @@ Various special "dictionaries" can be added, such as Programs, TTS, Morphology, ### Converting between formats -Goldendict does not provide any dictionary modification functionality. +GoldenDict-ng does not provide any dictionary modification functionality. To convert between formats, try tools like [pyglossary](https://github.com/ilius/pyglossary). diff --git a/website/docs/feedbacks.md b/website/docs/feedbacks.md index 5674f5db..c5101aeb 100644 --- a/website/docs/feedbacks.md +++ b/website/docs/feedbacks.md @@ -8,7 +8,7 @@ Report any bugs & dysfunctions to [issues list]( "Copy version info". -Goldendict can be started with "--log-to-file" that will creates "gd_log.txt" in configuration folder and store various warnings, errors and debug messages. +GoldenDict-ng can be started with "--log-to-file" that will creates "gd_log.txt" in configuration folder and store various warnings, errors and debug messages. On windows, try open command line and starts goldendict with `goldendict --log-to-file`. diff --git a/website/docs/howto/how to build ffmpeg for visual studio.md b/website/docs/howto/how to build ffmpeg for visual studio.md deleted file mode 100644 index d9df6cf6..00000000 --- a/website/docs/howto/how to build ffmpeg for visual studio.md +++ /dev/null @@ -1,32 +0,0 @@ -# Use vcpkg to build ffmpeg(on Windows). - -Steps: - -1. follow the instructions at https://trac.ffmpeg.org/wiki/CompilationGuide/vcpkg - - -2. run the command -``` -vcpkg.exe install ffmpeg[core,avcodec,avdevice,avfilter,avformat,speex,avresample,mp3lame,opus,sdl2,swresample,vorbis]:x64-windows-rel -``` - -3. copy dll and libs in vcpkg\installed\x64-windows-rel to goldendict's winlibs\lib\msvc - -**Pros**: Can be compiled with speex. - -# Alternative method -simply download ffmpeg from the official website: https://github.com/BtbN/FFmpeg-Builds/releases -Then replace the dlls and libs in the winlibs\lib\msvc. - -**Cons**: Seems to be missing libspeex or I just downloaded the wrong package. - -**Pros**: Easy to manage. - - -## conan - - conan does not seem to have the libspeex option yet. - - -## Links worth checking -https://stackoverflow.com/a/44556505/968188 diff --git a/website/docs/howto/how to customize the opencc.md b/website/docs/howto/how to customize the opencc.md index 169da18d..40933691 100644 --- a/website/docs/howto/how to customize the opencc.md +++ b/website/docs/howto/how to customize the opencc.md @@ -16,6 +16,6 @@ t2s.json ![image](https://user-images.githubusercontent.com/105986/192209129-ebc9efe7-ce82-4d4d-ad52-1b3c33eaf270.png) -3. search `丑` in Goldendict-ng will also show the result of `美` +3. search `丑` in GoldenDict-ng will also show the result of `美` any other valid opencc configuration solutions should also work here. diff --git a/website/docs/howto/how to debug dictionary js.md b/website/docs/howto/how to debug dictionary js.md index dee1d247..0e6b3cd8 100644 --- a/website/docs/howto/how to debug dictionary js.md +++ b/website/docs/howto/how to debug dictionary js.md @@ -1,27 +1,14 @@ -# How to debug dictionary javascript - -- [How to debug dictionary javascript](#how-to-debug-dictionary-javascript) - - [background](#background) - - [goldendict-ng inspector](#goldendict-ng-inspector) - - [How to navigate to the specified element](#how-to-navigate-to-the-specified-element) - - [Modify the css style](#modify-the-css-style) - - [check javascript events](#check-javascript-events) - - [reproduce the issue in the goldendit](#reproduce-the-issue-in-the-goldendit) - - ## background When some js functions do not work as expected, this article tries to give a debug solution to pinpoint the problem. +## Web inspector (DevTools) - -## goldendict-ng inspector - -Goldendict-ng has embedded an inspector, you can trigger it manually using `F12`. +GoldenDict-ng has embedded an inspector, which is actually [chromium's DevTools](https://developer.chrome.com/docs/devtools). You can trigger it manually using `F12`. Screenshot: ![Inspector](../img/inspector.png) -## How to navigate to the specified element +## Navigate to the specified element Click the find element and move mouse to the specified element, click the element will navigate the source panel to the very place. ![steps](../img/inspector-steps.png) @@ -32,7 +19,7 @@ you can play around with the css to modify the appearance of the html and check ![style](../img/inspector-style.png) -## check javascript events +## Check javascript events - navigate to the specified element - check eventlisterner panel @@ -47,7 +34,7 @@ If some desired event does not triggered , it can first check does the event lis ![breakpoint](../img/inspector-breakpoint.png) -## reproduce the issue in the goldendit +## Reproduce the issues following your normal operations and debugging the javascript code and pay attention to the console output. Whether any errors happened. ![Alt text](../img/inspector-console.png) diff --git a/website/docs/howto/how to use .clang-format to format the code.md b/website/docs/howto/how to use .clang-format to format the code.md deleted file mode 100644 index 99bf3f7c..00000000 --- a/website/docs/howto/how to use .clang-format to format the code.md +++ /dev/null @@ -1,30 +0,0 @@ -# Goal - - -the project has included a .clang-format as the code guideline. - -# How to use this file - - -## CommandLine - -Stash changes via `git add files` then `git-clang-format` - - - -## QtCreator: - -Check the steps in the following webpage. -https://doc.qt.io/qtcreator/creator-indenting-code.html#automatic-formatting-and-indentation - -## Visual Studio(Newer Version) - -visual studio will automatically detect this file and apply the format guideline. - - -# Fix warnings reported by SonarCloud - -After PR submitted , a SonarCloud analysis will take place. Fix all the warnings introduced by your PR. -Previous code may also have many warnings ,can be left alone. -![image](https://user-images.githubusercontent.com/105986/226776188-e23c4da0-4ea5-4c53-86eb-5a3da971b691.png) - diff --git a/website/docs/howto/how to use breadpad crash analysis.md b/website/docs/howto/how to use breadpad crash analysis.md index 6e3c43b3..d5200ff4 100644 --- a/website/docs/howto/how to use breadpad crash analysis.md +++ b/website/docs/howto/how to use breadpad crash analysis.md @@ -1,7 +1,7 @@ Introduction ---------------------- -Goldendict-ng has provide an option to build the application with [breakpad](https://docs.sentry.io/platforms/native/guides/breakpad/) +GoldenDict-ng has provide an option to build the application with [breakpad](https://docs.sentry.io/platforms/native/guides/breakpad/) `CONFIG+=use_breakpad` to enable this feature. diff --git a/website/docs/index.md b/website/docs/index.md index 27f9bb9f..2f9a9c65 100644 --- a/website/docs/index.md +++ b/website/docs/index.md @@ -1,6 +1,18 @@ -This is the Next Generation GoldenDict. +GoldenDict-ng is an advanced dictionary lookup program. -The Best Multi-format Cross-platform Open-Source Dictionaries Lookup Program. +## Features + +* Supports many dictionary formats, such as MDX, DSL, StarDict, Zim... +* Presents lookup results of multiple dictionaries in the same page +* Supports special types of "dictionaries", such as external program, website, audio files... +* Lots of auxiliary features + * Popup window + * Full text search + * Anki integration + * Transliteration for some languages + * Word stemming and spelling correction via Hunspell's morphology analysis + * Unicode case, diacritics, punctuation and whitespace folding (e.g. typing 'Grussen' would yield 'grüßen' in German dictionaries). + * ... ## Screenshots On Windows 11 with default theme: @@ -17,4 +29,6 @@ On Linux with custom Qt color theme ## Project history -This project is forked from the original GoldenDict which was developed at \ No newline at end of file +This project is forked from the original GoldenDict which was developed at + +The `-ng` in name means "next generation". \ No newline at end of file diff --git a/website/docs/install.md b/website/docs/install.md index ffd3c45c..9feedcb1 100644 --- a/website/docs/install.md +++ b/website/docs/install.md @@ -4,7 +4,7 @@ ## Download -Goldendict-ng is available pre-built for Windows and macOS. It is available in a few Linux/Unix repos and FlatHub. +GoldenDict-ng is available pre-built for Windows and macOS. It is available in a few Linux/Unix repos and FlatHub. * [Latest stable version](https://github.com/xiaoyifang/goldendict/releases/latest) * [Pre-release test builds](https://github.com/xiaoyifang/goldendict/releases). @@ -16,7 +16,7 @@ Because it is open source, you can always [build it for yourself](howto/build_fr Choose either * `****-installer.exe ` for traditional installer experience -* `****.7z` for simply unzip and run experience +* `****-installer.7z` for simply unzip and run experience If Qt's version is not changed, you can also download a single `goldendict.exe` and drop it into previous installation's folder (If uncertain, don't do this). @@ -27,18 +27,17 @@ Requires Windows 10 (1809 or later). Download on Flathub * See the right side for available packages in various Linux distros. -* In Gnu Guix, goldendict-ng is available at the [ajattix repository](https://codeberg.org/hashirama/ajattix) * In Debian 12 and Ubuntu 23.04, `goldendict-webengine` is available (For later versions it is `goldendict-ng`). -* Pre-built binary is also available from [archlinuxcn's repo](https://github.com/archlinuxcn/repo/tree/master/archlinuxcn/goldendict-ng-git). -* [Gentoo package from PG_Overlay](https://gitlab.com/Perfect_Gentleman/PG_Overlay/-/blob/master/app-text/goldendict/goldendict-9999-r6.ebuild) +* For ArchLinux, pre-built binary is available from [archlinuxcn's repo](https://github.com/archlinuxcn/repo/tree/master/archlinuxcn/goldendict-ng-git). +* [Gentoo package from PG_Overlay](https://gitlab.com/Perfect_Gentleman/PG_Overlay/-/tree/master/app-text/goldendict-ng) -Minimum supported "Linux" versions is supposedly the current Ubuntu LTS or Debian's old stable or Qt6.4. +Minimum supported "Linux" version is supposedly the current Ubuntu LTS and Debian's oldstable. ## macOS Uses one of the `.dmg` installers in the [Download](#download). -Requires at least macOS 12. +Requires at least macOS 13. ## Versioning and Releasing diff --git a/website/docs/manage_sources.md b/website/docs/manage_sources.md index e053f727..df10a324 100644 --- a/website/docs/manage_sources.md +++ b/website/docs/manage_sources.md @@ -1,4 +1,4 @@ -Dictionaries management dialog can be opened via menu `Edit` -> `Dictionaries`. +Dictionary management dialog can be opened via menu `Edit` -> `Dictionaries`. To use local dictionaries, add them via `Sources` -> `Files`. @@ -24,7 +24,7 @@ GoldenDict will scan these folders and add found dictionaries into dictionaries Similar to Files, you can either add a folder which contains sound files or a `.zip` archive which contains the sound files. -Goldendict will search through the sound file names when querying words. +GD will search through the sound file names when querying words. ## Morphology @@ -34,7 +34,7 @@ Morphology dictionary uses Hunspell's morphological analysis to obtain word's va You can specify a path that includes Hunspell format data files (`.aff` + `.dic`). GoldenDict scan this folder and create a list of available dictionaries. -One possible source of Hunspell dictionaries is Libreoffice's [dictionaries](https://github.com/LibreOffice/dictionaries). +One possible source of Hunspell dictionaries is LibreOffice's [dictionaries](https://github.com/LibreOffice/dictionaries). The detailed document about the affix file (`.aff`) and the dict file (`.dic`) can be found at [hunspell.5](https://man.archlinux.org/man/hunspell.5.en). diff --git a/website/docs/topic_anki.md b/website/docs/topic_anki.md index 307e3020..90a9a860 100644 --- a/website/docs/topic_anki.md +++ b/website/docs/topic_anki.md @@ -46,9 +46,9 @@ the back template ## Using URI schemes -`goldendict://word` link can be use to query a word directly on Goldendict. +`goldendict://word` link can be use to query a word directly on GoldenDict-ng. -On your Anki card's template, you can add the code below to have a "1 click open in Goldendict" card. +On your Anki card's template, you can add the code below to have a "1 click open in GoldenDict-ng" card. ``` {{Front}} diff --git a/website/docs/topic_gd-tools.md b/website/docs/topic_gd-tools.md deleted file mode 100644 index f6a5146d..00000000 --- a/website/docs/topic_gd-tools.md +++ /dev/null @@ -1,28 +0,0 @@ -# GoldenDict tools - -A set of helpful programs to enhance goldendict for immersion learning. - - -# prerequisite -1. install [gd-tools](https://codeberg.org/hashirama/gd-tools) and configure it according to its README - -# features: -- japanese sentence spliting, making each part of the sentence clickable -![Alt](https://codeberg.org/hashirama/gd-tools/raw/branch/main/misc/marisa.gif) - -## How to setup: -Open GoldenDict, press "Edit" > "Dictionaries" > "Programs" and add the installed executables. Set type to html. Command Line: gd-tools --word %GDWORD% --sentence %GDSEARCH%. Optionally add arguments, such as: gd-tools marisa --word %GDWORD% --sentence %GDSEARCH% . These programs are treated as dictionaries and you can add them under "Dictionaries" or "Groups". -

-please notice that gd-tools does works in windows, and we have an [installer](https://www.mediafire.com/file/h1v7owj7np9j7wg/gd-tools_windows.zip/file) for it, you can install and then come back to the previous instruction. -And if you're at Gnu Guix, install it from our [channel](https://codeberg.org/hashirama/ajattix)

-other features: -- kanji stroke order: for those who want to know how to write a character -- image searching -and much more, please see our list [here](https://codeberg.org/hashirama/gd-tools/src/branch/main/README.md#table-of-contents) - -# Misc -we have a mandarin version of gd-marisa, which relies on mecab (unix only) :

-![image](https://codeberg.org/hashirama/gd-tools/raw/branch/main/misc/mandarin.png) - -# Notes -This article was written by 柱間(developer of gd-tools). diff --git a/website/docs/topic_userstyle.md b/website/docs/topic_userstyle.md index 8799d704..16d08405 100644 --- a/website/docs/topic_userstyle.md +++ b/website/docs/topic_userstyle.md @@ -1,5 +1,14 @@ By creating `article-style.css` or `article-script.js` in GoldenDict's configuration folder (beside the `config` file), you can change dictionaries' presentation or inject javascript to dictionaries. +``` +. <- GD's configuration folder +├── config +├── article-style.css +├── article-style-print.css (affecting styles when printing) +├── article-script.js +└── qt-style.css +``` + The `article-style.css` is just standard HTML [Style Sheets](https://developer.mozilla.org/docs/Web/CSS). To know class or id names used in article, you can open inspector by right click article's body and click `Inspect (F12)`. The inspector's documentation can be found at [Chrome DevTools](https://developer.chrome.com/docs/devtools/) You can adjust dark reader mode's parameter by add those lines to `article-script.js` @@ -17,7 +26,6 @@ Also, you can tune GoldenDict's interface by creating `qt-style.css` style sheet Samples of `article-style.css` and `qt-style.css` files can found in GoldenDict's source code at [/src/stylesheets](https://github.com/xiaoyifang/goldendict-ng/tree/staged/src/stylesheets) - ## "Addon" Styles Under GoldenDict's configuration folder, you can create a "styles" folder for "Addon" styles, so that you can switch between multiple `article-style.css` and `qt-style.css`. @@ -25,7 +33,7 @@ Under GoldenDict's configuration folder, you can create a "styles" folder for "A Folder structure like below will create two “addon” styles to switch in settings -> appearances. ``` -. <- Goldendict's configuration folder +. <- GD's configuration folder ├── config └── styles ├── dark diff --git a/website/docs/ui_fulltextsearch.md b/website/docs/ui_fulltextsearch.md index a59878e5..ad338f4f 100644 --- a/website/docs/ui_fulltextsearch.md +++ b/website/docs/ui_fulltextsearch.md @@ -8,9 +8,8 @@ Type the desired word in "Search line" to search. Search modes -* "Default" — This follows the [xapian search syntax](https://xapian.org/docs/queryparser.html). Note that phrase searching and NEAR operator needs `Enable index with positional information` enabled at settings. -* "Plain text" - mode like "Whole words" but every word in search line can be treated as word fragment. -* "Wildcards" - the search line contains a Unix-like template. Such template can contain wildcard symbols `?` (matches any one character), `*` (matches any character number) or ranges of characters `[...]` To find characters `?`, `*`, `[` and `]` it should be escaped by backslash like `\?`, `\*`, `\[`, `\]`. +* "Default" — This follows the [xapian search syntax](https://xapian.org/docs/queryparser.html). +* "Wildcards" - xpaian "wildcard" mode, which means it only supports the prefix wildcards like "hell*"(in English alike language).As CJK use NGRAM term generator,the `*` should be treated as a seperator while not quoted. "Available dictionaries in group" - here you can view how many dictionaries in the current group are suitable for full-text search, how many dictionaries already indexed and how many dictionaries wait for indexing. diff --git a/website/docs/ui_shortcuts.md b/website/docs/ui_shortcuts.md index 8bf1df36..3d0a4aa3 100644 --- a/website/docs/ui_shortcuts.md +++ b/website/docs/ui_shortcuts.md @@ -54,17 +54,3 @@ | F3 | Dictionaries dialog | | F4 | GoldenDict preferences | | F12 | Inspector | - - -# Solo mode in the dictionary bar -Ctrl+Click, Enter solo mode, toggle between single & all dictionaries -Shift+Click, Exit solo mode, restore the previous dictionaries. - -For example, there are 4 dictionaries A,B,C,D with ABC selected. - -| Cases| Note| -|--------|--------| -| Ctrl+Click A|select A only| -| Ctrl+Click A, Ctrl+Click B | select B only| -| Ctrl+Click A, Ctrl+Click A | A,B,C,D selected(all dictionaries selected)| -| Ctrl+Click A, Shift+Click any dictionary| A,B,C selected | diff --git a/website/docs/ui_toolbar.md b/website/docs/ui_toolbar.md index 97dcbfb2..6f5b0082 100644 --- a/website/docs/ui_toolbar.md +++ b/website/docs/ui_toolbar.md @@ -1,37 +1,56 @@ ## Toolbar ![toolbar](img/toolbar.webp) -From left to right: +Type your word in Search Box and press `Enter` to search word in the current selected group. You can also choose a variant from a matches list. -* Forward/Backward navigation buttons; -* Group selector -* Search Line -* Toggle Scanning -* Play the first pronunciation in found articles; -* Font scale buttons; -* Save the article as HTML -* Print article -* Add to Favorites; - -Type your word in Search Box and press `Enter` to search word in the current selected group. You can also choose a variant from matches list. - -If Ctrl or Shift key has been pressed the new tab for translation will be created. +Holding Ctrl or Shift will display the translation result in a new tab. ### Wildcard matching -The Search Line can contain wildcard symbols `?` (matches any one character), `*` (matches any characters number) or ranges of characters `[...]`. To find characters `?`, `*`, `[` and `]` it should be escaped with backslash like `\?`, `\*`, `\[`, `\]`. +The search line can use wildcard or glob symbols for matching words. + +| Wildcard | Description | +|----------|------------------------------------------------------------------------| +| `?` | Matches any single character. | +| `*` | Matches zero or more of any characters. | +| `[abc]` | Matches one character given in the bracket. | +| `[a-c]` | Matches one character from the range given in the bracket. | +| `[!abc]` | Matches one character that is not given in the bracket. | +| `[!a-c]` | Matches one character that is not from the range given in the bracket. | +| `\` | Escaping wildcard symbols, e.g. `\?` to search `?` | !!! note - The wildcard symbol at first position in word leads to full headwords list scanning and it may take a long time for huge dictionaries. + The wildcard symbol in the first character leads to scanning of every dictionary's every word and may take a long time. + +More information about wildcard matching can be found in [Wikipedia's glob article](https://en.wikipedia.org/wiki/Glob_(programming)). + ## Dictionary Bar -The dictionaries bar contains all dictionaries from current dictionaries group. Click the icons to disable/enable them. +The dictionary bar contains all dictionaries from the current dictionaries group. Click the icons to disable/enable them. -Hold `Shift` and click dictionary bar will temporally focus on a single dictionary. Hold `Shift` and click again to defocus and restore the previous dictionaries bar state. +### "Solo" mode -Hold `Ctrl` and click dictionary bar will toggle between "Enable a single dictionary" and "Enable all dictionary". +Temporally focus on a single dictionary and restore back to all dictionaries or previously selected dictionaries. -Note: The `Shift` and `Ctrl` interaction can also be used on "Found in dictionaries" panel +To enter solo mode: +++ctrl+left-button++ -> Select a single dictionary. + +To exit solo mode: + +++ctrl+left-button++ -> Reselect all dictionaries. + +++shift+left-button++ -> Reselect dictionaries that were previously selected before entering solo mode. + +For example, there are 4 dictionaries A,B,C,D with ABC selected. + +| Cases | Note | +|------------------------------------------|----------------------------------------------| +| Ctrl+Click A | select A only | +| Ctrl+Click A, Ctrl+Click B | select B only | +| Ctrl+Click A, Ctrl+Click A | A,B,C,D selected (all dictionaries selected) | +| Ctrl+Click A, Shift+Click any dictionary | A,B,C selected | + +Note: This can also be used on the "Found in dictionaries" panel. diff --git a/website/mkdocs.yml b/website/mkdocs.yml index c7aecc4a..2d7eb1a8 100644 --- a/website/mkdocs.yml +++ b/website/mkdocs.yml @@ -21,6 +21,7 @@ markdown_extensions: - admonition - pymdownx.details - pymdownx.superfences + - pymdownx.keys nav: - Getting started: index.md @@ -33,7 +34,7 @@ nav: - Popup Window: ui_popup.md - Headwords Dialog: ui_headwords.md - Full Text Search: ui_fulltextsearch.md - - ToolBar & DictBar: ui_toolbar.md + - Tool & Dictionary Bar: ui_toolbar.md - Favorites: ui_favorites.md - Shortcuts: ui_shortcuts.md - Advanced Usages: @@ -50,15 +51,12 @@ nav: - Related tools: - Anki Integration: topic_anki.md - OCR Integration: howto/ocr.md - - gd-tools: topic_gd-tools.md - Report Bugs & Feedbacks: feedbacks.md - Development Info: - Start develop: developer.md - Build from source: howto/build_from_source.md - Architecture: architecture.md - Customize the opencc: howto/how to customize the opencc.md - - Use .clang-format: howto/how to use .clang-format to format the code.md - Breadpad crash analysis: howto/how to use breadpad crash analysis.md - - Build ffmpeg on Windows: howto/how to build ffmpeg for visual studio.md - Update the crowdin.ts file: howto/how to update crowdin.ts file.md